| Index: content/browser/site_per_process_browsertest.cc
|
| diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
|
| index 82125646ac4fa50758b58fafa5da3c3cb5029ab3..eefbcae6451cce2ebed2bb51431fcc3494113433 100644
|
| --- a/content/browser/site_per_process_browsertest.cc
|
| +++ b/content/browser/site_per_process_browsertest.cc
|
| @@ -61,6 +61,7 @@
|
| #include "third_party/WebKit/public/web/WebInputEvent.h"
|
| #include "third_party/WebKit/public/web/WebSandboxFlags.h"
|
| #include "ui/display/display_switches.h"
|
| +#include "ui/display/screen.h"
|
| #include "ui/events/event.h"
|
| #include "ui/events/event_utils.h"
|
| #include "ui/gfx/geometry/point.h"
|
| @@ -589,13 +590,16 @@ void SitePerProcessBrowserTest::SetUpOnMainThread() {
|
|
|
| class SitePerProcessHighDPIBrowserTest : public SitePerProcessBrowserTest {
|
| public:
|
| + const double kDeviceScaleFactor = 2.0;
|
| +
|
| SitePerProcessHighDPIBrowserTest() {}
|
|
|
| protected:
|
| void SetUpCommandLine(base::CommandLine* command_line) override {
|
| SitePerProcessBrowserTest::SetUpCommandLine(command_line);
|
| - command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor,
|
| - base::StringPrintf("2"));
|
| + command_line->AppendSwitchASCII(
|
| + switches::kForceDeviceScaleFactor,
|
| + base::StringPrintf("%f", kDeviceScaleFactor));
|
| }
|
| };
|
|
|
| @@ -613,6 +617,93 @@ class SitePerProcessIgnoreCertErrorsBrowserTest
|
| }
|
| };
|
|
|
| +double GetFrameDeviceScaleFactor(const ToRenderFrameHost& adapter) {
|
| + double device_scale_factor;
|
| + const char kGetFrameDeviceScaleFactor[] =
|
| + "window.domAutomationController.send(window.devicePixelRatio);";
|
| + EXPECT_TRUE(ExecuteScriptAndExtractDouble(adapter, kGetFrameDeviceScaleFactor,
|
| + &device_scale_factor));
|
| + return device_scale_factor;
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest,
|
| + SubframeLoadsWithCorrectDeviceScaleFactor) {
|
| + GURL main_url(embedded_test_server()->GetURL(
|
| + "a.com", "/cross_site_iframe_factory.html?a(b)"));
|
| + NavigateToURL(shell(), main_url);
|
| +
|
| + EXPECT_EQ(SitePerProcessHighDPIBrowserTest::kDeviceScaleFactor,
|
| + GetFrameDeviceScaleFactor(web_contents()));
|
| +
|
| + FrameTreeNode* root = web_contents()->GetFrameTree()->root();
|
| + FrameTreeNode* child = root->child_at(0);
|
| + EXPECT_EQ(SitePerProcessHighDPIBrowserTest::kDeviceScaleFactor,
|
| + GetFrameDeviceScaleFactor(child));
|
| +}
|
| +
|
| +class DisplayMetricsChangedObserver : public display::DisplayObserver {
|
| + public:
|
| + DisplayMetricsChangedObserver(uint32_t metrics_flags)
|
| + : metrics_flags_(metrics_flags), device_scale_factor_changed_(false) {}
|
| +
|
| + void OnDisplayAdded(const display::Display&) override {}
|
| + void OnDisplayRemoved(const display::Display&) override {}
|
| +
|
| + void OnDisplayMetricsChanged(const display::Display& display,
|
| + uint32_t changed_metrics) override {
|
| + if ((changed_metrics & metrics_flags_) == metrics_flags_) {
|
| + device_scale_factor_changed_ = true;
|
| +
|
| + if (!message_loop_runner_)
|
| + return;
|
| +
|
| + message_loop_runner_->Quit();
|
| + }
|
| + }
|
| +
|
| + void WaitForDeviceScaleFactorChanged() {
|
| + if (device_scale_factor_changed_)
|
| + return;
|
| +
|
| + message_loop_runner_ = new MessageLoopRunner;
|
| + message_loop_runner_->Run();
|
| + }
|
| +
|
| + private:
|
| + uint32_t metrics_flags_;
|
| + bool device_scale_factor_changed_;
|
| + scoped_refptr<MessageLoopRunner> message_loop_runner_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DisplayMetricsChangedObserver);
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
|
| + DeviceScaleFactorChangePropagatesToAllFrames) {
|
| + GURL main_url(embedded_test_server()->GetURL(
|
| + "a.com", "/cross_site_iframe_factory.html?a(b)"));
|
| + NavigateToURL(shell(), main_url);
|
| +
|
| + EXPECT_EQ(1.0, GetFrameDeviceScaleFactor(web_contents()));
|
| +
|
| + FrameTreeNode* root = web_contents()->GetFrameTree()->root();
|
| + FrameTreeNode* child = root->child_at(0);
|
| + EXPECT_EQ(1.0, GetFrameDeviceScaleFactor(child));
|
| +
|
| + display::Screen* screen = display::Screen::GetScreen();
|
| +
|
| + float new_device_scale_factor = 2.5f;
|
| + {
|
| + DisplayMetricsChangedObserver observer(
|
| + display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR);
|
| + screen->AddObserver(&observer);
|
| + screen->SetDeviceScaleFactorForTest(new_device_scale_factor);
|
| + observer.WaitForDeviceScaleFactorChanged();
|
| + screen->RemoveObserver(&observer);
|
| + }
|
| + EXPECT_EQ(new_device_scale_factor, GetFrameDeviceScaleFactor(web_contents()));
|
| + EXPECT_EQ(new_device_scale_factor, GetFrameDeviceScaleFactor(child));
|
| +}
|
| +
|
| // Ensure that navigating subframes in --site-per-process mode works and the
|
| // correct documents are committed.
|
| #if defined(OS_WIN)
|
|
|