summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbenwells <benwells@chromium.org>2015-01-12 15:16:01 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-12 23:16:58 +0000
commit9d9b1161ed6454aac72a97496babc7de5469cc56 (patch)
treedd8bdabaa90a8dbd4e24d1d529d63e9af4c4bd5c
parentee3fa9866a01dc2fcd1e3beb188c683ba4d79e8b (diff)
downloadchromium_src-9d9b1161ed6454aac72a97496babc7de5469cc56.zip
chromium_src-9d9b1161ed6454aac72a97496babc7de5469cc56.tar.gz
chromium_src-9d9b1161ed6454aac72a97496babc7de5469cc56.tar.bz2
Keep app default zoom level independent of the browser zoom level.
This was mostly done already with the defalut zoom level being stored as a StoragePartition level preference. However when the renderer preferences were set they did not use the default zoom of the correct StoragePartition; the default StoragePartition's default zoom was always used. Due to this bug apps could easily have host specific zoom levels set mistakenly. This change also removes any host specific zoom levels of apps as they are started. If apps ever get the capability to zoom this will need to be removed. BUG=407333, 153568, 411073, 446759 Review URL: https://codereview.chromium.org/839023002 Cr-Commit-Position: refs/heads/master@{#311138}
-rw-r--r--athena/extensions/athena_app_delegate_base.cc5
-rw-r--r--athena/extensions/athena_app_delegate_base.h1
-rw-r--r--chrome/browser/apps/app_browsertest.cc25
-rw-r--r--chrome/browser/renderer_preferences_util.cc14
-rw-r--r--chrome/browser/ui/apps/chrome_app_delegate.cc19
-rw-r--r--chrome/browser/ui/apps/chrome_app_delegate.h6
-rw-r--r--extensions/browser/app_window/app_delegate.h2
-rw-r--r--extensions/browser/app_window/app_window.cc10
-rw-r--r--extensions/browser/app_window/app_window.h1
-rw-r--r--extensions/shell/browser/shell_app_delegate.cc15
-rw-r--r--extensions/shell/browser/shell_app_delegate.h7
11 files changed, 78 insertions, 27 deletions
diff --git a/athena/extensions/athena_app_delegate_base.cc b/athena/extensions/athena_app_delegate_base.cc
index 1254a6f..298028b 100644
--- a/athena/extensions/athena_app_delegate_base.cc
+++ b/athena/extensions/athena_app_delegate_base.cc
@@ -60,6 +60,11 @@ AthenaAppDelegateBase::~AthenaAppDelegateBase() {
AthenaEnv::Get()->RemoveTerminatingCallback(terminating_callback_);
}
+void AthenaAppDelegateBase::RenderViewCreated(
+ content::RenderViewHost* render_view_host) {
+ // No implementation necessary for athena.
+}
+
void AthenaAppDelegateBase::ResizeWebContents(
content::WebContents* web_contents,
const gfx::Size& size) {
diff --git a/athena/extensions/athena_app_delegate_base.h b/athena/extensions/athena_app_delegate_base.h
index ebf806f..c12ebf9 100644
--- a/athena/extensions/athena_app_delegate_base.h
+++ b/athena/extensions/athena_app_delegate_base.h
@@ -20,6 +20,7 @@ class AthenaAppDelegateBase : public extensions::AppDelegate {
class NewActivityContentsDelegate;
// extensions::AppDelegate:
+ void RenderViewCreated(content::RenderViewHost* render_view_host) override;
void ResizeWebContents(content::WebContents* web_contents,
const gfx::Size& size) override;
content::WebContents* OpenURLFromTab(
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc
index 3a4fed6..7f9a5b1 100644
--- a/chrome/browser/apps/app_browsertest.cc
+++ b/chrome/browser/apps/app_browsertest.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
+#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/test_switches.h"
@@ -31,6 +32,7 @@
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "content/public/browser/devtools_agent_host.h"
+#include "content/public/browser/host_zoom_map.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/test/test_utils.h"
@@ -1315,4 +1317,27 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ReinstallDataCleanup) {
}
}
+IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppsIgnoreDefaultZoom) {
+ const Extension* extension = LoadAndLaunchPlatformApp("minimal", "Launched");
+
+ // Set the browser default zoom to something other than the default (which is
+ // 0).
+ browser()->profile()->GetZoomLevelPrefs()->SetDefaultZoomLevelPref(1);
+
+ // Launch another window. This is a simple way to guarantee that any messages
+ // that would have been delivered to the app renderer and back for zoom have
+ // made it through.
+ ExtensionTestMessageListener launched_listener("Launched", false);
+ LaunchPlatformApp(extension);
+ launched_listener.WaitUntilSatisfied();
+
+ // Now check that the app window's default zoom, and actual zoom level,
+ // have not been changed from the default.
+ WebContents* web_contents = GetFirstAppWindowWebContents();
+ content::HostZoomMap* app_host_zoom_map = content::HostZoomMap::Get(
+ web_contents->GetSiteInstance());
+ EXPECT_EQ(0, app_host_zoom_map->GetDefaultZoomLevel());
+ EXPECT_EQ(0, app_host_zoom_map->GetZoomLevel(web_contents));
+}
+
} // namespace extensions
diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc
index 1009d57..49848a1 100644
--- a/chrome/browser/renderer_preferences_util.cc
+++ b/chrome/browser/renderer_preferences_util.cc
@@ -47,17 +47,21 @@ void UpdateFromSystemSettings(content::RendererPreferences* prefs,
prefs->enable_do_not_track =
pref_service->GetBoolean(prefs::kEnableDoNotTrack);
- double default_zoom_level = -1;
+ double default_zoom_level = 0;
+ bool default_zoom_level_set = false;
#if !defined(OS_ANDROID)
ui_zoom::ZoomController* zoom_controller =
ui_zoom::ZoomController::FromWebContents(web_contents);
- if (zoom_controller)
+ if (zoom_controller) {
default_zoom_level = zoom_controller->GetDefaultZoomLevel();
+ default_zoom_level_set = true;
+ }
#endif
- if (default_zoom_level < 0) {
- default_zoom_level = content::HostZoomMap::GetDefaultForBrowserContext(
- web_contents->GetBrowserContext())->GetDefaultZoomLevel();
+ if (!default_zoom_level_set) {
+ default_zoom_level =
+ content::HostZoomMap::Get(web_contents->GetSiteInstance())
+ ->GetDefaultZoomLevel();
}
prefs->default_zoom_level = default_zoom_level;
diff --git a/chrome/browser/ui/apps/chrome_app_delegate.cc b/chrome/browser/ui/apps/chrome_app_delegate.cc
index 4fbff22b..36a96d2 100644
--- a/chrome/browser/ui/apps/chrome_app_delegate.cc
+++ b/chrome/browser/ui/apps/chrome_app_delegate.cc
@@ -25,6 +25,7 @@
#include "chrome/common/extensions/chrome_extension_messages.h"
#include "components/ui/zoom/zoom_controller.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/host_zoom_map.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
@@ -185,6 +186,24 @@ void ChromeAppDelegate::InitWebContents(content::WebContents* web_contents) {
ui_zoom::ZoomController::CreateForWebContents(web_contents);
}
+void ChromeAppDelegate::RenderViewCreated(
+ content::RenderViewHost* render_view_host) {
+ if (!chrome::IsRunningInForcedAppMode()) {
+ // Due to a bug in the way apps reacted to default zoom changes, some apps
+ // can incorrectly have host level zoom settings. These aren't wanted as
+ // apps cannot be zoomed, so are removed. This should be removed if apps
+ // can be made to zoom again.
+ // See http://crbug.com/446759 for more details.
+ content::WebContents* web_contents =
+ content::WebContents::FromRenderViewHost(render_view_host);
+ DCHECK(web_contents);
+ content::HostZoomMap* zoom_map =
+ content::HostZoomMap::GetForWebContents(web_contents);
+ DCHECK(zoom_map);
+ zoom_map->SetZoomLevelForHost(web_contents->GetURL().host(), 0);
+ }
+}
+
void ChromeAppDelegate::ResizeWebContents(content::WebContents* web_contents,
const gfx::Size& size) {
::ResizeWebContents(web_contents, size);
diff --git a/chrome/browser/ui/apps/chrome_app_delegate.h b/chrome/browser/ui/apps/chrome_app_delegate.h
index e08e613..4e7c7d4 100644
--- a/chrome/browser/ui/apps/chrome_app_delegate.h
+++ b/chrome/browser/ui/apps/chrome_app_delegate.h
@@ -13,11 +13,6 @@
#include "ui/base/window_open_disposition.h"
#include "ui/gfx/geometry/rect.h"
-namespace content {
-class BrowserContext;
-class WebContents;
-}
-
class ScopedKeepAlive;
class ChromeAppDelegate : public extensions::AppDelegate,
@@ -35,6 +30,7 @@ class ChromeAppDelegate : public extensions::AppDelegate,
// extensions::AppDelegate:
void InitWebContents(content::WebContents* web_contents) override;
+ void RenderViewCreated(content::RenderViewHost* render_view_host) override;
void ResizeWebContents(content::WebContents* web_contents,
const gfx::Size& size) override;
content::WebContents* OpenURLFromTab(
diff --git a/extensions/browser/app_window/app_delegate.h b/extensions/browser/app_window/app_delegate.h
index 0e4477e..70f9f12 100644
--- a/extensions/browser/app_window/app_delegate.h
+++ b/extensions/browser/app_window/app_delegate.h
@@ -15,6 +15,7 @@ class BrowserContext;
class ColorChooser;
struct FileChooserParams;
struct OpenURLParams;
+class RenderViewHost;
class WebContents;
}
@@ -35,6 +36,7 @@ class AppDelegate {
// General initialization.
virtual void InitWebContents(content::WebContents* web_contents) = 0;
+ virtual void RenderViewCreated(content::RenderViewHost* render_view_host) = 0;
// Resizes WebContents.
virtual void ResizeWebContents(content::WebContents* web_contents,
diff --git a/extensions/browser/app_window/app_window.cc b/extensions/browser/app_window/app_window.cc
index 9ed0342..db64d5f 100644
--- a/extensions/browser/app_window/app_window.cc
+++ b/extensions/browser/app_window/app_window.cc
@@ -254,10 +254,8 @@ void AppWindow::Init(const GURL& url,
// Initialize the render interface and web contents
app_window_contents_.reset(app_window_contents);
app_window_contents_->Initialize(browser_context(), url);
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableAppsShowOnFirstPaint)) {
- content::WebContentsObserver::Observe(web_contents());
- }
+
+ content::WebContentsObserver::Observe(web_contents());
app_delegate_->InitWebContents(web_contents());
WebContentsModalDialogManager::CreateForWebContents(web_contents());
@@ -439,6 +437,10 @@ bool AppWindow::PreHandleGestureEvent(WebContents* source,
return AppWebContentsHelper::ShouldSuppressGestureEvent(event);
}
+void AppWindow::RenderViewCreated(content::RenderViewHost* render_view_host) {
+ app_delegate_->RenderViewCreated(render_view_host);
+}
+
void AppWindow::DidFirstVisuallyNonEmptyPaint() {
first_paint_complete_ = true;
if (show_on_first_paint_) {
diff --git a/extensions/browser/app_window/app_window.h b/extensions/browser/app_window/app_window.h
index 71db220..e218f81 100644
--- a/extensions/browser/app_window/app_window.h
+++ b/extensions/browser/app_window/app_window.h
@@ -409,6 +409,7 @@ class AppWindow : public content::NotificationObserver,
const blink::WebGestureEvent& event) override;
// content::WebContentsObserver implementation.
+ void RenderViewCreated(content::RenderViewHost* render_view_host) override;
void DidFirstVisuallyNonEmptyPaint() override;
// content::NotificationObserver implementation.
diff --git a/extensions/shell/browser/shell_app_delegate.cc b/extensions/shell/browser/shell_app_delegate.cc
index 36fc750..fcb46a6 100644
--- a/extensions/shell/browser/shell_app_delegate.cc
+++ b/extensions/shell/browser/shell_app_delegate.cc
@@ -17,7 +17,13 @@ ShellAppDelegate::~ShellAppDelegate() {
}
void ShellAppDelegate::InitWebContents(content::WebContents* web_contents) {
- Observe(web_contents);
+}
+
+void ShellAppDelegate::RenderViewCreated(
+ content::RenderViewHost* render_view_host) {
+ // The views implementation of AppWindow takes focus via SetInitialFocus()
+ // and views::WebView but app_shell is aura-only and must do it manually.
+ content::WebContents::FromRenderViewHost(render_view_host)->Focus();
}
void ShellAppDelegate::ResizeWebContents(content::WebContents* web_contents,
@@ -93,11 +99,4 @@ void ShellAppDelegate::SetTerminatingCallback(const base::Closure& callback) {
// manually or should it use a browser termination callback like Chrome?
}
-void ShellAppDelegate::RenderViewCreated(
- content::RenderViewHost* render_view_host) {
- // The views implementation of AppWindow takes focus via SetInitialFocus()
- // and views::WebView but app_shell is aura-only and must do it manually.
- web_contents()->Focus();
-}
-
} // namespace extensions
diff --git a/extensions/shell/browser/shell_app_delegate.h b/extensions/shell/browser/shell_app_delegate.h
index 8c9be2e..a5fff4a 100644
--- a/extensions/shell/browser/shell_app_delegate.h
+++ b/extensions/shell/browser/shell_app_delegate.h
@@ -12,14 +12,14 @@ namespace extensions {
// AppDelegate implementation for app_shell. Sets focus after the WebContents is
// created. Ignores most operations that would create a new dialog or window.
-class ShellAppDelegate : public AppDelegate,
- public content::WebContentsObserver {
+class ShellAppDelegate : public AppDelegate {
public:
ShellAppDelegate();
~ShellAppDelegate() override;
// AppDelegate overrides:
void InitWebContents(content::WebContents* web_contents) override;
+ void RenderViewCreated(content::RenderViewHost* render_view_host) override;
void ResizeWebContents(content::WebContents* web_contents,
const gfx::Size& size) override;
content::WebContents* OpenURLFromTab(
@@ -51,9 +51,6 @@ class ShellAppDelegate : public AppDelegate,
bool IsWebContentsVisible(content::WebContents* web_contents) override;
void SetTerminatingCallback(const base::Closure& callback) override;
- // content::WebContentsObserver:
- void RenderViewCreated(content::RenderViewHost* render_view_host) override;
-
private:
DISALLOW_COPY_AND_ASSIGN(ShellAppDelegate);
};