Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / sync_internals_message_handler.cc
index 1f03b59..8120d84 100644 (file)
@@ -11,6 +11,7 @@
 #include "chrome/browser/sync/about_sync_util.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
+#include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_ui.h"
 #include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/js/js_arg_list.h"
@@ -28,26 +29,32 @@ SyncInternalsMessageHandler::SyncInternalsMessageHandler()
 SyncInternalsMessageHandler::~SyncInternalsMessageHandler() {
   if (js_controller_)
     js_controller_->RemoveJsEventHandler(this);
+
+  ProfileSyncService* service = GetProfileSyncService();
+  if (service && service->HasObserver(this)) {
+    service->RemoveObserver(this);
+  }
 }
 
 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)
+  if (service) {
+    service->AddObserver(this);
     js_controller_ = service->GetJsController();
-  if (js_controller_)
     js_controller_->AddJsEventHandler(this);
+  }
 
   web_ui()->RegisterMessageCallback(
-      "getAboutInfo",
-      base::Bind(&SyncInternalsMessageHandler::OnGetAboutInfo,
+      "requestUpdatedAboutInfo",
+      base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo,
                  base::Unretained(this)));
 
   web_ui()->RegisterMessageCallback(
-      "getListOfTypes",
-      base::Bind(&SyncInternalsMessageHandler::OnGetListOfTypes,
+      "requestListOfTypes",
+      base::Bind(&SyncInternalsMessageHandler::HandleRequestListOfTypes,
                  base::Unretained(this)));
 
   RegisterJsControllerCallback("getNotificationState");
@@ -56,27 +63,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::HandleRequestUpdatedAboutInfo(
+    const base::ListValue* args) {
+  DCHECK(args->empty());
+  SendAboutInfo();
 }
 
-void SyncInternalsMessageHandler::OnGetListOfTypes(
+void SyncInternalsMessageHandler::HandleRequestListOfTypes(
     const base::ListValue* args) {
-  // TODO(rlarocque): We should DCHECK(!args) here.  See crbug.com/334431.
-  base::ListValue type_list;
+  DCHECK(args->empty());
+  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(
@@ -89,14 +96,18 @@ void SyncInternalsMessageHandler::HandleJsReply(
   web_ui()->CallJavascriptFunction(reply_handler, arg_list);
 }
 
+void SyncInternalsMessageHandler::OnStateChanged() {
+  SendAboutInfo();
+}
+
 void SyncInternalsMessageHandler::HandleJsEvent(
     const std::string& name,
     const JsEventDetails& details) {
   DVLOG(1) << "Handling event: " << name
            << " with details " << details.ToString();
-  const std::string& event_handler = "chrome.sync." + name + ".fire";
-  std::vector<const base::Value*> arg_list(1, &details.Get());
-  web_ui()->CallJavascriptFunction(event_handler, arg_list);
+  web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent",
+                                   base::StringValue(name),
+                                   details.Get());
 }
 
 void SyncInternalsMessageHandler::RegisterJsControllerCallback(
@@ -108,6 +119,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) {