Title: [173468] trunk/Source/WebKit2
Revision
173468
Author
[email protected]
Date
2014-09-10 09:35:00 -0700 (Wed, 10 Sep 2014)

Log Message

NetworkResourceLoader cleanups
https://bugs.webkit.org/show_bug.cgi?id=136701

Reviewed by Darin Adler.

After smashing NetworkResourceLoader together with the clients it can be made nicer.

* NetworkProcess/NetworkResourceLoadScheduler.cpp:
(WebKit::NetworkResourceLoadScheduler::scheduleLoader):
(WebKit::NetworkResourceLoadScheduler::removeLoader):
* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):

    The original request is now part of the loader.

(WebKit::sendReplyToSynchronousRequest):
(WebKit::NetworkResourceLoader::NetworkResourceLoader):

    Instead of copying everything out from NetworkResourceLoadParameters just include the whole thing as a const field.
    SanboxExtension construction moves to NetworkResourceLoadParameters::decode()
    Stuff that is related to starting the load moves to start().

(WebKit::NetworkResourceLoader::~NetworkResourceLoader):
(WebKit::NetworkResourceLoader::start):
(WebKit::NetworkResourceLoader::setDefersLoading):

    Eliminate m_deferredRequest since we now always remember the original request.

(WebKit::NetworkResourceLoader::cleanup):
(WebKit::NetworkResourceLoader::didConvertHandleToDownload):
(WebKit::NetworkResourceLoader::abort):
(WebKit::NetworkResourceLoader::didReceiveResponseAsync):
(WebKit::NetworkResourceLoader::didFail):
(WebKit::NetworkResourceLoader::willSendRequestAsync):
(WebKit::NetworkResourceLoader::continueWillSendRequest):

    Eliminate unnecessary m_suggestedRequestForWillSendRequest.

(WebKit::NetworkResourceLoader::wasBlocked):
(WebKit::NetworkResourceLoader::cannotShowURL):
(WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
(WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
(WebKit::NetworkResourceLoader::receivedCancellation):
(WebKit::NetworkResourceLoader::startBufferingTimerIfNeeded):
(WebKit::NetworkResourceLoader::consumeSandboxExtensions):
(WebKit::NetworkResourceLoader::invalidateSandboxExtensions):
(WebKit::NetworkResourceLoader::sendAbortingOnFailure):
* NetworkProcess/NetworkResourceLoader.h:
(WebKit::NetworkResourceLoader::originalRequest):
(WebKit::NetworkResourceLoader::currentRequest):
(WebKit::NetworkResourceLoader::sessionID):
(WebKit::NetworkResourceLoader::defersLoading):
(WebKit::NetworkResourceLoader::isLoadingMainResource):
(WebKit::NetworkResourceLoader::request): Deleted.
(WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.

    Made private and moved to cpp.

* NetworkProcess/mac/NetworkDiskCacheMonitor.mm:
(WebKit::NetworkDiskCacheMonitor::NetworkDiskCacheMonitor):

    Use original request instead of the current one. This might fix a bug where we didn't use file backing over redirects.

* Shared/Network/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::decode):

    Decode to SanboxExtensions to the actual type rather than a handle.

* Shared/Network/NetworkResourceLoadParameters.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (173467 => 173468)


--- trunk/Source/WebKit2/ChangeLog	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/ChangeLog	2014-09-10 16:35:00 UTC (rev 173468)
@@ -1,3 +1,75 @@
+2014-09-10  Antti Koivisto  <[email protected]>
+
+        NetworkResourceLoader cleanups
+        https://bugs.webkit.org/show_bug.cgi?id=136701
+
+        Reviewed by Darin Adler.
+
+        After smashing NetworkResourceLoader together with the clients it can be made nicer.
+
+        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
+        (WebKit::NetworkResourceLoadScheduler::scheduleLoader):
+        (WebKit::NetworkResourceLoadScheduler::removeLoader):
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):
+
+            The original request is now part of the loader.
+
+        (WebKit::sendReplyToSynchronousRequest):
+        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
+
+            Instead of copying everything out from NetworkResourceLoadParameters just include the whole thing as a const field.
+            SanboxExtension construction moves to NetworkResourceLoadParameters::decode()
+            Stuff that is related to starting the load moves to start().
+
+        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
+        (WebKit::NetworkResourceLoader::start):
+        (WebKit::NetworkResourceLoader::setDefersLoading):
+
+            Eliminate m_deferredRequest since we now always remember the original request.
+
+        (WebKit::NetworkResourceLoader::cleanup):
+        (WebKit::NetworkResourceLoader::didConvertHandleToDownload):
+        (WebKit::NetworkResourceLoader::abort):
+        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
+        (WebKit::NetworkResourceLoader::didFail):
+        (WebKit::NetworkResourceLoader::willSendRequestAsync):
+        (WebKit::NetworkResourceLoader::continueWillSendRequest):
+
+            Eliminate unnecessary m_suggestedRequestForWillSendRequest.
+
+        (WebKit::NetworkResourceLoader::wasBlocked):
+        (WebKit::NetworkResourceLoader::cannotShowURL):
+        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
+        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
+        (WebKit::NetworkResourceLoader::receivedCancellation):
+        (WebKit::NetworkResourceLoader::startBufferingTimerIfNeeded):
+        (WebKit::NetworkResourceLoader::consumeSandboxExtensions):
+        (WebKit::NetworkResourceLoader::invalidateSandboxExtensions):
+        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
+        * NetworkProcess/NetworkResourceLoader.h:
+        (WebKit::NetworkResourceLoader::originalRequest):
+        (WebKit::NetworkResourceLoader::currentRequest):
+        (WebKit::NetworkResourceLoader::sessionID):
+        (WebKit::NetworkResourceLoader::defersLoading):
+        (WebKit::NetworkResourceLoader::isLoadingMainResource):
+        (WebKit::NetworkResourceLoader::request): Deleted.
+        (WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.
+
+            Made private and moved to cpp.
+
+        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm:
+        (WebKit::NetworkDiskCacheMonitor::NetworkDiskCacheMonitor):
+
+            Use original request instead of the current one. This might fix a bug where we didn't use file backing over redirects.
+
+        * Shared/Network/NetworkResourceLoadParameters.cpp:
+        (WebKit::NetworkResourceLoadParameters::decode):
+
+            Decode to SanboxExtensions to the actual type rather than a handle.
+
+        * Shared/Network/NetworkResourceLoadParameters.h:
+
 2014-09-10  Michael Catanzaro  <[email protected]>
 
         [GTK] allow overwriting destination of download

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp (173467 => 173468)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp	2014-09-10 16:35:00 UTC (rev 173468)
@@ -24,7 +24,7 @@
 {
     ASSERT(RunLoop::isMain());
 
-    LOG(NetworkScheduling, "(NetworkProcess) NetworkResourceLoadScheduler::scheduleLoader resource '%s'", loader->request().url().string().utf8().data());
+    LOG(NetworkScheduling, "(NetworkProcess) NetworkResourceLoadScheduler::scheduleLoader resource '%s'", loader->originalRequest().url().string().utf8().data());
 
     // This request might be from WebProcess we've lost our connection to.
     // If so we should just skip it.
@@ -44,7 +44,7 @@
 {
     ASSERT(RunLoop::isMain());
 
-    LOG(NetworkScheduling, "(NetworkProcess) NetworkResourceLoadScheduler::removeLoader resource '%s'", loader->request().url().string().utf8().data());
+    LOG(NetworkScheduling, "(NetworkProcess) NetworkResourceLoadScheduler::removeLoader resource '%s'", loader->originalRequest().url().string().utf8().data());
 
     m_activeLoaders.remove(loader);
 

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (173467 => 173468)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2014-09-10 16:35:00 UTC (rev 173468)
@@ -57,92 +57,66 @@
 namespace WebKit {
 
 struct NetworkResourceLoader::SynchronousLoadData {
-        SynchronousLoadData(WebCore::ResourceRequest& request, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> reply)
-        : m_originalRequest(request)
-        , m_delayedReply(reply)
+    SynchronousLoadData(PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> reply)
+        : delayedReply(reply)
     {
-        ASSERT(m_delayedReply);
+        ASSERT(delayedReply);
     }
-    WebCore::ResourceRequest m_originalRequest;
-    WebCore::ResourceRequest m_currentRequest;
-    RefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> m_delayedReply;
-    WebCore::ResourceResponse m_response;
-    WebCore::ResourceError m_error;
+    WebCore::ResourceRequest currentRequest;
+    RefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> delayedReply;
+    WebCore::ResourceResponse response;
+    WebCore::ResourceError error;
 };
 
 static void sendReplyToSynchronousRequest(NetworkResourceLoader::SynchronousLoadData& data, WebCore::SharedBuffer* buffer)
 {
-    ASSERT(data.m_delayedReply);
-    ASSERT(!data.m_response.isNull() || !data.m_error.isNull());
+    ASSERT(data.delayedReply);
+    ASSERT(!data.response.isNull() || !data.error.isNull());
 
     Vector<char> responseBuffer;
     if (buffer && buffer->size())
         responseBuffer.append(buffer->data(), buffer->size());
 
-    data.m_delayedReply->send(data.m_error, data.m_response, responseBuffer);
-    data.m_delayedReply = nullptr;
+    data.delayedReply->send(data.error, data.response, responseBuffer);
+    data.delayedReply = nullptr;
 }
 
 NetworkResourceLoader::NetworkResourceLoader(const NetworkResourceLoadParameters& parameters, NetworkConnectionToWebProcess* connection, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> synchronousReply)
-    : m_bytesReceived(0)
-    , m_handleConvertedToDownload(false)
-    , m_identifier(parameters.identifier)
-    , m_webPageID(parameters.webPageID)
-    , m_webFrameID(parameters.webFrameID)
-    , m_sessionID(parameters.sessionID)
-    , m_request(parameters.request)
-    , m_contentSniffingPolicy(parameters.contentSniffingPolicy)
-    , m_allowStoredCredentials(parameters.allowStoredCredentials)
-    , m_clientCredentialPolicy(parameters.clientCredentialPolicy)
-    , m_shouldClearReferrerOnHTTPSToHTTPRedirect(parameters.shouldClearReferrerOnHTTPSToHTTPRedirect)
-    , m_isLoadingMainResource(parameters.isMainResource)
-    , m_defersLoading(parameters.defersLoading)
-    , m_needsCertificateInfo(parameters.needsCertificateInfo)
-    , m_maximumBufferingTime(parameters.maximumBufferingTime)
-    , m_bufferingTimer(this, &NetworkResourceLoader::bufferingTimerFired)
-    , m_sandboxExtensionsAreConsumed(false)
+    : m_parameters(parameters)
     , m_connection(connection)
+    , m_bytesReceived(0)
     , m_bufferedDataEncodedDataLength(0)
+    , m_didConvertHandleToDownload(false)
+    , m_didConsumeSandboxExtensions(false)
+    , m_defersLoading(parameters.defersLoading)
+    , m_bufferingTimer(this, &NetworkResourceLoader::bufferingTimerFired)
 {
-    // Either this loader has both a webPageID and webFrameID, or it is not allowed to ask the client for authentication credentials.
+    ASSERT(RunLoop::isMain());
     // FIXME: This is necessary because of the existence of EmptyFrameLoaderClient in WebCore.
     //        Once bug 116233 is resolved, this ASSERT can just be "m_webPageID && m_webFrameID"
-    ASSERT((m_webPageID && m_webFrameID) || m_clientCredentialPolicy == DoNotAskClientForAnyCredentials);
+    ASSERT((m_parameters.webPageID && m_parameters.webFrameID) || m_parameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials);
 
-    for (size_t i = 0, count = parameters.requestBodySandboxExtensions.size(); i < count; ++i) {
-        if (RefPtr<SandboxExtension> extension = SandboxExtension::create(parameters.requestBodySandboxExtensions[i]))
-            m_requestBodySandboxExtensions.append(extension);
-    }
-
-    if (m_request.httpBody()) {
-        for (const FormDataElement& element : m_request.httpBody()->elements()) {
+    if (originalRequest().httpBody()) {
+        for (const FormDataElement& element : originalRequest().httpBody()->elements()) {
             if (element.m_type == FormDataElement::Type::EncodedBlob)
                 m_fileReferences.appendVector(NetworkBlobRegistry::shared().filesInBlob(connection, element.m_url));
         }
     }
 
-    if (m_request.url().protocolIs("blob")) {
-        ASSERT(!SandboxExtension::create(parameters.resourceSandboxExtension));
-        m_fileReferences.appendVector(NetworkBlobRegistry::shared().filesInBlob(connection, m_request.url()));
-    } else
+    if (originalRequest().url().protocolIs("blob")) {
+        ASSERT(!m_parameters.resourceSandboxExtension);
+        m_fileReferences.appendVector(NetworkBlobRegistry::shared().filesInBlob(connection, originalRequest().url()));
+    }
 
-    if (RefPtr<SandboxExtension> resourceSandboxExtension = SandboxExtension::create(parameters.resourceSandboxExtension))
-        m_resourceSandboxExtensions.append(resourceSandboxExtension);
-
-    ASSERT(RunLoop::isMain());
-    
-    if (synchronousReply || m_maximumBufferingTime > 0_ms)
-        m_bufferedData = WebCore::SharedBuffer::create();
-
     if (synchronousReply)
-        m_synchronousLoadData = std::make_unique<SynchronousLoadData>(m_request, synchronousReply);
+        m_synchronousLoadData = std::make_unique<SynchronousLoadData>(synchronousReply);
 }
 
 NetworkResourceLoader::~NetworkResourceLoader()
 {
     ASSERT(RunLoop::isMain());
     ASSERT(!m_handle);
-    ASSERT(!isSynchronous() || !m_synchronousLoadData->m_delayedReply);
+    ASSERT(!isSynchronous() || !m_synchronousLoadData->delayedReply);
 }
 
 bool NetworkResourceLoader::isSynchronous() const
@@ -154,33 +128,36 @@
 {
     ASSERT(RunLoop::isMain());
 
-    if (m_defersLoading) {
-        m_deferredRequest = m_request;
+    if (m_defersLoading)
         return;
-    }
 
     // Explicit ref() balanced by a deref() in NetworkResourceLoader::cleanup()
     ref();
 
-    // FIXME (NetworkProcess): Set platform specific settings.
-    m_networkingContext = RemoteNetworkingContext::create(m_sessionID, m_shouldClearReferrerOnHTTPSToHTTPRedirect);
+    m_networkingContext = RemoteNetworkingContext::create(sessionID(), m_parameters.shouldClearReferrerOnHTTPSToHTTPRedirect);
 
     consumeSandboxExtensions();
 
-    // FIXME (NetworkProcess): Pass an actual value for defersLoading
-    m_handle = ResourceHandle::create(m_networkingContext.get(), m_request, this, false /* defersLoading */, m_contentSniffingPolicy == SniffContent);
+    m_currentRequest = originalRequest();
+
+    if (isSynchronous() || m_parameters.maximumBufferingTime > 0_ms)
+        m_bufferedData = WebCore::SharedBuffer::create();
+
+    bool shouldSniff = m_parameters.contentSniffingPolicy == SniffContent;
+    m_handle = ResourceHandle::create(m_networkingContext.get(), m_currentRequest, this, false /* defersLoading */, shouldSniff);
 }
 
 void NetworkResourceLoader::setDefersLoading(bool defers)
 {
+    if (m_defersLoading == defers)
+        return;
     m_defersLoading = defers;
-    if (m_handle)
+    if (m_handle) {
         m_handle->setDefersLoading(defers);
-    if (!defers && !m_deferredRequest.isNull()) {
-        m_request = m_deferredRequest;
-        m_deferredRequest = ResourceRequest();
-        start();
+        return;
     }
+    if (!m_defersLoading)
+        start();
 }
 
 void NetworkResourceLoader::cleanup()
@@ -191,7 +168,6 @@
 
     invalidateSandboxExtensions();
 
-    // Tell the scheduler about this finished loader soon so it can start more network requests.
     NetworkProcess::shared().networkResourceLoadScheduler().removeLoader(this);
 
     if (m_handle) {
@@ -205,14 +181,14 @@
 void NetworkResourceLoader::didConvertHandleToDownload()
 {
     ASSERT(m_handle);
-    m_handleConvertedToDownload = true;
+    m_didConvertHandleToDownload = true;
 }
 
 void NetworkResourceLoader::abort()
 {
     ASSERT(RunLoop::isMain());
 
-    if (m_handle && !m_handleConvertedToDownload)
+    if (m_handle && !m_didConvertHandleToDownload)
         m_handle->cancel();
 
     cleanup();
@@ -222,22 +198,23 @@
 {
     ASSERT_UNUSED(handle, handle == m_handle);
 
-    if (m_needsCertificateInfo)
+    if (m_parameters.needsCertificateInfo)
         response.includeCertificateInfo();
 
     if (isSynchronous())
-        m_synchronousLoadData->m_response = response;
+        m_synchronousLoadData->response = response;
     else
-        sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(response, isLoadingMainResource()));
+        sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(response, m_parameters.isMainResource));
 
     // m_handle will be null if the request got aborted above.
     if (!m_handle)
         return;
 
-    if (!m_isLoadingMainResource) {
-        // For main resources, the web process is responsible for sending back a NetworkResourceLoader::ContinueDidReceiveResponse message.
-        m_handle->continueDidReceiveResponse();
-    }
+    // For main resources, the web process is responsible for sending back a NetworkResourceLoader::ContinueDidReceiveResponse message.
+    if (m_parameters.isMainResource)
+        return;
+
+    m_handle->continueDidReceiveResponse();
 }
 
 void NetworkResourceLoader::didReceiveData(ResourceHandle*, const char* /* data */, unsigned /* length */, int /* encodedDataLength */)
@@ -284,7 +261,7 @@
     ASSERT_UNUSED(handle, handle == m_handle);
 
     if (isSynchronous()) {
-        m_synchronousLoadData->m_error = error;
+        m_synchronousLoadData->error = error;
         sendReplyToSynchronousRequest(*m_synchronousLoadData, nullptr);
     } else
         send(Messages::WebResourceLoader::DidFailResourceLoad(error));
@@ -300,19 +277,17 @@
     ASSERT(!redirectResponse.isNull());
     ASSERT(RunLoop::isMain());
 
-    m_suggestedRequestForWillSendRequest = request;
+    m_currentRequest = request;
 
     if (isSynchronous()) {
         // FIXME: This needs to be fixed to follow the redirect correctly even for cross-domain requests.
         // This includes at least updating host records, and comparing the current request instead of the original request here.
-        if (protocolHostAndPortAreEqual(m_synchronousLoadData->m_originalRequest.url(), request.url()))
-            m_synchronousLoadData->m_currentRequest = request;
-        else {
-            ASSERT(m_synchronousLoadData->m_error.isNull());
-            m_synchronousLoadData->m_error = SynchronousLoaderClient::platformBadResponseError();
-            m_synchronousLoadData->m_currentRequest = ResourceRequest();
+        if (!protocolHostAndPortAreEqual(originalRequest().url(), request.url())) {
+            ASSERT(m_synchronousLoadData->error.isNull());
+            m_synchronousLoadData->error = SynchronousLoaderClient::platformBadResponseError();
+            m_currentRequest = ResourceRequest();
         }
-        continueWillSendRequest(m_synchronousLoadData->m_currentRequest);
+        continueWillSendRequest(m_currentRequest);
         return;
     }
     sendAbortingOnFailure(Messages::WebResourceLoader::WillSendRequest(request, redirectResponse));
@@ -321,20 +296,17 @@
 void NetworkResourceLoader::continueWillSendRequest(const ResourceRequest& newRequest)
 {
 #if PLATFORM(COCOA)
-    m_suggestedRequestForWillSendRequest.updateFromDelegatePreservingOldProperties(newRequest.nsURLRequest(DoNotUpdateHTTPBody));
+    m_currentRequest.updateFromDelegatePreservingOldProperties(newRequest.nsURLRequest(DoNotUpdateHTTPBody));
 #elif USE(SOUP)
     // FIXME: Implement ResourceRequest::updateFromDelegatePreservingOldProperties. See https://bugs.webkit.org/show_bug.cgi?id=126127.
-    m_suggestedRequestForWillSendRequest.updateFromDelegatePreservingOldProperties(newRequest);
+    m_currentRequest.updateFromDelegatePreservingOldProperties(newRequest);
 #endif
 
-    m_request = m_suggestedRequestForWillSendRequest;
-    m_suggestedRequestForWillSendRequest = ResourceRequest();
+    m_handle->continueWillSendRequest(m_currentRequest);
 
-    m_handle->continueWillSendRequest(m_request);
-
-    if (m_request.isNull()) {
+    if (m_currentRequest.isNull()) {
         m_handle->cancel();
-        didFail(m_handle.get(), cancelledError(m_request));
+        didFail(m_handle.get(), cancelledError(m_currentRequest));
     }
 }
 
@@ -360,14 +332,14 @@
 {
     ASSERT_UNUSED(handle, handle == m_handle);
 
-    didFail(handle, WebKit::blockedError(request()));
+    didFail(handle, WebKit::blockedError(m_currentRequest));
 }
 
 void NetworkResourceLoader::cannotShowURL(ResourceHandle* handle)
 {
     ASSERT_UNUSED(handle, handle == m_handle);
 
-    didFail(handle, WebKit::cannotShowURLError(request()));
+    didFail(handle, WebKit::cannotShowURLError(m_currentRequest));
 }
 
 bool NetworkResourceLoader::shouldUseCredentialStorage(ResourceHandle* handle)
@@ -379,7 +351,7 @@
 
     // We still need this sync version, because ResourceHandle itself uses it internally, even when the delegate uses an async one.
 
-    return m_allowStoredCredentials == AllowStoredCredentials;
+    return m_parameters.allowStoredCredentials == AllowStoredCredentials;
 }
 
 void NetworkResourceLoader::didReceiveAuthenticationChallenge(ResourceHandle* handle, const AuthenticationChallenge& challenge)
@@ -389,12 +361,12 @@
     // FIXME (http://webkit.org/b/115291): Since we go straight to the UI process for authentication we don't get WebCore's
     // cross-origin check before asking the client for credentials.
     // Therefore we are too permissive in the case where the ClientCredentialPolicy is DoNotAskClientForCrossOriginCredentials.
-    if (m_clientCredentialPolicy == DoNotAskClientForAnyCredentials) {
+    if (m_parameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials) {
         challenge.authenticationClient()->receivedRequestToContinueWithoutCredential(challenge);
         return;
     }
 
-    NetworkProcess::shared().authenticationManager().didReceiveAuthenticationChallenge(m_webPageID, m_webFrameID, challenge);
+    NetworkProcess::shared().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.webPageID, m_parameters.webFrameID, challenge);
 }
 
 void NetworkResourceLoader::didCancelAuthenticationChallenge(ResourceHandle* handle, const AuthenticationChallenge&)
@@ -410,7 +382,7 @@
     ASSERT_UNUSED(handle, handle == m_handle);
 
     m_handle->cancel();
-    didFail(m_handle.get(), cancelledError(m_request));
+    didFail(m_handle.get(), cancelledError(m_currentRequest));
 }
 
 void NetworkResourceLoader::startBufferingTimerIfNeeded()
@@ -419,7 +391,7 @@
         return;
     if (m_bufferingTimer.isActive())
         return;
-    m_bufferingTimer.startOneShot(m_maximumBufferingTime);
+    m_bufferingTimer.startOneShot(m_parameters.maximumBufferingTime);
 }
 
 void NetworkResourceLoader::bufferingTimerFired(Timer<NetworkResourceLoader>&)
@@ -461,36 +433,43 @@
 
 void NetworkResourceLoader::consumeSandboxExtensions()
 {
-    for (RefPtr<SandboxExtension>& extension : m_requestBodySandboxExtensions)
+    for (auto& extension : m_parameters.requestBodySandboxExtensions)
         extension->consume();
 
-    for (RefPtr<SandboxExtension>& extension : m_resourceSandboxExtensions)
+    if (auto& extension = m_parameters.resourceSandboxExtension)
         extension->consume();
 
-    for (RefPtr<BlobDataFileReference>& fileReference : m_fileReferences)
+    for (auto& fileReference : m_fileReferences)
         fileReference->prepareForFileAccess();
 
-    m_sandboxExtensionsAreConsumed = true;
+    m_didConsumeSandboxExtensions = true;
 }
 
 void NetworkResourceLoader::invalidateSandboxExtensions()
 {
-    if (m_sandboxExtensionsAreConsumed) {
-        for (RefPtr<SandboxExtension>& extension : m_requestBodySandboxExtensions)
+    if (m_didConsumeSandboxExtensions) {
+        for (auto& extension : m_parameters.requestBodySandboxExtensions)
             extension->revoke();
-        for (RefPtr<SandboxExtension>& extension : m_resourceSandboxExtensions)
+        if (auto& extension = m_parameters.resourceSandboxExtension)
             extension->revoke();
-        for (RefPtr<BlobDataFileReference>& fileReference : m_fileReferences)
+        for (auto& fileReference : m_fileReferences)
             fileReference->revokeFileAccess();
     }
 
-    m_requestBodySandboxExtensions.clear();
-    m_resourceSandboxExtensions.clear();
     m_fileReferences.clear();
 
-    m_sandboxExtensionsAreConsumed = false;
+    m_didConsumeSandboxExtensions = false;
 }
 
+template<typename T>
+bool NetworkResourceLoader::sendAbortingOnFailure(T&& message, unsigned messageSendFlags)
+{
+    bool result = messageSenderConnection()->send(std::forward<T>(message), messageSenderDestinationID(), messageSendFlags);
+    if (!result)
+        abort();
+    return result;
+}
+
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
 void NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle* handle, const ProtectionSpace& protectionSpace)
 {

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (173467 => 173468)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2014-09-10 16:35:00 UTC (rev 173468)
@@ -71,10 +71,10 @@
     }    
     ~NetworkResourceLoader();
 
-    NetworkConnectionToWebProcess* connectionToWebProcess() const { return m_connection.get(); }
+    const WebCore::ResourceRequest& originalRequest() const { return m_parameters.request; }
 
-    WebCore::ResourceRequest& request() { return m_request; }
-    WebCore::SessionID sessionID() const { return m_sessionID; }
+    // Changes with redirects.
+    WebCore::ResourceRequest& currentRequest() { return m_currentRequest; }
 
     WebCore::ResourceHandle* handle() const { return m_handle.get(); }
     void didConvertHandleToDownload();
@@ -83,9 +83,36 @@
     void abort();
 
     void setDefersLoading(bool);
-    bool defersLoading() const { return m_defersLoading; }
 
-    // ResourceHandleClient methods
+#if PLATFORM(COCOA)
+    static size_t fileBackedResourceMinimumSize();
+#endif
+    // Message handlers.
+    void didReceiveNetworkResourceLoaderMessage(IPC::Connection*, IPC::MessageDecoder&);
+
+#if PLATFORM(IOS) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090)
+    static void tryGetShareableHandleFromCFURLCachedResponse(ShareableResource::Handle&, CFCachedURLResponseRef);
+    static void tryGetShareableHandleFromSharedBuffer(ShareableResource::Handle&, WebCore::SharedBuffer*);
+#endif
+
+#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
+    void continueCanAuthenticateAgainstProtectionSpace(bool);
+#endif
+    void continueWillSendRequest(const WebCore::ResourceRequest& newRequest);
+
+    NetworkConnectionToWebProcess* connectionToWebProcess() const { return m_connection.get(); }
+    WebCore::SessionID sessionID() const { return m_parameters.sessionID; }
+
+    struct SynchronousLoadData;
+
+private:
+    NetworkResourceLoader(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>);
+
+    // IPC::MessageSender
+    virtual IPC::Connection* messageSenderConnection() override;
+    virtual uint64_t messageSenderDestinationID() override { return m_parameters.identifier; }
+
+    // ResourceHandleClient
     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 didReceiveResponseAsync(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) override;
@@ -100,19 +127,14 @@
     virtual void didCancelAuthenticationChallenge(WebCore::ResourceHandle*, const WebCore::AuthenticationChallenge&) override;
     virtual void receivedCancellation(WebCore::ResourceHandle*, const WebCore::AuthenticationChallenge&) override;
     virtual bool usesAsyncCallbacks() override { return true; }
-
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     virtual void canAuthenticateAgainstProtectionSpaceAsync(WebCore::ResourceHandle*, const WebCore::ProtectionSpace&) override;
 #endif
-
 #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
     virtual bool supportsDataArray() override;
     virtual void didReceiveDataArray(WebCore::ResourceHandle*, CFArrayRef) override;
 #endif
-
 #if PLATFORM(COCOA)
-    static size_t fileBackedResourceMinimumSize();
-
 #if USE(CFNETWORK)
     virtual void willCacheResponseAsync(WebCore::ResourceHandle*, CFCachedURLResponseRef) override;
 #else
@@ -120,42 +142,6 @@
 #endif
 #endif
 
-    // Message handlers.
-    void didReceiveNetworkResourceLoaderMessage(IPC::Connection*, IPC::MessageDecoder&);
-
-#if PLATFORM(IOS) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090)
-    static void tryGetShareableHandleFromCFURLCachedResponse(ShareableResource::Handle&, CFCachedURLResponseRef);
-    static void tryGetShareableHandleFromSharedBuffer(ShareableResource::Handle&, WebCore::SharedBuffer*);
-#endif
-
-    bool isSynchronous() const;
-    bool isLoadingMainResource() const { return m_isLoadingMainResource; }
-
-    template<typename T>
-    bool sendAbortingOnFailure(T&& message, unsigned messageSendFlags = 0)
-    {
-        bool result = messageSenderConnection()->send(std::forward<T>(message), messageSenderDestinationID(), messageSendFlags);
-        if (!result)
-            abort();
-        return result;
-    }
-
-#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
-    void continueCanAuthenticateAgainstProtectionSpace(bool);
-#endif
-    void continueWillSendRequest(const WebCore::ResourceRequest& newRequest);
-
-    WebCore::SharedBuffer* bufferedData() const { return m_bufferedData.get(); }
-
-    struct SynchronousLoadData;
-
-private:
-    NetworkResourceLoader(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>);
-
-    // IPC::MessageSender
-    virtual IPC::Connection* messageSenderConnection() override;
-    virtual uint64_t messageSenderDestinationID() override { return m_identifier; }
-
     void continueDidReceiveResponse();
 
     void cleanup();
@@ -166,47 +152,34 @@
     void bufferingTimerFired(WebCore::Timer<NetworkResourceLoader>&);
     void sendBuffer(WebCore::SharedBuffer*, int encodedDataLength);
 
+    bool isSynchronous() const;
+
     void consumeSandboxExtensions();
     void invalidateSandboxExtensions();
 
+    template<typename T> bool sendAbortingOnFailure(T&& message, unsigned messageSendFlags = 0);
+
+    const NetworkResourceLoadParameters m_parameters;
+
+    RefPtr<NetworkConnectionToWebProcess> m_connection;
+
     RefPtr<RemoteNetworkingContext> m_networkingContext;
     RefPtr<WebCore::ResourceHandle> m_handle;
 
-    // Keep the suggested request around while asynchronously asking to update it, because some parts of the request don't survive IPC.
-    WebCore::ResourceRequest m_suggestedRequestForWillSendRequest;
+    WebCore::ResourceRequest m_currentRequest;
 
-    uint64_t m_bytesReceived;
+    size_t m_bytesReceived;
+    size_t m_bufferedDataEncodedDataLength;
+    RefPtr<WebCore::SharedBuffer> m_bufferedData;
 
-    bool m_handleConvertedToDownload;
-
     std::unique_ptr<SynchronousLoadData> m_synchronousLoadData;
+    Vector<RefPtr<WebCore::BlobDataFileReference>> m_fileReferences;
 
-    ResourceLoadIdentifier m_identifier;
-    uint64_t m_webPageID;
-    uint64_t m_webFrameID;
-    WebCore::SessionID m_sessionID;
-    WebCore::ResourceRequest m_request;
-    WebCore::ResourceRequest m_deferredRequest;
-    WebCore::ContentSniffingPolicy m_contentSniffingPolicy;
-    WebCore::StoredCredentials m_allowStoredCredentials;
-    WebCore::ClientCredentialPolicy m_clientCredentialPolicy;
-    bool m_shouldClearReferrerOnHTTPSToHTTPRedirect;
-    bool m_isLoadingMainResource;
+    bool m_didConvertHandleToDownload;
+    bool m_didConsumeSandboxExtensions;
     bool m_defersLoading;
-    bool m_needsCertificateInfo;
-    const std::chrono::milliseconds m_maximumBufferingTime;
 
     WebCore::Timer<NetworkResourceLoader> m_bufferingTimer;
-
-    Vector<RefPtr<SandboxExtension>> m_requestBodySandboxExtensions;
-    Vector<RefPtr<SandboxExtension>> m_resourceSandboxExtensions;
-    Vector<RefPtr<WebCore::BlobDataFileReference>> m_fileReferences;
-    bool m_sandboxExtensionsAreConsumed;
-
-    RefPtr<NetworkConnectionToWebProcess> m_connection;
-    
-    RefPtr<WebCore::SharedBuffer> m_bufferedData;
-    size_t m_bufferedDataEncodedDataLength;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/NetworkProcess/mac/NetworkDiskCacheMonitor.mm (173467 => 173468)


--- trunk/Source/WebKit2/NetworkProcess/mac/NetworkDiskCacheMonitor.mm	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/NetworkProcess/mac/NetworkDiskCacheMonitor.mm	2014-09-10 16:35:00 UTC (rev 173468)
@@ -54,7 +54,7 @@
 }
 
 NetworkDiskCacheMonitor::NetworkDiskCacheMonitor(CFCachedURLResponseRef cachedResponse, NetworkResourceLoader* loader)
-    : DiskCacheMonitor(loader->request(), loader->sessionID(), cachedResponse)
+    : DiskCacheMonitor(loader->originalRequest(), loader->sessionID(), cachedResponse)
     , m_connectionToWebProcess(loader->connectionToWebProcess())
 {
 }

Modified: trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp (173467 => 173468)


--- trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp	2014-09-10 16:35:00 UTC (rev 173468)
@@ -127,13 +127,20 @@
             return false;
         result.request.setHTTPBody(formData.release());
 
-        if (!decoder.decode(result.requestBodySandboxExtensions))
+        SandboxExtension::HandleArray requestBodySandboxExtensionHandles;
+        if (!decoder.decode(requestBodySandboxExtensionHandles))
             return false;
+        for (size_t i = 0; i < requestBodySandboxExtensionHandles.size(); ++i) {
+            if (RefPtr<SandboxExtension> extension = SandboxExtension::create(requestBodySandboxExtensionHandles[i]))
+                result.requestBodySandboxExtensions.append(extension.release());
+        }
     }
 
     if (result.request.url().isLocalFile()) {
-        if (!decoder.decode(result.resourceSandboxExtension))
+        SandboxExtension::Handle resourceSandboxExtensionHandle;
+        if (!decoder.decode(resourceSandboxExtensionHandle))
             return false;
+        result.resourceSandboxExtension = SandboxExtension::create(resourceSandboxExtensionHandle);
     }
 
     if (!decoder.decodeEnum(result.contentSniffingPolicy))

Modified: trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h (173467 => 173468)


--- trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h	2014-09-10 16:22:26 UTC (rev 173467)
+++ trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h	2014-09-10 16:35:00 UTC (rev 173468)
@@ -55,8 +55,8 @@
     uint64_t webFrameID;
     WebCore::SessionID sessionID;
     WebCore::ResourceRequest request;
-    SandboxExtension::HandleArray requestBodySandboxExtensions; // Created automatically for the sender.
-    SandboxExtension::Handle resourceSandboxExtension; // Created automatically for the sender.
+    Vector<RefPtr<SandboxExtension>> requestBodySandboxExtensions; // Created automatically for the sender.
+    RefPtr<SandboxExtension> resourceSandboxExtension; // Created automatically for the sender.
     WebCore::ContentSniffingPolicy contentSniffingPolicy;
     WebCore::StoredCredentials allowStoredCredentials;
     WebCore::ClientCredentialPolicy clientCredentialPolicy;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to