| Index: chrome/browser/webdata/web_data_service_factory.cc
|
| diff --git a/chrome/browser/webdata/web_data_service_factory.cc b/chrome/browser/webdata/web_data_service_factory.cc
|
| index 07551672053b13990b19da77866c4bca50c631db..ca8d02ab58e161d1b297b668ad8d9fa22c59c5ad 100644
|
| --- a/chrome/browser/webdata/web_data_service_factory.cc
|
| +++ b/chrome/browser/webdata/web_data_service_factory.cc
|
| @@ -49,30 +49,41 @@ WebDataServiceWrapper::WebDataServiceWrapper() {}
|
| WebDataServiceWrapper::WebDataServiceWrapper(Profile* profile) {
|
| base::FilePath path = profile->GetPath();
|
| path = path.Append(chrome::kWebDataFilename);
|
| - web_data_service_ = new WebDataService(base::Bind(&ProfileErrorCallback));
|
| +
|
| + // TODO (caitkp): Rework the callbacks here. They're ugly.
|
| +
|
| + web_database_ = new WebDatabaseService(path);
|
|
|
| // All tables objects that participate in managing the database must
|
| // be added here.
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new AutofillTable()));
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new KeywordTable()));
|
| // TODO(mdm): We only really need the LoginsTable on Windows for IE7 password
|
| // access, but for now, we still create it on all platforms since it deletes
|
| // the old logins table. We can remove this after a while, e.g. in M22 or so.
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new LoginsTable()));
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new TokenServiceTable()));
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new WebAppsTable()));
|
| // TODO(thakis): Add a migration to delete the SQL table used by
|
| // WebIntentsTable, then remove this.
|
| - web_data_service_->AddTable(
|
| + web_database_->AddTable(
|
| scoped_ptr<WebDatabaseTable>(new WebIntentsTable()));
|
|
|
| + web_database_->LoadDatabase(WebDatabaseService::InitCallback());
|
| +
|
| + web_data_service_ = new WebDataService(
|
| + web_database_, base::Bind(&ProfileErrorCallback));
|
| web_data_service_->Init(path);
|
|
|
| + autofill_web_data_ = new AutofillWebDataServiceImpl(
|
| + web_database_, base::Bind(&ProfileErrorCallback));
|
| + autofill_web_data_->Init(path);
|
| +
|
| BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
|
| base::Bind(&InitSyncableServicesOnDBThread,
|
| web_data_service_));
|
| @@ -83,6 +94,8 @@ WebDataServiceWrapper::~WebDataServiceWrapper() {
|
|
|
| void WebDataServiceWrapper::Shutdown() {
|
| web_data_service_->ShutdownOnUIThread();
|
| + autofill_web_data_->ShutdownOnUIThread();
|
| + web_database_->ShutdownDatabase();
|
| web_data_service_ = NULL;
|
| }
|
|
|
| @@ -90,21 +103,24 @@ scoped_refptr<WebDataService> WebDataServiceWrapper::GetWebData() {
|
| return web_data_service_.get();
|
| }
|
|
|
| +scoped_refptr<AutofillWebDataService>
|
| +WebDataServiceWrapper::GetAutofillWebData() {
|
| + return autofill_web_data_.get();
|
| +}
|
| +
|
| // static
|
| scoped_refptr<AutofillWebDataService>
|
| AutofillWebDataService::FromBrowserContext(content::BrowserContext* context) {
|
| // For this service, the implicit/explicit distinction doesn't
|
| // really matter; it's just used for a DCHECK. So we currently
|
| // cheat and always say EXPLICIT_ACCESS.
|
| - scoped_refptr<WebDataService> service = WebDataServiceFactory::GetForProfile(
|
| - static_cast<Profile*>(context), Profile::EXPLICIT_ACCESS);
|
| -
|
| - if (service.get()) {
|
| - return scoped_refptr<AutofillWebDataService>(
|
| - new AutofillWebDataServiceImpl(service));
|
| - } else {
|
| - return scoped_refptr<AutofillWebDataService>(NULL);
|
| - }
|
| + WebDataServiceWrapper* wrapper =
|
| + WebDataServiceFactory::GetWrapper(
|
| + static_cast<Profile*>(context), Profile::EXPLICIT_ACCESS);
|
| + if (wrapper)
|
| + return wrapper->GetAutofillWebData();
|
| + // |wrapper| can be NULL in Incognito mode.
|
| + return scoped_refptr<AutofillWebDataService>(NULL);
|
| }
|
|
|
| // static
|
| @@ -127,6 +143,17 @@ WebDataServiceFactory::WebDataServiceFactory()
|
| WebDataServiceFactory::~WebDataServiceFactory() {}
|
|
|
| // static
|
| +WebDataServiceWrapper* WebDataServiceFactory::GetWrapper(
|
| + Profile* profile, Profile::ServiceAccessType access_type) {
|
| + // If |access_type| starts being used for anything other than this
|
| + // DCHECK, we need to start taking it as a parameter to
|
| + // AutofillWebDataServiceImpl::FromBrowserContext (see above).
|
| + DCHECK(access_type != Profile::IMPLICIT_ACCESS || !profile->IsOffTheRecord());
|
| + return static_cast<WebDataServiceWrapper*>(
|
| + GetInstance()->GetServiceForProfile(profile, true));
|
| +}
|
| +
|
| +// static
|
| scoped_refptr<WebDataService> WebDataServiceFactory::GetForProfile(
|
| Profile* profile, Profile::ServiceAccessType access_type) {
|
| // If |access_type| starts being used for anything other than this
|
|
|