Commit d051d9a0 authored by csilv@chromium.org's avatar csilv@chromium.org

Fix page zoom for plug-in documents (PDF, etc.)

BUG=106013,106228
TEST=Verify zoom-in/zoom-out work correctly on PDF documents.
Review URL: http://codereview.chromium.org/8896009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113923 0039d316-1c4b-4281-b951-d872f2087c98
parent 6a849971
......@@ -48,6 +48,8 @@ void UpdateFromSystemSettings(
prefs->enable_referrers =
profile->GetPrefs()->GetBoolean(prefs::kEnableReferrers);
prefs->default_zoom_level =
profile->GetPrefs()->GetDouble(prefs::kDefaultZoomLevel);
}
} // renderer_preferences_util
......@@ -42,6 +42,7 @@ void RegisterPerTabUserPrefs(PrefService* prefs) {
// The list of prefs we want to observe.
const char* kPrefsToObserve[] = {
prefs::kDefaultCharset,
prefs::kDefaultZoomLevel,
prefs::kEnableReferrers,
prefs::kWebKitAllowDisplayingInsecureContent,
prefs::kWebKitAllowRunningInsecureContent,
......@@ -409,7 +410,8 @@ void PrefsTabHelper::Observe(int type,
if ((*pref_name_in == prefs::kDefaultCharset) ||
StartsWithASCII(*pref_name_in, "webkit.webprefs.", true)) {
UpdateWebPreferences();
} else if (*pref_name_in == prefs::kEnableReferrers) {
} else if (*pref_name_in == prefs::kDefaultZoomLevel ||
*pref_name_in == prefs::kEnableReferrers) {
UpdateRendererPreferences();
} else {
NOTREACHED() << "unexpected pref change notification" << *pref_name_in;
......
......@@ -4,14 +4,9 @@
#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/web_cache_manager.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/pref_names.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/public/browser/notification_service.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -19,11 +14,6 @@ CoreTabHelper::CoreTabHelper(TabContentsWrapper* wrapper)
: TabContentsObserver(wrapper->tab_contents()),
delegate_(NULL),
wrapper_(wrapper) {
PrefService* prefs = wrapper_->profile()->GetPrefs();
if (prefs) {
pref_change_registrar_.Init(prefs);
pref_change_registrar_.Add(prefs::kDefaultZoomLevel, this);
}
}
CoreTabHelper::~CoreTabHelper() {
......@@ -88,27 +78,3 @@ void CoreTabHelper::DidBecomeSelected() {
WebCacheManager::GetInstance()->ObserveActivity(
tab_contents()->GetRenderProcessHost()->GetID());
}
////////////////////////////////////////////////////////////////////////////////
// content::NotificationObserver overrides
void CoreTabHelper::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
switch (type) {
case chrome::NOTIFICATION_PREF_CHANGED: {
std::string* pref_name = content::Details<std::string>(details).ptr();
DCHECK(content::Source<PrefService>(source).ptr() ==
wrapper_->profile()->GetPrefs());
if (*pref_name == prefs::kDefaultZoomLevel) {
tab_contents()->render_view_host()->SetZoomLevel(
tab_contents()->GetZoomLevel());
} else {
NOTREACHED() << "unexpected pref change notification" << *pref_name;
}
break;
}
default:
NOTREACHED();
}
}
......@@ -6,15 +6,13 @@
#define CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_
#pragma once
#include "chrome/browser/prefs/pref_change_registrar.h"
#include "content/browser/tab_contents/tab_contents_observer.h"
class CoreTabHelperDelegate;
class TabContentsWrapper;
// Per-tab class to handle functionality that is core to the operation of tabs.
class CoreTabHelper : public TabContentsObserver,
public content::NotificationObserver {
class CoreTabHelper : public TabContentsObserver {
public:
explicit CoreTabHelper(TabContentsWrapper* wrapper);
virtual ~CoreTabHelper();
......@@ -32,19 +30,12 @@ class CoreTabHelper : public TabContentsObserver,
// TabContentsObserver overrides:
virtual void DidBecomeSelected() OVERRIDE;
// content::NotificationObserver overrides:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
// Delegate for notifying our owner about stuff. Not owned by us.
CoreTabHelperDelegate* delegate_;
// Our owning TabContentsWrapper.
TabContentsWrapper* wrapper_;
PrefChangeRegistrar pref_change_registrar_;
DISALLOW_COPY_AND_ASSIGN(CoreTabHelper);
};
......
......@@ -288,6 +288,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::RendererPreferences)
IPC_STRUCT_TRAITS_MEMBER(browser_handles_top_level_requests)
IPC_STRUCT_TRAITS_MEMBER(caret_blink_interval)
IPC_STRUCT_TRAITS_MEMBER(enable_referrers)
IPC_STRUCT_TRAITS_MEMBER(default_zoom_level)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(webkit_glue::CustomContextMenuContext)
......
......@@ -22,7 +22,8 @@ RendererPreferences::RendererPreferences()
inactive_selection_fg_color(0),
browser_handles_top_level_requests(false),
caret_blink_interval(0),
enable_referrers(true) {
enable_referrers(true),
default_zoom_level(0) {
}
} // namespace content
......@@ -79,6 +79,9 @@ struct CONTENT_EXPORT RendererPreferences {
// Set to false to not send referrers.
bool enable_referrers;
// Default page zoom level.
double default_zoom_level;
};
} // namespace content
......
......@@ -3705,11 +3705,6 @@ void RenderViewImpl::ZoomFactorHelper(content::PageZoom zoom,
}
void RenderViewImpl::OnSetZoomLevel(double zoom_level) {
// Don't set zoom level for full-page plugin since they don't use the same
// zoom settings.
if (webview()->mainFrame()->document().isPluginDocument())
return;
webview()->hidePopups();
webview()->setZoomLevel(false, zoom_level);
zoomLevelChanged();
......@@ -3912,6 +3907,7 @@ void RenderViewImpl::OnDisableScrollbarsForSmallWindows(
void RenderViewImpl::OnSetRendererPrefs(
const content::RendererPreferences& renderer_prefs) {
double old_zoom_level = renderer_preferences_.default_zoom_level;
renderer_preferences_ = renderer_prefs;
UpdateFontRenderingFromRendererPrefs();
#if defined(TOOLKIT_USES_GTK)
......@@ -3936,6 +3932,13 @@ void RenderViewImpl::OnSetRendererPrefs(
webview()->themeChanged();
}
#endif
// If the zoom level for this page matches the old zoom default, and this
// is not a plugin, update the zoom level to match the new default.
if (webview() && !webview()->mainFrame()->document().isPluginDocument() &&
content::ZoomValuesEqual(webview()->zoomLevel(), old_zoom_level)) {
webview()->setZoomLevel(false, renderer_preferences_.default_zoom_level);
zoomLevelChanged();
}
}
void RenderViewImpl::OnMediaPlayerActionAt(const gfx::Point& location,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment