/ios/chrome/browser/web_data_service_factory.cc

https://gitlab.com/0072016/Facebook-SDK- · C++ · 117 lines · 91 code · 17 blank · 9 comment · 2 complexity · d14f5d5d0ff07cb2b3f403443af686bc MD5 · raw file

  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ios/chrome/browser/web_data_service_factory.h"
  5. #include "base/bind.h"
  6. #include "base/files/file_path.h"
  7. #include "base/logging.h"
  8. #include "base/memory/ptr_util.h"
  9. #include "base/memory/singleton.h"
  10. #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
  11. #include "components/keyed_service/core/service_access_type.h"
  12. #include "components/keyed_service/ios/browser_state_dependency_manager.h"
  13. #include "components/search_engines/keyword_web_data_service.h"
  14. #include "components/signin/core/browser/webdata/token_web_data.h"
  15. #include "components/webdata_services/web_data_service_wrapper.h"
  16. #include "ios/chrome/browser/application_context.h"
  17. #include "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
  18. #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
  19. #include "ios/chrome/browser/sync/glue/sync_start_util.h"
  20. #include "ios/web/public/web_thread.h"
  21. namespace ios {
  22. namespace {
  23. void DoNothingOnErrorCallback(WebDataServiceWrapper::ErrorType error_type,
  24. sql::InitStatus status) {
  25. }
  26. } // namespace
  27. // static
  28. WebDataServiceWrapper* WebDataServiceFactory::GetForBrowserState(
  29. ios::ChromeBrowserState* browser_state,
  30. ServiceAccessType access_type) {
  31. DCHECK(access_type == ServiceAccessType::EXPLICIT_ACCESS ||
  32. !browser_state->IsOffTheRecord());
  33. return static_cast<WebDataServiceWrapper*>(
  34. GetInstance()->GetServiceForBrowserState(browser_state, true));
  35. }
  36. // static
  37. WebDataServiceWrapper* WebDataServiceFactory::GetForBrowserStateIfExists(
  38. ios::ChromeBrowserState* browser_state,
  39. ServiceAccessType access_type) {
  40. DCHECK(access_type == ServiceAccessType::EXPLICIT_ACCESS ||
  41. !browser_state->IsOffTheRecord());
  42. return static_cast<WebDataServiceWrapper*>(
  43. GetInstance()->GetServiceForBrowserState(browser_state, false));
  44. }
  45. // static
  46. scoped_refptr<autofill::AutofillWebDataService>
  47. WebDataServiceFactory::GetAutofillWebDataForBrowserState(
  48. ios::ChromeBrowserState* browser_state,
  49. ServiceAccessType access_type) {
  50. WebDataServiceWrapper* wrapper =
  51. GetForBrowserState(browser_state, access_type);
  52. return wrapper ? wrapper->GetAutofillWebData() : nullptr;
  53. }
  54. // static
  55. scoped_refptr<KeywordWebDataService>
  56. WebDataServiceFactory::GetKeywordWebDataForBrowserState(
  57. ios::ChromeBrowserState* browser_state,
  58. ServiceAccessType access_type) {
  59. WebDataServiceWrapper* wrapper =
  60. GetForBrowserState(browser_state, access_type);
  61. return wrapper ? wrapper->GetKeywordWebData() : nullptr;
  62. }
  63. // static
  64. scoped_refptr<TokenWebData>
  65. WebDataServiceFactory::GetTokenWebDataForBrowserState(
  66. ios::ChromeBrowserState* browser_state,
  67. ServiceAccessType access_type) {
  68. WebDataServiceWrapper* wrapper =
  69. GetForBrowserState(browser_state, access_type);
  70. return wrapper ? wrapper->GetTokenWebData() : nullptr;
  71. }
  72. // static
  73. WebDataServiceFactory* WebDataServiceFactory::GetInstance() {
  74. return base::Singleton<WebDataServiceFactory>::get();
  75. }
  76. WebDataServiceFactory::WebDataServiceFactory()
  77. : BrowserStateKeyedServiceFactory(
  78. "WebDataService",
  79. BrowserStateDependencyManager::GetInstance()) {
  80. }
  81. WebDataServiceFactory::~WebDataServiceFactory() {
  82. }
  83. std::unique_ptr<KeyedService> WebDataServiceFactory::BuildServiceInstanceFor(
  84. web::BrowserState* context) const {
  85. const base::FilePath& browser_state_path = context->GetStatePath();
  86. return base::WrapUnique(new WebDataServiceWrapper(
  87. browser_state_path, GetApplicationContext()->GetApplicationLocale(),
  88. web::WebThread::GetTaskRunnerForThread(web::WebThread::UI),
  89. web::WebThread::GetTaskRunnerForThread(web::WebThread::DB),
  90. ios::sync_start_util::GetFlareForSyncableService(browser_state_path),
  91. &DoNothingOnErrorCallback));
  92. }
  93. web::BrowserState* WebDataServiceFactory::GetBrowserStateToUse(
  94. web::BrowserState* context) const {
  95. return GetBrowserStateRedirectedInIncognito(context);
  96. }
  97. bool WebDataServiceFactory::ServiceIsNULLWhileTesting() const {
  98. return true;
  99. }
  100. } // namespace ios