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

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

Issue 2715243004: [blink] Support (semi-)transparent background colors in WebView/Frame. (Closed)
Patch Set: add unit test for remote frame transparency Created 3 years, 9 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 90b9be8949c88423fabb0ebdbaa9b3ca8e99b9f1..fc9b83ae35c8deaa8c7a9e1484d5317568f68f14 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -30,6 +30,8 @@
#include "web/WebFrameWidgetImpl.h"
+#include <memory>
+
#include "core/dom/DocumentUserGestureToken.h"
#include "core/editing/EditingUtilities.h"
#include "core/editing/Editor.h"
@@ -52,6 +54,7 @@
#include "platform/KeyboardCodes.h"
#include "platform/WebFrameScheduler.h"
#include "platform/animation/CompositorAnimationHost.h"
+#include "platform/graphics/Color.h"
#include "platform/graphics/CompositorMutatorClient.h"
#include "public/web/WebAutofillClient.h"
#include "public/web/WebPlugin.h"
@@ -73,7 +76,6 @@
#include "web/WebViewFrameWidget.h"
#include "wtf/AutoReset.h"
#include "wtf/PtrUtil.h"
-#include <memory>
namespace blink {
@@ -113,7 +115,10 @@ WebFrameWidgetImpl::WebFrameWidgetImpl(WebWidgetClient* client,
m_isAcceleratedCompositingActive(false),
m_layerTreeViewClosed(false),
m_suppressNextKeypressEvent(false),
- m_isTransparent(false),
+ m_backgroundColorOverrideEnabled(false),
+ m_backgroundColorOverride(Color::transparent),
+ m_baseBackgroundColorOverrideEnabled(false),
+ m_baseBackgroundColorOverride(Color::transparent),
m_imeAcceptEvents(true),
m_selfKeepAlive(this) {
DCHECK(m_localRoot->frame()->isLocalRoot());
@@ -121,7 +126,7 @@ WebFrameWidgetImpl::WebFrameWidgetImpl(WebWidgetClient* client,
m_localRoot->setFrameWidget(this);
if (localRoot->parent())
- setIsTransparent(true);
+ setBackgroundColorOverride(Color::transparent);
}
WebFrameWidgetImpl::~WebFrameWidgetImpl() {}
@@ -269,7 +274,8 @@ void WebFrameWidgetImpl::updateLayerTreeBackgroundColor() {
if (!m_layerTreeView)
return;
- m_layerTreeView->setBackgroundColor(backgroundColor());
+ WebColor color = backgroundColor();
+ m_layerTreeView->setBackgroundColor(color);
}
void WebFrameWidgetImpl::updateLayerTreeDeviceScaleFactor() {
@@ -280,15 +286,26 @@ void WebFrameWidgetImpl::updateLayerTreeDeviceScaleFactor() {
m_layerTreeView->setDeviceScaleFactor(deviceScaleFactor);
}
-void WebFrameWidgetImpl::setIsTransparent(bool isTransparent) {
- m_isTransparent = isTransparent;
+void WebFrameWidgetImpl::setBackgroundColorOverride(WebColor color) {
+ m_backgroundColorOverrideEnabled = true;
+ m_backgroundColorOverride = color;
+ updateLayerTreeBackgroundColor();
+}
- if (m_layerTreeView)
- m_layerTreeView->setHasTransparentBackground(isTransparent);
+void WebFrameWidgetImpl::clearBackgroundColorOverride() {
+ m_backgroundColorOverrideEnabled = false;
+ updateLayerTreeBackgroundColor();
+}
+
+void WebFrameWidgetImpl::setBaseBackgroundColorOverride(WebColor color) {
+ m_baseBackgroundColorOverrideEnabled = true;
+ m_baseBackgroundColorOverride = color;
+ updateBaseBackgroundColor();
}
-bool WebFrameWidgetImpl::isTransparent() const {
- return m_isTransparent;
+void WebFrameWidgetImpl::clearBaseBackgroundColorOverride() {
+ m_baseBackgroundColorOverrideEnabled = false;
+ updateBaseBackgroundColor();
}
void WebFrameWidgetImpl::layoutAndPaintAsync(
@@ -403,13 +420,21 @@ bool WebFrameWidgetImpl::hasTouchEventHandlersAt(const WebPoint& point) {
return true;
}
+Color WebFrameWidgetImpl::baseBackgroundColor() const {
+ return m_baseBackgroundColorOverrideEnabled ? m_baseBackgroundColorOverride
+ : m_baseBackgroundColor;
+}
+
void WebFrameWidgetImpl::setBaseBackgroundColor(WebColor color) {
if (m_baseBackgroundColor == color)
return;
m_baseBackgroundColor = color;
+ updateBaseBackgroundColor();
+}
- m_localRoot->frameView()->setBaseBackgroundColor(color);
+void WebFrameWidgetImpl::updateBaseBackgroundColor() {
+ m_localRoot->frameView()->setBaseBackgroundColor(baseBackgroundColor());
}
WebInputMethodControllerImpl*
@@ -533,8 +558,8 @@ WebRange WebFrameWidgetImpl::compositionRange() {
}
WebColor WebFrameWidgetImpl::backgroundColor() const {
- if (isTransparent())
- return Color::transparent;
+ if (m_backgroundColorOverrideEnabled)
+ return m_backgroundColorOverride;
if (!m_localRoot->frameView())
return m_baseBackgroundColor;
FrameView* view = m_localRoot->frameView();
@@ -1030,7 +1055,6 @@ void WebFrameWidgetImpl::setIsAcceleratedCompositingActive(bool active) {
m_layerTreeView->setVisible(page()->isPageVisible());
updateLayerTreeDeviceScaleFactor();
updateLayerTreeBackgroundColor();
- m_layerTreeView->setHasTransparentBackground(isTransparent());
updateLayerTreeViewport();
m_isAcceleratedCompositingActive = true;
}

Powered by Google App Engine
This is Rietveld 408576698