| Index: chrome/browser/ui/zoom/zoom_controller_browsertest.cc
|
| diff --git a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
|
| index d0d8ea33a8c492f3e1605ef478a76dedcdfd71b9..7ef8d9b8e39bd0eae4b6f01a18ddf8d8572204ab 100644
|
| --- a/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
|
| +++ b/chrome/browser/ui/zoom/zoom_controller_browsertest.cc
|
| @@ -12,6 +12,7 @@
|
| #include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/browser/ui/webui/signin/login_ui_test_utils.h"
|
| +#include "chrome/browser/ui/zoom/chrome_zoom_level_otr_delegate.h"
|
| #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| @@ -22,6 +23,7 @@
|
| #include "content/public/browser/navigation_entry.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| +#include "content/public/browser/storage_partition.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/page_type.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| @@ -70,6 +72,15 @@ class ZoomControllerBrowserTest : public InProcessBrowserTest {
|
| ZoomControllerBrowserTest() {}
|
| ~ZoomControllerBrowserTest() override {}
|
|
|
| + void SetUpOnMainThread() override {
|
| + // These tests assume we are per-origin by default.
|
| + content::WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller =
|
| + ZoomController::FromWebContents(web_contents);
|
| + ASSERT_EQ(ZoomController::ZOOM_MODE_DEFAULT, zoom_controller->zoom_mode());
|
| + }
|
| +
|
| void TestResetOnNavigation(ZoomController::ZoomMode zoom_mode) {
|
| DCHECK(zoom_mode == ZoomController::ZOOM_MODE_ISOLATED ||
|
| zoom_mode == ZoomController::ZOOM_MODE_MANUAL);
|
| @@ -329,3 +340,178 @@ IN_PROC_BROWSER_TEST_F(ZoomControllerBrowserTest,
|
| zoom_change_watcher.Wait();
|
| }
|
| #endif // !defined(OS_CHROMEOS)
|
| +
|
| +class ZoomControllerPerTabBrowserTest : public ZoomControllerBrowserTest {
|
| + public:
|
| + void SetUpOnMainThread() override {
|
| + // These tests assume we are per-tab by default.
|
| + ChromeZoomLevelPrefs* zoom_prefs =
|
| + browser()->profile()->GetZoomLevelPrefs();
|
| + ASSERT_TRUE(zoom_prefs);
|
| + zoom_prefs->SetZoomScopeIsPerOriginPref(false);
|
| +
|
| + content::WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller =
|
| + ZoomController::FromWebContents(web_contents);
|
| + // Since this zoom controller was initialized before SetUpOnMainThread()
|
| + // was called, we need to verify that this zoom controller's mode was
|
| + // updated when we set the zoom scope preference.
|
| + ASSERT_EQ(ZoomController::ZOOM_MODE_ISOLATED, zoom_controller->zoom_mode());
|
| + }
|
| +}; // ZoomControllerPerTabBrowserTest
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest, IsolatedZoom) {
|
| + content::WebContents* web_contents1 =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller1 =
|
| + ZoomController::FromWebContents(web_contents1);
|
| + double old_zoom_level = zoom_controller1->GetZoomLevel();
|
| +
|
| + double new_zoom_level1 = old_zoom_level + 0.5;
|
| + ZoomController::ZoomChangedEventData zoom_change_data1(
|
| + web_contents1, old_zoom_level, new_zoom_level1,
|
| + ZoomController::ZOOM_MODE_ISOLATED, true);
|
| + ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
|
| + zoom_controller1->SetZoomLevel(new_zoom_level1);
|
| + zoom_change_watcher1.Wait();
|
| +
|
| + // The new tab should start with the default zoom, and not be affected by
|
| + // the zoom level set in the other tab.
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), GURL("about:blank"), WindowOpenDisposition::NEW_FOREGROUND_TAB,
|
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| + content::WebContents* web_contents2 =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller2 =
|
| + ZoomController::FromWebContents(web_contents2);
|
| + EXPECT_TRUE(zoom_controller2->IsAtDefaultZoom());
|
| +
|
| + double new_zoom_level2 = old_zoom_level + 1.0;
|
| + ZoomController::ZoomChangedEventData zoom_change_data2(
|
| + web_contents2, old_zoom_level, new_zoom_level2,
|
| + ZoomController::ZOOM_MODE_ISOLATED, true);
|
| + ZoomChangedWatcher zoom_change_watcher2(web_contents2, zoom_change_data2);
|
| + zoom_controller2->SetZoomLevel(new_zoom_level2);
|
| + zoom_change_watcher2.Wait();
|
| +
|
| + // Now when we zoom the second tab, the first should not be affected.
|
| + EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level1,
|
| + zoom_controller1->GetZoomLevel()));
|
| +}
|
| +
|
| +// Since we are zooming on a per-tab basis, the navigation of a tab does not
|
| +// reset the zoom level.
|
| +IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
|
| + NavigationPreservesZoom) {
|
| + ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
|
| + content::WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller =
|
| + ZoomController::FromWebContents(web_contents);
|
| +
|
| + double old_zoom_level = zoom_controller->GetZoomLevel();
|
| + double new_zoom_level = old_zoom_level + 0.5;
|
| + ZoomController::ZoomChangedEventData zoom_change_data(
|
| + web_contents, old_zoom_level, new_zoom_level,
|
| + ZoomController::ZOOM_MODE_ISOLATED, true);
|
| + ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data);
|
| + zoom_controller->SetZoomLevel(new_zoom_level);
|
| + zoom_change_watcher.Wait();
|
| +
|
| + ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL));
|
| + EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level,
|
| + zoom_controller->GetZoomLevel()));
|
| +}
|
| +
|
| +// Test that duplicated tabs start with the temporary zoom level of the
|
| +// original tab.
|
| +IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
|
| + TabDuplicationPreservesZoom) {
|
| + TabStripModel* strip = browser()->tab_strip_model();
|
| + content::WebContents* web_contents1 = strip->GetActiveWebContents();
|
| + ZoomController* zoom_controller1 =
|
| + ZoomController::FromWebContents(web_contents1);
|
| +
|
| + double old_zoom_level = zoom_controller1->GetZoomLevel();
|
| + double new_zoom_level = old_zoom_level + 0.5;
|
| +
|
| + ZoomController::ZoomChangedEventData zoom_change_data1(
|
| + web_contents1, old_zoom_level, new_zoom_level,
|
| + ZoomController::ZOOM_MODE_ISOLATED, true);
|
| + ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
|
| + zoom_controller1->SetZoomLevel(new_zoom_level);
|
| + zoom_change_watcher1.Wait();
|
| +
|
| + content::WebContents* web_contents2 = chrome::DuplicateTabAt(
|
| + browser(), strip->GetIndexOfWebContents(web_contents1));
|
| + ZoomController* zoom_controller2 =
|
| + ZoomController::FromWebContents(web_contents2);
|
| +
|
| + EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level,
|
| + zoom_controller2->GetZoomLevel()));
|
| +}
|
| +
|
| +// Test that swapping the WebContents for a tab (e.g. due to prerendering)
|
| +// preserves the temporary zoom level.
|
| +IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
|
| + TabStripReplacementPreservesZoom) {
|
| + TabStripModel* strip = browser()->tab_strip_model();
|
| + content::WebContents* web_contents1 = strip->GetActiveWebContents();
|
| + ZoomController* zoom_controller1 =
|
| + ZoomController::FromWebContents(web_contents1);
|
| +
|
| + // Setup a new WebContents that will be swapped for the old one.
|
| + std::unique_ptr<content::WebContents> web_contents2(web_contents1->Clone());
|
| + ZoomController::CreateForWebContents(web_contents2.get());
|
| +
|
| + double old_zoom_level = zoom_controller1->GetZoomLevel();
|
| + double new_zoom_level = old_zoom_level + 0.5;
|
| +
|
| + ZoomController::ZoomChangedEventData zoom_change_data1(
|
| + web_contents1, old_zoom_level, new_zoom_level,
|
| + ZoomController::ZOOM_MODE_ISOLATED, true);
|
| + ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
|
| + zoom_controller1->SetZoomLevel(new_zoom_level);
|
| + zoom_change_watcher1.Wait();
|
| +
|
| + // Verify that the temporary zoom level is set on the new WebContents.
|
| + ZoomController::ZoomChangedEventData zoom_change_data2(
|
| + web_contents2.get(), new_zoom_level, new_zoom_level,
|
| + ZoomController::ZOOM_MODE_ISOLATED, false);
|
| + ZoomChangedWatcher zoom_change_watcher2(web_contents2.get(),
|
| + zoom_change_data2);
|
| + delete strip->ReplaceWebContentsAt(
|
| + strip->GetIndexOfWebContents(web_contents1), web_contents2.get());
|
| + zoom_change_watcher2.Wait();
|
| +}
|
| +
|
| +// Test that an Incognito profile inherits its parent's default zoom scope and
|
| +// that changes to the default zoom scope in the parent propogate to the child.
|
| +IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
|
| + OffTheRecordProfileDefaultZoomScope) {
|
| + Browser* incognito_browser = CreateIncognitoBrowser();
|
| + content::WebContents* web_contents =
|
| + incognito_browser->tab_strip_model()->GetActiveWebContents();
|
| + ZoomController* zoom_controller =
|
| + ZoomController::FromWebContents(web_contents);
|
| + content::BrowserContext* context = web_contents->GetBrowserContext();
|
| + ASSERT_TRUE(context->IsOffTheRecord());
|
| +
|
| + ChromeZoomLevelPrefs* parent_zoom_prefs =
|
| + browser()->profile()->GetZoomLevelPrefs();
|
| + ChromeZoomLevelOTRDelegate* child_zoom_prefs =
|
| + static_cast<ChromeZoomLevelOTRDelegate*>(
|
| + content::BrowserContext::GetDefaultStoragePartition(context)
|
| + ->GetZoomLevelDelegate());
|
| + ASSERT_TRUE(parent_zoom_prefs);
|
| + ASSERT_TRUE(child_zoom_prefs);
|
| +
|
| + EXPECT_FALSE(child_zoom_prefs->GetZoomScopeIsPerOriginPref());
|
| + EXPECT_EQ(ZoomController::ZOOM_MODE_ISOLATED, zoom_controller->zoom_mode());
|
| +
|
| + parent_zoom_prefs->SetZoomScopeIsPerOriginPref(true);
|
| +
|
| + EXPECT_TRUE(child_zoom_prefs->GetZoomScopeIsPerOriginPref());
|
| + EXPECT_EQ(ZoomController::ZOOM_MODE_DEFAULT, zoom_controller->zoom_mode());
|
| +}
|
|
|