diff options
author | yosin@chromium.org <yosin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 16:01:46 +0000 |
---|---|---|
committer | yosin@chromium.org <yosin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 16:01:46 +0000 |
commit | d407cc0d24e3b55a68bbe8098da26bde8ad666b6 (patch) | |
tree | b3f3857d9d4d1be7cca44b969b9a1d078b3b96fa /content | |
parent | d2a53042edaec224127d158be00b3d3356b87653 (diff) | |
download | chromium_src-d407cc0d24e3b55a68bbe8098da26bde8ad666b6.zip chromium_src-d407cc0d24e3b55a68bbe8098da26bde8ad666b6.tar.gz chromium_src-d407cc0d24e3b55a68bbe8098da26bde8ad666b6.tar.bz2 |
Summary of changes
== chrome/browser/profiles/off_the_record_profile.cc ==
== chrome/browser/profiles/off_the_record_profile.h ==
* Change GetHostZoomMap for populating from parent's host zoom map.
* Install observer in off the record profile to observe original HZM changes
* Move object initialization code to Init method for two phase initialization.
== content/browser/host_zoom_map.* ==
* Populating newly created HostZoomMap(HZM) for off the record profile with zoom level settings from original profile.
== content/browser/renderer_host/render_view_host.cc ==
Propagate zoom level change to related hosts to update page rendering.
BUG=88355
TEST=Manual test on Linux/Mac/Win and unit test
Review URL: http://codereview.chromium.org/7624013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100920 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/host_zoom_map.cc | 22 | ||||
-rw-r--r-- | content/browser/host_zoom_map.h | 21 | ||||
-rw-r--r-- | content/browser/renderer_host/render_view_host.cc | 4 |
3 files changed, 38 insertions, 9 deletions
diff --git a/content/browser/host_zoom_map.cc b/content/browser/host_zoom_map.cc index 64e96f4..0facb99 100644 --- a/content/browser/host_zoom_map.cc +++ b/content/browser/host_zoom_map.cc @@ -8,6 +8,7 @@ #include "base/string_piece.h" #include "base/utf_string_conversions.h" +#include "base/values.h" #include "content/browser/browser_thread.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_view_host.h" @@ -18,7 +19,25 @@ using WebKit::WebView; -HostZoomMap::HostZoomMap() : default_zoom_level_(0.0) { +HostZoomMap::HostZoomMap() + : default_zoom_level_(0.0), + original_(this) { + Init(); +} + +HostZoomMap::HostZoomMap(HostZoomMap* original) + : default_zoom_level_(0.0), + original_(original) { + DCHECK(original); + Init(); + base::AutoLock auto_lock(original->lock_); + for (HostZoomLevels::const_iterator i(original->host_zoom_levels_.begin()); + i != original->host_zoom_levels_.end(); ++i) { + host_zoom_levels_[i->first] = i->second; + } +} + +void HostZoomMap::Init() { registrar_.Add( this, content::NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW, NotificationService::AllSources()); @@ -93,7 +112,6 @@ void HostZoomMap::SetTemporaryZoomLevel(int render_process_id, content::NOTIFICATION_ZOOM_LEVEL_CHANGED, Source<HostZoomMap>(this), Details<const std::string>(&host)); - } void HostZoomMap::Observe( diff --git a/content/browser/host_zoom_map.h b/content/browser/host_zoom_map.h index fd17c77..65b9766 100644 --- a/content/browser/host_zoom_map.h +++ b/content/browser/host_zoom_map.h @@ -20,16 +20,21 @@ #include "content/common/notification_observer.h" #include "content/common/notification_registrar.h" +namespace base { +class DictionaryValue; +} + class GURL; // HostZoomMap needs to be deleted on the UI thread because it listens // to notifications on there (and holds a NotificationRegistrar). -class HostZoomMap : - public NotificationObserver, - public base::RefCountedThreadSafe<HostZoomMap, - BrowserThread::DeleteOnUIThread> { +class HostZoomMap + : public NotificationObserver, + public base::RefCountedThreadSafe<HostZoomMap, + BrowserThread::DeleteOnUIThread> { public: - HostZoomMap(); + explicit HostZoomMap(); + explicit HostZoomMap(HostZoomMap* original); // Returns the zoom level for the host or spec for a given url. The zoom // level is determined by the host portion of the URL, or (in the absence of @@ -72,6 +77,8 @@ class HostZoomMap : double default_zoom_level() const { return default_zoom_level_; } void set_default_zoom_level(double level) { default_zoom_level_ = level; } + HostZoomMap* GetOriginal() const { return original_; } + private: friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; friend class DeleteTask<HostZoomMap>; @@ -79,11 +86,15 @@ class HostZoomMap : typedef std::map<std::string, double> HostZoomLevels; virtual ~HostZoomMap(); + void Init(); // Copy of the pref data, so that we can read it on the IO thread. HostZoomLevels host_zoom_levels_; double default_zoom_level_; + // Original HostZoomMap passed in constructor or itself. + HostZoomMap* original_; + struct TemporaryZoomLevel { int render_process_id; int render_view_id; diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc index 9de758f..22fc575 100644 --- a/content/browser/renderer_host/render_view_host.cc +++ b/content/browser/renderer_host/render_view_host.cc @@ -1310,8 +1310,8 @@ void RenderViewHost::OnDidZoomURL(double zoom_level, for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); !i.IsAtEnd(); i.Advance()) { RenderProcessHost* render_process_host = i.GetCurrentValue(); - if (render_process_host->browser_context() == - process()->browser_context()) { + if (render_process_host->browser_context()->GetHostZoomMap()-> + GetOriginal() == host_zoom_map) { render_process_host->Send( new ViewMsg_SetZoomLevelForCurrentURL(url, zoom_level)); } |