Title: [258599] trunk/Source/WebKit
- Revision
- 258599
- Author
- [email protected]
- Date
- 2020-03-17 14:35:28 -0700 (Tue, 17 Mar 2020)
Log Message
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):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (258598 => 258599)
--- trunk/Source/WebKit/ChangeLog 2020-03-17 21:25:06 UTC (rev 258598)
+++ trunk/Source/WebKit/ChangeLog 2020-03-17 21:35:28 UTC (rev 258599)
@@ -1,3 +1,19 @@
+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-17 Brian Burg <[email protected]>
REGRESSION(r256882): WebDriver commands that run before initial navigation do not complete
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h (258598 => 258599)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2020-03-17 21:25:06 UTC (rev 258598)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h 2020-03-17 21:35:28 UTC (rev 258599)
@@ -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: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (258598 => 258599)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2020-03-17 21:25:06 UTC (rev 258598)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm 2020-03-17 21:35:28 UTC (rev 258599)
@@ -151,6 +151,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
@@ -387,7 +423,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());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes