From b5cfa2e92dfaeedbc573a8dffe8a37a47ac7ac87 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 8 Mar 2017 19:03:43 +0530 Subject: [PATCH] track host zoom levels with HostZoomMap --- atom/browser/web_contents_zoom_controller.cc | 47 +++++--------------- atom/browser/web_contents_zoom_controller.h | 8 ---- 2 files changed, 11 insertions(+), 44 deletions(-) diff --git a/atom/browser/web_contents_zoom_controller.cc b/atom/browser/web_contents_zoom_controller.cc index 1bd4f5a9e4f..f48e643d96a 100644 --- a/atom/browser/web_contents_zoom_controller.cc +++ b/atom/browser/web_contents_zoom_controller.cc @@ -26,8 +26,6 @@ WebContentsZoomController::WebContentsZoomController( embedder_zoom_controller_(nullptr) { default_zoom_factor_ = content::kEpsilon; host_zoom_map_ = content::HostZoomMap::GetForWebContents(web_contents); - zoom_subscription_ = host_zoom_map_->AddZoomLevelChangedCallback(base::Bind( - &WebContentsZoomController::OnZoomLevelChanged, base::Unretained(this))); } WebContentsZoomController::~WebContentsZoomController() {} @@ -59,19 +57,10 @@ void WebContentsZoomController::SetZoomLevel(double level) { host_zoom_map_->ClearTemporaryZoomLevel(render_process_id, render_view_id); } - auto new_zoom_factor = content::ZoomLevelToZoomFactor(level); - content::NavigationEntry* entry = - web_contents()->GetController().GetLastCommittedEntry(); - if (entry) { - std::string host = net::GetHostOrSpecFromURL(entry->GetURL()); - // When new zoom level varies from kZoomFactor, it takes preference. - if (!content::ZoomValuesEqual(GetDefaultZoomFactor(), new_zoom_factor)) - host_zoom_factor_[host] = new_zoom_factor; - content::HostZoomMap::SetZoomLevel(web_contents(), level); - // Notify observers of zoom level changes. - for (Observer& observer : observers_) - observer.OnZoomLevelChanged(web_contents(), level, false); - } + content::HostZoomMap::SetZoomLevel(web_contents(), level); + // Notify observers of zoom level changes. + for (Observer& observer : observers_) + observer.OnZoomLevelChanged(web_contents(), level, false); } double WebContentsZoomController::GetZoomLevel() { @@ -117,7 +106,6 @@ void WebContentsZoomController::DidFinishNavigation( void WebContentsZoomController::WebContentsDestroyed() { observers_.Clear(); - host_zoom_factor_.clear(); embedder_zoom_controller_ = nullptr; } @@ -131,8 +119,6 @@ void WebContentsZoomController::RenderFrameHostChanged( return; host_zoom_map_ = new_host_zoom_map; - zoom_subscription_ = host_zoom_map_->AddZoomLevelChangedCallback(base::Bind( - &WebContentsZoomController::OnZoomLevelChanged, base::Unretained(this))); } void WebContentsZoomController::SetZoomFactorOnNavigationIfNeeded( @@ -156,27 +142,16 @@ void WebContentsZoomController::SetZoomFactorOnNavigationIfNeeded( // then it takes precendence. // pref store < kZoomFactor < setZoomLevel std::string host = net::GetHostOrSpecFromURL(url); + std::string scheme = url.scheme(); double zoom_factor = GetDefaultZoomFactor(); - auto it = host_zoom_factor_.find(host); - if (it != host_zoom_factor_.end()) - zoom_factor = it->second; - auto level = content::ZoomFactorToZoomLevel(zoom_factor); - if (content::ZoomValuesEqual(level, GetZoomLevel())) + double zoom_level = content::ZoomFactorToZoomLevel(zoom_factor); + if (host_zoom_map_->HasZoomLevel(scheme, host)) { + zoom_level = host_zoom_map_->GetZoomLevelForHostAndScheme(scheme, host); + } + if (content::ZoomValuesEqual(zoom_level, GetZoomLevel())) return; - SetZoomLevel(level); -} - -void WebContentsZoomController::OnZoomLevelChanged( - const content::HostZoomMap::ZoomLevelChange& change) { - if (change.mode == content::HostZoomMap::ZOOM_CHANGED_FOR_HOST) { - auto it = host_zoom_factor_.find(change.host); - if (it == host_zoom_factor_.end()) - return; - host_zoom_factor_.insert( - it, std::make_pair(change.host, - content::ZoomLevelToZoomFactor(change.zoom_level))); - } + SetZoomLevel(zoom_level); } } // namespace atom diff --git a/atom/browser/web_contents_zoom_controller.h b/atom/browser/web_contents_zoom_controller.h index 11db8745b30..a0d28ad9b99 100644 --- a/atom/browser/web_contents_zoom_controller.h +++ b/atom/browser/web_contents_zoom_controller.h @@ -58,9 +58,6 @@ class WebContentsZoomController // Called after a navigation has committed to set default zoom factor. void SetZoomFactorOnNavigationIfNeeded(const GURL& url); - // Track zoom changes of a host in other instances of a partition. - void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change); - // kZoomFactor. double default_zoom_factor_; double temporary_zoom_level_; @@ -70,15 +67,10 @@ class WebContentsZoomController WebContentsZoomController* embedder_zoom_controller_; - // Map between zoom factor and hosts in this webContent. - std::map host_zoom_factor_; - base::ObserverList observers_; content::HostZoomMap* host_zoom_map_; - std::unique_ptr zoom_subscription_; - DISALLOW_COPY_AND_ASSIGN(WebContentsZoomController); };