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;