Title: [250431] trunk
Revision
250431
Author
wilan...@apple.com
Date
2019-09-27 10:14:20 -0700 (Fri, 27 Sep 2019)

Log Message

Storage Access API: document.hasStorageAccess() should return false by default
https://bugs.webkit.org/show_bug.cgi?id=202281
<rdar://problem/55718526>

Reviewed by Alex Christensen.

document.hasStorageAccess() should return false by default so that it only
returns true if the context has asked for and been granted storage access.

Source/WebKit:

* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
(WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
(WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):

LayoutTests:

* http/tests/storageAccess/has-storage-access-false-by-default-expected.txt: Added.
* http/tests/storageAccess/has-storage-access-false-by-default.html: Added.
* platform/ios/TestExpectations:
    The new test is marked as [ Pass ].
* platform/mac-wk2/TestExpectations:
    The new test is marked as [ Pass ].

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (250430 => 250431)


--- trunk/LayoutTests/ChangeLog	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/LayoutTests/ChangeLog	2019-09-27 17:14:20 UTC (rev 250431)
@@ -1,3 +1,21 @@
+2019-09-27  John Wilander  <wilan...@apple.com>
+
+        Storage Access API: document.hasStorageAccess() should return false by default
+        https://bugs.webkit.org/show_bug.cgi?id=202281
+        <rdar://problem/55718526>
+
+        Reviewed by Alex Christensen.
+
+        document.hasStorageAccess() should return false by default so that it only
+        returns true if the context has asked for and been granted storage access.
+
+        * http/tests/storageAccess/has-storage-access-false-by-default-expected.txt: Added.
+        * http/tests/storageAccess/has-storage-access-false-by-default.html: Added.
+        * platform/ios/TestExpectations:
+            The new test is marked as [ Pass ].
+        * platform/mac-wk2/TestExpectations:
+            The new test is marked as [ Pass ].
+
 2019-09-27  Chris Dumez  <cdu...@apple.com>
 
         IDBRequest should not prevent a page from entering the back/forward cache

Added: trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default-expected.txt (0 => 250431)


--- trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default-expected.txt	2019-09-27 17:14:20 UTC (rev 250431)
@@ -0,0 +1,10 @@
+Tests that document.hasStorageAccess() returns false for a 3rd-party iframe by default.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS No storage access. document.cookie == , cookies seen server-side == "No cookies"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default.html (0 => 250431)


--- trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/storageAccess/has-storage-access-false-by-default.html	2019-09-27 17:14:20 UTC (rev 250431)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src=""
+    <script src=""
+    <script>
+        description("Tests that document.hasStorageAccess() returns false for a 3rd-party iframe by default.");
+        jsTestIsAsync = true;
+
+        window.addEventListener("message", receiveMessage, false);
+
+        function receiveMessage(event) {
+            if (event.origin === "http://localhost:8000") {
+                if (event.data.indexOf("PASS") !== -1)
+                    testPassed(event.data.replace("PASS ", ""));
+                else
+                    testFailed(event.data.replace("FAIL ", ""));
+            } else
+                testFailed("Received a message from an unexpected origin: " + event.origin);
+            setEnableFeature(false, finishJSTest);
+        }
+
+        const hostUnderTest = "localhost:8000";
+        const statisticsUrl = "http://" + hostUnderTest + "/temp";
+        function runTest() {
+            setEnableFeature(true, function() {
+                let iframeElement = document.createElement("iframe");
+                iframeElement.id = "TheIframeThatRequestsStorageAccess";
+                iframeElement.src = ""
+                document.body.appendChild(iframeElement);
+            });
+        }
+    </script>
+</head>
+<body _onload_="runTest()">
+</body>
+</html>

Modified: trunk/LayoutTests/platform/ios/TestExpectations (250430 => 250431)


--- trunk/LayoutTests/platform/ios/TestExpectations	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/LayoutTests/platform/ios/TestExpectations	2019-09-27 17:14:20 UTC (rev 250431)
@@ -2798,7 +2798,9 @@
 http/tests/storageAccess/deny-storage-access-under-opener.html [ Pass ]
 http/tests/storageAccess/deny-storage-access-under-opener-if-auto-dismiss.html [ Pass ]
 http/tests/resourceLoadStatistics/cap-cache-max-age-for-prevalent-resource.html [ Pass ]
+http/tests/storageAccess/has-storage-access-false-by-default.html [ Pass ]
 
+
 # Skipped in general expectations since they only work on iOS and Mac, WK2.
 http/tests/security/strip-referrer-to-origin-for-third-party-redirects-in-private-mode.html [ Pass ]
 http/tests/security/strip-referrer-to-origin-for-third-party-requests-in-private-mode.html [ Pass ]

Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (250430 => 250431)


--- trunk/LayoutTests/platform/mac-wk2/TestExpectations	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations	2019-09-27 17:14:20 UTC (rev 250431)
@@ -712,6 +712,7 @@
 [ HighSierra+ ] http/tests/storageAccess/deny-with-prompt-does-not-preserve-gesture.html [ Skip ]
 [ HighSierra+ ] http/tests/storageAccess/deny-without-prompt-preserves-gesture.html [ Pass ]
 [ HighSierra+ ] http/tests/storageAccess/has-storage-access-true-if-feature-off.html [ Pass ]
+[ HighSierra+ ] http/tests/storageAccess/has-storage-access-false-by-default.html [ Pass ]
 
 # As of https://trac.webkit.org/changeset/227762 the timestampResolution is just 5 seconds which makes this test flaky
 http/tests/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time.html [ Skip ]

Modified: trunk/Source/WebKit/ChangeLog (250430 => 250431)


--- trunk/Source/WebKit/ChangeLog	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/Source/WebKit/ChangeLog	2019-09-27 17:14:20 UTC (rev 250431)
@@ -1,3 +1,19 @@
+2019-09-27  John Wilander  <wilan...@apple.com>
+
+        Storage Access API: document.hasStorageAccess() should return false by default
+        https://bugs.webkit.org/show_bug.cgi?id=202281
+        <rdar://problem/55718526>
+
+        Reviewed by Alex Christensen.
+
+        document.hasStorageAccess() should return false by default so that it only
+        returns true if the context has asked for and been granted storage access.
+
+        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
+        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
+        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
+        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
+
 2019-09-27  Jer Noble  <jer.no...@apple.com>
 
         [iOS] Lock screen controls can fail to play web content

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp (250430 => 250431)


--- trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp	2019-09-27 17:14:20 UTC (rev 250431)
@@ -748,11 +748,12 @@
     case CookieTreatmentResult::BlockAndPurge:
         completionHandler(false);
         return;
+    case CookieTreatmentResult::Allow:
+        // We should only return true if the context has asked for and been granted access.
+        completionHandler(false);
+        return;
     case CookieTreatmentResult::BlockAndKeep:
-        completionHandler(true);
-        return;
-    case CookieTreatmentResult::Allow:
-        // Do nothing
+        // Do nothing. The below dispatch will complete the task.
         break;
     };
 

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp (250430 => 250431)


--- trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp	2019-09-27 16:56:58 UTC (rev 250430)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp	2019-09-27 17:14:20 UTC (rev 250431)
@@ -216,16 +216,12 @@
     ASSERT(!RunLoop::isMain());
 
     auto& subFrameStatistic = ensureResourceStatisticsForRegistrableDomain(subFrameDomain);
-    if (shouldBlockAndPurgeCookies(subFrameStatistic)) {
+    // Return false if this domain cannot ask for storage access.
+    if (shouldBlockAndPurgeCookies(subFrameStatistic) || !shouldBlockAndKeepCookies(subFrameStatistic)) {
         completionHandler(false);
         return;
     }
 
-    if (!shouldBlockAndKeepCookies(subFrameStatistic)) {
-        completionHandler(true);
-        return;
-    }
-
     RunLoop::main().dispatch([store = makeRef(store()), subFrameDomain = subFrameDomain.isolatedCopy(), topFrameDomain = topFrameDomain.isolatedCopy(), frameID, pageID, completionHandler = WTFMove(completionHandler)]() mutable {
         store->callHasStorageAccessForFrameHandler(subFrameDomain, topFrameDomain, frameID.value(), pageID, [store = store.copyRef(), completionHandler = WTFMove(completionHandler)](bool result) mutable {
             store->statisticsQueue().dispatch([completionHandler = WTFMove(completionHandler), result] () mutable {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to