| 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..931be344deeccf002efa86320b3f69e0cdea3e5b 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"
|
|
|
| @@ -122,6 +124,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,21 +141,14 @@ 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;
|
|
|
| + CallZoomCallback(zoom_id);
|
| zoom_level_changed_callbacks_.Notify(change);
|
| }
|
|
|
| @@ -160,16 +161,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;
|
| @@ -194,6 +186,12 @@ HostZoomMapImpl::AddZoomLevelChangedCallback(
|
| return zoom_level_changed_callbacks_.Add(callback);
|
| }
|
|
|
| +void HostZoomMapImpl::AddZoomCallback(
|
| + int zoom_id,
|
| + const base::Callback<void(void)>& callback) {
|
| + zoom_callback_map_[zoom_id] = callback;
|
| +}
|
| +
|
| double HostZoomMapImpl::GetTemporaryZoomLevel(int render_process_id,
|
| int render_view_id) const {
|
| base::AutoLock auto_lock(lock_);
|
| @@ -208,6 +206,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 +217,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,8 +233,10 @@ void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
|
|
|
| HostZoomMap::ZoomLevelChange change;
|
| change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM;
|
| + change.host = host;
|
| change.zoom_level = level;
|
|
|
| + CallZoomCallback(zoom_id);
|
| zoom_level_changed_callbacks_.Notify(change);
|
| }
|
|
|
| @@ -251,14 +249,7 @@ 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;
|
| }
|
| default:
|
| @@ -266,6 +257,48 @@ void HostZoomMapImpl::Observe(int type,
|
| }
|
| }
|
|
|
| +void HostZoomMapImpl::EraseTemporaryZoomLevel(int render_process_id,
|
| + int render_view_id) {
|
| + base::AutoLock auto_lock(lock_);
|
| + 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::CallZoomCallback(int zoom_id) {
|
| + std::map<int, base::Callback<void(void)> >::iterator it =
|
| + zoom_callback_map_.find(zoom_id);
|
| + if (it == zoom_callback_map_.end())
|
| + return;
|
| +
|
| + it->second.Run();
|
| + zoom_callback_map_.erase(it);
|
| +}
|
| +
|
| +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() {
|
| }
|
|
|
|
|