diff --git a/shell/browser/api/electron_api_screen.cc b/shell/browser/api/electron_api_screen.cc index 53ae9f6b378d4..4c6a086221115 100644 --- a/shell/browser/api/electron_api_screen.cc +++ b/shell/browser/api/electron_api_screen.cc @@ -24,6 +24,10 @@ #include "ui/display/win/screen_win.h" #endif +#if defined(USE_OZONE) +#include "ui/ozone/public/ozone_platform.h" +#endif + namespace electron::api { gin::WrapperInfo Screen::kWrapperInfo = {gin::kEmbedderNativeGin}; @@ -68,7 +72,18 @@ Screen::~Screen() { screen_->RemoveObserver(this); } -gfx::Point Screen::GetCursorScreenPoint() { +gfx::Point Screen::GetCursorScreenPoint(v8::Isolate* isolate) { +#if defined(USE_OZONE) + // Wayland will crash unless a window is reated prior to calling + // GetCursorScreenPoint. + if (!ui::OzonePlatform::IsInitialized()) { + gin_helper::ErrorThrower thrower(isolate); + thrower.ThrowError( + "screen.getCursorScreenPoint() cannot be called before a window has " + "been created."); + return gfx::Point(); + } +#endif // BUILDFLAG(USE_OZONE) return screen_->GetCursorScreenPoint(); } diff --git a/shell/browser/api/electron_api_screen.h b/shell/browser/api/electron_api_screen.h index 67c8fa7226dbe..ef203cd7b1076 100644 --- a/shell/browser/api/electron_api_screen.h +++ b/shell/browser/api/electron_api_screen.h @@ -40,7 +40,7 @@ class Screen : public gin::Wrappable, Screen(v8::Isolate* isolate, display::Screen* screen); ~Screen() override; - gfx::Point GetCursorScreenPoint(); + gfx::Point GetCursorScreenPoint(v8::Isolate* isolate); display::Display GetPrimaryDisplay(); std::vector GetAllDisplays(); display::Display GetDisplayNearestPoint(const gfx::Point& point);