diff options
author | wjmaclean <wjmaclean@chromium.org> | 2015-01-28 12:42:11 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-28 20:43:30 +0000 |
commit | 96fc2e9e38a10f2bb9f12f26ac6842db71061e09 (patch) | |
tree | 968d3bda56db4d826501570c0001069773527396 | |
parent | 5b6eddeb5ee523ab4299ab8e83f6d42c19ad4b2f (diff) | |
download | chromium_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.cc | 53 | ||||
-rw-r--r-- | components/ui/zoom/zoom_controller.cc | 3 |
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)); |