From 5bac1a0e1c79300c74a90a5deaf1faf752553671 Mon Sep 17 00:00:00 2001 From: Peter Kasting Date: Mon, 18 May 2020 19:59:01 +0000 Subject: [PATCH] Auto-update the screen instance from various Screen subclasses. This includes: * DesktopScreenWin * DesktopScreenX11 * ScreenOzone * TestDesktopScreenX11 * TestScreenWin Ideally, eventually all subclasses can do this, but this is a start. Bug: none Change-Id: I6b74298a5d4ab9bdefd592d984d29756fd111906 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2126255 Commit-Queue: Peter Kasting Reviewed-by: Sadrul Chowdhury Reviewed-by: Mike West Reviewed-by: Devlin Reviewed-by: Robert Liao Cr-Commit-Position: refs/heads/master@{#769800} --- chrome/browser/ui/views/test/view_event_test_base.cc | 7 +------ content/shell/browser/shell_platform_data_aura.cc | 12 ++---------- .../shell/browser/shell_desktop_controller_aura.cc | 6 +++++- ui/aura/screen_ozone.cc | 5 +++-- ui/aura/screen_ozone.h | 1 + ui/display/win/screen_win_unittest.cc | 7 +++---- ui/views/examples/examples_main_proc.cc | 1 - ui/views/widget/desktop_aura/desktop_screen.cc | 2 +- ui/views/widget/desktop_aura/desktop_screen_win.cc | 4 +++- ui/views/widget/desktop_aura/desktop_screen_win.h | 2 ++ ui/views/widget/desktop_aura/desktop_screen_x11.cc | 4 +++- ui/views/widget/desktop_aura/desktop_screen_x11.h | 1 + .../views_content_client_main_parts_desktop_aura.cc | 2 +- 13 files changed, 26 insertions(+), 28 deletions(-) diff --git a/chrome/browser/ui/views/test/view_event_test_base.cc b/chrome/browser/ui/views/test/view_event_test_base.cc index 540c8fa1f86216..30855179875e2d 100644 --- a/chrome/browser/ui/views/test/view_event_test_base.cc +++ b/chrome/browser/ui/views/test/view_event_test_base.cc @@ -95,19 +95,14 @@ ViewEventTestBase::ViewEventTestBase() { // tests. DCHECK(!display::Screen::GetScreen()); #if defined(USE_X11) - display::Screen::SetScreenInstance( - views::test::TestDesktopScreenX11::GetInstance()); + views::test::TestDesktopScreenX11::GetInstance(); #else screen_.reset(views::CreateDesktopScreen()); - display::Screen::SetScreenInstance(screen_.get()); #endif #endif } ViewEventTestBase::~ViewEventTestBase() { -#if defined(USE_AURA) && !defined(OS_CHROMEOS) - display::Screen::SetScreenInstance(nullptr); -#endif TestingBrowserProcess::DeleteInstance(); } diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc index 3f9dd25f87a74d..3798cff4928605 100644 --- a/content/shell/browser/shell_platform_data_aura.cc +++ b/content/shell/browser/shell_platform_data_aura.cc @@ -11,7 +11,6 @@ #include "ui/aura/env.h" #include "ui/aura/layout_manager.h" #include "ui/aura/test/test_focus_client.h" -#include "ui/aura/test/test_screen.h" #include "ui/aura/test/test_window_parenting_client.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" @@ -82,10 +81,8 @@ ShellPlatformDataAura::ShellPlatformDataAura(const gfx::Size& initial_size) { #if defined(USE_OZONE) // Setup global display::Screen singleton. - if (!display::Screen::GetScreen()) { + if (!display::Screen::GetScreen()) screen_ = std::make_unique(); - display::Screen::SetScreenInstance(screen_.get()); - } #endif // defined(USE_OZONE) ui::PlatformWindowInitProperties properties; @@ -116,12 +113,7 @@ ShellPlatformDataAura::ShellPlatformDataAura(const gfx::Size& initial_size) { std::make_unique(host_->window()); } -ShellPlatformDataAura::~ShellPlatformDataAura() { -#if defined(USE_OZONE) - if (screen_) - display::Screen::SetScreenInstance(nullptr); -#endif -} +ShellPlatformDataAura::~ShellPlatformDataAura() = default; void ShellPlatformDataAura::ShowWindow() { host_->Show(); diff --git a/extensions/shell/browser/shell_desktop_controller_aura.cc b/extensions/shell/browser/shell_desktop_controller_aura.cc index 00cda04068ad4f..ea1f2bcc3234a6 100644 --- a/extensions/shell/browser/shell_desktop_controller_aura.cc +++ b/extensions/shell/browser/shell_desktop_controller_aura.cc @@ -315,11 +315,13 @@ void ShellDesktopControllerAura::InitWindowManager() { if (!display::Screen::GetScreen()) { #if defined(OS_CHROMEOS) screen_ = std::make_unique(this, GetStartingWindowSize()); + // TODO(pkasting): Make ShellScreen() call SetScreenInstance() as the + // classes in CreateDesktopScreen() do, and remove this. + display::Screen::SetScreenInstance(screen_.get()); #else // TODO(crbug.com/756680): Refactor DesktopScreen out of views. screen_.reset(views::CreateDesktopScreen()); #endif - display::Screen::SetScreenInstance(screen_.get()); } focus_controller_ = @@ -350,7 +352,9 @@ void ShellDesktopControllerAura::TearDownWindowManager() { cursor_manager_.reset(); focus_controller_.reset(); if (screen_) { +#if defined(OS_CHROMEOS) display::Screen::SetScreenInstance(nullptr); +#endif screen_.reset(); } root_window_event_filter_.reset(); diff --git a/ui/aura/screen_ozone.cc b/ui/aura/screen_ozone.cc index c811c1c4898243..34fce55b9f6796 100644 --- a/ui/aura/screen_ozone.cc +++ b/ui/aura/screen_ozone.cc @@ -8,7 +8,6 @@ #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" #include "ui/display/display.h" -#include "ui/display/screen.h" #include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/platform_screen.h" @@ -22,7 +21,9 @@ ScreenOzone::ScreenOzone() { } } -ScreenOzone::~ScreenOzone() = default; +ScreenOzone::~ScreenOzone() { + display::Screen::SetScreenInstance(old_screen_); +} gfx::Point ScreenOzone::GetCursorScreenPoint() { return platform_screen_->GetCursorScreenPoint(); diff --git a/ui/aura/screen_ozone.h b/ui/aura/screen_ozone.h index 864c6e38681402..ee3e1de23c3b65 100644 --- a/ui/aura/screen_ozone.h +++ b/ui/aura/screen_ozone.h @@ -53,6 +53,7 @@ class AURA_EXPORT ScreenOzone : public display::Screen { gfx::AcceleratedWidget GetAcceleratedWidgetForWindow( aura::Window* window) const; + display::Screen* const old_screen_ = display::Screen::SetScreenInstance(this); std::unique_ptr platform_screen_; DISALLOW_COPY_AND_ASSIGN(ScreenOzone); diff --git a/ui/display/win/screen_win_unittest.cc b/ui/display/win/screen_win_unittest.cc index 059c533c4f1d50..b4d12c602ae11e 100644 --- a/ui/display/win/screen_win_unittest.cc +++ b/ui/display/win/screen_win_unittest.cc @@ -39,7 +39,7 @@ class TestScreenWin : public ScreenWin { UpdateFromDisplayInfos(display_infos); } - ~TestScreenWin() override = default; + ~TestScreenWin() override { Screen::SetScreenInstance(old_screen_); } protected: // win::ScreenWin: @@ -122,6 +122,7 @@ class TestScreenWin : public ScreenWin { return metric; } + Screen* old_screen_ = Screen::SetScreenInstance(this); std::vector monitor_infos_; std::unordered_map hwnd_map_; @@ -148,8 +149,7 @@ class TestScreenWinInitializer { class TestScreenWinManager final : public TestScreenWinInitializer { public: TestScreenWinManager() = default; - - ~TestScreenWinManager() { Screen::SetScreenInstance(nullptr); } + ~TestScreenWinManager() = default; void AddMonitor(const gfx::Rect& pixel_bounds, const gfx::Rect& pixel_work, @@ -175,7 +175,6 @@ class TestScreenWinManager final : public TestScreenWinInitializer { ASSERT_EQ(screen_win_, nullptr); screen_win_ = std::make_unique(display_infos_, monitor_infos_, hwnd_map_); - Screen::SetScreenInstance(screen_win_.get()); } ScreenWin* GetScreenWin() { diff --git a/ui/views/examples/examples_main_proc.cc b/ui/views/examples/examples_main_proc.cc index fe417da38a31db..ffdbc86fd5d0bb 100644 --- a/ui/views/examples/examples_main_proc.cc +++ b/ui/views/examples/examples_main_proc.cc @@ -148,7 +148,6 @@ ExamplesExitCode ExamplesMainProc(bool under_test) { #if BUILDFLAG(ENABLE_DESKTOP_AURA) std::unique_ptr desktop_screen = base::WrapUnique(views::CreateDesktopScreen()); - display::Screen::SetScreenInstance(desktop_screen.get()); #endif base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); diff --git a/ui/views/widget/desktop_aura/desktop_screen.cc b/ui/views/widget/desktop_aura/desktop_screen.cc index b656c14e4f72b5..50ac4c71dbf655 100644 --- a/ui/views/widget/desktop_aura/desktop_screen.cc +++ b/ui/views/widget/desktop_aura/desktop_screen.cc @@ -17,7 +17,7 @@ void InstallDesktopScreenIfNecessary() { // The screen may have already been set in test initialization. if (!display::Screen::GetScreen()) - display::Screen::SetScreenInstance(CreateDesktopScreen()); + CreateDesktopScreen(); } } // namespace views diff --git a/ui/views/widget/desktop_aura/desktop_screen_win.cc b/ui/views/widget/desktop_aura/desktop_screen_win.cc index 963e7053e7acac..e9bb45ad238c9d 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_win.cc +++ b/ui/views/widget/desktop_aura/desktop_screen_win.cc @@ -13,7 +13,9 @@ namespace views { DesktopScreenWin::DesktopScreenWin() = default; -DesktopScreenWin::~DesktopScreenWin() = default; +DesktopScreenWin::~DesktopScreenWin() { + display::Screen::SetScreenInstance(old_screen_); +} HWND DesktopScreenWin::GetHWNDFromNativeWindow(gfx::NativeWindow window) const { aura::WindowTreeHost* host = window->GetHost(); diff --git a/ui/views/widget/desktop_aura/desktop_screen_win.h b/ui/views/widget/desktop_aura/desktop_screen_win.h index 97442c424d8b75..52f54f2e6b88d5 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_win.h +++ b/ui/views/widget/desktop_aura/desktop_screen_win.h @@ -21,6 +21,8 @@ class VIEWS_EXPORT DesktopScreenWin : public display::win::ScreenWin { // display::win::ScreenWin: HWND GetHWNDFromNativeWindow(gfx::NativeWindow window) const override; gfx::NativeWindow GetNativeWindowFromHWND(HWND hwnd) const override; + + display::Screen* const old_screen_ = display::Screen::SetScreenInstance(this); }; } // namespace views diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.cc b/ui/views/widget/desktop_aura/desktop_screen_x11.cc index 4f4a5d1c395883..03ddef7cf9e8ac 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_x11.cc +++ b/ui/views/widget/desktop_aura/desktop_screen_x11.cc @@ -32,7 +32,9 @@ DesktopScreenX11::DesktopScreenX11() { display_scale_factor_observer_.Add(LinuxUI::instance()); } -DesktopScreenX11::~DesktopScreenX11() = default; +DesktopScreenX11::~DesktopScreenX11() { + display::Screen::SetScreenInstance(old_screen_); +} void DesktopScreenX11::Init() { if (x11_display_manager_->IsXrandrAvailable() && diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.h b/ui/views/widget/desktop_aura/desktop_screen_x11.h index b391f41caf220d..b908abe1771ef1 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_x11.h +++ b/ui/views/widget/desktop_aura/desktop_screen_x11.h @@ -72,6 +72,7 @@ class VIEWS_EXPORT DesktopScreenX11 : public display::Screen, void OnXDisplayListUpdated() override; float GetXDisplayScaleFactor() const override; + display::Screen* const old_screen_ = display::Screen::SetScreenInstance(this); std::unique_ptr x11_display_manager_ = std::make_unique(this); ScopedObserverOnPreMainMessageLoopRun(browser_context(), nullptr); }