#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"
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");
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(
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(
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) {