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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/zoom/zoom_controller.h" 5 #include "components/zoom/zoom_controller.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/process/kill.h" 8 #include "base/process/kill.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_commands.h" 12 #include "chrome/browser/ui/browser_commands.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/browser/ui/webui/signin/login_ui_test_utils.h" 14 #include "chrome/browser/ui/webui/signin/login_ui_test_utils.h"
15 #include "chrome/browser/ui/zoom/chrome_zoom_level_otr_delegate.h"
15 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" 16 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
16 #include "chrome/common/url_constants.h" 17 #include "chrome/common/url_constants.h"
17 #include "chrome/test/base/in_process_browser_test.h" 18 #include "chrome/test/base/in_process_browser_test.h"
18 #include "chrome/test/base/ui_test_utils.h" 19 #include "chrome/test/base/ui_test_utils.h"
19 #include "components/prefs/pref_service.h" 20 #include "components/prefs/pref_service.h"
20 #include "components/signin/core/common/profile_management_switches.h" 21 #include "components/signin/core/common/profile_management_switches.h"
21 #include "content/public/browser/host_zoom_map.h" 22 #include "content/public/browser/host_zoom_map.h"
22 #include "content/public/browser/navigation_entry.h" 23 #include "content/public/browser/navigation_entry.h"
23 #include "content/public/browser/render_process_host.h" 24 #include "content/public/browser/render_process_host.h"
24 #include "content/public/browser/render_view_host.h" 25 #include "content/public/browser/render_view_host.h"
26 #include "content/public/browser/storage_partition.h"
25 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
26 #include "content/public/common/page_type.h" 28 #include "content/public/common/page_type.h"
27 #include "content/public/test/browser_test_utils.h" 29 #include "content/public/test/browser_test_utils.h"
28 #include "testing/gmock/include/gmock/gmock.h" 30 #include "testing/gmock/include/gmock/gmock.h"
29 31
30 using zoom::ZoomController; 32 using zoom::ZoomController;
31 using zoom::ZoomObserver; 33 using zoom::ZoomObserver;
32 34
33 bool operator==(const ZoomController::ZoomChangedEventData& lhs, 35 bool operator==(const ZoomController::ZoomChangedEventData& lhs,
34 const ZoomController::ZoomChangedEventData& rhs) { 36 const ZoomController::ZoomChangedEventData& rhs) {
(...skipping 28 matching lines...) Expand all
63 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; 65 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
64 66
65 DISALLOW_COPY_AND_ASSIGN(ZoomChangedWatcher); 67 DISALLOW_COPY_AND_ASSIGN(ZoomChangedWatcher);
66 }; 68 };
67 69
68 class ZoomControllerBrowserTest : public InProcessBrowserTest { 70 class ZoomControllerBrowserTest : public InProcessBrowserTest {
69 public: 71 public:
70 ZoomControllerBrowserTest() {} 72 ZoomControllerBrowserTest() {}
71 ~ZoomControllerBrowserTest() override {} 73 ~ZoomControllerBrowserTest() override {}
72 74
75 void SetUpOnMainThread() override {
76 // These tests assume we are per-origin by default.
77 content::WebContents* web_contents =
78 browser()->tab_strip_model()->GetActiveWebContents();
79 ZoomController* zoom_controller =
80 ZoomController::FromWebContents(web_contents);
81 ASSERT_EQ(ZoomController::ZOOM_MODE_DEFAULT, zoom_controller->zoom_mode());
82 }
83
73 void TestResetOnNavigation(ZoomController::ZoomMode zoom_mode) { 84 void TestResetOnNavigation(ZoomController::ZoomMode zoom_mode) {
74 DCHECK(zoom_mode == ZoomController::ZOOM_MODE_ISOLATED || 85 DCHECK(zoom_mode == ZoomController::ZOOM_MODE_ISOLATED ||
75 zoom_mode == ZoomController::ZOOM_MODE_MANUAL); 86 zoom_mode == ZoomController::ZOOM_MODE_MANUAL);
76 content::WebContents* web_contents = 87 content::WebContents* web_contents =
77 browser()->tab_strip_model()->GetActiveWebContents(); 88 browser()->tab_strip_model()->GetActiveWebContents();
78 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( 89 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
79 browser(), GURL("about:blank"), 1); 90 browser(), GURL("about:blank"), 1);
80 ZoomController* zoom_controller = 91 ZoomController* zoom_controller =
81 ZoomController::FromWebContents(web_contents); 92 ZoomController::FromWebContents(web_contents);
82 double zoom_level = zoom_controller->GetDefaultZoomLevel(); 93 double zoom_level = zoom_controller->GetDefaultZoomLevel();
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 web_contents, 333 web_contents,
323 old_zoom_level, 334 old_zoom_level,
324 new_zoom_level, 335 new_zoom_level,
325 ZoomController::ZOOM_MODE_DEFAULT, 336 ZoomController::ZOOM_MODE_DEFAULT,
326 true); // We have a non-empty host, so this will be 'true'. 337 true); // We have a non-empty host, so this will be 'true'.
327 ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data); 338 ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data);
328 zoom_controller->SetZoomLevel(new_zoom_level); 339 zoom_controller->SetZoomLevel(new_zoom_level);
329 zoom_change_watcher.Wait(); 340 zoom_change_watcher.Wait();
330 } 341 }
331 #endif // !defined(OS_CHROMEOS) 342 #endif // !defined(OS_CHROMEOS)
343
344 class ZoomControllerPerTabBrowserTest : public ZoomControllerBrowserTest {
345 public:
346 void SetUpOnMainThread() override {
347 // These tests assume we are per-tab by default.
348 ChromeZoomLevelPrefs* zoom_prefs =
349 browser()->profile()->GetZoomLevelPrefs();
350 ASSERT_TRUE(zoom_prefs);
351 zoom_prefs->SetZoomScopeIsPerOriginPref(false);
352
353 content::WebContents* web_contents =
354 browser()->tab_strip_model()->GetActiveWebContents();
355 ZoomController* zoom_controller =
356 ZoomController::FromWebContents(web_contents);
357 // Since this zoom controller was initialized before SetUpOnMainThread()
358 // was called, we need to verify that this zoom controller's mode was
359 // updated when we set the zoom scope preference.
360 ASSERT_EQ(ZoomController::ZOOM_MODE_ISOLATED, zoom_controller->zoom_mode());
361 }
362 }; // ZoomControllerPerTabBrowserTest
363
364 IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest, IsolatedZoom) {
365 content::WebContents* web_contents1 =
366 browser()->tab_strip_model()->GetActiveWebContents();
367 ZoomController* zoom_controller1 =
368 ZoomController::FromWebContents(web_contents1);
369 double old_zoom_level = zoom_controller1->GetZoomLevel();
370
371 double new_zoom_level1 = old_zoom_level + 0.5;
372 ZoomController::ZoomChangedEventData zoom_change_data1(
373 web_contents1, old_zoom_level, new_zoom_level1,
374 ZoomController::ZOOM_MODE_ISOLATED, true);
375 ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
376 zoom_controller1->SetZoomLevel(new_zoom_level1);
377 zoom_change_watcher1.Wait();
378
379 // The new tab should start with the default zoom, and not be affected by
380 // the zoom level set in the other tab.
381 ui_test_utils::NavigateToURLWithDisposition(
382 browser(), GURL("about:blank"), WindowOpenDisposition::NEW_FOREGROUND_TAB,
383 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
384 content::WebContents* web_contents2 =
385 browser()->tab_strip_model()->GetActiveWebContents();
386 ZoomController* zoom_controller2 =
387 ZoomController::FromWebContents(web_contents2);
388 EXPECT_TRUE(zoom_controller2->IsAtDefaultZoom());
389
390 double new_zoom_level2 = old_zoom_level + 1.0;
391 ZoomController::ZoomChangedEventData zoom_change_data2(
392 web_contents2, old_zoom_level, new_zoom_level2,
393 ZoomController::ZOOM_MODE_ISOLATED, true);
394 ZoomChangedWatcher zoom_change_watcher2(web_contents2, zoom_change_data2);
395 zoom_controller2->SetZoomLevel(new_zoom_level2);
396 zoom_change_watcher2.Wait();
397
398 // Now when we zoom the second tab, the first should not be affected.
399 EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level1,
400 zoom_controller1->GetZoomLevel()));
401 }
402
403 // Since we are zooming on a per-tab basis, the navigation of a tab does not
404 // reset the zoom level.
405 IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
406 NavigationPreservesZoom) {
407 ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
408 content::WebContents* web_contents =
409 browser()->tab_strip_model()->GetActiveWebContents();
410 ZoomController* zoom_controller =
411 ZoomController::FromWebContents(web_contents);
412
413 double old_zoom_level = zoom_controller->GetZoomLevel();
414 double new_zoom_level = old_zoom_level + 0.5;
415 ZoomController::ZoomChangedEventData zoom_change_data(
416 web_contents, old_zoom_level, new_zoom_level,
417 ZoomController::ZOOM_MODE_ISOLATED, true);
418 ZoomChangedWatcher zoom_change_watcher(web_contents, zoom_change_data);
419 zoom_controller->SetZoomLevel(new_zoom_level);
420 zoom_change_watcher.Wait();
421
422 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL));
423 EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level,
424 zoom_controller->GetZoomLevel()));
425 }
426
427 // Test that duplicated tabs start with the temporary zoom level of the
428 // original tab.
429 IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
430 TabDuplicationPreservesZoom) {
431 TabStripModel* strip = browser()->tab_strip_model();
432 content::WebContents* web_contents1 = strip->GetActiveWebContents();
433 ZoomController* zoom_controller1 =
434 ZoomController::FromWebContents(web_contents1);
435
436 double old_zoom_level = zoom_controller1->GetZoomLevel();
437 double new_zoom_level = old_zoom_level + 0.5;
438
439 ZoomController::ZoomChangedEventData zoom_change_data1(
440 web_contents1, old_zoom_level, new_zoom_level,
441 ZoomController::ZOOM_MODE_ISOLATED, true);
442 ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
443 zoom_controller1->SetZoomLevel(new_zoom_level);
444 zoom_change_watcher1.Wait();
445
446 content::WebContents* web_contents2 = chrome::DuplicateTabAt(
447 browser(), strip->GetIndexOfWebContents(web_contents1));
448 ZoomController* zoom_controller2 =
449 ZoomController::FromWebContents(web_contents2);
450
451 EXPECT_TRUE(content::ZoomValuesEqual(new_zoom_level,
452 zoom_controller2->GetZoomLevel()));
453 }
454
455 // Test that swapping the WebContents for a tab (e.g. due to prerendering)
456 // preserves the temporary zoom level.
457 IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
458 TabStripReplacementPreservesZoom) {
459 TabStripModel* strip = browser()->tab_strip_model();
460 content::WebContents* web_contents1 = strip->GetActiveWebContents();
461 ZoomController* zoom_controller1 =
462 ZoomController::FromWebContents(web_contents1);
463
464 // Setup a new WebContents that will be swapped for the old one.
465 std::unique_ptr<content::WebContents> web_contents2(web_contents1->Clone());
466 ZoomController::CreateForWebContents(web_contents2.get());
467
468 double old_zoom_level = zoom_controller1->GetZoomLevel();
469 double new_zoom_level = old_zoom_level + 0.5;
470
471 ZoomController::ZoomChangedEventData zoom_change_data1(
472 web_contents1, old_zoom_level, new_zoom_level,
473 ZoomController::ZOOM_MODE_ISOLATED, true);
474 ZoomChangedWatcher zoom_change_watcher1(web_contents1, zoom_change_data1);
475 zoom_controller1->SetZoomLevel(new_zoom_level);
476 zoom_change_watcher1.Wait();
477
478 // Verify that the temporary zoom level is set on the new WebContents.
479 ZoomController::ZoomChangedEventData zoom_change_data2(
480 web_contents2.get(), new_zoom_level, new_zoom_level,
481 ZoomController::ZOOM_MODE_ISOLATED, false);
482 ZoomChangedWatcher zoom_change_watcher2(web_contents2.get(),
483 zoom_change_data2);
484 delete strip->ReplaceWebContentsAt(
485 strip->GetIndexOfWebContents(web_contents1), web_contents2.get());
486 zoom_change_watcher2.Wait();
487 }
488
489 // Test that an Incognito profile inherits its parent's default zoom scope and
490 // that changes to the default zoom scope in the parent propogate to the child.
491 IN_PROC_BROWSER_TEST_F(ZoomControllerPerTabBrowserTest,
492 OffTheRecordProfileDefaultZoomScope) {
493 Browser* incognito_browser = CreateIncognitoBrowser();
494 content::WebContents* web_contents =
495 incognito_browser->tab_strip_model()->GetActiveWebContents();
496 ZoomController* zoom_controller =
497 ZoomController::FromWebContents(web_contents);
498 content::BrowserContext* context = web_contents->GetBrowserContext();
499 ASSERT_TRUE(context->IsOffTheRecord());
500
501 ChromeZoomLevelPrefs* parent_zoom_prefs =
502 browser()->profile()->GetZoomLevelPrefs();
503 ChromeZoomLevelOTRDelegate* child_zoom_prefs =
504 static_cast<ChromeZoomLevelOTRDelegate*>(
505 content::BrowserContext::GetDefaultStoragePartition(context)
506 ->GetZoomLevelDelegate());
507 ASSERT_TRUE(parent_zoom_prefs);
508 ASSERT_TRUE(child_zoom_prefs);
509
510 EXPECT_FALSE(child_zoom_prefs->GetZoomScopeIsPerOriginPref());
511 EXPECT_EQ(ZoomController::ZOOM_MODE_ISOLATED, zoom_controller->zoom_mode());
512
513 parent_zoom_prefs->SetZoomScopeIsPerOriginPref(true);
514
515 EXPECT_TRUE(child_zoom_prefs->GetZoomScopeIsPerOriginPref());
516 EXPECT_EQ(ZoomController::ZOOM_MODE_DEFAULT, zoom_controller->zoom_mode());
517 }
OLDNEW
« 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