Browse Source

fix: apply transparency settings to WebContentsPreferences (#31685)

* fix: add transparency to web_contents_preferences

* fix: correctly apply transparency settings to new webContents from webPreferences
Keeley Hammond 3 years ago
parent
commit
86f6285299

+ 4 - 2
shell/browser/api/electron_api_web_contents.cc

@@ -4059,9 +4059,11 @@ gin::Handle<WebContents> WebContents::CreateFromWebPreferences(
       absl::optional<SkColor> color =
           existing_preferences->GetBackgroundColor();
       web_contents->web_contents()->SetPageBaseBackgroundColor(color);
+      // Because web preferences don't recognize transparency,
+      // only set rwhv background color if a color exists
       auto* rwhv = web_contents->web_contents()->GetRenderWidgetHostView();
-      if (rwhv)
-        rwhv->SetBackgroundColor(color.value_or(SK_ColorWHITE));
+      if (rwhv && color.has_value())
+        rwhv->SetBackgroundColor(color.value());
     }
   } else {
     // Create one if not.

+ 6 - 0
shell/browser/web_contents_preferences.cc

@@ -225,6 +225,12 @@ void WebContentsPreferences::SetFromDictionary(
   web_preferences.Get("disablePopups", &disable_popups_);
   web_preferences.Get("disableDialogs", &disable_dialogs_);
   web_preferences.Get("safeDialogs", &safe_dialogs_);
+  // preferences don't save a transparency option,
+  // apply any existing transparency setting to background_color_
+  bool transparent;
+  if (web_preferences.Get(options::kTransparent, &transparent)) {
+    background_color_ = SK_ColorTRANSPARENT;
+  }
   std::string background_color;
   if (web_preferences.GetHidden(options::kBackgroundColor, &background_color))
     background_color_ = ParseHexColor(background_color);