Chromium Code Reviews| 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 ecd38eb94f842d4560b457c28b8da54731e1de50..58cb714e6a35beac1c726db5a64a6757593e614f 100644 |
| --- a/chrome/browser/ui/webui/sync_internals_message_handler.cc |
| +++ b/chrome/browser/ui/webui/sync_internals_message_handler.cc |
| @@ -34,21 +34,25 @@ SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { |
| void SyncInternalsMessageHandler::RegisterMessages() { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| - // Init our link to the JsController. |
| + // Register for ProfileSyncService events. |
| ProfileSyncService* service = GetProfileSyncService(); |
| if (service) |
| + service->AddObserver(this); |
| + |
| + // Init our link to the JsController. |
| + if (service) |
| js_controller_ = service->GetJsController(); |
| if (js_controller_) |
| js_controller_->AddJsEventHandler(this); |
| web_ui()->RegisterMessageCallback( |
| - "getAboutInfo", |
| - base::Bind(&SyncInternalsMessageHandler::OnGetAboutInfo, |
| + "requestUpdatedAboutInfo", |
| + base::Bind(&SyncInternalsMessageHandler::OnRequestUpdatedAboutInfo, |
| base::Unretained(this))); |
| web_ui()->RegisterMessageCallback( |
| - "getListOfTypes", |
| - base::Bind(&SyncInternalsMessageHandler::OnGetListOfTypes, |
| + "requestListOfTypes", |
| + base::Bind(&SyncInternalsMessageHandler::OnRequestListOfTypes, |
| base::Unretained(this))); |
| RegisterJsControllerCallback("getNotificationState"); |
| @@ -57,27 +61,27 @@ void SyncInternalsMessageHandler::RegisterMessages() { |
| RegisterJsControllerCallback("getClientServerTraffic"); |
| } |
| -void SyncInternalsMessageHandler::OnGetAboutInfo(const base::ListValue* args) { |
| - // TODO(rlarocque): We should DCHECK(!args) here. See crbug.com/334431. |
| - scoped_ptr<base::DictionaryValue> value = |
| - sync_ui_util::ConstructAboutInformation(GetProfileSyncService()); |
| - web_ui()->CallJavascriptFunction( |
| - "chrome.sync.getAboutInfo.handleReply", |
| - *value); |
| +void SyncInternalsMessageHandler::OnRequestUpdatedAboutInfo( |
| + const base::ListValue* args) { |
| + DCHECK(args->empty()); |
|
Dan Beam
2014/02/13 22:32:45
nit: doesn't seem necessary ^
rlarocque
2014/02/13 23:34:30
Function calls without argument checking scare me.
|
| + SendAboutInfo(); |
| } |
| -void SyncInternalsMessageHandler::OnGetListOfTypes( |
| +void SyncInternalsMessageHandler::OnRequestListOfTypes( |
| const base::ListValue* args) { |
| - // TODO(rlarocque): We should DCHECK(!args) here. See crbug.com/334431. |
| - base::ListValue type_list; |
| + DCHECK(args->empty()); |
|
Dan Beam
2014/02/13 22:32:45
^ same
|
| + base::DictionaryValue event_details; |
| + scoped_ptr<base::ListValue> type_list(new base::ListValue()); |
| ModelTypeSet protocol_types = syncer::ProtocolTypes(); |
| for (ModelTypeSet::Iterator it = protocol_types.First(); |
| it.Good(); it.Inc()) { |
| - type_list.Append(new base::StringValue(ModelTypeToString(it.Get()))); |
| + type_list->Append(new base::StringValue(ModelTypeToString(it.Get()))); |
| } |
| + event_details.Set("types", type_list.release()); |
| web_ui()->CallJavascriptFunction( |
| - "chrome.sync.getListOfTypes.handleReply", |
| - type_list); |
| + "chrome.sync.dispatchEvent", |
| + base::StringValue("onReceivedListOfTypes"), |
| + event_details); |
| } |
| void SyncInternalsMessageHandler::HandleJsReply( |
| @@ -90,6 +94,10 @@ void SyncInternalsMessageHandler::HandleJsReply( |
| web_ui()->CallJavascriptFunction(reply_handler, arg_list); |
| } |
| +void SyncInternalsMessageHandler::OnStateChanged() { |
| + SendAboutInfo(); |
| +} |
| + |
| void SyncInternalsMessageHandler::HandleJsEvent( |
| const std::string& name, |
| const JsEventDetails& details) { |
| @@ -109,6 +117,15 @@ void SyncInternalsMessageHandler::RegisterJsControllerCallback( |
| name)); |
| } |
| +void SyncInternalsMessageHandler::SendAboutInfo() { |
| + scoped_ptr<base::DictionaryValue> value = |
| + sync_ui_util::ConstructAboutInformation(GetProfileSyncService()); |
| + web_ui()->CallJavascriptFunction( |
| + "chrome.sync.dispatchEvent", |
| + base::StringValue("onAboutInfoUpdated"), |
| + *value); |
| +} |
| + |
| void SyncInternalsMessageHandler::ForwardToJsController( |
| const std::string& name, |
| const base::ListValue* args) { |