Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp

Issue 1565893004: Sets a transparent background for out-of-process subframes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: split cc changes Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index a2be5873f8a5f343773a77898d6b10e475f85254..7e293aa0ccc242e4bcbad8e048b117d4a0de52ef 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -63,7 +63,10 @@ namespace blink {
WebFrameWidget* WebFrameWidget::create(WebWidgetClient* client, WebLocalFrame* localRoot)
{
// Pass the WebFrameWidget's self-reference to the caller.
- return WebFrameWidgetImpl::create(client, localRoot);
+ WebFrameWidgetImpl* widget = WebFrameWidgetImpl::create(client, localRoot);
+ if (localRoot->parent())
+ widget->setIsTransparent(true);
+ return widget;
}
WebFrameWidget* WebFrameWidget::create(WebWidgetClient* client, WebView* webView, WebLocalFrame* mainFrame)
@@ -98,6 +101,8 @@ WebFrameWidgetImpl::WebFrameWidgetImpl(WebWidgetClient* client, WebLocalFrame* l
, m_layerTreeViewClosed(false)
, m_suppressNextKeypressEvent(false)
, m_ignoreInputEvents(false)
+ , m_isTransparent(false)
+ , m_backgroundColorOverride(Color::transparent)
#if ENABLE(OILPAN)
, m_selfKeepAlive(this)
#endif
@@ -278,7 +283,7 @@ void WebFrameWidgetImpl::updateLayerTreeBackgroundColor()
if (!m_layerTreeView)
return;
- m_layerTreeView->setBackgroundColor(alphaChannel(view()->backgroundColorOverride()) ? view()->backgroundColorOverride() : view()->backgroundColor());
+ m_layerTreeView->setBackgroundColor(alphaChannel(backgroundColorOverride()) ? backgroundColorOverride() : backgroundColor());
}
void WebFrameWidgetImpl::updateLayerTreeDeviceScaleFactor()
@@ -290,10 +295,17 @@ void WebFrameWidgetImpl::updateLayerTreeDeviceScaleFactor()
m_layerTreeView->setDeviceScaleFactor(deviceScaleFactor);
}
+void WebFrameWidgetImpl::setIsTransparent(bool isTransparent)
+{
+ m_isTransparent = isTransparent;
+
+ if (m_layerTreeView)
+ m_layerTreeView->setHasTransparentBackground(isTransparent);
+}
+
bool WebFrameWidgetImpl::isTransparent() const
{
- // FIXME: This might need to proxy to the WebView's isTransparent().
- return false;
+ return m_isTransparent;
}
void WebFrameWidgetImpl::layoutAndPaintAsync(WebLayoutAndPaintAsyncCallback* callback)
@@ -381,6 +393,24 @@ bool WebFrameWidgetImpl::hasTouchEventHandlersAt(const WebPoint& point)
return true;
}
+void WebFrameWidgetImpl::setBaseBackgroundColor(WebColor color)
+{
+ if (m_baseBackgroundColor == color)
+ return;
+
+ m_baseBackgroundColor = color;
+
+ m_localRoot->frameView()->setBaseBackgroundColor(color);
+
+ updateAllLifecyclePhases();
+}
+
+void WebFrameWidgetImpl::setBackgroundColorOverride(WebColor color)
+{
+ m_backgroundColorOverride = color;
+ updateLayerTreeBackgroundColor();
+}
+
void WebFrameWidgetImpl::scheduleAnimation()
{
if (m_layerTreeView) {
@@ -483,7 +513,7 @@ WebColor WebFrameWidgetImpl::backgroundColor() const
if (isTransparent())
return Color::transparent;
if (!m_localRoot->frameView())
- return view()->backgroundColor();
+ return m_baseBackgroundColor;
FrameView* view = m_localRoot->frameView();
return view->documentBackgroundColor().rgb();
}

Powered by Google App Engine
This is Rietveld 408576698