Changeset 147952 in webkit


Ignore:
Timestamp:
Apr 8, 2013 2:24:33 PM (11 years ago)
Author:
andersca@apple.com
Message:

Add an async version of ResourceHandle::didReceiveResponse
https://bugs.webkit.org/show_bug.cgi?id=114215

Reviewed by Sam Weinig.

Source/WebCore:

In order to support converting NSURLConnections to NSURLDownloads when using the network process
we need an async version of didReceiveResponse.

  • WebCore.exp.in:
  • platform/network/ResourceHandleClient.cpp:

(WebCore::ResourceHandleClient::didReceiveResponseAsync):
Just call continueDidReceiveResponse().

  • platform/network/mac/ResourceHandleMac.mm:

(WebCore::ResourceHandle::continueWillSendRequest):
Split up a single condition in two, making it easier to see which assertion fails.

(WebCore::ResourceHandle::continueDidReceiveResponse):
Call -[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse].

(WebCore::ResourceHandle::continueShouldUseCredentialStorage):
(WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
(WebCore::ResourceHandle::continueWillCacheResponse):
Split up a single condition in two, making it easier to see which assertion fails.

  • platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
  • platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:

(-[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse]):
Signal the semaphore.

(-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
Call didReceiveResponseAsync on the main thread and wait on the semaphore.

Source/WebKit2:

  • NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::didReceiveResponseAsync):
Send the message and then call continueDidReceiveResponse.

Location:
trunk/Source
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r147949 r147952  
     12013-04-08  Anders Carlsson  <andersca@apple.com>
     2
     3        Add an async version of ResourceHandle::didReceiveResponse
     4        https://bugs.webkit.org/show_bug.cgi?id=114215
     5
     6        Reviewed by Sam Weinig.
     7
     8        In order to support converting NSURLConnections to NSURLDownloads when using the network process
     9        we need an async version of didReceiveResponse.
     10
     11        * WebCore.exp.in:
     12        * platform/network/ResourceHandleClient.cpp:
     13        (WebCore::ResourceHandleClient::didReceiveResponseAsync):
     14        Just call continueDidReceiveResponse().
     15
     16        * platform/network/mac/ResourceHandleMac.mm:
     17        (WebCore::ResourceHandle::continueWillSendRequest):
     18        Split up a single condition in two, making it easier to see which assertion fails.
     19
     20        (WebCore::ResourceHandle::continueDidReceiveResponse):
     21        Call -[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse].
     22
     23        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
     24        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
     25        (WebCore::ResourceHandle::continueWillCacheResponse):
     26        Split up a single condition in two, making it easier to see which assertion fails.
     27
     28        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
     29        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
     30        (-[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse]):
     31        Signal the semaphore.
     32
     33        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
     34        Call didReceiveResponseAsync on the main thread and wait on the semaphore.
     35
    1362013-04-08  Beth Dakin  <bdakin@apple.com>
    237
  • trunk/Source/WebCore/WebCore.exp.in

    r147919 r147952  
    342342__ZN7WebCore14ResourceHandle25continueWillCacheResponseEP19NSCachedURLResponse
    343343__ZN7WebCore14ResourceHandle25loadResourceSynchronouslyEPNS_17NetworkingContextERKNS_15ResourceRequestENS_17StoredCredentialsERNS_13ResourceErrorERNS_16ResourceResponseERN3WTF6VectorIcLm0ENSB_15CrashOnOverflowEEE
     344__ZN7WebCore14ResourceHandle26continueDidReceiveResponseEv
    344345__ZN7WebCore14ResourceHandle26synchronousLoadRunLoopModeEv
    345346__ZN7WebCore14ResourceHandle34continueShouldUseCredentialStorageEb
     
    637638__ZN7WebCore20ResourceHandleClient20willSendRequestAsyncEPNS_14ResourceHandleERKNS_15ResourceRequestERKNS_16ResourceResponseE
    638639__ZN7WebCore20ResourceHandleClient22willCacheResponseAsyncEPNS_14ResourceHandleEP19NSCachedURLResponse
     640__ZN7WebCore20ResourceHandleClient23didReceiveResponseAsyncEPNS_14ResourceHandleERKNS_16ResourceResponseE
    639641__ZN7WebCore20ResourceHandleClient31shouldUseCredentialStorageAsyncEPNS_14ResourceHandleE
    640642__ZN7WebCore20ResourceHandleClient42canAuthenticateAgainstProtectionSpaceAsyncEPNS_14ResourceHandleERKNS_15ProtectionSpaceE
  • trunk/Source/WebCore/platform/network/ResourceHandle.h

    r147839 r147952  
    188188    // Called in response to ResourceHandleClient::willSendRequestAsync().
    189189    void continueWillSendRequest(const ResourceRequest&);
     190
     191    // Called in response to ResourceHandleClient::didReceiveResponseAsync().
     192    void continueDidReceiveResponse();
     193
    190194    // Called in response to ResourceHandleClient::shouldUseCredentialStorageAsync().
    191195    void continueShouldUseCredentialStorage(bool);
     196
    192197#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
    193198    // Called in response to ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync().
    194199    void continueCanAuthenticateAgainstProtectionSpace(bool);
    195200#endif
     201
    196202#if PLATFORM(MAC)
    197203    // Called in response to ResourceHandleClient::willCacheResponseAsync().
  • trunk/Source/WebCore/platform/network/ResourceHandleClient.cpp

    r146929 r147952  
    5858}
    5959
     60void ResourceHandleClient::didReceiveResponseAsync(ResourceHandle* handle, const ResourceResponse&)
     61{
     62    handle->continueDidReceiveResponse();
     63}
     64
    6065void ResourceHandleClient::shouldUseCredentialStorageAsync(ResourceHandle* handle)
    6166{
  • trunk/Source/WebCore/platform/network/ResourceHandleClient.h

    r147888 r147952  
    7676
    7777        virtual bool usesAsyncCallbacks() { return false; }
     78
    7879        // Client will pass an updated request using ResourceHandle::continueWillSendRequest() when ready.
    7980        virtual void willSendRequestAsync(ResourceHandle*, const ResourceRequest&, const ResourceResponse& redirectResponse);
     81
     82        // Client will call ResourceHandle::continueDidReceiveResponse() when ready.
     83        virtual void didReceiveResponseAsync(ResourceHandle*, const ResourceResponse&);
     84
    8085        // Client will pass an updated request using ResourceHandle::continueShouldUseCredentialStorage() when ready.
    8186        virtual void shouldUseCredentialStorageAsync(ResourceHandle*);
  • trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm

    r147476 r147952  
    398398void ResourceHandle::continueWillSendRequest(const ResourceRequest& request)
    399399{
    400     ASSERT(client() && client()->usesAsyncCallbacks());
     400    ASSERT(client());
     401    ASSERT(client()->usesAsyncCallbacks());
    401402
    402403    // Client call may not preserve the session, especially if the request is sent over IPC.
     
    405406        newRequest.setStorageSession(d->m_storageSession.get());
    406407    [(id)delegate() continueWillSendRequest:newRequest.nsURLRequest(UpdateHTTPBody)];
     408}
     409
     410void ResourceHandle::continueDidReceiveResponse()
     411{
     412    ASSERT(client());
     413    ASSERT(client()->usesAsyncCallbacks());
     414
     415    [delegate() continueDidReceiveResponse];
    407416}
    408417
     
    421430void ResourceHandle::continueShouldUseCredentialStorage(bool useCredentialStorage)
    422431{
    423     ASSERT(client() && client()->usesAsyncCallbacks());
     432    ASSERT(client());
     433    ASSERT(client()->usesAsyncCallbacks());
    424434
    425435    [(id)delegate() continueShouldUseCredentialStorage:useCredentialStorage];
     
    515525void ResourceHandle::continueCanAuthenticateAgainstProtectionSpace(bool result)
    516526{
    517     ASSERT(client() && client()->usesAsyncCallbacks());
     527    ASSERT(client());
     528    ASSERT(client()->usesAsyncCallbacks());
    518529
    519530    [(id)delegate() continueCanAuthenticateAgainstProtectionSpace:result];
     
    577588void ResourceHandle::continueWillCacheResponse(NSCachedURLResponse *response)
    578589{
    579     ASSERT(client() && client()->usesAsyncCallbacks());
     590    ASSERT(client());
     591    ASSERT(client()->usesAsyncCallbacks());
    580592
    581593    [(id)delegate() continueWillCacheResponse:response];
  • trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h

    r146929 r147952  
    4545    BOOL m_boolResult;
    4646}
     47
    4748- (id)initWithHandle:(WebCore::ResourceHandle*)handle;
    4849- (void)detachHandle;
    4950- (void)continueWillSendRequest:(NSURLRequest *)newRequest;
     51- (void)continueDidReceiveResponse;
    5052- (void)continueShouldUseCredentialStorage:(BOOL)useCredentialStorage;
    5153#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
  • trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm

    r147287 r147952  
    8282}
    8383
     84- (void)continueDidReceiveResponse
     85{
     86    dispatch_semaphore_signal(m_semaphore);
     87}
     88
    8489- (void)continueShouldUseCredentialStorage:(BOOL)useCredentialStorage
    8590{
     
    219224    LOG(Network, "Handle %p delegate connection:%p didReceiveResponse:%p (HTTP status %d, reported MIMEType '%s')", m_handle, connection, r, [r respondsToSelector:@selector(statusCode)] ? [(id)r statusCode] : 0, [[r MIMEType] UTF8String]);
    220225
    221     dispatch_async(dispatch_get_main_queue(), ^{
    222         if (!m_handle || !m_handle->client())
    223             return;
     226    RetainPtr<id> protector(self);
     227
     228    dispatch_async(dispatch_get_main_queue(), ^{
     229        if (!m_handle) {
     230            dispatch_semaphore_signal(m_semaphore);
     231            return;
     232        }
    224233
    225234        // Avoid MIME type sniffing if the response comes back as 304 Not Modified.
     
    231240            [r _setMIMEType:@"text/html"];
    232241
    233         m_handle->client()->didReceiveResponse(m_handle, r);
    234     });
     242        m_handle->client()->didReceiveResponseAsync(m_handle, r);
     243    });
     244
     245    dispatch_semaphore_wait(m_semaphore, DISPATCH_TIME_FOREVER);
    235246}
    236247
  • trunk/Source/WebKit2/ChangeLog

    r147927 r147952  
     12013-04-08  Anders Carlsson  <andersca@apple.com>
     2
     3        Add an async version of ResourceHandle::didReceiveResponse
     4        https://bugs.webkit.org/show_bug.cgi?id=114215
     5
     6        Reviewed by Sam Weinig.
     7
     8        * NetworkProcess/NetworkResourceLoader.cpp:
     9        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
     10        Send the message and then call continueDidReceiveResponse.
     11
    1122013-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>
    213
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp

    r147848 r147952  
    198198}
    199199
    200 void NetworkResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& response)
     200void NetworkResourceLoader::didReceiveResponseAsync(ResourceHandle*, const ResourceResponse& response)
    201201{
    202202    // FIXME (NetworkProcess): Cache the response.
     
    205205
    206206    sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(response, PlatformCertificateInfo(response)));
     207
     208    m_handle->continueDidReceiveResponse();
    207209}
    208210
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h

    r147848 r147952  
    6868    virtual void willSendRequestAsync(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) OVERRIDE;
    6969    virtual void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE;
    70     virtual void didReceiveResponse(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) OVERRIDE;
     70    virtual void didReceiveResponseAsync(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) OVERRIDE;
    7171    virtual void didReceiveData(WebCore::ResourceHandle*, const char*, int, int encodedDataLength) OVERRIDE;
    7272    virtual void didReceiveBuffer(WebCore::ResourceHandle*, PassRefPtr<WebCore::SharedBuffer>, int encodedDataLength) OVERRIDE;
Note: See TracChangeset for help on using the changeset viewer.