Title: [147952] trunk/Source
Revision
147952
Author
[email protected]
Date
2013-04-08 14:24:33 -0700 (Mon, 08 Apr 2013)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (147951 => 147952)


--- trunk/Source/WebCore/ChangeLog	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/ChangeLog	2013-04-08 21:24:33 UTC (rev 147952)
@@ -1,3 +1,38 @@
+2013-04-08  Anders Carlsson  <[email protected]>
+
+        Add an async version of ResourceHandle::didReceiveResponse
+        https://bugs.webkit.org/show_bug.cgi?id=114215
+
+        Reviewed by Sam Weinig.
+
+        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.
+
 2013-04-08  Beth Dakin  <[email protected]>
 
         Crash in ScrollingCoordinator::mainThreadScrollingReasons() when going back

Modified: trunk/Source/WebCore/WebCore.exp.in (147951 => 147952)


--- trunk/Source/WebCore/WebCore.exp.in	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/WebCore.exp.in	2013-04-08 21:24:33 UTC (rev 147952)
@@ -341,6 +341,7 @@
 __ZN7WebCore14ResourceHandle23continueWillSendRequestERKNS_15ResourceRequestE
 __ZN7WebCore14ResourceHandle25continueWillCacheResponseEP19NSCachedURLResponse
 __ZN7WebCore14ResourceHandle25loadResourceSynchronouslyEPNS_17NetworkingContextERKNS_15ResourceRequestENS_17StoredCredentialsERNS_13ResourceErrorERNS_16ResourceResponseERN3WTF6VectorIcLm0ENSB_15CrashOnOverflowEEE
+__ZN7WebCore14ResourceHandle26continueDidReceiveResponseEv
 __ZN7WebCore14ResourceHandle26synchronousLoadRunLoopModeEv
 __ZN7WebCore14ResourceHandle34continueShouldUseCredentialStorageEb
 __ZN7WebCore14ResourceHandle45continueCanAuthenticateAgainstProtectionSpaceEb
@@ -636,6 +637,7 @@
 __ZN7WebCore20ResourceHandleClient16didReceiveBufferEPNS_14ResourceHandleEN3WTF10PassRefPtrINS_12SharedBufferEEEi
 __ZN7WebCore20ResourceHandleClient20willSendRequestAsyncEPNS_14ResourceHandleERKNS_15ResourceRequestERKNS_16ResourceResponseE
 __ZN7WebCore20ResourceHandleClient22willCacheResponseAsyncEPNS_14ResourceHandleEP19NSCachedURLResponse
+__ZN7WebCore20ResourceHandleClient23didReceiveResponseAsyncEPNS_14ResourceHandleERKNS_16ResourceResponseE
 __ZN7WebCore20ResourceHandleClient31shouldUseCredentialStorageAsyncEPNS_14ResourceHandleE
 __ZN7WebCore20ResourceHandleClient42canAuthenticateAgainstProtectionSpaceAsyncEPNS_14ResourceHandleERKNS_15ProtectionSpaceE
 __ZN7WebCore20ResourceHandleClientC2Ev

Modified: trunk/Source/WebCore/platform/network/ResourceHandle.h (147951 => 147952)


--- trunk/Source/WebCore/platform/network/ResourceHandle.h	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/ResourceHandle.h	2013-04-08 21:24:33 UTC (rev 147952)
@@ -187,12 +187,18 @@
 
     // Called in response to ResourceHandleClient::willSendRequestAsync().
     void continueWillSendRequest(const ResourceRequest&);
+
+    // Called in response to ResourceHandleClient::didReceiveResponseAsync().
+    void continueDidReceiveResponse();
+
     // Called in response to ResourceHandleClient::shouldUseCredentialStorageAsync().
     void continueShouldUseCredentialStorage(bool);
+
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     // Called in response to ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync().
     void continueCanAuthenticateAgainstProtectionSpace(bool);
 #endif
+
 #if PLATFORM(MAC)
     // Called in response to ResourceHandleClient::willCacheResponseAsync().
     void continueWillCacheResponse(NSCachedURLResponse *);

Modified: trunk/Source/WebCore/platform/network/ResourceHandleClient.cpp (147951 => 147952)


--- trunk/Source/WebCore/platform/network/ResourceHandleClient.cpp	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/ResourceHandleClient.cpp	2013-04-08 21:24:33 UTC (rev 147952)
@@ -57,6 +57,11 @@
     handle->continueWillSendRequest(request);
 }
 
+void ResourceHandleClient::didReceiveResponseAsync(ResourceHandle* handle, const ResourceResponse&)
+{
+    handle->continueDidReceiveResponse();
+}
+
 void ResourceHandleClient::shouldUseCredentialStorageAsync(ResourceHandle* handle)
 {
     handle->continueShouldUseCredentialStorage(false);

Modified: trunk/Source/WebCore/platform/network/ResourceHandleClient.h (147951 => 147952)


--- trunk/Source/WebCore/platform/network/ResourceHandleClient.h	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/ResourceHandleClient.h	2013-04-08 21:24:33 UTC (rev 147952)
@@ -75,8 +75,13 @@
         virtual void cannotShowURL(ResourceHandle*) { }
 
         virtual bool usesAsyncCallbacks() { return false; }
+
         // Client will pass an updated request using ResourceHandle::continueWillSendRequest() when ready.
         virtual void willSendRequestAsync(ResourceHandle*, const ResourceRequest&, const ResourceResponse& redirectResponse);
+
+        // Client will call ResourceHandle::continueDidReceiveResponse() when ready.
+        virtual void didReceiveResponseAsync(ResourceHandle*, const ResourceResponse&);
+
         // Client will pass an updated request using ResourceHandle::continueShouldUseCredentialStorage() when ready.
         virtual void shouldUseCredentialStorageAsync(ResourceHandle*);
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm (147951 => 147952)


--- trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2013-04-08 21:24:33 UTC (rev 147952)
@@ -397,7 +397,8 @@
 
 void ResourceHandle::continueWillSendRequest(const ResourceRequest& request)
 {
-    ASSERT(client() && client()->usesAsyncCallbacks());
+    ASSERT(client());
+    ASSERT(client()->usesAsyncCallbacks());
 
     // Client call may not preserve the session, especially if the request is sent over IPC.
     ResourceRequest newRequest = request;
@@ -406,6 +407,14 @@
     [(id)delegate() continueWillSendRequest:newRequest.nsURLRequest(UpdateHTTPBody)];
 }
 
+void ResourceHandle::continueDidReceiveResponse()
+{
+    ASSERT(client());
+    ASSERT(client()->usesAsyncCallbacks());
+
+    [delegate() continueDidReceiveResponse];
+}
+
 bool ResourceHandle::shouldUseCredentialStorage()
 {
     if (client()->usesAsyncCallbacks()) {
@@ -420,7 +429,8 @@
 
 void ResourceHandle::continueShouldUseCredentialStorage(bool useCredentialStorage)
 {
-    ASSERT(client() && client()->usesAsyncCallbacks());
+    ASSERT(client());
+    ASSERT(client()->usesAsyncCallbacks());
 
     [(id)delegate() continueShouldUseCredentialStorage:useCredentialStorage];
 }
@@ -514,7 +524,8 @@
 
 void ResourceHandle::continueCanAuthenticateAgainstProtectionSpace(bool result)
 {
-    ASSERT(client() && client()->usesAsyncCallbacks());
+    ASSERT(client());
+    ASSERT(client()->usesAsyncCallbacks());
 
     [(id)delegate() continueCanAuthenticateAgainstProtectionSpace:result];
 }
@@ -576,7 +587,8 @@
 
 void ResourceHandle::continueWillCacheResponse(NSCachedURLResponse *response)
 {
-    ASSERT(client() && client()->usesAsyncCallbacks());
+    ASSERT(client());
+    ASSERT(client()->usesAsyncCallbacks());
 
     [(id)delegate() continueWillCacheResponse:response];
 }

Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h (147951 => 147952)


--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h	2013-04-08 21:24:33 UTC (rev 147952)
@@ -44,9 +44,11 @@
     RetainPtr<NSCachedURLResponse> m_cachedResponseResult;
     BOOL m_boolResult;
 }
+
 - (id)initWithHandle:(WebCore::ResourceHandle*)handle;
 - (void)detachHandle;
 - (void)continueWillSendRequest:(NSURLRequest *)newRequest;
+- (void)continueDidReceiveResponse;
 - (void)continueShouldUseCredentialStorage:(BOOL)useCredentialStorage;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
 - (void)continueCanAuthenticateAgainstProtectionSpace:(BOOL)canAuthenticate;

Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm (147951 => 147952)


--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm	2013-04-08 21:24:33 UTC (rev 147952)
@@ -81,6 +81,11 @@
     dispatch_semaphore_signal(m_semaphore);
 }
 
+- (void)continueDidReceiveResponse
+{
+    dispatch_semaphore_signal(m_semaphore);
+}
+
 - (void)continueShouldUseCredentialStorage:(BOOL)useCredentialStorage
 {
     m_boolResult = useCredentialStorage;
@@ -218,9 +223,13 @@
 
     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]);
 
+    RetainPtr<id> protector(self);
+
     dispatch_async(dispatch_get_main_queue(), ^{
-        if (!m_handle || !m_handle->client())
+        if (!m_handle) {
+            dispatch_semaphore_signal(m_semaphore);
             return;
+        }
 
         // Avoid MIME type sniffing if the response comes back as 304 Not Modified.
         int statusCode = [r respondsToSelector:@selector(statusCode)] ? [(id)r statusCode] : 0;
@@ -230,8 +239,10 @@
         if ([m_handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) _propertyForKey:@"ForceHTMLMIMEType"])
             [r _setMIMEType:@"text/html"];
 
-        m_handle->client()->didReceiveResponse(m_handle, r);
+        m_handle->client()->didReceiveResponseAsync(m_handle, r);
     });
+
+    dispatch_semaphore_wait(m_semaphore, DISPATCH_TIME_FOREVER);
 }
 
 #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)

Modified: trunk/Source/WebKit2/ChangeLog (147951 => 147952)


--- trunk/Source/WebKit2/ChangeLog	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebKit2/ChangeLog	2013-04-08 21:24:33 UTC (rev 147952)
@@ -1,3 +1,14 @@
+2013-04-08  Anders Carlsson  <[email protected]>
+
+        Add an async version of ResourceHandle::didReceiveResponse
+        https://bugs.webkit.org/show_bug.cgi?id=114215
+
+        Reviewed by Sam Weinig.
+
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
+        Send the message and then call continueDidReceiveResponse.
+
 2013-04-08  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Build Platform as a separate static library

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (147951 => 147952)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2013-04-08 21:24:33 UTC (rev 147952)
@@ -197,13 +197,15 @@
     scheduleCleanupOnMainThread();
 }
 
-void NetworkResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& response)
+void NetworkResourceLoader::didReceiveResponseAsync(ResourceHandle*, const ResourceResponse& response)
 {
     // FIXME (NetworkProcess): Cache the response.
     if (FormData* formData = request().httpBody())
         formData->removeGeneratedFilesIfNeeded();
 
     sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(response, PlatformCertificateInfo(response)));
+
+    m_handle->continueDidReceiveResponse();
 }
 
 void NetworkResourceLoader::didReceiveData(ResourceHandle*, const char* data, int length, int encodedDataLength)

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (147951 => 147952)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2013-04-08 21:07:45 UTC (rev 147951)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2013-04-08 21:24:33 UTC (rev 147952)
@@ -67,7 +67,7 @@
     // ResourceHandleClient methods
     virtual void willSendRequestAsync(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) OVERRIDE;
     virtual void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE;
-    virtual void didReceiveResponse(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) OVERRIDE;
+    virtual void didReceiveResponseAsync(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) OVERRIDE;
     virtual void didReceiveData(WebCore::ResourceHandle*, const char*, int, int encodedDataLength) OVERRIDE;
     virtual void didReceiveBuffer(WebCore::ResourceHandle*, PassRefPtr<WebCore::SharedBuffer>, int encodedDataLength) OVERRIDE;
     virtual void didFinishLoading(WebCore::ResourceHandle*, double finishTime) OVERRIDE;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to