Title: [249277] trunk
Revision
249277
Author
[email protected]
Date
2019-08-29 09:19:20 -0700 (Thu, 29 Aug 2019)

Log Message

Use WebPageProxy callbacks in case of authentication challenge received from Service Worker
https://bugs.webkit.org/show_bug.cgi?id=201177

Reviewed by Alex Christensen.

Source/WebKit:

Send topOrigin for every possible load to NetworkProcess.
Send topOrigin as part of authentication challenge to UIProcess.

If there is no corresponding page for the pageID, try getting a page
related to the service worker using the topOrigin and send the challenge to it.

* NetworkProcess/NetworkCORSPreflightChecker.cpp:
(WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
* NetworkProcess/NetworkCORSPreflightChecker.h:
* NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::didReceiveChallenge):
* NetworkProcess/NetworkLoadChecker.cpp:
(WebKit::NetworkLoadChecker::NetworkLoadChecker):
(WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
* NetworkProcess/NetworkLoadChecker.h:
* NetworkProcess/NetworkLoadParameters.h:
* NetworkProcess/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::encode const):
(WebKit::NetworkResourceLoadParameters::decode):
* NetworkProcess/NetworkResourceLoadParameters.h:
* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
* NetworkProcess/PingLoad.cpp:
(WebKit::PingLoad::PingLoad):
(WebKit::PingLoad::didReceiveChallenge):
* Shared/Authentication/AuthenticationManager.cpp:
(WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
* Shared/Authentication/AuthenticationManager.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::processAuthenticationChallenge):
(WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
* UIProcess/WebPageProxy.h:
* WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
(WebKit::WebLoaderStrategy::loadResourceSynchronously):
(WebKit::WebLoaderStrategy::startPingLoad):

LayoutTests:

* http/wpt/service-workers/server-trust-evaluation.https.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (249276 => 249277)


--- trunk/LayoutTests/ChangeLog	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/LayoutTests/ChangeLog	2019-08-29 16:19:20 UTC (rev 249277)
@@ -1,3 +1,12 @@
+2019-08-29  Youenn Fablet  <[email protected]>
+
+        Use WebPageProxy callbacks in case of authentication challenge received from Service Worker
+        https://bugs.webkit.org/show_bug.cgi?id=201177
+
+        Reviewed by Alex Christensen.
+
+        * http/wpt/service-workers/server-trust-evaluation.https.html:
+
 2019-08-29  Rob Buis  <[email protected]>
 
         Address some MathML FIXMEs 

Modified: trunk/LayoutTests/http/wpt/service-workers/server-trust-evaluation.https.html (249276 => 249277)


--- trunk/LayoutTests/http/wpt/service-workers/server-trust-evaluation.https.html	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/LayoutTests/http/wpt/service-workers/server-trust-evaluation.https.html	2019-08-29 16:19:20 UTC (rev 249277)
@@ -11,7 +11,7 @@
 var iframe;
 promise_test(async (test) => {
     if (window.testRunner) {
-        window.testRunner.terminateNetworkProcess();
+        testRunner.terminateNetworkProcess();
         await fetch("").then(() => { }, () => { });
     }
 
@@ -32,21 +32,34 @@
 }, "Setup worker");
 
 promise_test(async (test) => {
-    if (window.testRunner)
-        window.testRunner.setAllowsAnySSLCertificate(false);
+    let count;
+    if (window.testRunner) {
+        testRunner.setAllowsAnySSLCertificate(false);
+        count = testRunner.serverTrustEvaluationCallbackCallsCount;
+    }
 
     iframe = await with_iframe("resources/iframe1.html");
     assert_true(iframe.contentWindow.document.body.innerHTML.trim().indexOf("Load failed: ") !== -1);
     iframe.remove();
+
+    if (window.testRunner)
+        assert_equals(testRunner.serverTrustEvaluationCallbackCallsCount, count + 1);
+
 }, "Service worker load should fail");
 
 promise_test(async (test) => {
-    if (window.testRunner)
+    let count;
+    if (window.testRunner) {
         window.testRunner.setAllowsAnySSLCertificate(true);
+        count = testRunner.serverTrustEvaluationCallbackCallsCount;
+    }
 
     iframe = await with_iframe("resources/iframe2.html");
     assert_true(iframe.contentWindow.document.body.innerHTML.trim().indexOf("PASS") !== -1);
     iframe.remove();
+
+    if (window.testRunner)
+        assert_equals(testRunner.serverTrustEvaluationCallbackCallsCount, count + 1);
 }, "Service worker load should succeed");
 </script>
 </body>

Modified: trunk/Source/WebKit/ChangeLog (249276 => 249277)


--- trunk/Source/WebKit/ChangeLog	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/ChangeLog	2019-08-29 16:19:20 UTC (rev 249277)
@@ -1,3 +1,51 @@
+2019-08-29  Youenn Fablet  <[email protected]>
+
+        Use WebPageProxy callbacks in case of authentication challenge received from Service Worker
+        https://bugs.webkit.org/show_bug.cgi?id=201177
+
+        Reviewed by Alex Christensen.
+
+        Send topOrigin for every possible load to NetworkProcess.
+        Send topOrigin as part of authentication challenge to UIProcess.
+
+        If there is no corresponding page for the pageID, try getting a page
+        related to the service worker using the topOrigin and send the challenge to it.
+
+        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
+        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
+        * NetworkProcess/NetworkCORSPreflightChecker.h:
+        * NetworkProcess/NetworkLoad.cpp:
+        (WebKit::NetworkLoad::didReceiveChallenge):
+        * NetworkProcess/NetworkLoadChecker.cpp:
+        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
+        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
+        * NetworkProcess/NetworkLoadChecker.h:
+        * NetworkProcess/NetworkLoadParameters.h:
+        * NetworkProcess/NetworkResourceLoadParameters.cpp:
+        (WebKit::NetworkResourceLoadParameters::encode const):
+        (WebKit::NetworkResourceLoadParameters::decode):
+        * NetworkProcess/NetworkResourceLoadParameters.h:
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::m_shouldCaptureExtraNetworkLoadMetrics):
+        * NetworkProcess/PingLoad.cpp:
+        (WebKit::PingLoad::PingLoad):
+        (WebKit::PingLoad::didReceiveChallenge):
+        * Shared/Authentication/AuthenticationManager.cpp:
+        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
+        * Shared/Authentication/AuthenticationManager.h:
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::processAuthenticationChallenge):
+        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
+        * UIProcess/WebPageProxy.h:
+        * WebProcess/Network/WebLoaderStrategy.cpp:
+        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
+        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
+        (WebKit::WebLoaderStrategy::startPingLoad):
+
 2019-08-29  Chris Dumez  <[email protected]>
 
         Dissociate the WebPageProxy's identifier from the WebPage's

Modified: trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -101,7 +101,7 @@
         return;
     }
 
-    m_networkProcess->authenticationManager().didReceiveAuthenticationChallenge(m_parameters.sessionID, m_parameters.pageID, m_parameters.frameID, challenge, WTFMove(completionHandler));
+    m_networkProcess->authenticationManager().didReceiveAuthenticationChallenge(m_parameters.sessionID, m_parameters.pageID, m_parameters.topOrigin ? &m_parameters.topOrigin->data() : nullptr, challenge, WTFMove(completionHandler));
 }
 
 void NetworkCORSPreflightChecker::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -48,11 +48,11 @@
     struct Parameters {
         WebCore::ResourceRequest originalRequest;
         Ref<WebCore::SecurityOrigin> sourceOrigin;
+        RefPtr<WebCore::SecurityOrigin> topOrigin;
         String referrer;
         String userAgent;
         PAL::SessionID sessionID;
         WebCore::PageIdentifier pageID;
-        WebCore::FrameIdentifier frameID;
         WebCore::StoredCredentialsPolicy storedCredentialsPolicy;
     };
     using CompletionCallback = CompletionHandler<void(WebCore::ResourceError&&)>;

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -201,7 +201,7 @@
     if (auto* pendingDownload = m_task->pendingDownload())
         m_networkProcess->authenticationManager().didReceiveAuthenticationChallenge(*pendingDownload, challenge, WTFMove(completionHandler));
     else
-        m_networkProcess->authenticationManager().didReceiveAuthenticationChallenge(m_task->sessionID(), m_parameters.webPageID, m_parameters.webFrameID, challenge, WTFMove(completionHandler));
+        m_networkProcess->authenticationManager().didReceiveAuthenticationChallenge(m_task->sessionID(), m_parameters.webPageID, m_parameters.topOrigin ? &m_parameters.topOrigin->data() : nullptr, challenge, WTFMove(completionHandler));
 }
 
 void NetworkLoad::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -48,7 +48,7 @@
     return url.protocolIsData() || url.protocolIsBlob() || !origin || origin->canRequest(url);
 }
 
-NetworkLoadChecker::NetworkLoadChecker(NetworkProcess& networkProcess, FetchOptions&& options, PAL::SessionID sessionID, PageIdentifier pageID, FrameIdentifier frameID, HTTPHeaderMap&& originalRequestHeaders, URL&& url, RefPtr<SecurityOrigin>&& sourceOrigin, PreflightPolicy preflightPolicy, String&& referrer, bool isHTTPSUpgradeEnabled, bool shouldCaptureExtraNetworkLoadMetrics, LoadType requestLoadType)
+NetworkLoadChecker::NetworkLoadChecker(NetworkProcess& networkProcess, FetchOptions&& options, PAL::SessionID sessionID, PageIdentifier pageID, FrameIdentifier frameID, HTTPHeaderMap&& originalRequestHeaders, URL&& url, RefPtr<SecurityOrigin>&& sourceOrigin, RefPtr<SecurityOrigin>&& topOrigin, PreflightPolicy preflightPolicy, String&& referrer, bool isHTTPSUpgradeEnabled, bool shouldCaptureExtraNetworkLoadMetrics, LoadType requestLoadType)
     : m_options(WTFMove(options))
     , m_sessionID(sessionID)
     , m_networkProcess(networkProcess)
@@ -57,6 +57,7 @@
     , m_originalRequestHeaders(WTFMove(originalRequestHeaders))
     , m_url(WTFMove(url))
     , m_origin(WTFMove(sourceOrigin))
+    , m_topOrigin(WTFMove(topOrigin))
     , m_preflightPolicy(preflightPolicy)
     , m_referrer(WTFMove(referrer))
     , m_shouldCaptureExtraNetworkLoadMetrics(shouldCaptureExtraNetworkLoadMetrics)
@@ -406,11 +407,11 @@
     NetworkCORSPreflightChecker::Parameters parameters = {
         WTFMove(requestForPreflight),
         *m_origin,
+        m_topOrigin,
         request.httpReferrer(),
         request.httpUserAgent(),
         m_sessionID,
         m_pageID,
-        m_frameID,
         m_storedCredentialsPolicy
     };
     m_corsPreflightChecker = makeUnique<NetworkCORSPreflightChecker>(m_networkProcess.get(), WTFMove(parameters), m_shouldCaptureExtraNetworkLoadMetrics, [this, request = WTFMove(request), handler = WTFMove(handler), isRedirected = isRedirected()](auto&& error) mutable {

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -56,7 +56,7 @@
 public:
     enum class LoadType : bool { MainFrame, Other };
 
-    NetworkLoadChecker(NetworkProcess&, WebCore::FetchOptions&&, PAL::SessionID, WebCore::PageIdentifier, WebCore::FrameIdentifier, WebCore::HTTPHeaderMap&&, URL&&, RefPtr<WebCore::SecurityOrigin>&&, WebCore::PreflightPolicy, String&& referrer, bool isHTTPSUpgradeEnabled = false, bool shouldCaptureExtraNetworkLoadMetrics = false, LoadType requestLoadType = LoadType::Other);
+    NetworkLoadChecker(NetworkProcess&, WebCore::FetchOptions&&, PAL::SessionID, WebCore::PageIdentifier, WebCore::FrameIdentifier, WebCore::HTTPHeaderMap&&, URL&&, RefPtr<WebCore::SecurityOrigin>&&, RefPtr<WebCore::SecurityOrigin>&& topOrigin, WebCore::PreflightPolicy, String&& referrer, bool isHTTPSUpgradeEnabled = false, bool shouldCaptureExtraNetworkLoadMetrics = false, LoadType requestLoadType = LoadType::Other);
     ~NetworkLoadChecker();
 
     struct RedirectionTriplet {
@@ -135,6 +135,7 @@
     WebCore::HTTPHeaderMap m_firstRequestHeaders; // Needed for CORS checks.
     URL m_url;
     RefPtr<WebCore::SecurityOrigin> m_origin;
+    RefPtr<WebCore::SecurityOrigin> m_topOrigin;
     Optional<WebCore::ContentSecurityPolicyResponseHeaders> m_cspResponseHeaders;
 #if ENABLE(CONTENT_EXTENSIONS)
     URL m_mainDocumentURL;

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -31,6 +31,7 @@
 #include <WebCore/PageIdentifier.h>
 #include <WebCore/ResourceLoaderOptions.h>
 #include <WebCore/ResourceRequest.h>
+#include <WebCore/SecurityOrigin.h>
 #include <pal/SessionID.h>
 #include <wtf/ProcessID.h>
 
@@ -48,6 +49,7 @@
     PAL::SessionID sessionID;
     WebCore::PageIdentifier webPageID;
     WebCore::FrameIdentifier webFrameID;
+    RefPtr<WebCore::SecurityOrigin> topOrigin;
     WTF::ProcessID parentPID { 0 };
     WebCore::ResourceRequest request;
     WebCore::ContentSniffingPolicy contentSniffingPolicy { WebCore::ContentSniffingPolicy::SniffContent };

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -84,6 +84,9 @@
     encoder << static_cast<bool>(sourceOrigin);
     if (sourceOrigin)
         encoder << *sourceOrigin;
+    encoder << static_cast<bool>(topOrigin);
+    if (sourceOrigin)
+        encoder << *topOrigin;
     encoder << options;
     encoder << cspResponseHeaders;
     encoder << originalRequestHeaders;
@@ -189,6 +192,15 @@
             return WTF::nullopt;
     }
 
+    bool hasTopOrigin;
+    if (!decoder.decode(hasTopOrigin))
+        return WTF::nullopt;
+    if (hasTopOrigin) {
+        result.topOrigin = SecurityOrigin::decode(decoder);
+        if (!result.topOrigin)
+            return WTF::nullopt;
+    }
+
     Optional<FetchOptions> options;
     decoder >> options;
     if (!options)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -30,7 +30,6 @@
 #include "UserContentControllerIdentifier.h"
 #include <WebCore/ContentSecurityPolicyResponseHeaders.h>
 #include <WebCore/FetchOptions.h>
-#include <WebCore/SecurityOrigin.h>
 #include <wtf/Seconds.h>
 
 namespace IPC {

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -111,7 +111,7 @@
 
     if (synchronousReply || parameters.shouldRestrictHTTPResponseAccess || parameters.options.keepAlive) {
         NetworkLoadChecker::LoadType requestLoadType = isMainFrameLoad() ? NetworkLoadChecker::LoadType::MainFrame : NetworkLoadChecker::LoadType::Other;
-        m_networkLoadChecker = makeUnique<NetworkLoadChecker>(connection.networkProcess(), FetchOptions { m_parameters.options }, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, HTTPHeaderMap { m_parameters.originalRequestHeaders }, URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.preflightPolicy, originalRequest().httpReferrer(), m_parameters.isHTTPSUpgradeEnabled, shouldCaptureExtraNetworkLoadMetrics(), requestLoadType);
+        m_networkLoadChecker = makeUnique<NetworkLoadChecker>(connection.networkProcess(), FetchOptions { m_parameters.options }, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, HTTPHeaderMap { m_parameters.originalRequestHeaders }, URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.topOrigin.copyRef(), m_parameters.preflightPolicy, originalRequest().httpReferrer(), m_parameters.isHTTPSUpgradeEnabled, shouldCaptureExtraNetworkLoadMetrics(), requestLoadType);
         if (m_parameters.cspResponseHeaders)
             m_networkLoadChecker->setCSPResponseHeaders(ContentSecurityPolicyResponseHeaders { m_parameters.cspResponseHeaders.value() });
 #if ENABLE(CONTENT_EXTENSIONS)

Modified: trunk/Source/WebKit/NetworkProcess/PingLoad.cpp (249276 => 249277)


--- trunk/Source/WebKit/NetworkProcess/PingLoad.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/NetworkProcess/PingLoad.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -44,7 +44,7 @@
     : m_parameters(WTFMove(parameters))
     , m_completionHandler(WTFMove(completionHandler))
     , m_timeoutTimer(*this, &PingLoad::timeoutTimerFired)
-    , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(networkProcess, FetchOptions { m_parameters.options}, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, WTFMove(m_parameters.originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.preflightPolicy, m_parameters.request.httpReferrer()))
+    , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(networkProcess, FetchOptions { m_parameters.options}, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, WTFMove(m_parameters.originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.topOrigin.copyRef(), m_parameters.preflightPolicy, m_parameters.request.httpReferrer()))
 {
     initialize(networkProcess);
 }
@@ -53,7 +53,7 @@
     : m_parameters(WTFMove(parameters))
     , m_completionHandler(WTFMove(completionHandler))
     , m_timeoutTimer(*this, &PingLoad::timeoutTimerFired)
-    , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(networkProcess, FetchOptions { m_parameters.options}, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, WTFMove(m_parameters.originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.preflightPolicy, m_parameters.request.httpReferrer()))
+    , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(networkProcess, FetchOptions { m_parameters.options}, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, WTFMove(m_parameters.originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.topOrigin.copyRef(), m_parameters.preflightPolicy, m_parameters.request.httpReferrer()))
     , m_blobFiles(connection.resolveBlobReferences(m_parameters))
 {
     for (auto& file : m_blobFiles) {
@@ -148,7 +148,7 @@
 {
     RELEASE_LOG_IF_ALLOWED("didReceiveChallenge");
     if (challenge.protectionSpace().authenticationScheme() == ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested) {
-        m_networkLoadChecker->networkProcess().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, challenge, WTFMove(completionHandler));
+        m_networkLoadChecker->networkProcess().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.sessionID, m_parameters.webPageID,  m_parameters.topOrigin ? &m_parameters.topOrigin->data() : nullptr, challenge, WTFMove(completionHandler));
         return;
     }
     auto weakThis = makeWeakPtr(*this);

Modified: trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.cpp (249276 => 249277)


--- trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -108,10 +108,9 @@
     return challengesToCoalesce;
 }
 
-void AuthenticationManager::didReceiveAuthenticationChallenge(PAL::SessionID sessionID, PageIdentifier pageID, FrameIdentifier frameID, const AuthenticationChallenge& authenticationChallenge, ChallengeCompletionHandler&& completionHandler)
+void AuthenticationManager::didReceiveAuthenticationChallenge(PAL::SessionID sessionID, PageIdentifier pageID, const SecurityOriginData* topOrigin, const AuthenticationChallenge& authenticationChallenge, ChallengeCompletionHandler&& completionHandler)
 {
     ASSERT(pageID);
-    ASSERT(frameID);
 
     uint64_t challengeID = addChallengeToChallengeMap({ pageID, authenticationChallenge, WTFMove(completionHandler) });
 
@@ -118,8 +117,11 @@
     // Coalesce challenges in the same protection space and in the same page.
     if (shouldCoalesceChallenge(pageID, challengeID, authenticationChallenge))
         return;
-    
-    m_process.send(Messages::NetworkProcessProxy::DidReceiveAuthenticationChallenge(sessionID, pageID, frameID, authenticationChallenge, challengeID));
+
+    Optional<SecurityOriginData> topOriginData;
+    if (topOrigin)
+        topOriginData = *topOrigin;
+    m_process.send(Messages::NetworkProcessProxy::DidReceiveAuthenticationChallenge(sessionID, pageID, topOriginData, authenticationChallenge, challengeID));
 }
 
 void AuthenticationManager::didReceiveAuthenticationChallenge(IPC::MessageSender& download, const WebCore::AuthenticationChallenge& authenticationChallenge, ChallengeCompletionHandler&& completionHandler)

Modified: trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.h (249276 => 249277)


--- trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/Shared/Authentication/AuthenticationManager.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -43,6 +43,7 @@
 namespace WebCore {
 class AuthenticationChallenge;
 class Credential;
+struct SecurityOriginData;
 }
 
 namespace WebKit {
@@ -63,7 +64,7 @@
 
     static const char* supplementName();
 
-    void didReceiveAuthenticationChallenge(PAL::SessionID, WebCore::PageIdentifier, WebCore::FrameIdentifier, const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&&);
+    void didReceiveAuthenticationChallenge(PAL::SessionID, WebCore::PageIdentifier, const WebCore::SecurityOriginData* , const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&&);
     void didReceiveAuthenticationChallenge(IPC::MessageSender& download, const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&&);
 
     void completeAuthenticationChallenge(uint64_t challengeID, AuthenticationChallengeDisposition, WebCore::Credential&&);

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (249276 => 249277)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -315,8 +315,18 @@
 #endif
 }
 
-void NetworkProcessProxy::didReceiveAuthenticationChallenge(PAL::SessionID sessionID, PageIdentifier pageID, FrameIdentifier frameID, WebCore::AuthenticationChallenge&& coreChallenge, uint64_t challengeID)
+void NetworkProcessProxy::processAuthenticationChallenge(PAL::SessionID sessionID, Ref<AuthenticationChallengeProxy>&& authenticationChallenge)
 {
+    auto* store = websiteDataStoreFromSessionID(sessionID);
+    if (!store || authenticationChallenge->core().protectionSpace().authenticationScheme() != ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested) {
+        authenticationChallenge->listener().completeChallenge(AuthenticationChallengeDisposition::PerformDefaultHandling);
+        return;
+    }
+    store->client().didReceiveAuthenticationChallenge(WTFMove(authenticationChallenge));
+}
+
+void NetworkProcessProxy::didReceiveAuthenticationChallenge(PAL::SessionID sessionID, PageIdentifier pageID, const Optional<SecurityOriginData>& topOrigin, WebCore::AuthenticationChallenge&& coreChallenge, uint64_t challengeID)
+{
 #if HAVE(SEC_KEY_PROXY)
     WeakPtr<SecKeyProxyStore> secKeyProxyStore;
     if (coreChallenge.protectionSpace().authenticationScheme() == ProtectionSpaceAuthenticationSchemeClientCertificateRequested) {
@@ -332,20 +342,29 @@
 #endif
 
     WebPageProxy* page = nullptr;
-    if (pageID && !m_processPool.isServiceWorkerPageID(pageID))
+    if (pageID)
         page = WebProcessProxy::webPage(pageID);
 
-    if (!page) {
-        auto* store = websiteDataStoreFromSessionID(sessionID);
-        if (!store || coreChallenge.protectionSpace().authenticationScheme() != ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested) {
-            authenticationChallenge->listener().completeChallenge(AuthenticationChallengeDisposition::PerformDefaultHandling);
-            return;
-        }
-        store->client().didReceiveAuthenticationChallenge(WTFMove(authenticationChallenge));
+    if (page) {
+        page->didReceiveAuthenticationChallengeProxy(WTFMove(authenticationChallenge));
         return;
     }
 
-    page->didReceiveAuthenticationChallengeProxy(frameID, WTFMove(authenticationChallenge));
+    if (!topOrigin || !m_processPool.isServiceWorkerPageID(pageID)) {
+        processAuthenticationChallenge(sessionID, WTFMove(authenticationChallenge));
+        return;
+    }
+
+    WebPageProxy::forMostVisibleWebPageIfAny(sessionID, *topOrigin, [this, weakThis = makeWeakPtr(this), sessionID, authenticationChallenge = WTFMove(authenticationChallenge)](auto* page) mutable {
+        if (!weakThis)
+            return;
+
+        if (page) {
+            page->didReceiveAuthenticationChallengeProxy(WTFMove(authenticationChallenge));
+            return;
+        }
+        processAuthenticationChallenge(sessionID, WTFMove(authenticationChallenge));
+    });
 }
 
 void NetworkProcessProxy::didFetchWebsiteData(uint64_t callbackID, const WebsiteData& websiteData)

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (249276 => 249277)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -213,7 +213,7 @@
     // Message handlers
     void didReceiveNetworkProcessProxyMessage(IPC::Connection&, IPC::Decoder&);
     void didCreateNetworkConnectionToWebProcess(const IPC::Attachment&);
-    void didReceiveAuthenticationChallenge(PAL::SessionID, WebCore::PageIdentifier, WebCore::FrameIdentifier, WebCore::AuthenticationChallenge&&, uint64_t challengeID);
+    void didReceiveAuthenticationChallenge(PAL::SessionID, WebCore::PageIdentifier, const Optional<WebCore::SecurityOriginData>&, WebCore::AuthenticationChallenge&&, uint64_t challengeID);
     void didFetchWebsiteData(uint64_t callbackID, const WebsiteData&);
     void didDeleteWebsiteData(uint64_t callbackID);
     void didDeleteWebsiteDataForOrigins(uint64_t callbackID);
@@ -250,6 +250,8 @@
     // ProcessLauncher::Client
     void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
 
+    void processAuthenticationChallenge(PAL::SessionID, Ref<AuthenticationChallengeProxy>&&);
+
     WebProcessPool& m_processPool;
     
     unsigned m_numPendingConnectionRequests;

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (249276 => 249277)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2019-08-29 16:19:20 UTC (rev 249277)
@@ -23,7 +23,7 @@
 messages -> NetworkProcessProxy LegacyReceiver {
     DidCreateNetworkConnectionToWebProcess(IPC::Attachment connectionIdentifier)
 
-    DidReceiveAuthenticationChallenge(PAL::SessionID sessionID, WebCore::PageIdentifier pageID, WebCore::FrameIdentifier frameID, WebCore::AuthenticationChallenge challenge, uint64_t challengeID)
+    DidReceiveAuthenticationChallenge(PAL::SessionID sessionID, WebCore::PageIdentifier pageID, Optional<WebCore::SecurityOriginData> topOrigin, WebCore::AuthenticationChallenge challenge, uint64_t challengeID)
 
     DidFetchWebsiteData(uint64_t callbackID, struct WebKit::WebsiteData websiteData)
     DidDeleteWebsiteData(uint64_t callbackID)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (249276 => 249277)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -7334,7 +7334,7 @@
 
 #endif
 
-void WebPageProxy::didReceiveAuthenticationChallengeProxy(FrameIdentifier, Ref<AuthenticationChallengeProxy>&& authenticationChallenge)
+void WebPageProxy::didReceiveAuthenticationChallengeProxy(Ref<AuthenticationChallengeProxy>&& authenticationChallenge)
 {
     m_navigationClient->didReceiveAuthenticationChallenge(*this, authenticationChallenge.get());
 }

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (249276 => 249277)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2019-08-29 16:19:20 UTC (rev 249277)
@@ -1256,7 +1256,7 @@
     void setViewportSizeForCSSViewportUnits(const WebCore::IntSize&);
     WebCore::IntSize viewportSizeForCSSViewportUnits() const { return m_viewportSizeForCSSViewportUnits.valueOr(WebCore::IntSize()); }
 
-    void didReceiveAuthenticationChallengeProxy(WebCore::FrameIdentifier, Ref<AuthenticationChallengeProxy>&&);
+    void didReceiveAuthenticationChallengeProxy(Ref<AuthenticationChallengeProxy>&&);
 
     SpellDocumentTag spellDocumentTag();
 

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (249276 => 249277)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2019-08-29 16:14:07 UTC (rev 249276)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2019-08-29 16:19:20 UTC (rev 249277)
@@ -321,6 +321,8 @@
         if (!origin.isNull())
             loadParameters.sourceOrigin = SecurityOrigin::createFromString(origin);
     }
+    if (document)
+        loadParameters.topOrigin = &document->topOrigin();
 
     if (loadParameters.options.mode != FetchOptions::Mode::Navigate) {
         ASSERT(loadParameters.sourceOrigin);
@@ -553,6 +555,7 @@
 
     loadParameters.options = options;
     loadParameters.sourceOrigin = &document->securityOrigin();
+    loadParameters.topOrigin = &document->topOrigin();
     if (!document->shouldBypassMainWorldContentSecurityPolicy()) {
         if (auto* contentSecurityPolicy = document->contentSecurityPolicy())
             loadParameters.cspResponseHeaders = contentSecurityPolicy->responseHeaders();
@@ -609,6 +612,7 @@
     loadParameters.identifier = generateLoadIdentifier();
     loadParameters.request = request;
     loadParameters.sourceOrigin = &document->securityOrigin();
+    loadParameters.topOrigin = &document->topOrigin();
     loadParameters.parentPID = presentingApplicationPID();
     loadParameters.storedCredentialsPolicy = options.credentials == FetchOptions::Credentials::Omit ? StoredCredentialsPolicy::DoNotUse : StoredCredentialsPolicy::Use;
     loadParameters.options = options;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to