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" 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/chromium_strings.h" 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_country.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/autofill/core/browser/webdata/autofill_profile_syncable_service.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_table.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/password_manager/core/browser/webdata/logins_table.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/keyword_table.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/keyword_web_data_service.h" 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/webdata/token_service_table.h" 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/webdata/token_web_data.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/webdata_constants.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/password_manager/core/browser/webdata/password_web_data_service_win.h" 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using autofill::AutofillWebDataService; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using autofill::AutofillProfileSyncableService; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback to show error dialog on profile load error. 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileErrorCallback(ProfileErrorType type, sql::InitStatus status) { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowProfileErrorDialog( 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) type, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (status == sql::INIT_FAILURE) ? 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_COULDNT_OPEN_PROFILE_ERROR : IDS_PROFILE_TOO_NEW_ERROR); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InitSyncableServicesOnDBThread( 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<AutofillWebDataService> autofill_web_data, 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::FilePath& profile_path, 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& app_locale, 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) autofill::AutofillWebDataBackend* autofill_backend) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Currently only Autocomplete and Autofill profiles use the new Sync API, but 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // all the database data should migrate to this API over time. 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteSyncableService::CreateForWebDataServiceAndBackend( 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) autofill_web_data.get(), autofill_backend); 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutocompleteSyncableService::FromWebDataService(autofill_web_data.get()) 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ->InjectStartSyncFlare( 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sync_start_util::GetFlareForSyncableService(profile_path)); 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutofillProfileSyncableService::CreateForWebDataServiceAndBackend( 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) autofill_web_data.get(), autofill_backend, app_locale); 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutofillProfileSyncableService::FromWebDataService(autofill_web_data.get()) 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ->InjectStartSyncFlare( 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sync_start_util::GetFlareForSyncableService(profile_path)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 70116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceWrapper::WebDataServiceWrapper() { 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::WebDataServiceWrapper(Profile* profile) { 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath profile_path = profile->GetPath(); 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath path = profile_path.Append(kWebDataFilename); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> ui_thread = 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread = 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_database_ = new WebDatabaseService(path, ui_thread, db_thread); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // All tables objects that participate in managing the database must 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be added here. 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_->AddTable(scoped_ptr<WebDatabaseTable>( 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new autofill::AutofillTable(g_browser_process->GetApplicationLocale()))); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_->AddTable(scoped_ptr<WebDatabaseTable>(new KeywordTable())); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(mdm): We only really need the LoginsTable on Windows for IE7 password 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // access, but for now, we still create it on all platforms since it deletes 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the old logins table. We can remove this after a while, e.g. in M22 or so. 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_->AddTable(scoped_ptr<WebDatabaseTable>(new LoginsTable())); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_database_->AddTable( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WebDatabaseTable>(new TokenServiceTable())); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_database_->LoadDatabase(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_web_data_ = new AutofillWebDataService( 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_, 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_thread, 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch db_thread, 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ProfileErrorCallback, PROFILE_ERROR_DB_AUTOFILL_WEB_DATA)); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_web_data_->Init(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch keyword_web_data_ = new KeywordWebDataService( 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_, 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_thread, 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ProfileErrorCallback, PROFILE_ERROR_DB_KEYWORD_WEB_DATA)); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch keyword_web_data_->Init(); 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) token_web_data_ = new TokenWebData( 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_, 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_thread, 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch db_thread, 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ProfileErrorCallback, PROFILE_ERROR_DB_TOKEN_WEB_DATA)); 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) token_web_data_->Init(); 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch password_web_data_ = new PasswordWebDataService( 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_database_, 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_thread, 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ProfileErrorCallback, PROFILE_ERROR_DB_WEB_DATA)); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch password_web_data_->Init(); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) autofill_web_data_->GetAutofillBackend( 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&InitSyncableServicesOnDBThread, 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch autofill_web_data_, 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_path, 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch g_browser_process->GetApplicationLocale())); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::~WebDataServiceWrapper() { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebDataServiceWrapper::Shutdown() { 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_web_data_->ShutdownOnUIThread(); 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch keyword_web_data_->ShutdownOnUIThread(); 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) token_web_data_->ShutdownOnUIThread(); 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch password_web_data_->ShutdownOnUIThread(); 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_database_->ShutdownDatabase(); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<AutofillWebDataService> 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper::GetAutofillWebData() { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return autofill_web_data_.get(); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_refptr<KeywordWebDataService> 152116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceWrapper::GetKeywordWebData() { 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return keyword_web_data_.get(); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)scoped_refptr<TokenWebData> WebDataServiceWrapper::GetTokenWebData() { 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return token_web_data_.get(); 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_refptr<PasswordWebDataService> 162116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceWrapper::GetPasswordWebData() { 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return password_web_data_.get(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebDataServiceFactory::WebDataServiceFactory() 16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "WebDataService", 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserContextDependencyManager::GetInstance()) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebDataServiceFactory has no dependecies. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 174116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceFactory::~WebDataServiceFactory() { 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper* WebDataServiceFactory::GetForProfile( 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile* profile, 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile::ServiceAccessType access_type) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |access_type| starts being used for anything other than this 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK, we need to start taking it as a parameter to 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the *WebDataService::FromBrowserContext() functions (see above). 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(access_type != Profile::IMPLICIT_ACCESS || !profile->IsOffTheRecord()); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<WebDataServiceWrapper*>( 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetInstance()->GetServiceForBrowserContext(profile, true)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebDataServiceWrapper* WebDataServiceFactory::GetForProfileIfExists( 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile* profile, 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile::ServiceAccessType access_type) { 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |access_type| starts being used for anything other than this 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // DCHECK, we need to start taking it as a parameter to 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the *WebDataService::FromBrowserContext() functions (see above). 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(access_type != Profile::IMPLICIT_ACCESS || !profile->IsOffTheRecord()); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<WebDataServiceWrapper*>( 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetInstance()->GetServiceForBrowserContext(profile, false)); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_refptr<AutofillWebDataService> 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)WebDataServiceFactory::GetAutofillWebDataForProfile( 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile* profile, 205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile::ServiceAccessType access_type) { 206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebDataServiceWrapper* wrapper = 207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebDataServiceFactory::GetForProfile(profile, access_type); 208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // |wrapper| can be NULL in Incognito mode. 209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return wrapper ? 210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) wrapper->GetAutofillWebData() : 211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_refptr<AutofillWebDataService>(NULL); 212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// static 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_refptr<KeywordWebDataService> 216116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceFactory::GetKeywordWebDataForProfile( 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile::ServiceAccessType access_type) { 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDataServiceWrapper* wrapper = 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDataServiceFactory::GetForProfile(profile, access_type); 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |wrapper| can be NULL in Incognito mode. 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return wrapper ? 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wrapper->GetKeywordWebData() : scoped_refptr<KeywordWebDataService>(NULL); 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_refptr<TokenWebData> WebDataServiceFactory::GetTokenWebDataForProfile( 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile::ServiceAccessType access_type) { 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDataServiceWrapper* wrapper = 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDataServiceFactory::GetForProfile(profile, access_type); 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |wrapper| can be NULL in Incognito mode. 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return wrapper ? 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wrapper->GetTokenWebData() : scoped_refptr<TokenWebData>(NULL); 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_refptr<PasswordWebDataService> 240116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWebDataServiceFactory::GetPasswordWebDataForProfile( 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile, 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile::ServiceAccessType access_type) { 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebDataServiceWrapper* wrapper = 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebDataServiceFactory::GetForProfile(profile, access_type); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // |wrapper| can be NULL in Incognito mode. 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return wrapper ? 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wrapper->GetPasswordWebData() : 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<PasswordWebDataService>(NULL); 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebDataServiceFactory* WebDataServiceFactory::GetInstance() { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Singleton<WebDataServiceFactory>::get(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext* WebDataServiceFactory::GetBrowserContextToUse( 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return chrome::GetBrowserContextRedirectedInIncognito(context); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* WebDataServiceFactory::BuildServiceInstanceFor( 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) const { 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new WebDataServiceWrapper(static_cast<Profile*>(profile)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebDataServiceFactory::ServiceIsNULLWhileTesting() const { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 270