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 d7fcbe845dadbfa2c539ebb5bce847ab8f088163..3bb8140cddca0b18073a667ce1eb03227078f7a0 100644 |
| --- a/chrome/browser/ui/zoom/zoom_controller.cc |
| +++ b/chrome/browser/ui/zoom/zoom_controller.cc |
| @@ -4,17 +4,10 @@ |
| #include "chrome/browser/ui/zoom/zoom_controller.h" |
| -#include "base/prefs/pref_service.h" |
| -#include "chrome/browser/chrome_notification_types.h" |
| -#include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/zoom/zoom_event_manager.h" |
| #include "chrome/browser/ui/zoom/zoom_observer.h" |
| -#include "chrome/common/pref_names.h" |
| #include "content/public/browser/host_zoom_map.h" |
| #include "content/public/browser/navigation_entry.h" |
| -#include "content/public/browser/notification_details.h" |
| -#include "content/public/browser/notification_service.h" |
| -#include "content/public/browser/notification_types.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| @@ -31,19 +24,12 @@ ZoomController::ZoomController(content::WebContents* web_contents) |
| zoom_mode_(ZOOM_MODE_DEFAULT), |
| zoom_level_(1.0), |
| browser_context_(web_contents->GetBrowserContext()) { |
| - Profile* profile = |
| - Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| - default_zoom_level_.Init( |
| - prefs::kDefaultZoomLevel, |
| - profile->GetPrefs(), |
| - base::Bind( |
| - &ZoomController::UpdateState, base::Unretained(this), std::string())); |
| - zoom_level_ = default_zoom_level_.GetValue(); |
| - |
| - zoom_subscription_ = content::HostZoomMap::GetForBrowserContext( |
| - browser_context_)->AddZoomLevelChangedCallback( |
| - base::Bind(&ZoomController::OnZoomLevelChanged, |
| - base::Unretained(this))); |
| + content::HostZoomMap* host_zoom_map = |
| + content::HostZoomMap::GetForWebContents(web_contents); |
| + zoom_level_ = host_zoom_map->GetDefaultZoomLevel(); |
| + |
| + zoom_subscription_ = host_zoom_map->AddZoomLevelChangedCallback( |
| + base::Bind(&ZoomController::OnZoomLevelChanged, base::Unretained(this))); |
| UpdateState(std::string()); |
| } |
| @@ -51,15 +37,14 @@ ZoomController::ZoomController(content::WebContents* web_contents) |
| ZoomController::~ZoomController() {} |
| bool ZoomController::IsAtDefaultZoom() const { |
| - return content::ZoomValuesEqual(GetZoomLevel(), |
| - default_zoom_level_.GetValue()); |
| + return content::ZoomValuesEqual(GetZoomLevel(), GetDefaultZoomLevel()); |
| } |
| int ZoomController::GetResourceForZoomLevel() const { |
| if (IsAtDefaultZoom()) |
| return IDR_ZOOM_NORMAL; |
| - return GetZoomLevel() > default_zoom_level_.GetValue() ? IDR_ZOOM_PLUS |
| - : IDR_ZOOM_MINUS; |
| + return GetZoomLevel() > GetDefaultZoomLevel() ? IDR_ZOOM_PLUS |
| + : IDR_ZOOM_MINUS; |
| } |
| void ZoomController::AddObserver(ZoomObserver* observer) { |
| @@ -126,7 +111,7 @@ bool ZoomController::SetZoomLevelByExtension( |
| } |
| content::HostZoomMap* zoom_map = |
| - content::HostZoomMap::GetForBrowserContext(browser_context_); |
| + content::HostZoomMap::GetForWebContents(web_contents()); |
| DCHECK(zoom_map); |
| DCHECK(!event_data_); |
| event_data_.reset(new ZoomChangedEventData(web_contents(), |
| @@ -162,7 +147,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { |
| return; |
| content::HostZoomMap* zoom_map = |
| - content::HostZoomMap::GetForBrowserContext(browser_context_); |
| + content::HostZoomMap::GetForWebContents(web_contents()); |
| DCHECK(zoom_map); |
| int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); |
| int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); |
| @@ -227,7 +212,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { |
| // the zoom level is handled independently. |
| if (zoom_mode_ != ZOOM_MODE_DISABLED) { |
| zoom_map->SetTemporaryZoomLevel( |
| - render_process_id, render_view_id, default_zoom_level_.GetValue()); |
| + render_process_id, render_view_id, GetDefaultZoomLevel()); |
| zoom_level_ = original_zoom_level; |
| } else { |
| // When we don't call any HostZoomMap set functions, we send the event |
| @@ -241,7 +226,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) { |
| case ZOOM_MODE_DISABLED: { |
| // The page needs to be zoomed back to default before disabling the zoom |
| zoom_map->SetTemporaryZoomLevel( |
| - render_process_id, render_view_id, default_zoom_level_.GetValue()); |
| + render_process_id, render_view_id, GetDefaultZoomLevel()); |
| break; |
| } |
| } |
| @@ -267,7 +252,22 @@ void ZoomController::WebContentsDestroyed() { |
| void ZoomController::OnZoomLevelChanged( |
| const content::HostZoomMap::ZoomLevelChange& change) { |
| - UpdateState(change.host); |
| + if (change.mode == content::HostZoomMap::ZOOM_CHANGED_DEFAULT_ZOOM_LEVEL) { |
| + // TODO(wjmaclean) I don't think it should be possible for a change in the |
| + // default zoom level to interrupt an in-flight zoom change, but if it can |
| + // then we should notify observers here without calling update state. |
|
awong
2014/08/20 19:56:58
If this shouldn't be possible, shouldn't we bias o
wjmaclean
2014/08/20 20:15:45
Actually, this code is gone in my current working
|
| + DCHECK(!event_data_); |
| + double zoom_level = GetZoomLevel(); |
| + // Only relay the event if our web contents is affected by it. |
| + if (zoom_mode_ == ZOOM_MODE_DEFAULT && change.zoom_level == zoom_level) { |
| + ZoomChangedEventData zoom_change_data( |
| + web_contents(), zoom_level, zoom_level, zoom_mode_, false); |
| + FOR_EACH_OBSERVER( |
| + ZoomObserver, observers_, OnZoomChanged(zoom_change_data)); |
| + } |
| + } else { |
| + UpdateState(change.host); |
| + } |
| } |
| void ZoomController::UpdateState(const std::string& host) { |