Title: [191848] trunk/Source/WebKit2
Revision
191848
Author
[email protected]
Date
2015-10-31 17:14:49 -0700 (Sat, 31 Oct 2015)

Log Message

Share more code between NETWORK_SESSION and non-NETWORK_SESSION NetworkResourceLoaders
https://bugs.webkit.org/show_bug.cgi?id=150742

Reviewed by Darin Adler.

r191457 added enough code to NetworkResourceLoader to load most resources successfully if there are no errors.
It passed about 80% of LayoutTests/http and crashed sometimes.
This passes about 95% of LayoutTests/http and does not crash on any of the LayoutTests/http.
It should not change behavior of the non-NETWORK_SESSION code which is currently the default in trunk.

* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::abort):
(WebKit::NetworkResourceLoader::sharedDidReceiveResponse):
(WebKit::NetworkResourceLoader::sharedDidReceiveBuffer):
(WebKit::NetworkResourceLoader::sharedDidFinishLoading):
(WebKit::NetworkResourceLoader::sharedDidFail):
(WebKit::NetworkResourceLoader::sharedWillSendRedirectedRequest):
(WebKit::NetworkResourceLoader::willPerformHTTPRedirection):
(WebKit::NetworkResourceLoader::didReceiveChallenge):
(WebKit::NetworkResourceLoader::didReceiveResponse):
(WebKit::NetworkResourceLoader::didReceiveData):
(WebKit::NetworkResourceLoader::didCompleteWithError):
(WebKit::NetworkResourceLoader::didReceiveResponseAsync):
(WebKit::NetworkResourceLoader::didReceiveBuffer):
(WebKit::NetworkResourceLoader::didFinishLoading):
(WebKit::NetworkResourceLoader::didFail):
(WebKit::NetworkResourceLoader::willSendRequestAsync):
* NetworkProcess/NetworkResourceLoader.h:
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (191847 => 191848)


--- trunk/Source/WebKit2/ChangeLog	2015-10-31 23:17:43 UTC (rev 191847)
+++ trunk/Source/WebKit2/ChangeLog	2015-11-01 00:14:49 UTC (rev 191848)
@@ -1,3 +1,36 @@
+2015-10-31  Alex Christensen  <[email protected]>
+
+        Share more code between NETWORK_SESSION and non-NETWORK_SESSION NetworkResourceLoaders
+        https://bugs.webkit.org/show_bug.cgi?id=150742
+
+        Reviewed by Darin Adler.
+
+        r191457 added enough code to NetworkResourceLoader to load most resources successfully if there are no errors.
+        It passed about 80% of LayoutTests/http and crashed sometimes.
+        This passes about 95% of LayoutTests/http and does not crash on any of the LayoutTests/http.
+        It should not change behavior of the non-NETWORK_SESSION code which is currently the default in trunk.
+
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::abort):
+        (WebKit::NetworkResourceLoader::sharedDidReceiveResponse):
+        (WebKit::NetworkResourceLoader::sharedDidReceiveBuffer):
+        (WebKit::NetworkResourceLoader::sharedDidFinishLoading):
+        (WebKit::NetworkResourceLoader::sharedDidFail):
+        (WebKit::NetworkResourceLoader::sharedWillSendRedirectedRequest):
+        (WebKit::NetworkResourceLoader::willPerformHTTPRedirection):
+        (WebKit::NetworkResourceLoader::didReceiveChallenge):
+        (WebKit::NetworkResourceLoader::didReceiveResponse):
+        (WebKit::NetworkResourceLoader::didReceiveData):
+        (WebKit::NetworkResourceLoader::didCompleteWithError):
+        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
+        (WebKit::NetworkResourceLoader::didReceiveBuffer):
+        (WebKit::NetworkResourceLoader::didFinishLoading):
+        (WebKit::NetworkResourceLoader::didFail):
+        (WebKit::NetworkResourceLoader::willSendRequestAsync):
+        * NetworkProcess/NetworkResourceLoader.h:
+        * NetworkProcess/NetworkSession.h:
+        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
+
 2015-10-28  Wenson Hsieh  <[email protected]>
 
         Inner height behavior when the keyboard is shown should match on WKWebView and MobileSafari

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (191847 => 191848)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2015-10-31 23:17:43 UTC (rev 191847)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2015-11-01 00:14:49 UTC (rev 191848)
@@ -271,51 +271,8 @@
     cleanup();
 }
 
-#if USE(NETWORK_SESSION)
-
-void NetworkResourceLoader::willPerformHTTPRedirection(const WebCore::ResourceResponse&, const WebCore::ResourceRequest& request, std::function<void(const WebCore::ResourceRequest&)> completionHandler)
+NetworkResourceLoader::ShouldContinueDidReceiveResponse NetworkResourceLoader::sharedDidReceiveResponse(const WebCore::ResourceResponse& receivedResponse)
 {
-    notImplemented();
-    completionHandler(request);
-}
-
-void NetworkResourceLoader::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)> completionHandler)
-{
-    notImplemented();
-    completionHandler(AuthenticationChallengeDisposition::PerformDefaultHandling, WebCore::Credential());
-}
-
-void NetworkResourceLoader::didReceiveResponse(WebCore::ResourceResponse& response, std::function<void(ResponseDisposition)> completionHandler)
-{
-    ASSERT(isMainThread());
-    m_response = response;
-    m_response.setSource(ResourceResponse::Source::Network);
-    if (m_parameters.needsCertificateInfo)
-        m_response.includeCertificateInfo();
-    
-    bool shouldWaitContinueDidReceiveResponse = originalRequest().requester() == ResourceRequest::Requester::Main;
-    if (!sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(m_response, shouldWaitContinueDidReceiveResponse)))
-        return;
-    completionHandler(ResponseDisposition::Allow);
-}
-
-void NetworkResourceLoader::didReceiveData(RefPtr<WebCore::SharedBuffer> buffer)
-{
-    ASSERT(buffer);
-    sendBufferMaybeAborting(*buffer, buffer->size());
-}
-
-void NetworkResourceLoader::didCompleteWithError(const WebCore::ResourceError&)
-{
-    send(Messages::WebResourceLoader::DidFinishResourceLoad(WTF::monotonicallyIncreasingTime()));
-}
-
-#else
-
-void NetworkResourceLoader::didReceiveResponseAsync(ResourceHandle* handle, const ResourceResponse& receivedResponse)
-{
-    ASSERT_UNUSED(handle, handle == m_handle);
-
     m_response = receivedResponse;
 
     m_response.setSource(ResourceResponse::Source::Network);
@@ -350,7 +307,7 @@
             m_synchronousLoadData->response = m_response;
         else {
             if (!sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(m_response, shouldWaitContinueDidReceiveResponse)))
-                return;
+                return ShouldContinueDidReceiveResponse::No;
         }
     }
 
@@ -360,21 +317,12 @@
     shouldContinueDidReceiveResponse = shouldContinueDidReceiveResponse || m_cacheEntryForValidation;
 #endif
     if (!shouldContinueDidReceiveResponse)
-        return;
-
-    m_handle->continueDidReceiveResponse();
+        return ShouldContinueDidReceiveResponse::No;
+    return ShouldContinueDidReceiveResponse::Yes;
 }
 
-void NetworkResourceLoader::didReceiveData(ResourceHandle*, const char* /* data */, unsigned /* length */, int /* encodedDataLength */)
+void NetworkResourceLoader::sharedDidReceiveBuffer(RefPtr<WebCore::SharedBuffer>&& buffer, int reportedEncodedDataLength)
 {
-    // The NetworkProcess should never get a didReceiveData callback.
-    // We should always be using didReceiveBuffer.
-    ASSERT_NOT_REACHED();
-}
-
-void NetworkResourceLoader::didReceiveBuffer(ResourceHandle* handle, PassRefPtr<SharedBuffer> buffer, int reportedEncodedDataLength)
-{
-    ASSERT_UNUSED(handle, handle == m_handle);
 #if ENABLE(NETWORK_CACHE)
     ASSERT(!m_cacheEntryForValidation);
 
@@ -400,10 +348,8 @@
     sendBufferMaybeAborting(*buffer, encodedDataLength);
 }
 
-void NetworkResourceLoader::didFinishLoading(ResourceHandle* handle, double finishTime)
+void NetworkResourceLoader::sharedDidFinishLoading(double finishTime)
 {
-    ASSERT_UNUSED(handle, handle == m_handle);
-
 #if ENABLE(NETWORK_CACHE)
     if (NetworkCache::singleton().isEnabled()) {
         if (m_cacheEntryForValidation) {
@@ -457,9 +403,9 @@
     cleanup();
 }
 
-void NetworkResourceLoader::didFail(ResourceHandle* handle, const ResourceError& error)
+void NetworkResourceLoader::sharedDidFail(const WebCore::ResourceError& error)
 {
-    ASSERT_UNUSED(handle, !handle || handle == m_handle);
+    ASSERT(!error.isNull());
 
 #if ENABLE(NETWORK_CACHE)
     m_cacheEntryForValidation = nullptr;
@@ -474,10 +420,8 @@
     cleanup();
 }
 
-void NetworkResourceLoader::willSendRequestAsync(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& redirectResponse)
+void NetworkResourceLoader::sharedWillSendRedirectedRequest(const WebCore::ResourceRequest& request, const WebCore::ResourceResponse& redirectResponse)
 {
-    ASSERT_UNUSED(handle, handle == m_handle);
-
     // We only expect to get the willSendRequest callback from ResourceHandle as the result of a redirect.
     ASSERT(!redirectResponse.isNull());
     ASSERT(RunLoop::isMain());
@@ -501,7 +445,82 @@
     }
     sendAbortingOnFailure(Messages::WebResourceLoader::WillSendRequest(m_currentRequest, redirectResponse));
 }
+    
+#if USE(NETWORK_SESSION)
 
+void NetworkResourceLoader::willPerformHTTPRedirection(const WebCore::ResourceResponse& response, const WebCore::ResourceRequest& request, std::function<void(const WebCore::ResourceRequest&)> completionHandler)
+{
+    sharedWillSendRedirectedRequest(request, response);
+    completionHandler(request);
+}
+
+void NetworkResourceLoader::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)> completionHandler)
+{
+    notImplemented();
+    completionHandler(AuthenticationChallengeDisposition::PerformDefaultHandling, WebCore::Credential());
+}
+
+void NetworkResourceLoader::didReceiveResponse(const WebCore::ResourceResponse& response, std::function<void(ResponseDisposition)> completionHandler)
+{
+    ASSERT(isMainThread());
+    sharedDidReceiveResponse(response);
+    completionHandler(ResponseDisposition::Allow);
+}
+
+void NetworkResourceLoader::didReceiveData(RefPtr<WebCore::SharedBuffer>&& buffer)
+{
+    ASSERT(buffer);
+    sharedDidReceiveBuffer(WTF::move(buffer), buffer->size());
+}
+
+void NetworkResourceLoader::didCompleteWithError(const WebCore::ResourceError& error)
+{
+    if (error.isNull())
+        sharedDidFinishLoading(WTF::monotonicallyIncreasingTime());
+    else
+        sharedDidFail(error);
+}
+
+#else
+
+void NetworkResourceLoader::didReceiveResponseAsync(ResourceHandle* handle, const ResourceResponse& receivedResponse)
+{
+    ASSERT_UNUSED(handle, handle == m_handle);
+    if (sharedDidReceiveResponse(receivedResponse) == ShouldContinueDidReceiveResponse::Yes)
+        m_handle->continueDidReceiveResponse();
+}
+
+void NetworkResourceLoader::didReceiveData(ResourceHandle*, const char* /* data */, unsigned /* length */, int /* encodedDataLength */)
+{
+    // The NetworkProcess should never get a didReceiveData callback.
+    // We should always be using didReceiveBuffer.
+    ASSERT_NOT_REACHED();
+}
+
+void NetworkResourceLoader::didReceiveBuffer(ResourceHandle* handle, PassRefPtr<WebCore::SharedBuffer> buffer, int reportedEncodedDataLength)
+{
+    ASSERT_UNUSED(handle, handle == m_handle);
+    sharedDidReceiveBuffer(WTF::move(buffer), reportedEncodedDataLength);
+}
+
+void NetworkResourceLoader::didFinishLoading(ResourceHandle* handle, double finishTime)
+{
+    ASSERT_UNUSED(handle, handle == m_handle);
+    sharedDidFinishLoading(finishTime);
+}
+
+void NetworkResourceLoader::didFail(ResourceHandle* handle, const ResourceError& error)
+{
+    ASSERT_UNUSED(handle, !handle || handle == m_handle);
+    sharedDidFail(error);
+}
+
+void NetworkResourceLoader::willSendRequestAsync(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& redirectResponse)
+{
+    ASSERT_UNUSED(handle, handle == m_handle);
+    sharedWillSendRedirectedRequest(request, redirectResponse);
+}
+
 #endif // USE(NETWORK_SESSION)
     
 void NetworkResourceLoader::continueWillSendRequest(const ResourceRequest& newRequest)

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (191847 => 191848)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2015-10-31 23:17:43 UTC (rev 191847)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2015-11-01 00:14:49 UTC (rev 191848)
@@ -133,12 +133,22 @@
     virtual IPC::Connection* messageSenderConnection() override;
     virtual uint64_t messageSenderDestinationID() override { return m_parameters.identifier; }
 
+    enum ShouldContinueDidReceiveResponse {
+        Yes,
+        No
+    };
+    ShouldContinueDidReceiveResponse sharedDidReceiveResponse(const WebCore::ResourceResponse&);
+        void sharedWillSendRedirectedRequest(const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+    void sharedDidReceiveBuffer(RefPtr<WebCore::SharedBuffer>&&, int reportedEncodedDataLength);
+    void sharedDidFail(const WebCore::ResourceError&);
+    void sharedDidFinishLoading(double finishTime);
+
 #if USE(NETWORK_SESSION)
     // NetworkSessionTaskClient.
     virtual void willPerformHTTPRedirection(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, std::function<void(const WebCore::ResourceRequest&)>) final override;
     virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&, std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)>) final override;
-    virtual void didReceiveResponse(WebCore::ResourceResponse&, std::function<void(ResponseDisposition)>) final override;
-    virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>) final override;
+    virtual void didReceiveResponse(const WebCore::ResourceResponse&, std::function<void(ResponseDisposition)>) final override;
+    virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>&&) final override;
     virtual void didCompleteWithError(const WebCore::ResourceError&) final override;
 #else
     // ResourceHandleClient

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkSession.h (191847 => 191848)


--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.h	2015-10-31 23:17:43 UTC (rev 191847)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.h	2015-11-01 00:14:49 UTC (rev 191848)
@@ -67,8 +67,8 @@
 public:
     virtual void willPerformHTTPRedirection(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, std::function<void(const WebCore::ResourceRequest&)>) = 0;
     virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&, std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)>) = 0;
-    virtual void didReceiveResponse(WebCore::ResourceResponse&, std::function<void(ResponseDisposition)>) = 0;
-    virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>) = 0;
+    virtual void didReceiveResponse(const WebCore::ResourceResponse&, std::function<void(ResponseDisposition)>) = 0;
+    virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>&&) = 0;
     virtual void didCompleteWithError(const WebCore::ResourceError&) = 0;
 
     virtual ~NetworkSessionTaskClient() { }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to