Index: chrome/browser/ui/webui/sync_internals_message_handler.cc |
diff --git a/chrome/browser/ui/webui/sync_internals_message_handler.cc b/chrome/browser/ui/webui/sync_internals_message_handler.cc |
index c4612b755bc5c4b38ddffba126d8bf4cd4c278b0..fe4bf2ea0cc6b51b20502a999ebb90da8c74eca4 100644 |
--- a/chrome/browser/ui/webui/sync_internals_message_handler.cc |
+++ b/chrome/browser/ui/webui/sync_internals_message_handler.cc |
@@ -14,6 +14,9 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/web_ui.h" |
#include "sync/internal_api/public/events/protocol_event.h" |
+#include "sync/internal_api/public/sessions/commit_counters.h" |
+#include "sync/internal_api/public/sessions/status_counters.h" |
+#include "sync/internal_api/public/sessions/update_counters.h" |
#include "sync/internal_api/public/util/weak_handle.h" |
#include "sync/js/js_event_details.h" |
@@ -23,7 +26,9 @@ using syncer::WeakHandle; |
SyncInternalsMessageHandler::SyncInternalsMessageHandler() |
: is_registered_(false), |
- weak_ptr_factory_(this) {} |
+ is_registered_for_counters_(false), |
+ weak_ptr_factory_(this) { |
+} |
SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { |
if (js_controller_) |
@@ -34,6 +39,10 @@ SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { |
service->RemoveObserver(this); |
service->RemoveProtocolEventObserver(this); |
} |
+ |
+ if (service && is_registered_for_counters_) { |
+ service->RemoveTypeDebugInfoObserver(this); |
+ } |
} |
void SyncInternalsMessageHandler::RegisterMessages() { |
@@ -45,6 +54,11 @@ void SyncInternalsMessageHandler::RegisterMessages() { |
base::Unretained(this))); |
web_ui()->RegisterMessageCallback( |
+ "registerForPerTypeCounters", |
maniscalco
2014/05/23 00:55:00
I wonder if we could tie into the existing "regist
rlarocque
2014/05/27 20:13:26
It gets complicated.
The problem is that this reg
|
+ base::Bind(&SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters, |
+ base::Unretained(this))); |
+ |
+ web_ui()->RegisterMessageCallback( |
"requestUpdatedAboutInfo", |
base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo, |
base::Unretained(this))); |
@@ -77,6 +91,21 @@ void SyncInternalsMessageHandler::HandleRegisterForEvents( |
} |
} |
+void SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters( |
+ const base::ListValue* args) { |
+ DCHECK(args->empty()); |
+ |
+ ProfileSyncService* service = GetProfileSyncService(); |
+ if (service && !is_registered_for_counters_) { |
+ service->AddTypeDebugInfoObserver(this); |
+ is_registered_for_counters_ = true; |
+ } else { |
+ // Re-register to ensure counters get re-emitted. |
+ service->RemoveTypeDebugInfoObserver(this); |
+ service->AddTypeDebugInfoObserver(this); |
+ } |
+} |
+ |
void SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo( |
const base::ListValue* args) { |
DCHECK(args->empty()); |
@@ -137,6 +166,42 @@ void SyncInternalsMessageHandler::OnProtocolEvent( |
*value); |
} |
+void SyncInternalsMessageHandler::OnCommitCountersUpdated( |
+ syncer::ModelType type, |
+ const syncer::CommitCounters& counters) { |
+ scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue()); |
maniscalco
2014/05/23 00:55:00
Too bad syncer::FooCounters don't have a common ba
rlarocque
2014/05/27 20:13:26
I'll admit that seems like a valid use of template
maniscalco
2014/05/27 20:31:07
Yep, you'd still have three listener functions, ea
|
+ details->SetString("modelType", ModelTypeToString(type)); |
+ details->SetString("counterType", "commit"); |
+ details->Set("counters", counters.ToValue().release()); |
+ web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent", |
+ base::StringValue("onCountersUpdated"), |
+ *details); |
+} |
+ |
+void SyncInternalsMessageHandler::OnUpdateCountersUpdated( |
+ syncer::ModelType type, |
+ const syncer::UpdateCounters& counters) { |
+ scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue()); |
+ details->SetString("modelType", ModelTypeToString(type)); |
+ details->SetString("counterType", "update"); |
+ details->Set("counters", counters.ToValue().release()); |
+ web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent", |
+ base::StringValue("onCountersUpdated"), |
+ *details); |
+} |
+ |
+void SyncInternalsMessageHandler::OnStatusCountersUpdated( |
+ syncer::ModelType type, |
+ const syncer::StatusCounters& counters) { |
+ scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue()); |
+ details->SetString("modelType", ModelTypeToString(type)); |
+ details->SetString("counterType", "status"); |
+ details->Set("counters", counters.ToValue().release()); |
+ web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent", |
+ base::StringValue("onCountersUpdated"), |
+ *details); |
+} |
+ |
void SyncInternalsMessageHandler::HandleJsEvent( |
const std::string& name, |
const JsEventDetails& details) { |
@@ -163,4 +228,3 @@ ProfileSyncService* SyncInternalsMessageHandler::GetProfileSyncService() { |
ProfileSyncServiceFactory* factory = ProfileSyncServiceFactory::GetInstance(); |
return factory->GetForProfile(profile->GetOriginalProfile()); |
} |
- |