Changeset 70097 in webkit


Ignore:
Timestamp:
Oct 19, 2010 3:45:36 PM (14 years ago)
Author:
weinig@apple.com
Message:

Add alternateHTMLString and unreachableURL API to WebKit2
<rdar://problem/8557864>
https://bugs.webkit.org/show_bug.cgi?id=47938

Reviewed by Anders Carlsson.

  • UIProcess/API/C/WKFrame.cpp:

(WKFrameCopyUnreachableURL):

  • UIProcess/API/C/WKFrame.h:

Add accessor for the unreachableURL if one is set. It will only be
set during a loadAlternateHTMLString and will be unset on the next normal
didStartProvisionalLoadForFrame call.

  • UIProcess/API/C/WKPage.cpp:

(WKPageLoadHTMLString): Remove whitespace.
(WKPageLoadAlternateHTMLString):

  • UIProcess/API/C/WKPage.h:

Add function to load a string as "alternate", meant for use as error pages.

  • UIProcess/WebFrameProxy.h:

(WebKit::WebFrameProxy::setUnreachableURL):
(WebKit::WebFrameProxy::unreachableURL):
Add setter/getter for the unreachableURL.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadAlternateHTMLString):
Plumb through the call to loadAlternateHTMLString to the WebProcess
and set the main frame's unreachableURL. This does nothing if no pages
have ever been loaded in this page.

(WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
If this is not a provisional load of substitute data for an unreachableURL
(e.g. someone who called WKPageLoadAlternateHTMLString), reset the
frame's unreachableURL.

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:

Update function signatures.

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
Pass whether or not this is a load of SubstituteData for an unreachableURL
to the UIProcess.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::loadData):
(WebKit::WebPage::loadAlternateHTMLString):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:

Plumb through the loading of the alternate HTML string.

Location:
trunk/WebKit2
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r70095 r70097  
     12010-10-19  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Add alternateHTMLString and unreachableURL API to WebKit2
     6        <rdar://problem/8557864>
     7        https://bugs.webkit.org/show_bug.cgi?id=47938
     8
     9        * UIProcess/API/C/WKFrame.cpp:
     10        (WKFrameCopyUnreachableURL):
     11        * UIProcess/API/C/WKFrame.h:
     12        Add accessor for the unreachableURL if one is set. It will only be
     13        set during a loadAlternateHTMLString and will be unset on the next normal
     14        didStartProvisionalLoadForFrame call.
     15
     16        * UIProcess/API/C/WKPage.cpp:
     17        (WKPageLoadHTMLString): Remove whitespace.
     18        (WKPageLoadAlternateHTMLString):
     19        * UIProcess/API/C/WKPage.h:
     20        Add function to load a string as "alternate", meant for use as error pages.
     21
     22        * UIProcess/WebFrameProxy.h:
     23        (WebKit::WebFrameProxy::setUnreachableURL):
     24        (WebKit::WebFrameProxy::unreachableURL):
     25        Add setter/getter for the unreachableURL.
     26
     27        * UIProcess/WebPageProxy.cpp:
     28        (WebKit::WebPageProxy::loadAlternateHTMLString):
     29        Plumb through the call to loadAlternateHTMLString to the WebProcess
     30        and set the main frame's unreachableURL. This does nothing if no pages
     31        have ever been loaded in this page.
     32
     33        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
     34        If this is not a provisional load of substitute data for an unreachableURL
     35        (e.g. someone who called WKPageLoadAlternateHTMLString), reset the
     36        frame's unreachableURL.
     37
     38        * UIProcess/WebPageProxy.h:
     39        * UIProcess/WebPageProxy.messages.in:
     40        Update function signatures.
     41
     42        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     43        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
     44        Pass whether or not this is a load of SubstituteData for an unreachableURL
     45        to the UIProcess.
     46
     47        * WebProcess/WebPage/WebPage.cpp:
     48        (WebKit::WebPage::loadData):
     49        (WebKit::WebPage::loadAlternateHTMLString):
     50        * WebProcess/WebPage/WebPage.h:
     51        * WebProcess/WebPage/WebPage.messages.in:
     52        Plumb through the loading of the alternate HTML string.
     53
    1542010-10-19  Alexey Proskuryakov  <ap@apple.com>
    255
  • trunk/WebKit2/UIProcess/API/C/WKFrame.cpp

    r69214 r70097  
    6767}
    6868
     69WKURLRef WKFrameCopyUnreachableURL(WKFrameRef frameRef)
     70{
     71    return toCopiedURLAPI(toImpl(frameRef)->unreachableURL());
     72}
     73
    6974WKStringRef WKFrameCopyMIMEType(WKFrameRef frameRef)
    7075{
  • trunk/WebKit2/UIProcess/API/C/WKFrame.h

    r69116 r70097  
    5151WK_EXPORT WKURLRef WKFrameCopyURL(WKFrameRef frame);
    5252
     53WK_EXPORT WKURLRef WKFrameCopyUnreachableURL(WKFrameRef frame);
     54
    5355WK_EXPORT WKStringRef WKFrameCopyMIMEType(WKFrameRef frame);
    5456
  • trunk/WebKit2/UIProcess/API/C/WKPage.cpp

    r69978 r70097  
    6060void WKPageLoadHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef)
    6161{
    62     toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef));   
     62    toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef));
     63}
     64
     65void WKPageLoadAlternateHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKURLRef unreachableURLRef)
     66{
     67    toImpl(pageRef)->loadAlternateHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toWTFString(unreachableURLRef));
    6368}
    6469
  • trunk/WebKit2/UIProcess/API/C/WKPage.h

    r70062 r70097  
    184184WK_EXPORT void WKPageLoadURLRequest(WKPageRef page, WKURLRequestRef urlRequest);
    185185WK_EXPORT void WKPageLoadHTMLString(WKPageRef page, WKStringRef htmlString, WKURLRef baseURL);
     186WK_EXPORT void WKPageLoadAlternateHTMLString(WKPageRef page, WKStringRef htmlString, WKURLRef baseURL, WKURLRef unreachableURL);
    186187WK_EXPORT void WKPageLoadPlainTextString(WKPageRef page, WKStringRef plainTextString);
    187188
  • trunk/WebKit2/UIProcess/WebFrameProxy.h

    r69461 r70097  
    7575    const String& provisionalURL() const { return m_provisionalURL; }
    7676
     77    void setUnreachableURL(const String& unreachableURL) { m_unreachableURL = unreachableURL; }
     78    const String& unreachableURL() const { return m_unreachableURL; }
     79
    7780    void setMIMEType(const String& mimeType) { m_MIMEType = mimeType; }
    7881    const String& mimeType() const { return m_MIMEType; }
     
    102105    String m_url;
    103106    String m_provisionalURL;
     107    String m_unreachableURL;
    104108    String m_MIMEType;
    105109    RefPtr<WebCertificateInfo> m_certificateInfo;
  • trunk/WebKit2/UIProcess/WebPageProxy.cpp

    r70062 r70097  
    263263}
    264264
     265void WebPageProxy::loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL)
     266{
     267    if (!isValid())
     268        return;
     269
     270    if (!m_mainFrame)
     271        return;
     272
     273    m_mainFrame->setUnreachableURL(unreachableURL);
     274    process()->send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL), m_pageID);
     275}
     276
    265277void WebPageProxy::loadPlainTextString(const String& string)
    266278{
     
    616628}
    617629
    618 void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, CoreIPC::ArgumentDecoder* arguments)
     630void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, bool loadingSubstituteDataForUnreachableURL, CoreIPC::ArgumentDecoder* arguments)
    619631{
    620632    RefPtr<APIObject> userData;
     
    624636
    625637    WebFrameProxy* frame = process()->webFrame(frameID);
     638
     639    if (!loadingSubstituteDataForUnreachableURL)
     640        frame->setUnreachableURL(String());
    626641
    627642    frame->didStartProvisionalLoad(url);
  • trunk/WebKit2/UIProcess/WebPageProxy.h

    r70062 r70097  
    126126    void loadURLRequest(WebURLRequest*);
    127127    void loadHTMLString(const String& htmlString, const String& baseURL);
     128    void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL);
    128129    void loadPlainTextString(const String& string);
    129130
     
    234235    void didCreateSubFrame(uint64_t frameID);
    235236
    236     void didStartProvisionalLoadForFrame(uint64_t frameID, const String&, CoreIPC::ArgumentDecoder*);
     237    void didStartProvisionalLoadForFrame(uint64_t frameID, const String&, bool loadingSubstituteDataForUnreachableURL, CoreIPC::ArgumentDecoder*);
    237238    void didReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, const String&, CoreIPC::ArgumentDecoder*);
    238239    void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::ResourceError&, CoreIPC::ArgumentDecoder*);
  • trunk/WebKit2/UIProcess/WebPageProxy.messages.in

    r70062 r70097  
    6767    DidReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, WTF::String url, WebKit::InjectedBundleUserMessageEncoder userData)
    6868    DidRemoveFrameFromHierarchy(uint64_t frameID, WebKit::InjectedBundleUserMessageEncoder userData)
    69     DidStartProvisionalLoadForFrame(uint64_t frameID, WTF::String url, WebKit::InjectedBundleUserMessageEncoder userData)
     69    DidStartProvisionalLoadForFrame(uint64_t frameID, WTF::String url, bool loadingSubstituteDataForUnreachableURL, WebKit::InjectedBundleUserMessageEncoder userData)
    7070    DidReceiveTitleForFrame(uint64_t frameID, WTF::String title, WebKit::InjectedBundleUserMessageEncoder userData)
    7171
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r70062 r70097  
    299299    webPage->injectedBundleLoaderClient().didStartProvisionalLoadForFrame(webPage, m_frame, userData);
    300300
     301
     302    bool loadingSubstituteDataForUnreachableURL = !provisionalLoader->unreachableURL().isNull();
     303
    301304    // Notify the UIProcess.
    302     WebProcess::shared().connection()->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), url, InjectedBundleUserMessageEncoder(userData.get())), webPage->pageID());
     305    WebProcess::shared().connection()->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), url, loadingSubstituteDataForUnreachableURL, InjectedBundleUserMessageEncoder(userData.get())), webPage->pageID());
    303306}
    304307
  • trunk/WebKit2/WebProcess/WebPage/WebPage.cpp

    r70004 r70097  
    307307}
    308308
    309 void WebPage::loadData(PassRefPtr<SharedBuffer> sharedBuffer, const String& MIMEType, const String& encodingName, const KURL& baseURL, const KURL& failingURL)
     309void WebPage::loadData(PassRefPtr<SharedBuffer> sharedBuffer, const String& MIMEType, const String& encodingName, const KURL& baseURL, const KURL& unreachableURL)
    310310{
    311311    ResourceRequest request(baseURL);
    312     SubstituteData substituteData(sharedBuffer, MIMEType, encodingName, failingURL);
     312    SubstituteData substituteData(sharedBuffer, MIMEType, encodingName, unreachableURL);
    313313    m_mainFrame->coreFrame()->loader()->load(request, substituteData, false);
    314314}
     
    319319    KURL baseURL = baseURLString.isEmpty() ? blankURL() : KURL(KURL(), baseURLString);
    320320    loadData(sharedBuffer, "text/html", "utf-16", baseURL, KURL());
     321}
     322
     323void WebPage::loadAlternateHTMLString(const String& htmlString, const String& baseURLString, const String& unreachableURLString)
     324{
     325    RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(htmlString.characters()), htmlString.length() * sizeof(UChar));
     326    KURL baseURL = baseURLString.isEmpty() ? blankURL() : KURL(KURL(), baseURLString);
     327    KURL unreachableURL = unreachableURLString.isEmpty() ? KURL() : KURL(KURL(), unreachableURLString)  ;
     328    loadData(sharedBuffer, "text/html", "utf-16", baseURL, unreachableURL);
    321329}
    322330
  • trunk/WebKit2/WebProcess/WebPage/WebPage.h

    r69997 r70097  
    190190    void loadURLRequest(const WebCore::ResourceRequest&);
    191191    void loadHTMLString(const String& htmlString, const String& baseURL);
     192    void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL);
    192193    void loadPlainTextString(const String&);
    193194    void reload(bool reloadFromOrigin);
  • trunk/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r69978 r70097  
    3636    GoForward(uint64_t backForwardItemID)
    3737    GoToBackForwardItem(uint64_t backForwardItemID)
    38     LoadHTMLString(WTF::String htmlString, WTF::String url)
     38    LoadHTMLString(WTF::String htmlString, WTF::String baseURL)
     39    LoadAlternateHTMLString(WTF::String htmlString, WTF::String baseURL, WTF::String unreachableURL);
    3940    LoadPlainTextString(WTF::String string)
    4041    LoadURL(WTF::String url)
Note: See TracChangeset for help on using the changeset viewer.