diff --git a/shell/browser/api/electron_api_browser_window.cc b/shell/browser/api/electron_api_browser_window.cc index 99d30eafeaf9c..9a00344eecb3b 100644 --- a/shell/browser/api/electron_api_browser_window.cc +++ b/shell/browser/api/electron_api_browser_window.cc @@ -362,9 +362,7 @@ void BrowserWindow::Blur() { void BrowserWindow::SetBackgroundColor(const std::string& color_name) { BaseWindow::SetBackgroundColor(color_name); - auto* view = web_contents()->GetRenderWidgetHostView(); - if (view) - view->SetBackgroundColor(ParseHexColor(color_name)); + web_contents()->SetPageBaseBackgroundColor(ParseHexColor(color_name)); // Also update the web preferences object otherwise the view will be reset on // the next load URL call if (api_web_contents_) { diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index b69fa9aebecc5..e3b3d0d387f6a 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1373,8 +1373,16 @@ void WebContents::HandleNewRenderFrame( std::string color_name; if (web_preferences->GetPreference(options::kBackgroundColor, &color_name)) { - rwhv->SetBackgroundColor(ParseHexColor(color_name)); + web_contents()->SetPageBaseBackgroundColor(ParseHexColor(color_name)); } else { + web_contents()->SetPageBaseBackgroundColor(absl::nullopt); + } + + // When a page base background color is set, transparency needs to be + // explicitly set by calling + // RenderWidgetHostOwnerDelegate::SetBackgroundOpaque(false). + // RenderWidgetHostViewBase::SetBackgroundColor() will do this for us. + if (web_preferences->IsEnabled(options::kTransparent)) { rwhv->SetBackgroundColor(SK_ColorTRANSPARENT); } }