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

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 2122023002: Cross-process frames should be notified of device scale factor changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add Mac DSF update. Created 4 years, 4 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/site_per_process_browsertest.h" 5 #include "content/browser/site_per_process_browsertest.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "content/test/content_browser_test_utils_internal.h" 54 #include "content/test/content_browser_test_utils_internal.h"
55 #include "content/test/test_frame_navigation_observer.h" 55 #include "content/test/test_frame_navigation_observer.h"
56 #include "ipc/ipc_security_test_util.h" 56 #include "ipc/ipc_security_test_util.h"
57 #include "net/dns/mock_host_resolver.h" 57 #include "net/dns/mock_host_resolver.h"
58 #include "net/test/embedded_test_server/embedded_test_server.h" 58 #include "net/test/embedded_test_server/embedded_test_server.h"
59 #include "testing/gtest/include/gtest/gtest.h" 59 #include "testing/gtest/include/gtest/gtest.h"
60 #include "third_party/WebKit/public/platform/WebInsecureRequestPolicy.h" 60 #include "third_party/WebKit/public/platform/WebInsecureRequestPolicy.h"
61 #include "third_party/WebKit/public/web/WebInputEvent.h" 61 #include "third_party/WebKit/public/web/WebInputEvent.h"
62 #include "third_party/WebKit/public/web/WebSandboxFlags.h" 62 #include "third_party/WebKit/public/web/WebSandboxFlags.h"
63 #include "ui/display/display_switches.h" 63 #include "ui/display/display_switches.h"
64 #include "ui/display/screen.h"
64 #include "ui/events/event.h" 65 #include "ui/events/event.h"
65 #include "ui/events/event_utils.h" 66 #include "ui/events/event_utils.h"
66 #include "ui/gfx/geometry/point.h" 67 #include "ui/gfx/geometry/point.h"
67 68
68 #if defined(USE_AURA) 69 #if defined(USE_AURA)
69 #include "content/browser/renderer_host/render_widget_host_view_aura.h" 70 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
70 #endif 71 #endif
71 72
72 #if defined(OS_MACOSX) 73 #if defined(OS_MACOSX)
73 #include "ui/base/test/scoped_preferred_scroller_style_mac.h" 74 #include "ui/base/test/scoped_preferred_scroller_style_mac.h"
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 SetupCrossSiteRedirector(embedded_test_server()); 583 SetupCrossSiteRedirector(embedded_test_server());
583 } 584 }
584 585
585 // 586 //
586 // SitePerProcessHighDPIBrowserTest 587 // SitePerProcessHighDPIBrowserTest
587 // 588 //
588 589
589 590
590 class SitePerProcessHighDPIBrowserTest : public SitePerProcessBrowserTest { 591 class SitePerProcessHighDPIBrowserTest : public SitePerProcessBrowserTest {
591 public: 592 public:
593 const double kDeviceScaleFactor = 2.0;
594
592 SitePerProcessHighDPIBrowserTest() {} 595 SitePerProcessHighDPIBrowserTest() {}
593 596
594 protected: 597 protected:
595 void SetUpCommandLine(base::CommandLine* command_line) override { 598 void SetUpCommandLine(base::CommandLine* command_line) override {
596 SitePerProcessBrowserTest::SetUpCommandLine(command_line); 599 SitePerProcessBrowserTest::SetUpCommandLine(command_line);
597 command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor, 600 command_line->AppendSwitchASCII(
598 base::StringPrintf("2")); 601 switches::kForceDeviceScaleFactor,
602 base::StringPrintf("%f", kDeviceScaleFactor));
599 } 603 }
600 }; 604 };
601 605
602 // SitePerProcessIgnoreCertErrorsBrowserTest 606 // SitePerProcessIgnoreCertErrorsBrowserTest
603 607
604 class SitePerProcessIgnoreCertErrorsBrowserTest 608 class SitePerProcessIgnoreCertErrorsBrowserTest
605 : public SitePerProcessBrowserTest { 609 : public SitePerProcessBrowserTest {
606 public: 610 public:
607 SitePerProcessIgnoreCertErrorsBrowserTest() {} 611 SitePerProcessIgnoreCertErrorsBrowserTest() {}
608 612
609 protected: 613 protected:
610 void SetUpCommandLine(base::CommandLine* command_line) override { 614 void SetUpCommandLine(base::CommandLine* command_line) override {
611 SitePerProcessBrowserTest::SetUpCommandLine(command_line); 615 SitePerProcessBrowserTest::SetUpCommandLine(command_line);
612 command_line->AppendSwitch(switches::kIgnoreCertificateErrors); 616 command_line->AppendSwitch(switches::kIgnoreCertificateErrors);
613 } 617 }
614 }; 618 };
615 619
620 double GetFrameDeviceScaleFactor(const ToRenderFrameHost& adapter) {
621 double device_scale_factor;
622 const char kGetFrameDeviceScaleFactor[] =
623 "window.domAutomationController.send(window.devicePixelRatio);";
624 EXPECT_TRUE(ExecuteScriptAndExtractDouble(adapter, kGetFrameDeviceScaleFactor,
625 &device_scale_factor));
626 return device_scale_factor;
627 }
628
629 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest,
630 SubframeLoadsWithCorrectDeviceScaleFactor) {
631 GURL main_url(embedded_test_server()->GetURL(
632 "a.com", "/cross_site_iframe_factory.html?a(b)"));
633 NavigateToURL(shell(), main_url);
634
635 EXPECT_EQ(SitePerProcessHighDPIBrowserTest::kDeviceScaleFactor,
636 GetFrameDeviceScaleFactor(web_contents()));
637
638 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
639 FrameTreeNode* child = root->child_at(0);
640 EXPECT_EQ(SitePerProcessHighDPIBrowserTest::kDeviceScaleFactor,
641 GetFrameDeviceScaleFactor(child));
642 }
643
644 class DisplayMetricsChangedObserver : public display::DisplayObserver {
645 public:
646 DisplayMetricsChangedObserver(uint32_t metrics_flags)
647 : metrics_flags_(metrics_flags), device_scale_factor_changed_(false) {}
648
649 void OnDisplayAdded(const display::Display&) override {}
650 void OnDisplayRemoved(const display::Display&) override {}
651
652 void OnDisplayMetricsChanged(const display::Display& display,
653 uint32_t changed_metrics) override {
654 if ((changed_metrics & metrics_flags_) == metrics_flags_) {
655 device_scale_factor_changed_ = true;
656
657 if (!message_loop_runner_)
658 return;
659
660 message_loop_runner_->Quit();
661 }
662 }
663
664 void WaitForDeviceScaleFactorChanged() {
665 if (device_scale_factor_changed_)
666 return;
667
668 message_loop_runner_ = new MessageLoopRunner;
669 message_loop_runner_->Run();
670 }
671
672 private:
673 uint32_t metrics_flags_;
674 bool device_scale_factor_changed_;
675 scoped_refptr<MessageLoopRunner> message_loop_runner_;
676
677 DISALLOW_COPY_AND_ASSIGN(DisplayMetricsChangedObserver);
678 };
679
680 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
681 DeviceScaleFactorChangePropagatesToAllFrames) {
682 GURL main_url(embedded_test_server()->GetURL(
683 "a.com", "/cross_site_iframe_factory.html?a(b)"));
684 NavigateToURL(shell(), main_url);
685
686 EXPECT_EQ(1.0, GetFrameDeviceScaleFactor(web_contents()));
687
688 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
689 FrameTreeNode* child = root->child_at(0);
690 EXPECT_EQ(1.0, GetFrameDeviceScaleFactor(child));
691
692 display::Screen* screen = display::Screen::GetScreen();
693
694 float new_device_scale_factor = 2.5f;
695 {
696 DisplayMetricsChangedObserver observer(
697 display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR);
698 screen->AddObserver(&observer);
699 screen->SetDeviceScaleFactorForTest(new_device_scale_factor);
700 observer.WaitForDeviceScaleFactorChanged();
701 screen->RemoveObserver(&observer);
702 }
703 EXPECT_EQ(new_device_scale_factor, GetFrameDeviceScaleFactor(web_contents()));
704 EXPECT_EQ(new_device_scale_factor, GetFrameDeviceScaleFactor(child));
705 }
706
616 // Ensure that navigating subframes in --site-per-process mode works and the 707 // Ensure that navigating subframes in --site-per-process mode works and the
617 // correct documents are committed. 708 // correct documents are committed.
618 #if defined(OS_WIN) 709 #if defined(OS_WIN)
619 // This test is flaky on Windows, see https://crbug.com/629419. 710 // This test is flaky on Windows, see https://crbug.com/629419.
620 #define MAYBE_CrossSiteIframe DISABLED_CrossSiteIframe 711 #define MAYBE_CrossSiteIframe DISABLED_CrossSiteIframe
621 #else 712 #else
622 #define MAYBE_CrossSiteIframe CrossSiteIframe 713 #define MAYBE_CrossSiteIframe CrossSiteIframe
623 #endif 714 #endif
624 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CrossSiteIframe) { 715 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CrossSiteIframe) {
625 GURL main_url(embedded_test_server()->GetURL( 716 GURL main_url(embedded_test_server()->GetURL(
(...skipping 7049 matching lines...) Expand 10 before | Expand all | Expand 10 after
7675 root_frame_monitor.events_received()[5]); 7766 root_frame_monitor.events_received()[5]);
7676 EXPECT_EQ(blink::WebInputEvent::GestureScrollEnd, 7767 EXPECT_EQ(blink::WebInputEvent::GestureScrollEnd,
7677 root_frame_monitor.events_received()[6]); 7768 root_frame_monitor.events_received()[6]);
7678 7769
7679 // Verify child-RWHI gets no events. 7770 // Verify child-RWHI gets no events.
7680 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); 7771 EXPECT_FALSE(child_frame_monitor.EventWasReceived());
7681 } 7772 }
7682 #endif 7773 #endif
7683 7774
7684 } // namespace content 7775 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698