Changeset 76087 in webkit


Ignore:
Timestamp:
Jan 18, 2011 5:37:05 PM (13 years ago)
Author:
beidson@apple.com
Message:

<rdar://problem/8752200> and https://bugs.webkit.org/show_bug.cgi?id=52664
Need WebKit2 API to asynchronously get the resource data for a URL

Reviewed by Maciej Stachowiak.

Rename WKFrameGetMainResourceDataFunction to WKFrameGetResourceDataFunction, and add
new API to get a resource by URL:

  • UIProcess/API/C/WKFrame.cpp:

(WKFrameGetMainResourceData):
(WKFrameGetResourceData):
(callGetResourceDataBlockAndDispose):
(WKFrameGetMainResourceData_b):
(WKFrameGetResourceData_b):

  • UIProcess/API/C/WKFrame.h:

Implement the new API in the UIProcess side:

  • UIProcess/WebFrameProxy.cpp:

(WebKit::WebFrameProxy::getResourceData):

  • UIProcess/WebFrameProxy.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::getResourceDataFromFrame):

  • UIProcess/WebPageProxy.h:

Have the WebProcess get the data and call back to the UIProcess:

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::getResourceDataFromFrame):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
Location:
trunk/Source/WebKit2
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r76086 r76087  
     12011-01-18  Brady Eidson  <beidson@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        <rdar://problem/8752200> and https://bugs.webkit.org/show_bug.cgi?id=52664
     6        Need WebKit2 API to asynchronously get the resource data for a URL
     7
     8        Rename WKFrameGetMainResourceDataFunction to WKFrameGetResourceDataFunction, and add
     9        new API to get a resource by URL:
     10        * UIProcess/API/C/WKFrame.cpp:
     11        (WKFrameGetMainResourceData):
     12        (WKFrameGetResourceData):
     13        (callGetResourceDataBlockAndDispose):
     14        (WKFrameGetMainResourceData_b):
     15        (WKFrameGetResourceData_b):
     16        * UIProcess/API/C/WKFrame.h:
     17
     18        Implement the new API in the UIProcess side:
     19        * UIProcess/WebFrameProxy.cpp:
     20        (WebKit::WebFrameProxy::getResourceData):
     21        * UIProcess/WebFrameProxy.h:
     22        * UIProcess/WebPageProxy.cpp:
     23        (WebKit::WebPageProxy::getResourceDataFromFrame):
     24        * UIProcess/WebPageProxy.h:
     25
     26        Have the WebProcess get the data and call back to the UIProcess:
     27        * WebProcess/WebPage/WebPage.cpp:
     28        (WebKit::WebPage::getResourceDataFromFrame):
     29        * WebProcess/WebPage/WebPage.h:
     30        * WebProcess/WebPage/WebPage.messages.in:
     31
    1322011-01-18  Anders Carlsson  <andersca@apple.com>
    233
  • trunk/Source/WebKit2/UIProcess/API/C/WKFrame.cpp

    r74571 r76087  
    126126}
    127127
    128 void WKFrameGetMainResourceData(WKFrameRef frameRef, WKFrameGetMainResourceDataFunction callback, void* context)
     128void WKFrameGetMainResourceData(WKFrameRef frameRef, WKFrameGetResourceDataFunction callback, void* context)
    129129{
    130130    toImpl(frameRef)->getMainResourceData(DataCallback::create(context, callback));
    131131}
    132132
     133void WKFrameGetResourceData(WKFrameRef frameRef, WKURLRef resourceURL, WKFrameGetResourceDataFunction callback, void* context)
     134{
     135    toImpl(frameRef)->getResourceData(toImpl(resourceURL), DataCallback::create(context, callback));
     136}
     137
    133138#ifdef __BLOCKS__
    134 static void callGetMainResourceDataBlockAndDispose(WKDataRef data, WKErrorRef error, void* context)
     139static void callGetResourceDataBlockAndDispose(WKDataRef data, WKErrorRef error, void* context)
    135140{
    136     WKFrameGetMainResourceDataBlock block = (WKFrameGetMainResourceDataBlock)context;
     141    WKFrameGetResourceDataBlock block = (WKFrameGetResourceDataBlock)context;
    137142    block(data, error);
    138143    Block_release(block);
    139144}
    140145
    141 void WKFrameGetMainResourceData_b(WKFrameRef frameRef, WKFrameGetMainResourceDataBlock block)
     146void WKFrameGetMainResourceData_b(WKFrameRef frameRef, WKFrameGetResourceDataBlock block)
    142147{
    143     WKFrameGetMainResourceData(frameRef, callGetMainResourceDataBlockAndDispose, Block_copy(block));
     148    WKFrameGetMainResourceData(frameRef, callGetResourceDataBlockAndDispose, Block_copy(block));
     149}
     150
     151void WKFrameGetResourceData_b(WKFrameRef frameRef, WKURLRef resourceURL, WKFrameGetResourceDataBlock block)
     152{
     153    WKFrameGetResourceData(frameRef, resourceURL, callGetResourceDataBlockAndDispose, Block_copy(block));
    144154}
    145155#endif
  • trunk/Source/WebKit2/UIProcess/API/C/WKFrame.h

    r74571 r76087  
    6969WK_EXPORT bool WKFrameIsFrameSet(WKFrameRef frame);
    7070
    71 typedef void (*WKFrameGetMainResourceDataFunction)(WKDataRef data, WKErrorRef error, void* functionContext);
    72 WK_EXPORT void WKFrameGetMainResourceData(WKFrameRef frame, WKFrameGetMainResourceDataFunction function, void* functionContext);
     71typedef void (*WKFrameGetResourceDataFunction)(WKDataRef data, WKErrorRef error, void* functionContext);
     72WK_EXPORT void WKFrameGetMainResourceData(WKFrameRef frame, WKFrameGetResourceDataFunction function, void* functionContext);
     73WK_EXPORT void WKFrameGetResourceData(WKFrameRef frame, WKURLRef resourceURL, WKFrameGetResourceDataFunction function, void* functionContext);
    7374#ifdef __BLOCKS__
    74 typedef void (^WKFrameGetMainResourceDataBlock)(WKDataRef data, WKErrorRef error);
    75 WK_EXPORT void WKFrameGetMainResourceData_b(WKFrameRef frame, WKFrameGetMainResourceDataBlock block);
     75typedef void (^WKFrameGetResourceDataBlock)(WKDataRef data, WKErrorRef error);
     76WK_EXPORT void WKFrameGetMainResourceData_b(WKFrameRef frame, WKFrameGetResourceDataBlock block);
     77WK_EXPORT void WKFrameGetResourceData_b(WKFrameRef frame, WKURLRef resourceURL, WKFrameGetResourceDataBlock block);
    7678#endif
    7779
  • trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp

    r76040 r76087  
    303303}
    304304
     305void WebFrameProxy::getResourceData(WebURL* resourceURL, PassRefPtr<DataCallback> callback)
     306{
     307    if (!m_page) {
     308        callback->invalidate();
     309        return;
     310    }
     311
     312    m_page->getResourceDataFromFrame(this, resourceURL, callback);
     313}
     314
    305315} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/WebFrameProxy.h

    r74571 r76087  
    108108    void getWebArchive(PassRefPtr<DataCallback>);
    109109    void getMainResourceData(PassRefPtr<DataCallback>);
     110    void getResourceData(WebURL*, PassRefPtr<DataCallback>);
    110111
    111112    void didStartProvisionalLoad(const String& url);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r76065 r76087  
    966966}
    967967
     968void WebPageProxy::getResourceDataFromFrame(WebFrameProxy* frame, WebURL* resourceURL, PassRefPtr<DataCallback> prpCallback)
     969{
     970    RefPtr<DataCallback> callback = prpCallback;
     971    uint64_t callbackID = callback->callbackID();
     972    m_dataCallbacks.set(callbackID, callback.get());
     973    process()->send(Messages::WebPage::GetResourceDataFromFrame(frame->frameID(), resourceURL->string(), callbackID), m_pageID);
     974}
     975
    968976void WebPageProxy::getWebArchiveOfFrame(WebFrameProxy* frame, PassRefPtr<DataCallback> prpCallback)
    969977{
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r76069 r76087  
    267267    void getContentsAsString(PassRefPtr<StringCallback>);
    268268    void getMainResourceDataOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>);
     269    void getResourceDataFromFrame(WebFrameProxy*, WebURL*, PassRefPtr<DataCallback>);
    269270    void getRenderTreeExternalRepresentation(PassRefPtr<StringCallback>);
    270271    void getSelectionOrContentsAsString(PassRefPtr<StringCallback>);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r76046 r76087  
    11351135}
    11361136
     1137void WebPage::getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID)
     1138{
     1139    CoreIPC::DataReference dataReference;
     1140
     1141    RefPtr<SharedBuffer> buffer;
     1142    if (WebFrame* frame = WebProcess::shared().webFrame(frameID)) {
     1143        if (DocumentLoader* loader = frame->coreFrame()->loader()->documentLoader()) {
     1144            if (RefPtr<ArchiveResource> subresource = loader->subresource(KURL(KURL(), resourceURL))) {
     1145                if (buffer = subresource->data())
     1146                    dataReference = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size());
     1147            }
     1148        }
     1149    }
     1150
     1151    send(Messages::WebPageProxy::DataCallback(dataReference, callbackID));
     1152}
     1153
    11371154void WebPage::getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
    11381155{
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r75979 r76087  
    365365    void getContentsAsString(uint64_t callbackID);
    366366    void getMainResourceDataOfFrame(uint64_t frameID, uint64_t callbackID);
     367    void getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID);
    367368    void getRenderTreeExternalRepresentation(uint64_t callbackID);
    368369    void getSelectionOrContentsAsString(uint64_t callbackID);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r75979 r76087  
    5757    GetContentsAsString(uint64_t callbackID)
    5858    GetMainResourceDataOfFrame(uint64_t frameID, uint64_t callbackID)
     59    GetResourceDataFromFrame(uint64_t frameID, WTF::String resourceURL, uint64_t callbackID)
    5960    GetRenderTreeExternalRepresentation(uint64_t callbackID)
    6061    GetSelectionOrContentsAsString(uint64_t callbackID)
Note: See TracChangeset for help on using the changeset viewer.