Index: chrome/browser/webdata/web_data_service.cc |
=================================================================== |
--- chrome/browser/webdata/web_data_service.cc (revision 136877) |
+++ chrome/browser/webdata/web_data_service.cc (working copy) |
@@ -28,6 +28,9 @@ |
#include "chrome/browser/webdata/web_intents_table.h" |
#include "chrome/common/chrome_constants.h" |
#include "chrome/common/chrome_notification_types.h" |
+#ifdef DEBUG |
+#include "content/public/browser/browser_thread.h" |
+#endif |
#include "content/public/browser/notification_details.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_source.h" |
@@ -78,14 +81,19 @@ |
WDKeywordsResult::~WDKeywordsResult() {} |
WebDataService::WebDataService() |
- : is_running_(false), |
- db_(NULL), |
- autocomplete_syncable_service_(NULL), |
- autofill_profile_syncable_service_(NULL), |
- failed_init_(false), |
- should_commit_(false), |
- next_request_handle_(1), |
- main_loop_(MessageLoop::current()) { |
+ : RefcountedProfileKeyedService(BrowserThread::UI), |
+ is_running_(false), |
+ db_(NULL), |
+ autocomplete_syncable_service_(NULL), |
+ autofill_profile_syncable_service_(NULL), |
+ failed_init_(false), |
+ should_commit_(false), |
+ next_request_handle_(1), |
+ main_loop_(MessageLoop::current()) { |
+ // WebDataService requires DB thread if instantiated. |
+ // Set WebDataServiceFactory::GetInstance()->SetTestingFactory(&profile, NULL) |
+ // if you do not want to instantiate WebDataService in your test. |
+ DCHECK(BrowserThread::IsWellKnownThread(BrowserThread::DB)); |
} |
// static |
@@ -102,18 +110,18 @@ |
make_scoped_refptr(web_data_service))); |
} |
+void WebDataService::ShutdownOnUIThread() { |
+ ScheduleTask(FROM_HERE, |
+ Bind(&WebDataService::ShutdownSyncableServices, this)); |
+ UnloadDatabase(); |
+} |
+ |
bool WebDataService::Init(const FilePath& profile_path) { |
FilePath path = profile_path; |
path = path.Append(chrome::kWebDataFilename); |
return InitWithPath(path); |
} |
-void WebDataService::Shutdown() { |
- ScheduleTask(FROM_HERE, |
- Bind(&WebDataService::ShutdownSyncableServices, this)); |
- UnloadDatabase(); |
-} |
- |
bool WebDataService::IsRunning() const { |
return is_running_; |
} |
@@ -554,6 +562,7 @@ |
WebDataService::~WebDataService() { |
if (is_running_ && db_) { |
DLOG_ASSERT("WebDataService dtor called without Shutdown"); |
+ NOTREACHED(); |
} |
} |
@@ -565,7 +574,9 @@ |
// [ http://crbug.com/100745 ], call |AutofillCountry::ApplicationLocale()| to |
// cache the application locale before we try to access it on the DB thread. |
// This should be safe to remove once [ http://crbug.com/100845 ] is fixed. |
- AutofillCountry::ApplicationLocale(); |
+ // Do not do it if the thread is not UI (can happen only in some tests). |
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) |
+ AutofillCountry::ApplicationLocale(); |
ScheduleTask(FROM_HERE, |
Bind(&WebDataService::InitializeDatabaseIfNecessary, this)); |