[go: up one dir, main page]

[iOS] Mark file requests sent to WKWebView as user-initiated

This makes CRWWebRequestController use -[WKWebView loadFileRequest:...]
instead of -[WKWebView loadFileURL:...] when loading file URLs on
iOS 15, so that it can pass in an NSURLRequest whose attribution
property has been set to mark the request as user-initiated.

(cherry picked from commit bfe61d0d5018be2e91facef3f3bcc7a8bfb7d5d5)

Bug: 1266103
Change-Id: I7b152fcc5b2cc8db821fb47745101b04c039a035
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3258103
Reviewed-by: Rohit Rao <rohitrao@chromium.org>
Commit-Queue: Ali Juma <ajuma@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#938325}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3289529
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Ali Juma <ajuma@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/branch-heads/4664@{#1093}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}
diff --git a/ios/web/web_state/ui/crw_web_request_controller.mm b/ios/web/web_state/ui/crw_web_request_controller.mm
index 5ef2eda..ff7ce9d 100644
--- a/ios/web/web_state/ui/crw_web_request_controller.mm
+++ b/ios/web/web_state/ui/crw_web_request_controller.mm
@@ -508,21 +508,27 @@
   }
 
   WKNavigation* navigation = nil;
+#if defined(__IPHONE_15_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_15_0
+  if (@available(iOS 15, *)) {
+    if (base::FeatureList::IsEnabled(web::features::kSetRequestAttribution)) {
+      request.attribution = NSURLRequestAttributionUser;
+    }
+  }
+#endif
+
   if (navigationURL.SchemeIsFile() &&
       web::GetWebClient()->IsAppSpecificURL(virtualURL)) {
     // file:// URL navigations are allowed for app-specific URLs, which
     // already have elevated privileges.
-    NSURL* navigationNSURL = net::NSURLWithGURL(navigationURL);
-    navigation = [self.webView loadFileURL:navigationNSURL
-                   allowingReadAccessToURL:navigationNSURL];
-  } else {
-#if defined(__IPHONE_15_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_15_0
     if (@available(iOS 15, *)) {
-      if (base::FeatureList::IsEnabled(web::features::kSetRequestAttribution)) {
-        request.attribution = NSURLRequestAttributionUser;
-      }
+      navigation = [self.webView loadFileRequest:request
+                         allowingReadAccessToURL:request.URL];
+    } else {
+      NSURL* navigationNSURL = net::NSURLWithGURL(navigationURL);
+      navigation = [self.webView loadFileURL:navigationNSURL
+                     allowingReadAccessToURL:navigationNSURL];
     }
-#endif
+  } else {
     navigation = [self.webView loadRequest:request];
   }
   [self.navigationHandler.navigationStates