web_data_service_factory.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/browser_process.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/sync/glue/sync_start_util.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/profile_error_dialog.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/autocomplete_syncable_service.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/autofill_profile_syncable_service.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/keyword_table.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/logins_table.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/token_service_table.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/webdata/token_web_data.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/web_apps_table.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/webdata/web_intents_table.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/autofill/browser/autofill_country.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/autofill/browser/webdata/autofill_table.h"
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/autofill/browser/webdata/autofill_webdata_service.h"
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/webdata_constants.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/chromium_strings.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/generated_resources.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillWebDataService;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback to show error dialog on profile load error.
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileErrorCallback(sql::InitStatus status) {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShowProfileErrorDialog(
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      (status == sql::INIT_FAILURE) ?
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_COULDNT_OPEN_PROFILE_ERROR : IDS_PROFILE_TOO_NEW_ERROR);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InitSyncableServicesOnDBThread(
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    scoped_refptr<AutofillWebDataService> autofill_web_data,
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const base::FilePath& profile_path,
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const std::string& app_locale,
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    autofill::AutofillWebDataBackend* autofill_backend) {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Currently only Autocomplete and Autofill profiles use the new Sync API, but
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // all the database data should migrate to this API over time.
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AutocompleteSyncableService::CreateForWebDataServiceAndBackend(
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill_web_data, autofill_backend);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSyncableService::FromWebDataService(
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill_web_data)->InjectStartSyncFlare(
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          sync_start_util::GetFlareForSyncableService(profile_path));
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AutofillProfileSyncableService::CreateForWebDataServiceAndBackend(
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill_web_data, autofill_backend, app_locale);
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AutofillProfileSyncableService::FromWebDataService(
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      autofill_web_data)->InjectStartSyncFlare(
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          sync_start_util::GetFlareForSyncableService(profile_path));
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::WebDataServiceWrapper() {}
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::WebDataServiceWrapper(Profile* profile) {
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath profile_path = profile->GetPath();
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath path = profile_path.Append(kWebDataFilename);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_ = new WebDatabaseService(path);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // All tables objects that participate in managing the database must
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // be added here.
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new autofill::AutofillTable(
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          g_browser_process->GetApplicationLocale())));
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new KeywordTable()));
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(mdm): We only really need the LoginsTable on Windows for IE7 password
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // access, but for now, we still create it on all platforms since it deletes
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the old logins table. We can remove this after a while, e.g. in M22 or so.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new LoginsTable()));
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new TokenServiceTable()));
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new WebAppsTable()));
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(thakis): Add a migration to delete the SQL table used by
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // WebIntentsTable, then remove this.
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->AddTable(
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<WebDatabaseTable>(new WebIntentsTable()));
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  web_database_->LoadDatabase();
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  autofill_web_data_ = new AutofillWebDataService(
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_database_, base::Bind(&ProfileErrorCallback));
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  autofill_web_data_->Init();
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  token_web_data_ = new TokenWebData(
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      web_database_, base::Bind(&ProfileErrorCallback));
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  token_web_data_->Init();
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_data_ = new WebDataService(
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_database_, base::Bind(&ProfileErrorCallback));
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_data_->Init();
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)autofill_web_data_->GetAutofillBackend(
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)       base::Bind(&InitSyncableServicesOnDBThread,
11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  autofill_web_data_,
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  profile_path,
11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  g_browser_process->GetApplicationLocale()));
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::~WebDataServiceWrapper() {
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebDataServiceWrapper::Shutdown() {
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  autofill_web_data_->ShutdownOnUIThread();
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  token_web_data_->ShutdownOnUIThread();
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_data_->ShutdownOnUIThread();
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_database_->ShutdownDatabase();
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<AutofillWebDataService>
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::GetAutofillWebData() {
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return autofill_web_data_.get();
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<WebDataService> WebDataServiceWrapper::GetWebData() {
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return web_data_.get();
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)scoped_refptr<TokenWebData> WebDataServiceWrapper::GetTokenWebData() {
13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return token_web_data_.get();
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<AutofillWebDataService>
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AutofillWebDataService::FromBrowserContext(content::BrowserContext* context) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For this service, the implicit/explicit distinction doesn't
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // really matter; it's just used for a DCHECK.  So we currently
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cheat and always say EXPLICIT_ACCESS.
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebDataServiceWrapper* wrapper =
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebDataServiceFactory::GetForProfile(
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          static_cast<Profile*>(context), Profile::EXPLICIT_ACCESS);
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (wrapper)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return wrapper->GetAutofillWebData();
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |wrapper| can be NULL in Incognito mode.
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return scoped_refptr<AutofillWebDataService>(NULL);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)scoped_refptr<TokenWebData> TokenWebData::FromBrowserContext(
15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    content::BrowserContext* context) {
15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // For this service, the implicit/explicit distinction doesn't
15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // really matter; it's just used for a DCHECK.  So we currently
15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // cheat and always say EXPLICIT_ACCESS.
16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  WebDataServiceWrapper* wrapper =
16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      WebDataServiceFactory::GetForProfile(
16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          static_cast<Profile*>(context), Profile::EXPLICIT_ACCESS);
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (wrapper)
16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return wrapper->GetTokenWebData();
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |wrapper| can be NULL in Incognito mode.
16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return scoped_refptr<TokenWebData>(NULL);
16790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<WebDataService> WebDataService::FromBrowserContext(
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    content::BrowserContext* context) {
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // For this service, the implicit/explicit distinction doesn't
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // really matter; it's just used for a DCHECK.  So we currently
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // cheat and always say EXPLICIT_ACCESS.
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebDataServiceWrapper* wrapper =
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebDataServiceFactory::GetForProfile(
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          static_cast<Profile*>(context), Profile::EXPLICIT_ACCESS);
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (wrapper)
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return wrapper->GetWebData();
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |wrapper| can be NULL in Incognito mode.
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return scoped_refptr<WebDataService>(NULL);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebDataServiceFactory::WebDataServiceFactory()
18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "WebDataService",
18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebDataServiceFactory has no dependecies.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebDataServiceFactory::~WebDataServiceFactory() {}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper* WebDataServiceFactory::GetForProfile(
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile, Profile::ServiceAccessType access_type) {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |access_type| starts being used for anything other than this
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DCHECK, we need to start taking it as a parameter to
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // AutofillWebDataService::FromBrowserContext (see above).
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(access_type != Profile::IMPLICIT_ACCESS || !profile->IsOffTheRecord());
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<WebDataServiceWrapper*>(
20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          GetInstance()->GetServiceForBrowserContext(profile, true));
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper* WebDataServiceFactory::GetForProfileIfExists(
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile, Profile::ServiceAccessType access_type) {
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If |access_type| starts being used for anything other than this
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DCHECK, we need to start taking it as a parameter to
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // AutofillWebDataService::FromBrowserContext (see above).
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(access_type != Profile::IMPLICIT_ACCESS || !profile->IsOffTheRecord());
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<WebDataServiceWrapper*>(
21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          GetInstance()->GetServiceForBrowserContext(profile, false));
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebDataServiceFactory* WebDataServiceFactory::GetInstance() {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Singleton<WebDataServiceFactory>::get();
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext* WebDataServiceFactory::GetBrowserContextToUse(
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* context) const {
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return chrome::GetBrowserContextRedirectedInIncognito(context);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService* WebDataServiceFactory::BuildServiceInstanceFor(
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* profile) const {
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new WebDataServiceWrapper(static_cast<Profile*>(profile));
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebDataServiceFactory::ServiceIsNULLWhileTesting() const {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
233