Check for app-bound domains should confirm WKAppBoundDomains key exists when checking...
authorkatherine_cheney@apple.com <katherine_cheney@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 May 2020 18:56:32 +0000 (18:56 +0000)
committerkatherine_cheney@apple.com <katherine_cheney@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 May 2020 18:56:32 +0000 (18:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=211451
<rdar://problem/62715316

Reviewed by Brent Fulgham.

Checks for WKAppBoundDomains key before treating a protocol as
app-bound. This is a regression in expected behavior after making
In-App Browser privacy opt-in based on the presence of the key.

Also moves the check for special protocols inside of the completion handler for
ensureAppBoundDomains to make sure the check for the key has finished.

* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::beginAppBoundDomainCheck):
Added a comment to clarify why we need to check for both an empty
app-bound domains list and the presence of the key for testing
purposes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261187 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

index 1aac78f..250ccb6 100644 (file)
@@ -1,3 +1,24 @@
+2020-05-05  Kate Cheney  <katherine_cheney@apple.com>
+
+        Check for app-bound domains should confirm WKAppBoundDomains key exists when checking for default app-bound protocols.
+        https://bugs.webkit.org/show_bug.cgi?id=211451
+        <rdar://problem/62715316
+
+        Reviewed by Brent Fulgham.
+
+        Checks for WKAppBoundDomains key before treating a protocol as
+        app-bound. This is a regression in expected behavior after making
+        In-App Browser privacy opt-in based on the presence of the key.
+
+        Also moves the check for special protocols inside of the completion handler for
+        ensureAppBoundDomains to make sure the check for the key has finished.
+
+        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
+        (WebKit::WebsiteDataStore::beginAppBoundDomainCheck):
+        Added a comment to clarify why we need to check for both an empty
+        app-bound domains list and the presence of the key for testing
+        purposes.
+
 2020-05-05  Timothy Horton  <timothy_horton@apple.com>
 
         "Essential Skeleton" does not respond to mouse events, only touch events
index f3423a9..ce8c3ee 100644 (file)
@@ -461,17 +461,19 @@ void WebsiteDataStore::beginAppBoundDomainCheck(const URL& requestURL, WebFrameP
 {
     ASSERT(RunLoop::isMain());
 
-    if (shouldTreatURLProtocolAsAppBound(requestURL)) {
-        listener.didReceiveAppBoundDomainResult(NavigatingToAppBoundDomain::Yes);
-        return;
-    }
-
-    ensureAppBoundDomains([domain = WebCore::RegistrableDomain(requestURL), listener = makeRef(listener)] (auto& domains) mutable {
-        if (domains.isEmpty() && !keyExists) {
+    ensureAppBoundDomains([&requestURL, listener = makeRef(listener)] (auto& domains) mutable {
+        // Must check for both an empty app bound domains list and an empty key before returning nullopt
+        // because test cases may have app bound domains but no key.
+        bool hasAppBoundDomains = keyExists || !domains.isEmpty();
+        if (!hasAppBoundDomains) {
             listener->didReceiveAppBoundDomainResult(WTF::nullopt);
             return;
         }
-        listener->didReceiveAppBoundDomainResult(domains.contains(domain) ? NavigatingToAppBoundDomain::Yes : NavigatingToAppBoundDomain::No);
+        if (shouldTreatURLProtocolAsAppBound(requestURL)) {
+            listener->didReceiveAppBoundDomainResult(NavigatingToAppBoundDomain::Yes);
+            return;
+        }
+        listener->didReceiveAppBoundDomainResult(domains.contains(WebCore::RegistrableDomain(requestURL)) ? NavigatingToAppBoundDomain::Yes : NavigatingToAppBoundDomain::No);
     });
 }