Browse Source

fix: handle a nil backgroundColor in win.getBackgroundColor() (#28187)

* fix: handle a nil backgroundColor in win.getBackgroundColor()

* spec: add crash case

* fix: update to fix native_views transparent color

* chore: fix lint

Co-authored-by: Samuel Attard <[email protected]>
Co-authored-by: Samuel Attard <[email protected]>
trop[bot] 4 years ago
parent
commit
faa5d18389

+ 4 - 2
shell/browser/native_window_mac.mm

@@ -996,8 +996,10 @@ void NativeWindowMac::SetBackgroundColor(SkColor color) {
 }
 
 SkColor NativeWindowMac::GetBackgroundColor() {
-  return skia::CGColorRefToSkColor(
-      [[[window_ contentView] layer] backgroundColor]);
+  CGColorRef color = [[[window_ contentView] layer] backgroundColor];
+  if (!color)
+    return SK_ColorTRANSPARENT;
+  return skia::CGColorRefToSkColor(color);
 }
 
 void NativeWindowMac::SetHasShadow(bool has_shadow) {

+ 4 - 1
shell/browser/native_window_views.cc

@@ -956,7 +956,10 @@ bool NativeWindowViews::IsTabletMode() const {
 }
 
 SkColor NativeWindowViews::GetBackgroundColor() {
-  return root_view_->background()->get_color();
+  auto* background = root_view_->background();
+  if (!background)
+    return SK_ColorTRANSPARENT;
+  return background->get_color();
 }
 
 void NativeWindowViews::SetBackgroundColor(SkColor background_color) {

+ 14 - 0
spec-main/fixtures/crash-cases/transparent-window-get-background-color/index.js

@@ -0,0 +1,14 @@
+const { app, BrowserWindow } = require('electron');
+
+function createWindow () {
+  // Create the browser window.
+  const mainWindow = new BrowserWindow({
+    transparent: true
+  });
+  mainWindow.getBackgroundColor();
+}
+
+app.on('ready', () => {
+  createWindow();
+  setTimeout(() => app.quit());
+});