Index: chrome/browser/ui/zoom/zoom_controller.cc |
diff --git a/chrome/browser/ui/zoom/zoom_controller.cc b/chrome/browser/ui/zoom/zoom_controller.cc |
index 24b33baad649d27d4287532503a79d6d1ad08c83..30271498e29e1e56d36e43c13fa188addf0d37fd 100644 |
--- a/chrome/browser/ui/zoom/zoom_controller.cc |
+++ b/chrome/browser/ui/zoom/zoom_controller.cc |
@@ -32,15 +32,23 @@ ZoomController::ZoomController(content::WebContents* web_contents) |
base::Unretained(this), |
std::string())); |
- content::HostZoomMap* zoom_map = |
- content::HostZoomMap::GetForBrowserContext(profile); |
- registrar_.Add(this, content::NOTIFICATION_ZOOM_LEVEL_CHANGED, |
- content::Source<content::HostZoomMap>(zoom_map)); |
+ content::HostZoomMap::GetForBrowserContext( |
+ web_contents->GetBrowserContext())->AddZoomLevelChangedCallback( |
+ base::Bind(&ZoomController::OnZoomLevelChanged, |
+ base::Unretained(this))); |
UpdateState(std::string()); |
} |
-ZoomController::~ZoomController() {} |
+ZoomController::~ZoomController() { |
+ if (!web_contents()) |
+ return; |
+ |
+ content::HostZoomMap::GetForBrowserContext( |
+ web_contents()->GetBrowserContext())->RemoveZoomLevelChangedCallback( |
+ base::Bind(&ZoomController::OnZoomLevelChanged, |
+ base::Unretained(this))); |
jam
2013/01/30 17:50:44
this doesn't work because the new callback you cre
|
+} |
bool ZoomController::IsAtDefaultZoom() const { |
if (!web_contents()) |
@@ -59,6 +67,10 @@ int ZoomController::GetResourceForZoomLevel() const { |
return zoom > default_zoom_level_.GetValue() ? IDR_ZOOM_PLUS : IDR_ZOOM_MINUS; |
} |
+void ZoomController::OnZoomLevelChanged(const std::string& host) { |
+ UpdateState(host); |
+} |
+ |
void ZoomController::DidNavigateMainFrame( |
const content::LoadCommittedDetails& details, |
const content::FrameNavigateParams& params) { |
@@ -67,13 +79,6 @@ void ZoomController::DidNavigateMainFrame( |
UpdateState(std::string()); |
} |
-void ZoomController::Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- DCHECK_EQ(content::NOTIFICATION_ZOOM_LEVEL_CHANGED, type); |
- UpdateState(*content::Details<std::string>(details).ptr()); |
-} |
- |
void ZoomController::UpdateState(const std::string& host) { |
// TODO(dbeam): I'm not totally sure why this is happening, and there's been a |
// bit of effort to understand with no tangible results yet. It's possible |