diff options
author | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-28 18:02:53 +0000 |
---|---|---|
committer | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-28 18:02:53 +0000 |
commit | 3208be6bd92a5dacabf4cc376f0c33f270d2cd31 (patch) | |
tree | 3f95a7c9d22e72da17b9ebe84dd0131236592f42 | |
parent | 74cf07bf7c98a6444987dce22d48b34cbb77d167 (diff) | |
download | chromium_src-3208be6bd92a5dacabf4cc376f0c33f270d2cd31.zip chromium_src-3208be6bd92a5dacabf4cc376f0c33f270d2cd31.tar.gz chromium_src-3208be6bd92a5dacabf4cc376f0c33f270d2cd31.tar.bz2 |
Merge 253009 "sync: Unregister SyncInternalsMessageHandler"
> sync: Unregister SyncInternalsMessageHandler
>
> Unregisters SyncInternalsMessageHandler as an observer of
> ProfileSyncService events during the object's destruction.
>
> Fixes a serious bug that caused a lot of crashes on canary. If we did
> not unregister, then it would be possible to trigger a crash by opening
> about:sync, closing it, then doing something that triggers a sync cycle
> (eg. navigating to a new page or adding a bookmark).
>
> NOTRY=true
> BUG=346244
>
> Review URL: https://codereview.chromium.org/178003005
TBR=rlarocque@chromium.org
Review URL: https://codereview.chromium.org/180783013
git-svn-id: svn://svn.chromium.org/chrome/branches/1847/src@254165 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/webui/sync_internals_message_handler.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/chrome/browser/ui/webui/sync_internals_message_handler.cc b/chrome/browser/ui/webui/sync_internals_message_handler.cc index 59f6cd5..8120d84 100644 --- a/chrome/browser/ui/webui/sync_internals_message_handler.cc +++ b/chrome/browser/ui/webui/sync_internals_message_handler.cc @@ -29,6 +29,11 @@ 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() { |