Changeset 174029 in webkit


Ignore:
Timestamp:
Sep 26, 2014 4:38:30 PM (10 years ago)
Author:
andersca@apple.com
Message:

Add API for loading local files
https://bugs.webkit.org/show_bug.cgi?id=137153
rdar://problem/17761459

Reviewed by Oliver Hunt.

  • UIProcess/API/Cocoa/WKWebView.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView loadFileURL:allowingReadAccessToURL:]):
Load the file, wrapping the navigation ID in a WKNavigation using createLoadRequestNavigation.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadFile):

  • UIProcess/WebPageProxy.h:

Return the navigation ID (or 0 if the navigation failed).

Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r174016 r174029  
     12014-09-26  Anders Carlsson  <andersca@apple.com>
     2
     3        Add API for loading local files
     4        https://bugs.webkit.org/show_bug.cgi?id=137153
     5        rdar://problem/17761459
     6
     7        Reviewed by Oliver Hunt.
     8
     9        * UIProcess/API/Cocoa/WKWebView.h:
     10        * UIProcess/API/Cocoa/WKWebView.mm:
     11        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):
     12        Load the file, wrapping the navigation ID in a WKNavigation using createLoadRequestNavigation.
     13
     14        * UIProcess/WebPageProxy.cpp:
     15        (WebKit::WebPageProxy::loadFile):
     16        * UIProcess/WebPageProxy.h:
     17        Return the navigation ID (or 0 if the navigation failed).
     18
    1192014-09-26  Timothy Hatcher  <timothy@apple.com>
    220
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.h

    r170298 r174029  
    9090- (WKNavigation *)loadRequest:(NSURLRequest *)request;
    9191
     92/*! @abstract Navigates to the requested file URL on the filesystem.
     93 @param URL The file URL to which to navigate.
     94 @param readAccessURL The URL to allow read access to.
     95 @discussion If readAccessURL references a single file, only that file may be loaded by WebKit.
     96 If readAccessURL references a directory, files inside that file may be loaded by WebKit.
     97 @result A new navigation for the given file URL.
     98 */
     99- (WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
     100
    92101/*! @abstract Sets the webpage contents and base URL.
    93102 @param string The string to use as the contents of the webpage.
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r173722 r174029  
    407407}
    408408
     409- (WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL
     410{
     411    if (![URL isFileURL])
     412        [NSException raise:NSInvalidArgumentException format:@"%@ is not a file URL", URL];
     413
     414    if (![readAccessURL isFileURL])
     415        [NSException raise:NSInvalidArgumentException format:@"%@ is not a file URL", readAccessURL];
     416
     417    uint64_t navigationID = _page->loadFile([URL _web_originalDataAsWTFString], [readAccessURL _web_originalDataAsWTFString]);
     418    if (!navigationID)
     419        return nil;
     420
     421    auto navigation = _navigationState->createLoadRequestNavigation(navigationID, [NSURLRequest requestWithURL:URL]);
     422
     423    return navigation.autorelease();
     424}
     425
    409426- (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
    410427{
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r173748 r174029  
    741741}
    742742
    743 void WebPageProxy::loadFile(const String& fileURLString, const String& resourceDirectoryURLString, API::Object* userData)
     743uint64_t WebPageProxy::loadFile(const String& fileURLString, const String& resourceDirectoryURLString, API::Object* userData)
    744744{
    745745    if (m_isClosed)
    746         return;
     746        return 0;
    747747
    748748    if (!isValid())
     
    751751    URL fileURL = URL(URL(), fileURLString);
    752752    if (!fileURL.isLocalFile())
    753         return;
     753        return 0;
    754754
    755755    URL resourceDirectoryURL;
     
    759759        resourceDirectoryURL = URL(URL(), resourceDirectoryURLString);
    760760        if (!resourceDirectoryURL.isLocalFile())
    761             return;
    762     }
     761            return 0;
     762    }
     763
     764    uint64_t navigationID = generateNavigationID();
     765
     766    auto transaction = m_pageLoadState.transaction();
     767
     768    m_pageLoadState.setPendingAPIRequestURL(transaction, fileURLString);
    763769
    764770    String resourceDirectoryPath = resourceDirectoryURL.fileSystemPath();
     
    767773    SandboxExtension::createHandle(resourceDirectoryPath, SandboxExtension::ReadOnly, sandboxExtensionHandle);
    768774    m_process->assumeReadAccessToBaseURL(resourceDirectoryURL);
    769     m_process->send(Messages::WebPage::LoadRequest(generateNavigationID(), fileURL, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, process())), m_pageID);
     775    m_process->send(Messages::WebPage::LoadRequest(navigationID, fileURL, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, process())), m_pageID);
    770776    m_process->responsivenessTimer()->start();
     777
     778    return navigationID;
    771779}
    772780
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r173748 r174029  
    303303
    304304    uint64_t loadRequest(const WebCore::ResourceRequest&, API::Object* userData = nullptr);
    305     void loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
     305    uint64_t loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
    306306    void loadData(API::Data*, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr);
    307307    uint64_t loadHTMLString(const String& htmlString, const String& baseURL, API::Object* userData = nullptr);
Note: See TracChangeset for help on using the changeset viewer.