Chromium Code Reviews| 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(); |
| } |
| } |