Index: chrome/browser/browsing_data/local_data_container.cc |
diff --git a/chrome/browser/browsing_data/local_data_container.cc b/chrome/browser/browsing_data/local_data_container.cc |
index a4e8058b9dd0ee8328a59ba3fbc6258c70ba33ef..38f3f65f3c9d62eb98830957db3edcb2d36d5c73 100644 |
--- a/chrome/browser/browsing_data/local_data_container.cc |
+++ b/chrome/browser/browsing_data/local_data_container.cc |
@@ -39,6 +39,7 @@ LocalDataContainer::LocalDataContainer( |
service_worker_helper_(service_worker_helper), |
flash_lso_helper_(flash_lso_helper), |
model_(NULL), |
+ batches_started_(0), |
weak_ptr_factory_(this) { |
} |
@@ -48,24 +49,28 @@ void LocalDataContainer::Init(CookiesTreeModel* model) { |
DCHECK(!model_); |
model_ = model; |
+ batches_started_ = 1; |
DCHECK(cookie_helper_.get()); |
cookie_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnCookiesModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
if (database_helper_.get()) { |
+ batches_started_++; |
database_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnDatabaseModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (local_storage_helper_.get()) { |
+ batches_started_++; |
local_storage_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnLocalStorageModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (session_storage_helper_.get()) { |
+ batches_started_++; |
session_storage_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnSessionStorageModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
@@ -74,46 +79,55 @@ void LocalDataContainer::Init(CookiesTreeModel* model) { |
// TODO(michaeln): When all of the UI implementations have been updated, make |
// this a required parameter. |
if (appcache_helper_.get()) { |
+ batches_started_++; |
appcache_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnAppCacheModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (indexed_db_helper_.get()) { |
+ batches_started_++; |
indexed_db_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnIndexedDBModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (file_system_helper_.get()) { |
+ batches_started_++; |
file_system_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnFileSystemModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (quota_helper_.get()) { |
+ batches_started_++; |
quota_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnQuotaModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (channel_id_helper_.get()) { |
+ batches_started_++; |
channel_id_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnChannelIDModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (service_worker_helper_.get()) { |
+ batches_started_++; |
service_worker_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnServiceWorkerModelInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
if (flash_lso_helper_.get()) { |
+ batches_started_++; |
flash_lso_helper_->StartFetching( |
base::Bind(&LocalDataContainer::OnFlashLSOInfoLoaded, |
weak_ptr_factory_.GetWeakPtr())); |
} |
+ |
+ model_->SetBatchExpectation(batches_started_, true); |
} |
void LocalDataContainer::OnAppCacheModelInfoLoaded() { |
@@ -124,8 +138,11 @@ void LocalDataContainer::OnAppCacheModelInfoLoaded() { |
scoped_refptr<AppCacheInfoCollection> appcache_info = |
appcache_helper_->info_collection(); |
- if (!appcache_info.get() || appcache_info->infos_by_origin.empty()) |
+ if (!appcache_info.get() || appcache_info->infos_by_origin.empty()) { |
+ // This batch has been canceled, so let the model know it won't be arriving. |
+ model_->SetBatchExpectation(--batches_started_, false); |
return; |
+ } |
for (InfoByOrigin::const_iterator origin = |
appcache_info->infos_by_origin.begin(); |