Title: [281234] trunk
Revision
281234
Author
[email protected]
Date
2021-08-19 05:57:59 -0700 (Thu, 19 Aug 2021)

Log Message

[App Privacy Report] Some HTTP Redirects from non app initiated requests are marked app initiated
https://bugs.webkit.org/show_bug.cgi?id=229202
<rdar://problem/79467871>

Reviewed by Brent Fulgham.

Source/WebKit:

Tests: http/tests/app-privacy-report/app-attribution-media-redirect.html
       http/tests/app-privacy-report/user-attribution-media-redirect.html

The request returned in the completion handler of
NetworkDataTaskCocoa::willPerformHTTPRedirection does not always have
the attribution property of the original request. We should pass it
along and set it.

* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):

LayoutTests:

Layout test coverage. This bug was only reproducing with media-related
loading, so these tests redirect to load an mp4.

* http/tests/app-privacy-report/app-attribution-media-redirect-expected.txt: Added.
* http/tests/app-privacy-report/app-attribution-media-redirect.html: Added.
* http/tests/app-privacy-report/user-attribution-media-redirect-expected.txt: Added.
* http/tests/app-privacy-report/user-attribution-media-redirect.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (281233 => 281234)


--- trunk/LayoutTests/ChangeLog	2021-08-19 12:23:58 UTC (rev 281233)
+++ trunk/LayoutTests/ChangeLog	2021-08-19 12:57:59 UTC (rev 281234)
@@ -1,3 +1,19 @@
+2021-08-19  Kate Cheney  <[email protected]>
+
+        [App Privacy Report] Some HTTP Redirects from non app initiated requests are marked app initiated
+        https://bugs.webkit.org/show_bug.cgi?id=229202
+        <rdar://problem/79467871>
+
+        Reviewed by Brent Fulgham.
+
+        Layout test coverage. This bug was only reproducing with media-related
+        loading, so these tests redirect to load an mp4.
+
+        * http/tests/app-privacy-report/app-attribution-media-redirect-expected.txt: Added.
+        * http/tests/app-privacy-report/app-attribution-media-redirect.html: Added.
+        * http/tests/app-privacy-report/user-attribution-media-redirect-expected.txt: Added.
+        * http/tests/app-privacy-report/user-attribution-media-redirect.html: Added.
+
 2021-08-19  Philippe Normand  <[email protected]>
 
         Unreviewed, GStreamer gardening

Added: trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect-expected.txt (0 => 281234)


--- trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect-expected.txt	2021-08-19 12:57:59 UTC (rev 281234)
@@ -0,0 +1,10 @@
+Test media files loaded via redirect are marked app initiated
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfully loaded only app initiated requests
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect.html (0 => 281234)


--- trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/app-privacy-report/app-attribution-media-redirect.html	2021-08-19 12:57:59 UTC (rev 281234)
@@ -0,0 +1,45 @@
+<!DOCTYPE html><!-- webkit-test-runner [ isAppInitiated=true ] -->
+<html>
+<head>
+    <script src=""
+</head>
+<body>
+<script>
+    description("Test media files loaded via redirect are marked app initiated");
+
+    function log(message)
+    {
+        document.getElementById('console').appendChild(document.createTextNode(message + '\n'));
+    }
+
+    function test()
+    {
+        var didLoadAppInitiatedRequest = testRunner.didLoadAppInitiatedRequest();
+        var didLoadNonAppInitiatedRequest = testRunner.didLoadNonAppInitiatedRequest();
+
+        if (didLoadNonAppInitiatedRequest) {
+            log("FAIL did load non app initiated request");
+            finishJSTest();
+            return;
+        }
+
+        if (!didLoadAppInitiatedRequest) {
+            log("FAIL did not load app initiated request");
+            finishJSTest();
+            return;
+        }
+
+        log("PASS successfully loaded only app initiated requests");
+
+        finishJSTest();
+    }
+
+    var video = document.createElement("video");
+    video.addEventListener("loadeddata", test);
+    video.src = ""
+
+    window.jsTestIsAsync = true;
+</script>
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect-expected.txt (0 => 281234)


--- trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect-expected.txt	2021-08-19 12:57:59 UTC (rev 281234)
@@ -0,0 +1,10 @@
+Test media files loaded via redirect are marked non app initiated
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfully loaded only non app initiated requests
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect.html (0 => 281234)


--- trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/app-privacy-report/user-attribution-media-redirect.html	2021-08-19 12:57:59 UTC (rev 281234)
@@ -0,0 +1,45 @@
+<!DOCTYPE html><!-- webkit-test-runner [ isAppInitiated=false ] -->
+<html>
+<head>
+    <script src=""
+</head>
+<body>
+<script>
+    description("Test media files loaded via redirect are marked non app initiated");
+
+    function log(message)
+    {
+        document.getElementById('console').appendChild(document.createTextNode(message + '\n'));
+    }
+
+    function test()
+    {
+        var didLoadAppBoundRequest = testRunner.didLoadAppInitiatedRequest();
+        var didLoadNonAppBoundRequest = testRunner.didLoadNonAppInitiatedRequest();
+
+        if (didLoadAppBoundRequest) {
+            log("FAIL did load app initiated request");
+            finishJSTest();
+            return;
+        }
+
+        if (!didLoadNonAppBoundRequest) {
+            log("FAIL did not load non app initiated request");
+            finishJSTest();
+            return;
+        }
+
+        log("PASS successfully loaded only non app initiated requests");
+        
+        finishJSTest();
+    }
+
+    var video = document.createElement("video");
+    video.addEventListener("loadeddata", test);
+    video.src = ""
+
+    window.jsTestIsAsync = true;
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebKit/ChangeLog (281233 => 281234)


--- trunk/Source/WebKit/ChangeLog	2021-08-19 12:23:58 UTC (rev 281233)
+++ trunk/Source/WebKit/ChangeLog	2021-08-19 12:57:59 UTC (rev 281234)
@@ -1,3 +1,22 @@
+2021-08-19  Kate Cheney  <[email protected]>
+
+        [App Privacy Report] Some HTTP Redirects from non app initiated requests are marked app initiated
+        https://bugs.webkit.org/show_bug.cgi?id=229202
+        <rdar://problem/79467871>
+
+        Reviewed by Brent Fulgham.
+
+        Tests: http/tests/app-privacy-report/app-attribution-media-redirect.html
+               http/tests/app-privacy-report/user-attribution-media-redirect.html
+
+        The request returned in the completion handler of
+        NetworkDataTaskCocoa::willPerformHTTPRedirection does not always have
+        the attribution property of the original request. We should pass it
+        along and set it.
+
+        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
+
 2021-08-19  Zan Dobersek  <[email protected]>
 
         Adjust fallback SandboxExtension std::optional<Handle> construction

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (281233 => 281234)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2021-08-19 12:23:58 UTC (rev 281233)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2021-08-19 12:57:59 UTC (rev 281234)
@@ -597,7 +597,12 @@
         WebCore::ResourceResponse resourceResponse(response);
         networkDataTask->checkTAO(resourceResponse);
 
-        networkDataTask->willPerformHTTPRedirection(WTFMove(resourceResponse), request, [completionHandler = makeBlockPtr(completionHandler), taskIdentifier, shouldIgnoreHSTS](auto&& request) {
+        bool isAppInitiated = true;
+#if ENABLE(APP_PRIVACY_REPORT)
+        isAppInitiated = request.attribution == NSURLRequestAttributionDeveloper;
+#endif
+
+        networkDataTask->willPerformHTTPRedirection(WTFMove(resourceResponse), request, [session = networkDataTask->networkSession(), completionHandler = makeBlockPtr(completionHandler), taskIdentifier, shouldIgnoreHSTS, isAppInitiated](auto&& request) {
 #if !LOG_DISABLED
             LOG(NetworkSession, "%llu willPerformHTTPRedirection completionHandler (%s)", taskIdentifier, request.url().string().utf8().data());
 #else
@@ -604,6 +609,19 @@
             UNUSED_PARAM(taskIdentifier);
 #endif
             auto nsRequest = retainPtr(request.nsURLRequest(WebCore::HTTPBodyUpdatePolicy::UpdateHTTPBody));
+
+#if ENABLE(APP_PRIVACY_REPORT)
+            if (session) {
+                RetainPtr<NSMutableURLRequest> mutableRequest = adoptNS([nsRequest mutableCopy]);
+                mutableRequest.get().attribution = isAppInitiated ? NSURLRequestAttributionDeveloper : NSURLRequestAttributionUser;
+                nsRequest = mutableRequest.get();
+
+                session->appPrivacyReportTestingData().didLoadAppInitiatedRequest(nsRequest.get().attribution == NSURLRequestAttributionDeveloper);
+            }
+#else
+            UNUSED_PARAM(isAppInitiated);
+            UNUSED_PARAM(session);
+#endif
             updateIgnoreStrictTransportSecuritySetting(nsRequest, shouldIgnoreHSTS);
             completionHandler(nsRequest.get());
         });
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to