| 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) {
 | 
| 
 |