Chromium Code Reviews| 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 |