Modified: branches/safari-609-branch/Source/WebKit/ChangeLog (258850 => 258851)
--- branches/safari-609-branch/Source/WebKit/ChangeLog 2020-03-23 16:51:24 UTC (rev 258850)
+++ branches/safari-609-branch/Source/WebKit/ChangeLog 2020-03-23 16:52:30 UTC (rev 258851)
@@ -1,20 +1,22 @@
-b'2020-03-23 Russell Epstein <[email protected]>\n\n Apply patch. rdar://problem/60555343\n\n Cherry-pick r258565. rdar://problem/60555343\n \n 2020-03-17 David Kilzer <[email protected]>\n \n REGRESSION (r258334): WebPasteboardProxy::setPasteboardBufferForType should allow zero-size buffers\n <https://webkit.org/b/209167>\n <rdar://problem/60516302>\n \n Reviewed by Geoffrey Garen.\n \n * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:\n (WebKit::WebPasteboardProxy::setPasteboardBufferForType):\n - Remove check for zero-size buffer to match\n WebPageProxy::dataSelectionForPasteboard().\n\n 2020-03-17 David Kilzer <[email protected]>\n\n Cherry-pick r258565. rdar://problem/60555343\n\n 2020-03-17 David Kilzer <[email protected]>\n\n REGRESSION (r258334): WebPasteboardProxy::setPasteboardBufferForType should allow zero-size buffers\n
<https://webkit.org/b/209167>\n <rdar://problem/60516302>\n\n Reviewed by Geoffrey Garen.\n\n * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:\n (WebKit::WebPasteboardProxy::setPasteboardBufferForType):\n - Remove check for zero-size buffer to match\n WebPageProxy::dataSelectionForPasteboard().\n\n'2020-03-19 Russell Epstein <[email protected]>
+2020-03-23 Russell Epstein <[email protected]>
- Apply patch. rdar://problem/60633852
+ Apply patch. rdar://problem/60756683
+ 2020-03-23 John Wilander <[email protected]>
+ Cherry-pick r258599. rdar://problem/60089022
+ 2020-03-17 John Wilander <[email protected]>
+ Add quirk for cookie blocking latch mode ymail.com redirecting to yahoo.com under yahoo.com
+ https://bugs.webkit.org/show_bug.cgi?id=209193
+ <rdar://problem/60089022>
+
+ Reviewed by Brent Fulgham.
+
+ No new tests. Site-specific quirk tested manually on the site in question.
+ * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
+ * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+ (WebKit::NetworkDataTaskCocoa::unblockCookies):
+ (WebKit::NetworkDataTaskCocoa::needsFirstPartyCookieBlockingLatchModeQuirk const):
+ (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
- 2020-03-19 Brent Fulgham <[email protected]>
-
- Terminate the WebContent process when receiving invalid IPC from a WebInspector session
- https://bugs.webkit.org/show_bug.cgi?id=209157
- <rdar://problem/58961055>
-
- * UIProcess/WebPageProxy.cpp:
- (WebKit::WebPageProxy::backForwardGoToItemShared): Add a message check that we are not receiving
- the request from a WebInspector page.
- (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): Switch to a release assert.
-
-2020-03-17 Kocsen Chung <[email protected]>
-
Apply patch. rdar://problem/60363244
Crash in com.apple.WebKit.WebContent at WebKit::WebSWClientConnection::scheduleJobInServer <rdar://problem/60363244>
Modified: branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h (258850 => 258851)
--- branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2020-03-23 16:51:24 UTC (rev 258850)
+++ branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2020-03-23 16:52:30 UTC (rev 258851)
@@ -86,6 +86,8 @@
#if ENABLE(RESOURCE_LOAD_STATISTICS)
static NSHTTPCookieStorage *statelessCookieStorage();
void blockCookies();
+ void unblockCookies();
+ bool needsFirstPartyCookieBlockingLatchModeQuirk(const URL& firstPartyURL, const URL& requestURL, const URL& redirectingURL) const;
#endif
bool isThirdPartyRequest(const WebCore::ResourceRequest&) const;
bool isAlwaysOnLoggingAllowed() const;
Modified: branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (258850 => 258851)
--- branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2020-03-23 16:51:24 UTC (rev 258850)
+++ branches/safari-609-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2020-03-23 16:52:30 UTC (rev 258851)
@@ -200,6 +200,42 @@
[m_task _setExplicitCookieStorage:statelessCookieStorage()._cookieStorage];
m_hasBeenSetToUseStatelessCookieStorage = true;
}
+
+void NetworkDataTaskCocoa::unblockCookies()
+{
+ ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
+
+ if (!m_hasBeenSetToUseStatelessCookieStorage)
+ return;
+
+ if (auto* storageSession = m_session->networkStorageSession()) {
+ [m_task _setExplicitCookieStorage:storageSession->nsCookieStorage()._cookieStorage];
+ m_hasBeenSetToUseStatelessCookieStorage = false;
+ }
+}
+
+// FIXME: Temporary fix for <rdar://problem/60089022> until content can be updated.
+bool NetworkDataTaskCocoa::needsFirstPartyCookieBlockingLatchModeQuirk(const URL& firstPartyURL, const URL& requestURL, const URL& redirectingURL) const
+{
+ using RegistrableDomain = WebCore::RegistrableDomain;
+ static NeverDestroyed<HashMap<RegistrableDomain, RegistrableDomain>> quirkPairs = [] {
+ HashMap<RegistrableDomain, RegistrableDomain> map;
+ map.add(RegistrableDomain::uncheckedCreateFromRegistrableDomainString("ymail.com"_s), RegistrableDomain::uncheckedCreateFromRegistrableDomainString("yahoo.com"_s));
+ return map;
+ }();
+
+ RegistrableDomain firstPartyDomain { firstPartyURL };
+ RegistrableDomain requestDomain { requestURL };
+ if (firstPartyDomain != requestDomain)
+ return false;
+
+ RegistrableDomain redirectingDomain { redirectingURL };
+ auto quirk = quirkPairs.get().find(redirectingDomain);
+ if (quirk == quirkPairs.get().end())
+ return false;
+
+ return quirk->value == requestDomain;
+}
#endif
bool NetworkDataTaskCocoa::isThirdPartyRequest(const WebCore::ResourceRequest& request) const
@@ -434,7 +470,8 @@
if (m_storedCredentialsPolicy == WebCore::StoredCredentialsPolicy::EphemeralStateless
|| (m_session->networkStorageSession() && m_session->networkStorageSession()->shouldBlockCookies(request, m_frameID, m_pageID)))
blockCookies();
- }
+ } else if (m_storedCredentialsPolicy != WebCore::StoredCredentialsPolicy::EphemeralStateless && needsFirstPartyCookieBlockingLatchModeQuirk(request.firstPartyForCookies(), request.url(), redirectResponse.url()))
+ unblockCookies();
#if !RELEASE_LOG_DISABLED
if (m_session->shouldLogCookieInformation())
RELEASE_LOG_IF(isAlwaysOnLoggingAllowed(), Network, "%p - NetworkDataTaskCocoa::willPerformHTTPRedirection::logCookieInformation: pageID = %llu, frameID = %llu, taskID = %lu: %s cookies for redirect URL %s", this, m_pageID.toUInt64(), m_frameID.toUInt64(), (unsigned long)[m_task taskIdentifier], (m_hasBeenSetToUseStatelessCookieStorage ? "Blocking" : "Not blocking"), request.url().string().utf8().data());