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;