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