Diff
Modified: trunk/Source/WebKit2/ChangeLog (176567 => 176568)
--- trunk/Source/WebKit2/ChangeLog 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/ChangeLog 2014-11-28 18:39:13 UTC (rev 176568)
@@ -1,3 +1,26 @@
+2014-11-28 Simon Fraser <[email protected]>
+
+ Allow clients of the WKRenderLayerRef C SPI to connect layer trees across frame boundaries
+ https://bugs.webkit.org/show_bug.cgi?id=139021
+
+ Reviewed by Dan Bernstein.
+
+ Add WKRenderLayerGetFrameContentsLayer which returns a WKRenderLayerRef for
+ the content document of a RenderWidget, if its has one (e.g. frames, iframes
+ and <object> with document contents).
+
+ * Shared/API/c/WKRenderLayer.cpp:
+ (WKRenderLayerGetFrameContentsLayer):
+ * Shared/API/c/WKRenderLayer.h:
+ * Shared/UserMessageCoders.h:
+ (WebKit::UserMessageEncoder::baseEncode):
+ (WebKit::UserMessageDecoder::baseDecode):
+ * Shared/WebRenderLayer.cpp:
+ (WebKit::WebRenderLayer::create):
+ (WebKit::WebRenderLayer::WebRenderLayer):
+ * Shared/WebRenderLayer.h:
+ (WebKit::WebRenderLayer::frameContentsLayer):
+
2014-11-28 Csaba Osztrogonác <[email protected]>
[WK2] SecComp buildfix after r176452
Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp (176567 => 176568)
--- trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp 2014-11-28 18:39:13 UTC (rev 176568)
@@ -129,3 +129,8 @@
{
return toAPI(toImpl(renderLayerRef)->positiveZOrderList());
}
+
+WKRenderLayerRef WKRenderLayerGetFrameContentsLayer(WKRenderLayerRef renderLayerRef)
+{
+ return toAPI(toImpl(renderLayerRef)->frameContentsLayer());
+}
Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h (176567 => 176568)
--- trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h 2014-11-28 18:39:13 UTC (rev 176568)
@@ -38,7 +38,7 @@
WK_EXPORT WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayer);
-// FIXME: Remove this function once Safari does not require it.
+// FIXME: Remove this function once Safari does not require it. Clients can access this data via the renderer.
WK_EXPORT WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayer);
// FIXME: Remove these three functions once Safari does not require them.
@@ -68,6 +68,8 @@
WK_EXPORT WKArrayRef WKRenderLayerGetNormalFlowList(WKRenderLayerRef renderLayer);
WK_EXPORT WKArrayRef WKRenderLayerGetPositiveZOrderList(WKRenderLayerRef renderLayer);
+WK_EXPORT WKRenderLayerRef WKRenderLayerGetFrameContentsLayer(WKRenderLayerRef renderLayer);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/Source/WebKit2/Shared/UserMessageCoders.h (176567 => 176568)
--- trunk/Source/WebKit2/Shared/UserMessageCoders.h 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/Shared/UserMessageCoders.h 2014-11-28 18:39:13 UTC (rev 176568)
@@ -159,6 +159,7 @@
encoder << Owner(coder, renderLayer->negativeZOrderList());
encoder << Owner(coder, renderLayer->normalFlowList());
encoder << Owner(coder, renderLayer->positiveZOrderList());
+ encoder << Owner(coder, renderLayer->frameContentsLayer());
return true;
}
case API::Object::Type::RenderObject: {
@@ -397,6 +398,7 @@
RefPtr<API::Object> negativeZOrderList;
RefPtr<API::Object> normalFlowList;
RefPtr<API::Object> positiveZOrderList;
+ RefPtr<API::Object> frameContentsLayer;
Owner rendererCoder(coder, renderer);
if (!decoder.decode(rendererCoder))
@@ -424,9 +426,14 @@
Owner positiveZOrderListCoder(coder, positiveZOrderList);
if (!decoder.decode(positiveZOrderListCoder))
return false;
+
+ Owner frameContentsLayerCoder(coder, frameContentsLayer);
+ if (!decoder.decode(frameContentsLayerCoder))
+ return false;
+
coder.m_root = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32),
absoluteBoundingBox, backingStoreMemoryEstimate, static_pointer_cast<API::Array>(negativeZOrderList), static_pointer_cast<API::Array>(normalFlowList),
- static_pointer_cast<API::Array>(positiveZOrderList));
+ static_pointer_cast<API::Array>(positiveZOrderList), static_pointer_cast<WebRenderLayer>(frameContentsLayer));
break;
}
case API::Object::Type::RenderObject: {
Modified: trunk/Source/WebKit2/Shared/WebRenderLayer.cpp (176567 => 176568)
--- trunk/Source/WebKit2/Shared/WebRenderLayer.cpp 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/Shared/WebRenderLayer.cpp 2014-11-28 18:39:13 UTC (rev 176568)
@@ -36,6 +36,7 @@
#include <WebCore/RenderLayer.h>
#include <WebCore/RenderLayerBacking.h>
#include <WebCore/RenderView.h>
+#include <WebCore/RenderWidget.h>
#include <WebCore/StyledElement.h>
using namespace WebCore;
@@ -46,25 +47,25 @@
{
Frame* mainFrame = page->mainFrame();
if (!mainFrame)
- return 0;
+ return nullptr;
if (!mainFrame->loader().client().hasHTMLView())
- return 0;
+ return nullptr;
RenderView* contentRenderer = mainFrame->contentRenderer();
if (!contentRenderer)
- return 0;
+ return nullptr;
RenderLayer* rootLayer = contentRenderer->layer();
if (!rootLayer)
- return 0;
+ return nullptr;
return adoptRef(new WebRenderLayer(rootLayer));
}
-PassRefPtr<WebRenderLayer> WebRenderLayer::create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
+PassRefPtr<WebRenderLayer> WebRenderLayer::create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer)
{
- return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList));
+ return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList, frameContentsLayer));
}
PassRefPtr<API::Array> WebRenderLayer::createArrayFromLayerList(Vector<RenderLayer*>* list)
@@ -118,9 +119,16 @@
m_negativeZOrderList = createArrayFromLayerList(layer->negZOrderList());
m_normalFlowList = createArrayFromLayerList(layer->normalFlowList());
m_positiveZOrderList = createArrayFromLayerList(layer->posZOrderList());
+
+ if (is<RenderWidget>(layer->renderer())) {
+ if (Document* contentDocument = downcast<RenderWidget>(layer->renderer()).frameOwnerElement().contentDocument()) {
+ if (RenderView* view = contentDocument->renderView())
+ m_frameContentsLayer = adoptRef(new WebRenderLayer(view->layer()));
+ }
+ }
}
-WebRenderLayer::WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
+WebRenderLayer::WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer)
: m_renderer(renderer)
, m_isReflection(isReflection)
, m_isClipping(isClipping)
@@ -131,6 +139,7 @@
, m_negativeZOrderList(negativeZOrderList)
, m_normalFlowList(normalFlowList)
, m_positiveZOrderList(positiveZOrderList)
+ , m_frameContentsLayer(frameContentsLayer)
{
}
Modified: trunk/Source/WebKit2/Shared/WebRenderLayer.h (176567 => 176568)
--- trunk/Source/WebKit2/Shared/WebRenderLayer.h 2014-11-28 17:05:45 UTC (rev 176567)
+++ trunk/Source/WebKit2/Shared/WebRenderLayer.h 2014-11-28 18:39:13 UTC (rev 176568)
@@ -41,11 +41,12 @@
enum CompositingLayerType { None, Normal, Tiled, Media, Container };
static PassRefPtr<WebRenderLayer> create(WebPage*);
- static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
+ static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer);
API::Array* negativeZOrderList() const { return m_negativeZOrderList.get(); }
API::Array* normalFlowList() const { return m_normalFlowList.get(); }
API::Array* positiveZOrderList() const { return m_positiveZOrderList.get(); }
+ WebRenderLayer* frameContentsLayer() const { return m_frameContentsLayer.get(); }
WebRenderObject* renderer() const { return m_renderer.get(); }
bool isReflection() const { return m_isReflection; }
@@ -57,7 +58,7 @@
private:
explicit WebRenderLayer(WebCore::RenderLayer*);
- WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
+ WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList, PassRefPtr<WebRenderLayer> frameContentsLayer);
static PassRefPtr<API::Array> createArrayFromLayerList(Vector<WebCore::RenderLayer*>*);
@@ -72,6 +73,8 @@
RefPtr<API::Array> m_negativeZOrderList;
RefPtr<API::Array> m_normalFlowList;
RefPtr<API::Array> m_positiveZOrderList;
+
+ RefPtr<WebRenderLayer> m_frameContentsLayer;
};
} // namespace WebKit