Diff
Modified: trunk/LayoutTests/ChangeLog (231007 => 231008)
--- trunk/LayoutTests/ChangeLog 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/LayoutTests/ChangeLog 2018-04-25 19:16:00 UTC (rev 231008)
@@ -1,3 +1,14 @@
+2018-04-25 Brent Fulgham <[email protected]>
+
+ Don't Block First Party Cookies on Redirects
+ https://bugs.webkit.org/show_bug.cgi?id=184948
+ <rdar://problem/39534099>
+
+ Reviewed by Youenn Fablet.
+
+ * http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-expected.txt: Added.
+ * http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html: Added.
+
2018-04-25 Ryan Haddad <[email protected]>
Unreviewed test gardening, rebaseline tests for iOS.
Added: trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-expected.txt (0 => 231008)
--- trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-expected.txt 2018-04-25 19:16:00 UTC (rev 231008)
@@ -0,0 +1 @@
+PASSED: Cookie successfully set
Added: trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html (0 => 231008)
--- trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html (rev 0)
+++ trunk/LayoutTests/http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html 2018-04-25 19:16:00 UTC (rev 231008)
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <script src=""
+<script>
+ description("Tests that blocking is not applied to top-level navigation redirects.");
+ jsTestIsAsync = true;
+
+ internals.setResourceLoadStatisticsEnabled(true);
+ testRunner.setCookieStoragePartitioningEnabled(true);
+
+ function doRedirect()
+ {
+ testRunner.setStatisticsPrevalentResource("http://localhost", true);
+ if (!testRunner.isStatisticsPrevalentResource("http://localhost")) {
+ testFailed("Host did not get set as prevalent resource.");
+ finishJSTest();
+ }
+ else
+ window.location = "http://localhost:8000/cookies/resources/set-cookie-on-redirect.php?step=1";
+ }
+</script>
+</head>
+<body _onload_="doRedirect()">
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (231007 => 231008)
--- trunk/Source/WebCore/ChangeLog 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebCore/ChangeLog 2018-04-25 19:16:00 UTC (rev 231008)
@@ -1,3 +1,17 @@
+2018-04-25 Brent Fulgham <[email protected]>
+
+ Don't Block First Party Cookies on Redirects
+ https://bugs.webkit.org/show_bug.cgi?id=184948
+ <rdar://problem/39534099>
+
+ Reviewed by Youenn Fablet.
+
+ The Navigation scheduler looses the 'requester' value when performing a ScheduledRedirect.
+
+ Test: http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html
+
+ * loader/NavigationScheduler.cpp:
+
2018-04-25 Youenn Fablet <[email protected]>
CachedRawResource is not handling incremental data computation correctly
Modified: trunk/Source/WebCore/loader/NavigationScheduler.cpp (231007 => 231008)
--- trunk/Source/WebCore/loader/NavigationScheduler.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebCore/loader/NavigationScheduler.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -183,6 +183,8 @@
bool refresh = equalIgnoringFragmentIdentifier(frame.document()->url(), url());
ResourceRequest resourceRequest { url(), referrer(), refresh ? ReloadIgnoringCacheData : UseProtocolCachePolicy };
+ if (initiatedByMainFrame() == InitiatedByMainFrame::Yes)
+ resourceRequest.setRequester(ResourceRequest::Requester::Main);
FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs(), initiatedByMainFrame() };
frame.loader().changeLocation(WTFMove(frameLoadRequest));
Modified: trunk/Source/WebKit/ChangeLog (231007 => 231008)
--- trunk/Source/WebKit/ChangeLog 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/ChangeLog 2018-04-25 19:16:00 UTC (rev 231008)
@@ -1,3 +1,49 @@
+2018-04-25 Brent Fulgham <[email protected]>
+
+ Don't Block First Party Cookies on Redirects
+ https://bugs.webkit.org/show_bug.cgi?id=184948
+ <rdar://problem/39534099>
+
+ Reviewed by Youenn Fablet.
+
+ Top-level navigations should not be subject to cookie blocking behavior. When performing redirects for main frame
+ navigation we are blocking cookies, leading to site breakage.
+
+ We need to keep track of which NetworkDataTasks are due to a main frame navigation. When a redirect is performed
+ on the main frame, we should treat the new origin as the 'first party for cookies' and avoid blocking cookies for
+ that URL.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::preconnectTo): Use the correct parameter type. We actually serialize
+ NetworkResourceLoadParameters over IPC, so we should get access to all the members of this child class.
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkDataTask.cpp:
+ (WebKit::NetworkDataTask::create): Pass new 'loadIsForNavigation' flag to create methods.
+ (WebKit::NetworkDataTask::NetworkDataTask): Capture 'loadIsForNavigation' in constructor.
+ * NetworkProcess/NetworkDataTask.h:
+ (WebKit::NetworkDataTask::isTopLevelNavigation const): Added.
+ * NetworkProcess/NetworkDataTaskBlob.cpp:
+ (WebKit::NetworkDataTaskBlob::NetworkDataTaskBlob): Accept new constructor argument.
+ * NetworkProcess/NetworkDataTaskBlob.h:
+ * NetworkProcess/NetworkLoad.cpp:
+ (WebKit::NetworkLoad::willPerformHTTPRedirection): Retain requester value from old request during redirect.
+ * NetworkProcess/NetworkResourceLoadParameters.cpp:
+ (NetworkResourceLoadParameters::decode): Update to pass new flag.
+ (NetworkResourceLoadParameters::encode): Ditto.
+ * NetworkProcess/NetworkLoadParameters.h:
+ * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
+ (WebKit::NetworkCapture::NetworkDataTaskReplay::NetworkDataTaskReplay): Accept new constructor argument.
+ * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
+ * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+ (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): Accept new constructor argument.
+ (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
+ * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
+ (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl): Accept new constructor argument.
+ * NetworkProcess/curl/NetworkDataTaskCurl.h:
+ * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
+ (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup): Accept new constructor argument.
+ * NetworkProcess/soup/NetworkDataTaskSoup.h:
+
2018-04-25 Youenn Fablet <[email protected]>
Ensure DNT is set for redirections handled in NetworkProcess
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -301,7 +301,7 @@
NetworkProcess::singleton().prefetchDNS(hostname);
}
-void NetworkConnectionToWebProcess::preconnectTo(uint64_t preconnectionIdentifier, NetworkLoadParameters&& parameters)
+void NetworkConnectionToWebProcess::preconnectTo(uint64_t preconnectionIdentifier, NetworkResourceLoadParameters&& parameters)
{
#if ENABLE(SERVER_PRECONNECT)
new PreconnectTask(WTFMove(parameters), [this, protectedThis = makeRef(*this), identifier = preconnectionIdentifier] (const ResourceError& error) {
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -130,7 +130,7 @@
void performSynchronousLoad(NetworkResourceLoadParameters&&, Ref<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>&&);
void loadPing(NetworkResourceLoadParameters&&);
void prefetchDNS(const String&);
- void preconnectTo(uint64_t preconnectionIdentifier, NetworkLoadParameters&&);
+ void preconnectTo(uint64_t preconnectionIdentifier, NetworkResourceLoadParameters&&);
void removeLoadIdentifier(ResourceLoadIdentifier);
void setDefersLoading(ResourceLoadIdentifier, bool);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -51,20 +51,20 @@
Ref<NetworkDataTask> NetworkDataTask::create(NetworkSession& session, NetworkDataTaskClient& client, const NetworkLoadParameters& parameters)
{
if (parameters.request.url().protocolIsBlob())
- return NetworkDataTaskBlob::create(session, client, parameters.request, parameters.contentSniffingPolicy, parameters.blobFileReferences);
+ return NetworkDataTaskBlob::create(session, client, parameters.request, parameters.contentSniffingPolicy, parameters.blobFileReferences, parameters.isMainFrameNavigation);
#if PLATFORM(COCOA)
- return NetworkDataTaskCocoa::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.shouldPreconnectOnly);
+ return NetworkDataTaskCocoa::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.shouldPreconnectOnly, parameters.isMainFrameNavigation);
#endif
#if USE(SOUP)
- return NetworkDataTaskSoup::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect);
+ return NetworkDataTaskSoup::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation);
#endif
#if USE(CURL)
- return NetworkDataTaskCurl::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect);
+ return NetworkDataTaskCurl::create(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation);
#endif
}
-NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
: m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
, m_session(session)
, m_client(&client)
@@ -73,6 +73,7 @@
, m_lastHTTPMethod(requestWithCredentials.httpMethod())
, m_firstRequest(requestWithCredentials)
, m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
+ , m_dataTaskIsForMainFrameNavigation(dataTaskIsForMainFrameNavigation)
{
ASSERT(RunLoop::isMain());
Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -126,8 +126,10 @@
void setSuggestedFilename(const String& suggestedName) { m_suggestedFilename = suggestedName; }
const String& partition() { return m_partition; }
+ bool isTopLevelNavigation() const { return m_dataTaskIsForMainFrameNavigation; }
+
protected:
- NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+ NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation);
enum FailureType {
NoFailure,
@@ -155,6 +157,7 @@
WebCore::ResourceRequest m_firstRequest;
bool m_shouldClearReferrerOnHTTPSToHTTPRedirect { true };
String m_suggestedFilename;
+ bool m_dataTaskIsForMainFrameNavigation { false };
};
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -72,7 +72,7 @@
static const char* const webKitBlobResourceDomain = "WebKitBlobResource";
NetworkDataTaskBlob::NetworkDataTaskBlob(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& request, ContentSniffingPolicy shouldContentSniff, const Vector<RefPtr<WebCore::BlobDataFileReference>>& fileReferences)
- : NetworkDataTask(session, client, request, StoredCredentialsPolicy::DoNotUse, false)
+ : NetworkDataTask(session, client, request, StoredCredentialsPolicy::DoNotUse, false, false)
, m_stream(std::make_unique<AsyncFileStream>(*this))
, m_fileReferences(fileReferences)
{
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -247,6 +247,8 @@
#endif
auto oldRequest = WTFMove(m_currentRequest);
+ request.setRequester(oldRequest.requester());
+
m_currentRequest = request;
m_client.get().willSendRedirectedRequest(WTFMove(oldRequest), WTFMove(request), WTFMove(redirectResponse));
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -48,6 +48,7 @@
bool shouldClearReferrerOnHTTPSToHTTPRedirect { true };
bool defersLoading { false };
bool needsCertificateInfo { false };
+ bool isMainFrameNavigation { false };
Vector<RefPtr<WebCore::BlobDataFileReference>> blobFileReferences;
PreconnectOnly shouldPreconnectOnly { PreconnectOnly::No };
};
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -82,6 +82,7 @@
encoder << shouldClearReferrerOnHTTPSToHTTPRedirect;
encoder << defersLoading;
encoder << needsCertificateInfo;
+ encoder << isMainFrameNavigation;
encoder << maximumBufferingTime;
encoder << derivedCachedDataTypesToRetrieve;
@@ -168,6 +169,8 @@
return false;
if (!decoder.decode(result.needsCertificateInfo))
return false;
+ if (!decoder.decode(result.isMainFrameNavigation))
+ return false;
if (!decoder.decode(result.maximumBufferingTime))
return false;
if (!decoder.decode(result.derivedCachedDataTypesToRetrieve))
Modified: trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -46,7 +46,7 @@
static const char* const webKitRelayDomain = "WebKitReplay";
NetworkDataTaskReplay::NetworkDataTaskReplay(NetworkSession& session, NetworkDataTaskClient& client, const NetworkLoadParameters& parameters, Resource* resource)
- : NetworkDataTask(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect)
+ : NetworkDataTask(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation)
, m_currentRequest(m_firstRequest)
, m_resource(resource)
{
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -41,9 +41,9 @@
class NetworkDataTaskCocoa final : public NetworkDataTask {
friend class NetworkSessionCocoa;
public:
- static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly)
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation)
{
- return adoptRef(*new NetworkDataTaskCocoa(session, client, request, frameID, pageID, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, shouldPreconnectOnly));
+ return adoptRef(*new NetworkDataTaskCocoa(session, client, request, frameID, pageID, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, shouldPreconnectOnly, dataTaskIsForMainFrameNavigation));
}
~NetworkDataTaskCocoa();
@@ -81,7 +81,7 @@
#endif
private:
- NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly);
+ NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly, bool dataTaskIsForMainFrameNavigation);
bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&);
void applySniffingPoliciesAndBindRequestToInferfaceIfNeeded(NSURLRequest*&, bool shouldContentSniff, bool shouldContentEncodingSniff);
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2018-04-25 19:16:00 UTC (rev 231008)
@@ -175,8 +175,8 @@
#endif
}
-NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly)
- : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect)
+NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, uint64_t frameID, uint64_t pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation)
+ : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation)
, m_frameID(frameID)
, m_pageID(pageID)
{
@@ -359,6 +359,9 @@
#endif
}
+ if (isTopLevelNavigation())
+ request.setFirstPartyForCookies(request.url());
+
bool shouldBlockCookies = false;
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
shouldBlockCookies = m_session->networkStorageSession().shouldBlockCookies(request);
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -40,8 +40,8 @@
namespace WebKit {
-NetworkDataTaskCurl::NetworkDataTaskCurl(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
- : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect)
+NetworkDataTaskCurl::NetworkDataTaskCurl(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
+ : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation)
{
if (m_scheduledFailureType != NoFailure)
return;
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -38,9 +38,9 @@
class NetworkDataTaskCurl final : public NetworkDataTask, public WebCore::CurlRequestClient {
public:
- static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
{
- return adoptRef(*new NetworkDataTaskCurl(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
+ return adoptRef(*new NetworkDataTaskCurl(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation));
}
~NetworkDataTaskCurl();
@@ -54,7 +54,7 @@
Yes = true
};
- NetworkDataTaskCurl(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+ NetworkDataTaskCurl(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation);
void suspend() override;
void cancel() override;
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -48,8 +48,8 @@
static const size_t gDefaultReadBufferSize = 8192;
-NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
- : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect)
+NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
+ : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation)
, m_shouldContentSniff(shouldContentSniff)
, m_timeoutSource(RunLoop::main(), this, &NetworkDataTaskSoup::timeoutFired)
{
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h (231007 => 231008)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h 2018-04-25 19:16:00 UTC (rev 231008)
@@ -36,15 +36,15 @@
class NetworkDataTaskSoup final : public NetworkDataTask {
public:
- static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation)
{
- return adoptRef(*new NetworkDataTaskSoup(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
+ return adoptRef(*new NetworkDataTaskSoup(session, client, request, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation));
}
~NetworkDataTaskSoup();
private:
- NetworkDataTaskSoup(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+ NetworkDataTaskSoup(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation);
void suspend() override;
void cancel() override;
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (231007 => 231008)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2018-04-25 18:57:11 UTC (rev 231007)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2018-04-25 19:16:00 UTC (rev 231008)
@@ -325,9 +325,9 @@
// FIXME: We should also sanitize redirect response for navigations.
loadParameters.shouldRestrictHTTPResponseAccess = RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess() && resourceLoader.options().mode != FetchOptions::Mode::Navigate;
- bool isMainFrameNavigation = resourceLoader.frame() && resourceLoader.frame()->isMainFrame() && resourceLoader.options().mode == FetchOptions::Mode::Navigate;
+ loadParameters.isMainFrameNavigation = resourceLoader.frame() && resourceLoader.frame()->isMainFrame() && resourceLoader.options().mode == FetchOptions::Mode::Navigate;
- loadParameters.shouldEnableFromOriginResponseHeader = RuntimeEnabledFeatures::sharedFeatures().fromOriginResponseHeaderEnabled() && !isMainFrameNavigation;
+ loadParameters.shouldEnableFromOriginResponseHeader = RuntimeEnabledFeatures::sharedFeatures().fromOriginResponseHeaderEnabled() && !loadParameters.isMainFrameNavigation;
if (loadParameters.shouldEnableFromOriginResponseHeader) {
Vector<RefPtr<WebCore::SecurityOrigin>> frameAncestorOrigins;
for (auto* frame = resourceLoader.frame(); frame; frame = frame->tree().parent()) {