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

Reply via email to