⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 176568 in webkit


Ignore:
Timestamp:
Nov 28, 2014, 10:39:13 AM (12 years ago)
Author:
Simon Fraser
Message:

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):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r176559 r176568  
     12014-11-28  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Allow clients of the WKRenderLayerRef C SPI to connect layer trees across frame boundaries
     4        https://bugs.webkit.org/show_bug.cgi?id=139021
     5
     6        Reviewed by Dan Bernstein.
     7       
     8        Add WKRenderLayerGetFrameContentsLayer which returns a WKRenderLayerRef for
     9        the content document of a RenderWidget, if its has one (e.g. frames, iframes
     10        and <object> with document contents).
     11
     12        * Shared/API/c/WKRenderLayer.cpp:
     13        (WKRenderLayerGetFrameContentsLayer):
     14        * Shared/API/c/WKRenderLayer.h:
     15        * Shared/UserMessageCoders.h:
     16        (WebKit::UserMessageEncoder::baseEncode):
     17        (WebKit::UserMessageDecoder::baseDecode):
     18        * Shared/WebRenderLayer.cpp:
     19        (WebKit::WebRenderLayer::create):
     20        (WebKit::WebRenderLayer::WebRenderLayer):
     21        * Shared/WebRenderLayer.h:
     22        (WebKit::WebRenderLayer::frameContentsLayer):
     23
    1242014-11-28  Csaba Osztrogonác  <ossy@webkit.org>
    225
  • trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp

    r176509 r176568  
    130130    return toAPI(toImpl(renderLayerRef)->positiveZOrderList());
    131131}
     132
     133WKRenderLayerRef WKRenderLayerGetFrameContentsLayer(WKRenderLayerRef renderLayerRef)
     134{
     135    return toAPI(toImpl(renderLayerRef)->frameContentsLayer());
     136}
  • trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h

    r176509 r176568  
    3939WK_EXPORT WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayer);
    4040
    41 // FIXME: Remove this function once Safari does not require it.
     41// FIXME: Remove this function once Safari does not require it. Clients can access this data via the renderer.
    4242WK_EXPORT WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayer);
    4343
     
    6969WK_EXPORT WKArrayRef WKRenderLayerGetPositiveZOrderList(WKRenderLayerRef renderLayer);
    7070
     71WK_EXPORT WKRenderLayerRef WKRenderLayerGetFrameContentsLayer(WKRenderLayerRef renderLayer);
     72
    7173#ifdef __cplusplus
    7274}
  • trunk/Source/WebKit2/Shared/UserMessageCoders.h

    r176509 r176568  
    160160            encoder << Owner(coder, renderLayer->normalFlowList());
    161161            encoder << Owner(coder, renderLayer->positiveZOrderList());
     162            encoder << Owner(coder, renderLayer->frameContentsLayer());
    162163            return true;
    163164        }
     
    398399            RefPtr<API::Object> normalFlowList;
    399400            RefPtr<API::Object> positiveZOrderList;
     401            RefPtr<API::Object> frameContentsLayer;
    400402
    401403            Owner rendererCoder(coder, renderer);
     
    425427            if (!decoder.decode(positiveZOrderListCoder))
    426428                return false;
     429
     430            Owner frameContentsLayerCoder(coder, frameContentsLayer);
     431            if (!decoder.decode(frameContentsLayerCoder))
     432                return false;
     433
    427434            coder.m_root = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32),
    428435                absoluteBoundingBox, backingStoreMemoryEstimate, static_pointer_cast<API::Array>(negativeZOrderList), static_pointer_cast<API::Array>(normalFlowList),
    429                 static_pointer_cast<API::Array>(positiveZOrderList));
     436                static_pointer_cast<API::Array>(positiveZOrderList), static_pointer_cast<WebRenderLayer>(frameContentsLayer));
    430437            break;
    431438        }
  • trunk/Source/WebKit2/Shared/WebRenderLayer.cpp

    r176509 r176568  
    3737#include <WebCore/RenderLayerBacking.h>
    3838#include <WebCore/RenderView.h>
     39#include <WebCore/RenderWidget.h>
    3940#include <WebCore/StyledElement.h>
    4041
     
    4748    Frame* mainFrame = page->mainFrame();
    4849    if (!mainFrame)
    49         return 0;
     50        return nullptr;
    5051
    5152    if (!mainFrame->loader().client().hasHTMLView())
    52         return 0;
     53        return nullptr;
    5354
    5455    RenderView* contentRenderer = mainFrame->contentRenderer();
    5556    if (!contentRenderer)
    56         return 0;
     57        return nullptr;
    5758
    5859    RenderLayer* rootLayer = contentRenderer->layer();
    5960    if (!rootLayer)
    60         return 0;
     61        return nullptr;
    6162
    6263    return adoptRef(new WebRenderLayer(rootLayer));
    6364}
    6465
    65 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)
     66PassRefPtr<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)
    6667{
    67     return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList));
     68    return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList, frameContentsLayer));
    6869}
    6970
     
    119120    m_normalFlowList = createArrayFromLayerList(layer->normalFlowList());
    120121    m_positiveZOrderList = createArrayFromLayerList(layer->posZOrderList());
     122
     123    if (is<RenderWidget>(layer->renderer())) {
     124        if (Document* contentDocument = downcast<RenderWidget>(layer->renderer()).frameOwnerElement().contentDocument()) {
     125            if (RenderView* view = contentDocument->renderView())
     126                m_frameContentsLayer = adoptRef(new WebRenderLayer(view->layer()));
     127        }
     128    }
    121129}
    122130
    123 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)
     131WebRenderLayer::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)
    124132    : m_renderer(renderer)
    125133    , m_isReflection(isReflection)
     
    132140    , m_normalFlowList(normalFlowList)
    133141    , m_positiveZOrderList(positiveZOrderList)
     142    , m_frameContentsLayer(frameContentsLayer)
    134143{
    135144}
  • trunk/Source/WebKit2/Shared/WebRenderLayer.h

    r176509 r176568  
    4242
    4343    static PassRefPtr<WebRenderLayer> create(WebPage*);
    44     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);
     44    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);
    4545
    4646    API::Array* negativeZOrderList() const { return m_negativeZOrderList.get(); }
    4747    API::Array* normalFlowList() const { return m_normalFlowList.get(); }
    4848    API::Array* positiveZOrderList() const { return m_positiveZOrderList.get(); }
     49    WebRenderLayer* frameContentsLayer() const { return m_frameContentsLayer.get(); }
    4950
    5051    WebRenderObject* renderer() const { return m_renderer.get(); }
     
    5859private:
    5960    explicit WebRenderLayer(WebCore::RenderLayer*);
    60     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);
     61    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);
    6162
    6263    static PassRefPtr<API::Array> createArrayFromLayerList(Vector<WebCore::RenderLayer*>*);
     
    7374    RefPtr<API::Array> m_normalFlowList;
    7475    RefPtr<API::Array> m_positiveZOrderList;
     76
     77    RefPtr<WebRenderLayer> m_frameContentsLayer;
    7578};
    7679
Note: See TracChangeset for help on using the changeset viewer.