Commit 0ba0e7bb authored by danakj's avatar danakj Committed by Commit Bot

Move SetBackgroundColor handling from RenderViewImpl to RenderWidget

The SetBackgroundColor IPC has been recently moved from RenderView
to RenderWidget, but the RenderWidget still delegates handling of it
back to the RenderView. The RenderView then sets the background color
on its |frame_widget_| which is a WebFrameWidget attached to it in
RenderViewImpl::Initialize() via RenderFrameImpl::CreateMainFrame().

All RenderViewImpls do have a frame_widget_, since RenderViewImpl
ends up setting that. So RenderWidget::GetWebWidget() will always
return that frame_widget_ once RenderViewImpl::Initialize() has
completed. There is a space of time after RenderWidget::Init()
but inside RenderViewImpl::Initialize() where it would return
a different WebWidget (the WebWidget on the WebViewImpl directly),
but SetBackgroundOpaque IPC will not be received and handled during
that time.

So it is safe to use the frame_widget_ from the RenderViewImpl via
RenderWidget::GetWebWidget() directly. And thus RenderWidget can
set the background opaque on its WebFrameWidget without going
through RenderViewImpl (other than to get the WebWidget).

R=avi@chromium.org

Bug: 419087
Change-Id: I65bf680a24a6312f1c1d569d2023666cbc53e8f6
Reviewed-on: https://chromium-review.googlesource.com/1239169Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Commit-Queue: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594058}
parent ec93df31
...@@ -1084,19 +1084,6 @@ void RenderViewImpl::SetActiveForWidget(bool active) { ...@@ -1084,19 +1084,6 @@ void RenderViewImpl::SetActiveForWidget(bool active) {
webview()->SetIsActive(active); webview()->SetIsActive(active);
} }
void RenderViewImpl::SetBackgroundOpaqueForWidget(bool opaque) {
if (!frame_widget_)
return;
if (opaque) {
frame_widget_->ClearBaseBackgroundColorOverride();
frame_widget_->ClearBackgroundColorOverride();
} else {
frame_widget_->SetBaseBackgroundColorOverride(SK_ColorTRANSPARENT);
frame_widget_->SetBackgroundColorOverride(SK_ColorTRANSPARENT);
}
}
bool RenderViewImpl::SupportsMultipleWindowsForWidget() { bool RenderViewImpl::SupportsMultipleWindowsForWidget() {
return webkit_preferences_.supports_multiple_windows; return webkit_preferences_.supports_multiple_windows;
} }
......
...@@ -379,7 +379,6 @@ class CONTENT_EXPORT RenderViewImpl : private RenderWidget, ...@@ -379,7 +379,6 @@ class CONTENT_EXPORT RenderViewImpl : private RenderWidget,
bool RenderWidgetWillHandleMouseEventForWidget( bool RenderWidgetWillHandleMouseEventForWidget(
const blink::WebMouseEvent& event) override; const blink::WebMouseEvent& event) override;
void SetActiveForWidget(bool active) override; void SetActiveForWidget(bool active) override;
void SetBackgroundOpaqueForWidget(bool opaque) override;
bool SupportsMultipleWindowsForWidget() override; bool SupportsMultipleWindowsForWidget() override;
void DidHandleGestureEventForWidget( void DidHandleGestureEventForWidget(
const blink::WebGestureEvent& event) override; const blink::WebGestureEvent& event) override;
......
...@@ -912,8 +912,24 @@ void RenderWidget::OnSetActive(bool active) { ...@@ -912,8 +912,24 @@ void RenderWidget::OnSetActive(bool active) {
} }
void RenderWidget::OnSetBackgroundOpaque(bool opaque) { void RenderWidget::OnSetBackgroundOpaque(bool opaque) {
if (owner_delegate_) // Background opaque-ness modification is only supported for the main frame.
owner_delegate_->SetBackgroundOpaqueForWidget(opaque); // The |owner_delegate_| is used as proxy for this RenderWidget being attached
// to the main frame.
if (!owner_delegate_)
return;
blink::WebWidget* web_widget = GetWebWidget();
// This is true since we only do this for RenderWidgets attached to the main
// frame.
DCHECK(web_widget->IsWebFrameWidget());
auto* web_frame_widget = static_cast<blink::WebFrameWidget*>(web_widget);
if (opaque) {
web_frame_widget->ClearBaseBackgroundColorOverride();
web_frame_widget->ClearBackgroundColorOverride();
} else {
web_frame_widget->SetBaseBackgroundColorOverride(SK_ColorTRANSPARENT);
web_frame_widget->SetBackgroundColorOverride(SK_ColorTRANSPARENT);
}
} }
void RenderWidget::OnSetFocus(bool enable) { void RenderWidget::OnSetFocus(bool enable) {
......
...@@ -33,9 +33,6 @@ class CONTENT_EXPORT RenderWidgetOwnerDelegate { ...@@ -33,9 +33,6 @@ class CONTENT_EXPORT RenderWidgetOwnerDelegate {
// See comment in RenderWidgetHost::SetActive(). // See comment in RenderWidgetHost::SetActive().
virtual void SetActiveForWidget(bool active) = 0; virtual void SetActiveForWidget(bool active) = 0;
// See comment in RenderWidgetHostImpl::SetBackgroundOpaque().
virtual void SetBackgroundOpaqueForWidget(bool opaque) = 0;
// Returns whether multiple windows are allowed for the widget. If true, then // Returns whether multiple windows are allowed for the widget. If true, then
// Show() may be called more than once. // Show() may be called more than once.
virtual bool SupportsMultipleWindowsForWidget() = 0; virtual bool SupportsMultipleWindowsForWidget() = 0;
......
...@@ -468,7 +468,6 @@ class StubRenderWidgetOwnerDelegate : public RenderWidgetOwnerDelegate { ...@@ -468,7 +468,6 @@ class StubRenderWidgetOwnerDelegate : public RenderWidgetOwnerDelegate {
return false; return false;
} }
void SetActiveForWidget(bool active) override {} void SetActiveForWidget(bool active) override {}
void SetBackgroundOpaqueForWidget(bool opaque) override {}
bool SupportsMultipleWindowsForWidget() override { return true; } bool SupportsMultipleWindowsForWidget() override { return true; }
void DidHandleGestureEventForWidget( void DidHandleGestureEventForWidget(
const blink::WebGestureEvent& event) override {} const blink::WebGestureEvent& event) override {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment