summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authoryosin@chromium.org <yosin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 16:01:46 +0000
committeryosin@chromium.org <yosin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 16:01:46 +0000
commitd407cc0d24e3b55a68bbe8098da26bde8ad666b6 (patch)
treeb3f3857d9d4d1be7cca44b969b9a1d078b3b96fa /content
parentd2a53042edaec224127d158be00b3d3356b87653 (diff)
downloadchromium_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.cc22
-rw-r--r--content/browser/host_zoom_map.h21
-rw-r--r--content/browser/renderer_host/render_view_host.cc4
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));
}