summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwjmaclean <wjmaclean@chromium.org>2015-01-28 12:42:11 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-28 20:43:30 +0000
commit96fc2e9e38a10f2bb9f12f26ac6842db71061e09 (patch)
tree968d3bda56db4d826501570c0001069773527396
parent5b6eddeb5ee523ab4299ab8e83f6d42c19ad4b2f (diff)
downloadchromium_src-96fc2e9e38a10f2bb9f12f26ac6842db71061e09.zip
chromium_src-96fc2e9e38a10f2bb9f12f26ac6842db71061e09.tar.gz
chromium_src-96fc2e9e38a10f2bb9f12f26ac6842db71061e09.tar.bz2
Reset manual zoom mode on navigation.
When an app/extension places a ZoomController in manual mode, it is reasonable to expect that navigating the main frame should reset that mode, since the app/extension will be reloaded in the process. The root cause of this bug was the sending of a ZoomChangeEvent that contained stale information (the old, manually managed, zoom level), which in turn caused the zoom bubble to be displayed. BUG=450909 Review URL: https://codereview.chromium.org/884063004 Cr-Commit-Position: refs/heads/master@{#313576}
-rw-r--r--chrome/browser/ui/zoom/zoom_controller_browsertest.cc53
-rw-r--r--components/ui/zoom/zoom_controller.cc3
2 files changed, 36 insertions, 20 deletions
diff --git a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
index 43840d5..378739d 100644
--- a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
+++ b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
@@ -64,7 +64,35 @@ class ZoomChangedWatcher : public ZoomObserver {
DISALLOW_COPY_AND_ASSIGN(ZoomChangedWatcher);
};
-typedef InProcessBrowserTest ZoomControllerBrowserTest;
+class ZoomControllerBrowserTest : public InProcessBrowserTest {
+ public:
+ ZoomControllerBrowserTest() {}
+ ~ZoomControllerBrowserTest() override {}
+
+ void TestResetOnNavigation(ZoomController::ZoomMode zoom_mode) {
+ DCHECK(zoom_mode == ZoomController::ZOOM_MODE_ISOLATED ||
+ zoom_mode == ZoomController::ZOOM_MODE_MANUAL);
+ content::WebContents* web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+ browser(), GURL("about:blank"), 1);
+ ZoomController* zoom_controller =
+ ZoomController::FromWebContents(web_contents);
+ double zoom_level = zoom_controller->GetDefaultZoomLevel();
+ zoom_controller->SetZoomMode(zoom_mode);
+
+ // When the navigation occurs, the zoom_mode will be reset to
+ // ZOOM_MODE_DEFAULT, and this will be reflected in the event that
+ // is generated.
+ ZoomController::ZoomChangedEventData zoom_change_data(
+ web_contents, zoom_level, zoom_level, ZoomController::ZOOM_MODE_DEFAULT,
+ false);
+ ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data);
+
+ ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL));
+ zoom_change_watcher.Wait();
+ }
+}; // ZoomControllerBrowserTest
#if defined(OS_ANDROID)
#define MAYBE_CrashedTabsDoNotChangeZoom DISABLED_CrashedTabsDoNotChangeZoom
@@ -164,25 +192,12 @@ IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest, Observe) {
}
IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest, PerTabModeResetSendsEvent) {
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
- ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
- browser(), GURL("about:blank"), 1);
- ZoomController* zoom_controller =
- ZoomController::FromWebContents(web_contents);
- double zoom_level = zoom_controller->GetDefaultZoomLevel();
- zoom_controller->SetZoomMode(ZoomController::ZOOM_MODE_ISOLATED);
-
- // When the navigation occurs, the ZOOM_MODE_ISOLATED will be reset to
- // ZOOM_MODE_DEFAULT, and this will be reflected in the event that
- // is generated.
- ZoomController::ZoomChangedEventData zoom_change_data(
- web_contents, zoom_level, zoom_level, ZoomController::ZOOM_MODE_DEFAULT,
- false);
- ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data);
+ TestResetOnNavigation(ZoomController::ZOOM_MODE_ISOLATED);
+}
- ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL));
- zoom_change_watcher.Wait();
+// Regression test: crbug.com/450909.
+IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest, NavigationResetsManualMode) {
+ TestResetOnNavigation(ZoomController::ZOOM_MODE_MANUAL);
}
#if !defined(OS_CHROMEOS)
diff --git a/components/ui/zoom/zoom_controller.cc b/components/ui/zoom/zoom_controller.cc
index e5a1bc5..1a68fe4 100644
--- a/components/ui/zoom/zoom_controller.cc
+++ b/components/ui/zoom/zoom_controller.cc
@@ -236,13 +236,14 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
}
void ZoomController::ResetZoomModeOnNavigationIfNeeded(const GURL& url) {
- if (zoom_mode_ != ZOOM_MODE_ISOLATED)
+ if (zoom_mode_ != ZOOM_MODE_ISOLATED && zoom_mode_ != ZOOM_MODE_MANUAL)
return;
int render_process_id = web_contents()->GetRenderProcessHost()->GetID();
int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID();
content::HostZoomMap* zoom_map =
content::HostZoomMap::GetForWebContents(web_contents());
+ zoom_level_ = zoom_map->GetDefaultZoomLevel();
double old_zoom_level = zoom_map->GetZoomLevel(web_contents());
double new_zoom_level = zoom_map->GetZoomLevelForHostAndScheme(
url.scheme(), net::GetHostOrSpecFromURL(url));