Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(905)

Unified Diff: content/browser/host_zoom_map_impl.cc

Issue 224733018: Changes to content/ to facilitate new zoom extension API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/host_zoom_map_impl.cc
diff --git a/content/browser/host_zoom_map_impl.cc b/content/browser/host_zoom_map_impl.cc
index 97a2ac7816d10a66751af9bc6f937313047db003..94555fa872f62e98136711dc3bffe26a8a2ba1f2 100644
--- a/content/browser/host_zoom_map_impl.cc
+++ b/content/browser/host_zoom_map_impl.cc
@@ -5,6 +5,7 @@
#include "content/browser/host_zoom_map_impl.h"
#include <cmath>
+#include <set>
#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
@@ -17,6 +18,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/resource_context.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/common/page_zoom.h"
#include "net/base/net_util.h"
@@ -39,6 +41,9 @@ HostZoomMapImpl::HostZoomMapImpl()
registrar_.Add(
this, NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW,
NotificationService::AllSources());
+ registrar_.Add(
+ this, NOTIFICATION_WEB_CONTENTS_NO_TEMPORARY_ZOOM_LEVEL,
+ NotificationService::AllSources());
}
void HostZoomMapImpl::CopyFrom(HostZoomMap* copy_interface) {
@@ -122,6 +127,12 @@ HostZoomMap::ZoomLevelVector HostZoomMapImpl::GetAllZoomLevels() const {
void HostZoomMapImpl::SetZoomLevelForHost(const std::string& host,
double level) {
+ SetZoomLevelForHost(host, 0, level);
+}
+
+void HostZoomMapImpl::SetZoomLevelForHost(const std::string& host,
+ int zoom_id,
+ double level) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
{
@@ -133,20 +144,13 @@ void HostZoomMapImpl::SetZoomLevelForHost(const std::string& host,
host_zoom_levels_[host] = level;
}
- // Notify renderers from this browser context.
- for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
- !i.IsAtEnd(); i.Advance()) {
- RenderProcessHost* render_process_host = i.GetCurrentValue();
- if (HostZoomMap::GetForBrowserContext(
- render_process_host->GetBrowserContext()) == this) {
- render_process_host->Send(
- new ViewMsg_SetZoomLevelForCurrentURL(std::string(), host, level));
- }
- }
+ SendZoomLevelChange(std::string(), host, level);
+
HostZoomMap::ZoomLevelChange change;
change.mode = HostZoomMap::ZOOM_CHANGED_FOR_HOST;
change.host = host;
change.zoom_level = level;
+ change.zoom_id = zoom_id;
zoom_level_changed_callbacks_.Notify(change);
}
@@ -160,16 +164,7 @@ void HostZoomMapImpl::SetZoomLevelForHostAndScheme(const std::string& scheme,
scheme_host_zoom_levels_[scheme][host] = level;
}
- // Notify renderers from this browser context.
- for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
- !i.IsAtEnd(); i.Advance()) {
- RenderProcessHost* render_process_host = i.GetCurrentValue();
- if (HostZoomMap::GetForBrowserContext(
- render_process_host->GetBrowserContext()) == this) {
- render_process_host->Send(
- new ViewMsg_SetZoomLevelForCurrentURL(scheme, host, level));
- }
- }
+ SendZoomLevelChange(scheme, host, level);
HostZoomMap::ZoomLevelChange change;
change.mode = HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST;
@@ -208,6 +203,8 @@ double HostZoomMapImpl::GetTemporaryZoomLevel(int render_process_id,
void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
int render_view_id,
+ const std::string& host,
+ int zoom_id,
double level) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -217,11 +214,7 @@ void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
for (i = 0; i < temporary_zoom_levels_.size(); ++i) {
if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
temporary_zoom_levels_[i].render_view_id == render_view_id) {
- if (level) {
- temporary_zoom_levels_[i].zoom_level = level;
- } else {
- temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
- }
+ temporary_zoom_levels_[i].zoom_level = level;
break;
}
}
@@ -237,7 +230,9 @@ void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
HostZoomMap::ZoomLevelChange change;
change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM;
+ change.host = host;
change.zoom_level = level;
+ change.zoom_id = zoom_id;
zoom_level_changed_callbacks_.Notify(change);
}
@@ -251,14 +246,16 @@ void HostZoomMapImpl::Observe(int type,
int render_view_id = Source<RenderViewHost>(source)->GetRoutingID();
int render_process_id =
Source<RenderViewHost>(source)->GetProcess()->GetID();
-
- for (size_t i = 0; i < temporary_zoom_levels_.size(); ++i) {
- if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
- temporary_zoom_levels_[i].render_view_id == render_view_id) {
- temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
- break;
- }
- }
+ EraseTemporaryZoomLevel(render_process_id, render_view_id);
+ break;
+ }
+ case NOTIFICATION_WEB_CONTENTS_NO_TEMPORARY_ZOOM_LEVEL: {
+ base::AutoLock auto_lock(lock_);
+ int render_view_id =
+ Source<WebContents>(source)->GetRenderViewHost()->GetRoutingID();
+ int render_process_id =
+ Source<WebContents>(source)->GetRenderProcessHost()->GetID();
+ EraseTemporaryZoomLevel(render_process_id, render_view_id);
break;
}
default:
@@ -266,6 +263,38 @@ void HostZoomMapImpl::Observe(int type,
}
}
+void HostZoomMapImpl::EraseTemporaryZoomLevel(int render_process_id,
+ int render_view_id) {
+ for (size_t i = 0; i < temporary_zoom_levels_.size(); ++i) {
+ if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
+ temporary_zoom_levels_[i].render_view_id == render_view_id) {
+ temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
+ break;
+ }
+ }
+}
+
+void HostZoomMapImpl::SendZoomLevelChange(const std::string& scheme,
+ const std::string& host,
+ double level) {
+ for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
+ !i.IsAtEnd(); i.Advance()) {
+ RenderProcessHost* render_process_host = i.GetCurrentValue();
+ if (HostZoomMap::GetForBrowserContext(
+ render_process_host->GetBrowserContext()) == this) {
+ int render_process_id = render_process_host->GetID();
+ std::set<int> exceptions;
+ for (size_t i = 0; i != temporary_zoom_levels_.size(); ++i) {
+ if (temporary_zoom_levels_[i].render_process_id == render_process_id) {
+ exceptions.insert(temporary_zoom_levels_[i].render_view_id);
+ }
+ }
+ render_process_host->Send(new ViewMsg_SetZoomLevelForCurrentURL(
+ scheme, host, level, exceptions));
+ }
+ }
+}
+
HostZoomMapImpl::~HostZoomMapImpl() {
}

Powered by Google App Engine
This is Rietveld 408576698