Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4327)

Unified Diff: chrome/browser/ui/zoom/zoom_controller_browsertest.cc

Issue 2630583002: Add setting to isolate zoom changes by default. (Closed)
Patch Set: ... and tell closure_compiler. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
+}
« no previous file with comments | « chrome/browser/ui/zoom/chrome_zoom_prefs_helper.cc ('k') | chrome/browser/ui/zoom/zoom_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698