| 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 8a0ddd66a54707add0f73065f481739016369e3b..e0b64f9bf081ee10a2ee0ae98086bcf11b3dab83 100644
|
| --- a/chrome/browser/ui/webui/sync_internals_message_handler.cc
|
| +++ b/chrome/browser/ui/webui/sync_internals_message_handler.cc
|
| @@ -13,6 +13,7 @@
|
| #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/events/protocol_event.h"
|
| #include "sync/internal_api/public/util/weak_handle.h"
|
| #include "sync/js/js_arg_list.h"
|
| #include "sync/js/js_event_details.h"
|
| @@ -24,12 +25,17 @@ using syncer::ModelTypeSet;
|
| using syncer::WeakHandle;
|
|
|
| SyncInternalsMessageHandler::SyncInternalsMessageHandler()
|
| - : scoped_observer_(this),
|
| - weak_ptr_factory_(this) {}
|
| + : weak_ptr_factory_(this) {}
|
|
|
| SyncInternalsMessageHandler::~SyncInternalsMessageHandler() {
|
| if (js_controller_)
|
| js_controller_->RemoveJsEventHandler(this);
|
| +
|
| + ProfileSyncService* service = GetProfileSyncService();
|
| + if (service && service->HasObserver(this)) {
|
| + service->RemoveObserver(this);
|
| + service->RemoveProtocolEventObserver(this);
|
| + }
|
| }
|
|
|
| void SyncInternalsMessageHandler::RegisterMessages() {
|
| @@ -38,7 +44,8 @@ void SyncInternalsMessageHandler::RegisterMessages() {
|
| // Register for ProfileSyncService events.
|
| ProfileSyncService* service = GetProfileSyncService();
|
| if (service) {
|
| - scoped_observer_.Add(service);
|
| + service->AddObserver(this);
|
| + service->AddProtocolEventObserver(this);
|
| js_controller_ = service->GetJsController();
|
| js_controller_->AddJsEventHandler(this);
|
| }
|
| @@ -94,6 +101,16 @@ void SyncInternalsMessageHandler::OnStateChanged() {
|
| SendAboutInfo();
|
| }
|
|
|
| +void SyncInternalsMessageHandler::OnProtocolEvent(
|
| + const syncer::ProtocolEvent& event) {
|
| + scoped_ptr<base::DictionaryValue> value(
|
| + syncer::ProtocolEvent::ToValue(event));
|
| + web_ui()->CallJavascriptFunction(
|
| + "chrome.sync.dispatchEvent",
|
| + base::StringValue("onProtocolEvent"),
|
| + *value);
|
| +}
|
| +
|
| void SyncInternalsMessageHandler::HandleJsEvent(
|
| const std::string& name,
|
| const JsEventDetails& details) {
|
|
|