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..a333e7840e8aae23611ab20ff52fb865d6a6e149 100644 |
| --- a/chrome/browser/ui/zoom/zoom_controller.cc |
| +++ b/chrome/browser/ui/zoom/zoom_controller.cc |
| @@ -24,7 +24,9 @@ DEFINE_WEB_CONTENTS_USER_DATA_KEY(ZoomController); |
| ZoomController::ZoomController(content::WebContents* web_contents) |
| : content::WebContentsObserver(web_contents), |
| zoom_percent_(100), |
| - observer_(NULL) { |
| + observer_(NULL), |
| + zoom_callback_(base::Bind(&ZoomController::OnZoomLevelChanged, |
| + base::Unretained(this))) { |
| Profile* profile = |
| Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| default_zoom_level_.Init(prefs::kDefaultZoomLevel, profile->GetPrefs(), |
| @@ -32,15 +34,21 @@ 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( |
| + zoom_callback_); |
| UpdateState(std::string()); |
| } |
| -ZoomController::~ZoomController() {} |
| +ZoomController::~ZoomController() { |
| + if (!web_contents()) |
| + return; |
|
Avi (use Gerrit)
2013/01/31 18:46:55
This looks like a very, very bad idea.
Yes, as a
Paweł Hajdan Jr.
2013/02/01 12:36:11
Thanks for catching that!
|
| + |
| + content::HostZoomMap::GetForBrowserContext( |
| + web_contents()->GetBrowserContext())->RemoveZoomLevelChangedCallback( |
| + zoom_callback_); |
| +} |
| bool ZoomController::IsAtDefaultZoom() const { |
| if (!web_contents()) |
| @@ -67,11 +75,8 @@ 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::OnZoomLevelChanged(const std::string& host) { |
| + UpdateState(host); |
| } |
| void ZoomController::UpdateState(const std::string& host) { |