Index: components/browser_sync/profile_sync_service.cc |
diff --git a/components/browser_sync/profile_sync_service.cc b/components/browser_sync/profile_sync_service.cc |
index ab636d3a00a5620c93a4b2341af85bbf7814f2a1..a26777dd7e275d185b02f7a25862f0323406c7f2 100644 |
--- a/components/browser_sync/profile_sync_service.cc |
+++ b/components/browser_sync/profile_sync_service.cc |
@@ -39,6 +39,7 @@ |
#include "components/strings/grit/components_strings.h" |
#include "components/sync/api/model_type_store.h" |
#include "components/sync/api/sync_error.h" |
+#include "components/sync/base/bind_to_task_runner.h" |
#include "components/sync/base/cryptographer.h" |
#include "components/sync/base/passphrase_type.h" |
#include "components/sync/base/stop_source.h" |
@@ -546,7 +547,7 @@ void ProfileSyncService::OnDirectoryTypeUpdateCounterUpdated( |
OnUpdateCountersUpdated(type, counters)); |
} |
-void ProfileSyncService::OnDirectoryTypeStatusCounterUpdated( |
+void ProfileSyncService::OnDatatypeStatusCounterUpdated( |
syncer::ModelType type, |
const syncer::StatusCounters& counters) { |
FOR_EACH_OBSERVER(syncer::TypeDebugInfoObserver, type_debug_info_observers_, |
@@ -1809,7 +1810,7 @@ void ProfileSyncService::GetModelSafeRoutingInfo( |
} |
} |
-base::Value* ProfileSyncService::GetTypeStatusMap() const { |
+base::Value* ProfileSyncService::GetTypeStatusMap() { |
std::unique_ptr<base::ListValue> result(new base::ListValue()); |
if (!backend_.get() || !backend_initialized_) { |
@@ -1892,11 +1893,15 @@ base::Value* ProfileSyncService::GetTypeStatusMap() const { |
type_status->SetString("value", "Disabled by User"); |
} |
- int live_count = detailed_status.num_entries_by_type[type] - |
- detailed_status.num_to_delete_entries_by_type[type]; |
- type_status->SetInteger("num_entries", |
- detailed_status.num_entries_by_type[type]); |
- type_status->SetInteger("num_live", live_count); |
+ const auto& dtc_iter = data_type_controllers_.find(type); |
+ if (dtc_iter != data_type_controllers_.end()) { |
+ // OnDatatypeStatusCounterUpdated that posts back to the UI thread so that |
+ // real results can't get overwritten by the empty counters set at the end |
+ // of this method. |
+ dtc_iter->second->GetStatusCounters(BindToCurrentThread( |
+ base::Bind(&ProfileSyncService::OnDatatypeStatusCounterUpdated, |
+ base::Unretained(this)))); |
+ } |
result->Append(std::move(type_status)); |
} |