Index: components/webdata/common/web_database_service.cc |
diff --git a/components/webdata/common/web_database_service.cc b/components/webdata/common/web_database_service.cc |
index a1b18895e84c0f788c884b8a7231e78f7319a7fb..313707301ac5cb676266d85bc15ab65237d5e89b 100644 |
--- a/components/webdata/common/web_database_service.cc |
+++ b/components/webdata/common/web_database_service.cc |
@@ -40,7 +40,8 @@ class WebDatabaseService::BackendDelegate : |
WebDatabaseService::WebDatabaseService( |
const base::FilePath& path) |
: path_(path), |
- weak_ptr_factory_(this) { |
+ weak_ptr_factory_(this), |
+ db_loaded_(false) { |
// WebDatabaseService should be instantiated on UI thread. |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// WebDatabaseService requires DB thread if instantiated. |
@@ -68,6 +69,7 @@ void WebDatabaseService::LoadDatabase() { |
} |
void WebDatabaseService::UnloadDatabase() { |
+ db_loaded_ = false; |
if (!wds_backend_.get()) |
return; |
BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
@@ -76,6 +78,7 @@ void WebDatabaseService::UnloadDatabase() { |
} |
void WebDatabaseService::ShutdownDatabase() { |
+ db_loaded_ = false; |
if (!wds_backend_.get()) |
return; |
weak_ptr_factory_.InvalidateWeakPtrs(); |
@@ -140,24 +143,29 @@ void WebDatabaseService::CancelRequest(WebDataServiceBase::Handle h) { |
wds_backend_->request_manager()->CancelRequest(h); |
} |
-void WebDatabaseService::AddObserver(WebDatabaseObserver* observer) { |
- observer_list_.AddObserver(observer); |
+void WebDatabaseService::RegisterDBLoadedCallback( |
+ const base::Callback<void(void)>& callback) { |
+ pending_callbacks_.push_back(callback); |
Cait (Slow)
2013/06/05 19:14:48
I'm wondering if I should handle callbacks added p
Jói
2013/06/06 11:37:17
I think just documenting is sufficient.
|
} |
-void WebDatabaseService::RemoveObserver(WebDatabaseObserver* observer) { |
- observer_list_.RemoveObserver(observer); |
+void WebDatabaseService::RegisterDBErrorCallback( |
+ const base::Callback<void(sql::InitStatus)>& callback) { |
+ error_callbacks_.push_back(callback); |
} |
void WebDatabaseService::OnDatabaseLoadDone(sql::InitStatus status) { |
if (status == sql::INIT_OK) { |
- // Notify that the database has been initialized. |
- FOR_EACH_OBSERVER(WebDatabaseObserver, |
- observer_list_, |
- WebDatabaseLoaded()); |
+ db_loaded_ = true; |
+ |
+ for (size_t i = 0; i < pending_callbacks_.size(); i++) |
+ pending_callbacks_[i].Run(); |
+ |
+ pending_callbacks_.clear(); |
} else { |
// Notify that the database load failed. |
- FOR_EACH_OBSERVER(WebDatabaseObserver, |
- observer_list_, |
- WebDatabaseLoadFailed(status)); |
+ for (size_t i = 0; i < error_callbacks_.size(); i++) |
+ error_callbacks_[i].Run(status); |
+ |
+ error_callbacks_.clear(); |
} |
} |