Revert "FrameHost::SubresourceResponseStarted: s/ url / origin_of_final_url /."

This CL reverts r716451 (also minimally/partially reverting r724034 as
required).  The revert is needed because r716451 caused every blob load
(blobs see no certificate errors) to call RevokeUserAllowExceptions.

Bug: 1049625, 973885
Tbr: Nasko Oskov <[email protected]>
Tbr: Charlie Harrison <[email protected]>
Tbr: Alex Ilin <[email protected]>
No-Tree-Checks: true
Change-Id: Ie592ae6bc79820eea2230244f0abd890e279be4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2047355
Commit-Queue: John Budorick <[email protected]>
Reviewed-by: Alex Moshchuk <[email protected]>
Cr-Commit-Position: refs/heads/master@{#740011}
diff --git a/chrome/browser/predictors/loading_data_collector.cc b/chrome/browser/predictors/loading_data_collector.cc
index 2ce99ba..f1ca5be 100644
--- a/chrome/browser/predictors/loading_data_collector.cc
+++ b/chrome/browser/predictors/loading_data_collector.cc
@@ -107,7 +107,7 @@
     UpdateOrAddToOrigins(redirect_info->origin_of_new_url,
                          redirect_info->network_info);
   }
-  UpdateOrAddToOrigins(resource_load_info.origin_of_final_url,
+  UpdateOrAddToOrigins(url::Origin::Create(resource_load_info.final_url),
                        resource_load_info.network_info);
 }
 
@@ -236,7 +236,7 @@
 bool LoadingDataCollector::ShouldRecordResourceLoad(
     const NavigationID& navigation_id,
     const blink::mojom::ResourceLoadInfo& resource_load_info) const {
-  const GURL& url = resource_load_info.origin_of_final_url.GetURL();
+  const GURL& url = resource_load_info.final_url;
   if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS())
     return false;
 
diff --git a/chrome/browser/predictors/loading_predictor_tab_helper.cc b/chrome/browser/predictors/loading_predictor_tab_helper.cc
index 1db9e46..ad4e3e2 100644
--- a/chrome/browser/predictors/loading_predictor_tab_helper.cc
+++ b/chrome/browser/predictors/loading_predictor_tab_helper.cc
@@ -141,7 +141,7 @@
 
   blink::mojom::ResourceLoadInfo resource_load_info;
   resource_load_info.original_url = url;
-  resource_load_info.origin_of_final_url = url::Origin::Create(url);
+  resource_load_info.final_url = url;
   resource_load_info.mime_type = mime_type;
   resource_load_info.resource_type = resource_type;
   resource_load_info.method = "GET";
diff --git a/chrome/browser/predictors/loading_test_util.cc b/chrome/browser/predictors/loading_test_util.cc
index 9fbf14f..3cab4d3 100644
--- a/chrome/browser/predictors/loading_test_util.cc
+++ b/chrome/browser/predictors/loading_test_util.cc
@@ -107,7 +107,7 @@
     blink::mojom::ResourceType resource_type,
     bool always_access_network) {
   auto resource_load_info = blink::mojom::ResourceLoadInfo::New();
-  resource_load_info->origin_of_final_url = url::Origin::Create(GURL(url));
+  resource_load_info->final_url = GURL(url);
   resource_load_info->original_url = GURL(url);
   resource_load_info->method = "GET";
   resource_load_info->resource_type = resource_type;
@@ -129,8 +129,7 @@
     const std::vector<std::string>& redirect_chain,
     blink::mojom::ResourceType resource_type) {
   auto resource_load_info = blink::mojom::ResourceLoadInfo::New();
-  resource_load_info->origin_of_final_url =
-      url::Origin::Create(GURL(redirect_chain.back()));
+  resource_load_info->final_url = GURL(redirect_chain.back());
   resource_load_info->original_url = GURL(redirect_chain.front());
   resource_load_info->method = "GET";
   resource_load_info->resource_type = resource_type;
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index dee2ebc..68d3a48 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -308,10 +308,8 @@
     content::RenderFrameHost* render_frame_host,
     const content::GlobalRequestID& request_id,
     const blink::mojom::ResourceLoadInfo& resource_load_info) {
-  if (resource_load_info.origin_of_final_url.scheme() != url::kHttpScheme &&
-      resource_load_info.origin_of_final_url.scheme() != url::kHttpsScheme) {
+  if (!resource_load_info.final_url.SchemeIsHTTPOrHTTPS())
     return;
-  }
 
   PageLoadTracker* tracker = GetTrackerOrNullForRequest(
       request_id, render_frame_host, resource_load_info.resource_type,
@@ -330,7 +328,7 @@
     const blink::mojom::CommonNetworkInfoPtr& network_info =
         resource_load_info.network_info;
     ExtraRequestCompleteInfo extra_request_complete_info(
-        resource_load_info.origin_of_final_url,
+        url::Origin::Create(resource_load_info.final_url),
         network_info->remote_endpoint.value(),
         render_frame_host->GetFrameTreeNodeId(), resource_load_info.was_cached,
         resource_load_info.raw_body_bytes, original_content_length,
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
index c361e5b8..05147f8 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -51,7 +51,7 @@
     blink::mojom::ResourceType resource_type) {
   blink::mojom::ResourceLoadInfoPtr resource_load_info =
       blink::mojom::ResourceLoadInfo::New();
-  resource_load_info->origin_of_final_url = url::Origin::Create(url);
+  resource_load_info->final_url = url;
   resource_load_info->original_url = url;
   resource_load_info->resource_type = resource_type;
   resource_load_info->was_cached = false;
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
index 6c4bab8..b6a0e92f 100644
--- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
+++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
@@ -226,7 +226,7 @@
   }
 
   blink::mojom::ResourceLoadInfo resource_load_info;
-  resource_load_info.origin_of_final_url = info.origin_of_final_url;
+  resource_load_info.final_url = info.origin_of_final_url.GetURL();
   resource_load_info.was_cached = info.was_cached;
   resource_load_info.raw_body_bytes = info.raw_body_bytes;
   resource_load_info.total_received_bytes =
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h
index 0d109d26..98cc97d 100644
--- a/components/page_load_metrics/browser/page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -118,7 +118,7 @@
   // The origin of the final URL for the request (final = after redirects).
   //
   // The full URL is not available, because in some cases the path and query
-  // may be sanitized away - see https://crbug.com/973885.
+  // be sanitized away - see https://crbug.com/973885.
   const url::Origin origin_of_final_url;
 
   // The host (IP address) and port for the request.
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
index d5ab746..c494722 100644
--- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
+++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -121,7 +121,7 @@
 }
 
 void MetricsRenderFrameObserver::DidStartResponse(
-    const url::Origin& origin_of_final_response_url,
+    const GURL& response_url,
     int request_id,
     const network::mojom::URLResponseHead& response_head,
     blink::mojom::ResourceType resource_type,
@@ -133,12 +133,10 @@
     // case. There should be a guarantee that DidStartProvisionalLoad be called
     // before DidStartResponse for the frame request.
     provisional_frame_resource_data_use_->DidStartResponse(
-        origin_of_final_response_url, request_id, response_head, resource_type,
-        previews_state);
+        response_url, request_id, response_head, resource_type, previews_state);
   } else if (page_timing_metrics_sender_) {
     page_timing_metrics_sender_->DidStartResponse(
-        origin_of_final_response_url, request_id, response_head, resource_type,
-        previews_state);
+        response_url, request_id, response_head, resource_type, previews_state);
     UpdateResourceMetadata(request_id);
   }
 }
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.h b/components/page_load_metrics/renderer/metrics_render_frame_observer.h
index 836dffb1..d015ddf 100644
--- a/components/page_load_metrics/renderer/metrics_render_frame_observer.h
+++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.h
@@ -51,7 +51,7 @@
   void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
   void DidObserveLazyLoadBehavior(
       blink::WebLocalFrameClient::LazyLoadBehavior lazy_load_behavior) override;
-  void DidStartResponse(const url::Origin& origin_of_final_response_url,
+  void DidStartResponse(const GURL& response_url,
                         int request_id,
                         const network::mojom::URLResponseHead& response_head,
                         blink::mojom::ResourceType resource_type,
diff --git a/components/page_load_metrics/renderer/page_resource_data_use.cc b/components/page_load_metrics/renderer/page_resource_data_use.cc
index d79fb14..14353e71 100644
--- a/components/page_load_metrics/renderer/page_resource_data_use.cc
+++ b/components/page_load_metrics/renderer/page_resource_data_use.cc
@@ -10,7 +10,6 @@
 #include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "url/gurl.h"
-#include "url/origin.h"
 
 namespace page_load_metrics {
 
@@ -88,7 +87,7 @@
 PageResourceDataUse::~PageResourceDataUse() = default;
 
 void PageResourceDataUse::DidStartResponse(
-    const url::Origin& origin_of_final_response_url,
+    const GURL& response_url,
     int resource_id,
     const network::mojom::URLResponseHead& response_head,
     blink::mojom::ResourceType resource_type,
@@ -111,11 +110,11 @@
   mime_type_ = response_head.mime_type;
   if (response_head.was_fetched_via_cache)
     cache_type_ = mojom::CacheType::kHttp;
+  is_secure_scheme_ = response_url.SchemeIsCryptographic();
   is_primary_frame_resource_ =
       resource_type == blink::mojom::ResourceType::kMainFrame ||
       resource_type == blink::mojom::ResourceType::kSubFrame;
-  origin_ = origin_of_final_response_url;
-  is_secure_scheme_ = GURL::SchemeIsCryptographic(origin_.scheme());
+  origin_ = url::Origin::Create(response_url);
 }
 
 void PageResourceDataUse::DidReceiveTransferSizeUpdate(
diff --git a/components/page_load_metrics/renderer/page_resource_data_use.h b/components/page_load_metrics/renderer/page_resource_data_use.h
index 0ab0143..d1aad5e 100644
--- a/components/page_load_metrics/renderer/page_resource_data_use.h
+++ b/components/page_load_metrics/renderer/page_resource_data_use.h
@@ -28,7 +28,7 @@
   PageResourceDataUse(const PageResourceDataUse& other);
   ~PageResourceDataUse();
 
-  void DidStartResponse(const url::Origin& origin_of_final_response_url,
+  void DidStartResponse(const GURL& response_url,
                         int resource_id,
                         const network::mojom::URLResponseHead& response_head,
                         blink::mojom::ResourceType resource_type,
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc
index b40b2f21..a0f14ab 100644
--- a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc
+++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc
@@ -123,7 +123,7 @@
 }
 
 void PageTimingMetricsSender::DidStartResponse(
-    const url::Origin& origin_of_final_response_url,
+    const GURL& response_url,
     int resource_id,
     const network::mojom::URLResponseHead& response_head,
     blink::mojom::ResourceType resource_type,
@@ -133,9 +133,8 @@
   auto resource_it = page_resource_data_use_.emplace(
       std::piecewise_construct, std::forward_as_tuple(resource_id),
       std::forward_as_tuple(std::make_unique<PageResourceDataUse>()));
-  resource_it.first->second->DidStartResponse(origin_of_final_response_url,
-                                              resource_id, response_head,
-                                              resource_type, previews_state);
+  resource_it.first->second->DidStartResponse(
+      response_url, resource_id, response_head, resource_type, previews_state);
 }
 
 void PageTimingMetricsSender::DidReceiveTransferSizeUpdate(
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.h b/components/page_load_metrics/renderer/page_timing_metrics_sender.h
index 022c13e..b7aa5b78 100644
--- a/components/page_load_metrics/renderer/page_timing_metrics_sender.h
+++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.h
@@ -53,7 +53,7 @@
   void DidObserveLazyLoadBehavior(
       blink::WebLocalFrameClient::LazyLoadBehavior lazy_load_behavior);
 
-  void DidStartResponse(const url::Origin& origin_of_final_response_url,
+  void DidStartResponse(const GURL& response_url,
                         int resource_id,
                         const network::mojom::URLResponseHead& response_head,
                         blink::mojom::ResourceType resource_type,
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index 5d07589..125045d 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -433,9 +433,8 @@
   virtual bool IsBeingDestroyed();
 
   // Notifies that the render frame started loading a subresource.
-  virtual void SubresourceResponseStarted(
-      const url::Origin& origin_of_final_response_url,
-      net::CertStatus cert_status) {}
+  virtual void SubresourceResponseStarted(const GURL& url,
+                                          net::CertStatus cert_status) {}
 
   // Notifies that the render finished loading a subresource for the frame
   // associated with |render_frame_host|.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 4f756d8..d06304b 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -4824,10 +4824,9 @@
 }
 
 void RenderFrameHostImpl::SubresourceResponseStarted(
-    const url::Origin& origin_of_final_response_url,
+    const GURL& url,
     net::CertStatus cert_status) {
-  delegate_->SubresourceResponseStarted(origin_of_final_response_url,
-                                        cert_status);
+  delegate_->SubresourceResponseStarted(url, cert_status);
 }
 
 void RenderFrameHostImpl::ResourceLoadComplete(
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 9a0c14dc..74ec2d1 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -1627,9 +1627,8 @@
       mojo::PendingAssociatedRemote<mojom::NavigationClient> navigation_client,
       mojo::PendingRemote<blink::mojom::NavigationInitiator>
           navigation_initiator) override;
-  void SubresourceResponseStarted(
-      const url::Origin& origin_of_final_response_url,
-      net::CertStatus cert_status) override;
+  void SubresourceResponseStarted(const GURL& url,
+                                  net::CertStatus cert_status) override;
   void ResourceLoadComplete(
       blink::mojom::ResourceLoadInfoPtr resource_load_info) override;
   void DidChangeName(const std::string& name,
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc
index e68ce312..3195a33 100644
--- a/content/browser/ssl/ssl_manager.cc
+++ b/content/browser/ssl/ssl_manager.cc
@@ -312,19 +312,16 @@
   OnCertErrorInternal(std::move(handler));
 }
 
-void SSLManager::DidStartResourceResponse(
-    const url::Origin& origin_of_final_response_url,
-    bool has_certificate_errors) {
-  const std::string& scheme = origin_of_final_response_url.scheme();
-  const std::string& host = origin_of_final_response_url.host();
-
-  if (!GURL::SchemeIsCryptographic(scheme) || has_certificate_errors)
+void SSLManager::DidStartResourceResponse(const GURL& url,
+                                          bool has_certificate_errors) {
+  if (!url.SchemeIsCryptographic() || has_certificate_errors)
     return;
 
   // If the scheme is https: or wss and the cert did not have any errors, revoke
   // any previous decisions that have occurred.
-  if (!ssl_host_state_delegate_ || !ssl_host_state_delegate_->HasAllowException(
-                                       host, controller_->GetWebContents())) {
+  if (!ssl_host_state_delegate_ ||
+      !ssl_host_state_delegate_->HasAllowException(
+          url.host(), controller_->GetWebContents())) {
     return;
   }
 
@@ -332,7 +329,7 @@
   // clear out any exceptions that were made by the user for bad
   // certificates. This intentionally does not apply to cached resources
   // (see https://crbug.com/634553 for an explanation).
-  ssl_host_state_delegate_->RevokeUserAllowExceptions(host);
+  ssl_host_state_delegate_->RevokeUserAllowExceptions(url.host());
 }
 
 void SSLManager::OnCertErrorInternal(std::unique_ptr<SSLErrorHandler> handler) {
diff --git a/content/browser/ssl/ssl_manager.h b/content/browser/ssl/ssl_manager.h
index 669dc03a..fdf7eac 100644
--- a/content/browser/ssl/ssl_manager.h
+++ b/content/browser/ssl/ssl_manager.h
@@ -64,8 +64,7 @@
   NavigationControllerImpl* controller() { return controller_; }
 
   void DidCommitProvisionalLoad(const LoadCommittedDetails& details);
-  void DidStartResourceResponse(const url::Origin& origin_of_final_response_url,
-                                bool has_certificate_errors);
+  void DidStartResourceResponse(const GURL& url, bool has_certificate_errors);
 
   // The following methods are called when a page includes insecure
   // content. These methods update the SSLStatus on the NavigationEntry
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 975a63c..2ffa3da7 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4476,7 +4476,7 @@
   if (navigation_handle->IsInMainFrame() &&
       navigation_handle->GetNetErrorCode() == net::OK) {
     controller_.ssl_manager()->DidStartResourceResponse(
-        url::Origin::Create(navigation_handle->GetURL()),
+        navigation_handle->GetURL(),
         navigation_handle->GetSSLInfo().has_value()
             ? net::IsCertStatusError(
                   navigation_handle->GetSSLInfo()->cert_status)
@@ -4830,11 +4830,9 @@
   // AddNewContents method call.
 }
 
-void WebContentsImpl::SubresourceResponseStarted(
-    const url::Origin& origin_of_final_response_url,
-    net::CertStatus cert_status) {
-  controller_.ssl_manager()->DidStartResourceResponse(
-      origin_of_final_response_url, cert_status);
+void WebContentsImpl::SubresourceResponseStarted(const GURL& url,
+                                                 net::CertStatus cert_status) {
+  controller_.ssl_manager()->DidStartResourceResponse(url, cert_status);
   SetNotWaitingForResponse();
 }
 
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 63ad3ce..cd039f4 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -647,9 +647,8 @@
   base::android::ScopedJavaLocalRef<jobject> GetJavaRenderFrameHostDelegate()
       override;
 #endif
-  void SubresourceResponseStarted(
-      const url::Origin& origin_of_final_response_url,
-      net::CertStatus cert_status) override;
+  void SubresourceResponseStarted(const GURL& url,
+                                  net::CertStatus cert_status) override;
   void ResourceLoadComplete(
       RenderFrameHost* render_frame_host,
       const GlobalRequestID& request_id,
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index 62cb386..1a9e325 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -834,8 +834,7 @@
   ASSERT_EQ(2U, observer.resource_load_infos().size());
   const blink::mojom::ResourceLoadInfoPtr& page_load_info =
       observer.resource_load_infos()[0];
-  EXPECT_EQ(url::Origin::Create(page_destination_url),
-            page_load_info->origin_of_final_url);
+  EXPECT_EQ(page_destination_url, page_load_info->final_url);
   EXPECT_EQ(page_original_url, page_load_info->original_url);
 
   GURL image_destination_url(embedded_test_server()->GetURL("/blank.jpg"));
@@ -843,8 +842,7 @@
       embedded_test_server()->GetURL("/server-redirect?blank.jpg"));
   const blink::mojom::ResourceLoadInfoPtr& image_load_info =
       observer.resource_load_infos()[1];
-  EXPECT_EQ(url::Origin::Create(image_destination_url),
-            image_load_info->origin_of_final_url);
+  EXPECT_EQ(image_destination_url, image_load_info->final_url);
   EXPECT_EQ(image_original_url, image_load_info->original_url);
 }
 
@@ -921,8 +919,7 @@
       NavigateToURL(shell(), start_url, target_url /* expected_commit_url */));
 
   ASSERT_EQ(1U, observer.resource_load_infos().size());
-  EXPECT_EQ(url::Origin::Create(target_url),
-            observer.resource_load_infos()[0]->origin_of_final_url);
+  EXPECT_EQ(target_url, observer.resource_load_infos()[0]->final_url);
 
   ASSERT_EQ(2U, observer.resource_load_infos()[0]->redirect_info_chain.size());
   EXPECT_EQ(url::Origin::Create(intermediate_url),
@@ -955,8 +952,7 @@
   EXPECT_TRUE(NavigateToURL(shell(), url));
   ASSERT_EQ(2U, observer.resource_load_infos().size());
   EXPECT_EQ(url, observer.resource_load_infos()[0]->original_url);
-  EXPECT_EQ(url::Origin::Create(url),
-            observer.resource_load_infos()[0]->origin_of_final_url);
+  EXPECT_EQ(url, observer.resource_load_infos()[0]->final_url);
   EXPECT_TRUE(observer.resource_is_associated_with_main_frame()[0]);
   EXPECT_TRUE(observer.resource_is_associated_with_main_frame()[1]);
   observer.Reset();
@@ -966,10 +962,9 @@
   EXPECT_TRUE(NavigateToURL(shell(), data_url));
   ASSERT_EQ(3U, observer.resource_load_infos().size());
   EXPECT_EQ(data_url, observer.resource_load_infos()[0]->original_url);
-  EXPECT_TRUE(observer.resource_load_infos()[0]->origin_of_final_url.opaque());
+  EXPECT_EQ(data_url, observer.resource_load_infos()[0]->final_url);
   EXPECT_EQ(url, observer.resource_load_infos()[1]->original_url);
-  EXPECT_EQ(url::Origin::Create(url),
-            observer.resource_load_infos()[1]->origin_of_final_url);
+  EXPECT_EQ(url, observer.resource_load_infos()[1]->final_url);
   EXPECT_TRUE(observer.resource_is_associated_with_main_frame()[0]);
   EXPECT_FALSE(observer.resource_is_associated_with_main_frame()[1]);
   EXPECT_FALSE(observer.resource_is_associated_with_main_frame()[2]);
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index ad40ee5..8209cc3 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -428,17 +428,9 @@
       pending_remote<blink.mojom.NavigationInitiator>? navigation_initiator);
 
   // Sent when a subresource response has started.
-  //
-  // |origin_of_final_response_url| is the origin of the final (after all
-  // redirects) URL of the subresource response.  The full URL is not
-  // available, because in some cases the path and query may be sanitized away
-  // - see https://crbug.com/973885.
-  //
   // |cert_status| is the bitmask of status info of the SSL certificate. (see
   // net/cert/cert_status_flags.h).
-  SubresourceResponseStarted(
-      url.mojom.Origin origin_of_final_response_url,
-      uint32 cert_status);
+  SubresourceResponseStarted(url.mojom.Url url, uint32 cert_status);
 
   // Sent when a resource load finished, successfully or not.
   ResourceLoadComplete(blink.mojom.ResourceLoadInfo url_load_info);
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h
index 5612176e..b09355c 100644
--- a/content/public/renderer/render_frame_observer.h
+++ b/content/public/renderer/render_frame_observer.h
@@ -189,7 +189,7 @@
   // |previews_state| is the PreviewsState if the request is a sub-resource. For
   // Document resources, |previews_state| should be reported as PREVIEWS_OFF.
   virtual void DidStartResponse(
-      const url::Origin& origin_of_final_response_url,
+      const GURL& response_url,
       int request_id,
       const network::mojom::URLResponseHead& response_head,
       blink::mojom::ResourceType resource_type,
diff --git a/content/renderer/loader/resource_load_stats.cc b/content/renderer/loader/resource_load_stats.cc
index dcc995a..d994acce 100644
--- a/content/renderer/loader/resource_load_stats.cc
+++ b/content/renderer/loader/resource_load_stats.cc
@@ -44,7 +44,7 @@
 
 void ResourceResponseReceived(int render_frame_id,
                               int request_id,
-                              const url::Origin& origin_of_final_response_url,
+                              const GURL& response_url,
                               network::mojom::URLResponseHeadPtr response_head,
                               blink::mojom::ResourceType resource_type,
                               PreviewsState previews_state) {
@@ -53,11 +53,10 @@
     return;
   if (!blink::IsResourceTypeFrame(resource_type)) {
     frame->GetFrameHost()->SubresourceResponseStarted(
-        origin_of_final_response_url, response_head->cert_status);
+        response_url, response_head->cert_status);
   }
-  frame->DidStartResponse(origin_of_final_response_url, request_id,
-                          std::move(response_head), resource_type,
-                          previews_state);
+  frame->DidStartResponse(response_url, request_id, std::move(response_head),
+                          resource_type, previews_state);
 }
 
 void ResourceTransferSizeUpdated(int render_frame_id,
@@ -112,7 +111,7 @@
   auto resource_load_info = blink::mojom::ResourceLoadInfo::New();
   resource_load_info->method = http_method;
   resource_load_info->original_url = request_url;
-  resource_load_info->origin_of_final_url = url::Origin::Create(request_url);
+  resource_load_info->final_url = request_url;
   resource_load_info->resource_type = resource_type;
   resource_load_info->request_id = request_id;
   resource_load_info->referrer = referrer;
@@ -126,8 +125,7 @@
     blink::mojom::ResourceLoadInfo* resource_load_info,
     const net::RedirectInfo& redirect_info,
     network::mojom::URLResponseHeadPtr redirect_response) {
-  resource_load_info->origin_of_final_url =
-      url::Origin::Create(redirect_info.new_url);
+  resource_load_info->final_url = redirect_info.new_url;
   resource_load_info->method = redirect_info.new_method;
   resource_load_info->referrer = GURL(redirect_info.new_referrer);
   blink::mojom::RedirectInfoPtr net_redirect_info =
@@ -177,7 +175,7 @@
     return;
   if (task_runner->BelongsToCurrentThread()) {
     ResourceResponseReceived(render_frame_id, resource_load_info->request_id,
-                             resource_load_info->origin_of_final_url,
+                             resource_load_info->final_url,
                              std::move(response_head),
                              resource_load_info->resource_type, previews_state);
     return;
@@ -192,8 +190,7 @@
       FROM_HERE,
       base::BindOnce(ResourceResponseReceived, render_frame_id,
                      resource_load_info->request_id,
-                     resource_load_info->origin_of_final_url,
-                     std::move(response_head),
+                     resource_load_info->final_url, std::move(response_head),
                      resource_load_info->resource_type, previews_state));
 }
 
@@ -219,7 +216,7 @@
     int render_frame_id,
     blink::mojom::ResourceLoadInfoPtr resource_load_info,
     const network::URLLoaderCompletionStatus& status) {
-  RecordLoadHistograms(resource_load_info->origin_of_final_url,
+  RecordLoadHistograms(url::Origin::Create(resource_load_info->final_url),
                        resource_load_info->resource_type, status.error_code);
 
   resource_load_info->was_cached = status.exists_in_cache;
@@ -244,7 +241,7 @@
     int render_frame_id,
     blink::mojom::ResourceLoadInfoPtr resource_load_info,
     int net_error) {
-  RecordLoadHistograms(resource_load_info->origin_of_final_url,
+  RecordLoadHistograms(url::Origin::Create(resource_load_info->final_url),
                        resource_load_info->resource_type, net_error);
 
   auto task_runner = RenderThreadImpl::DeprecatedGetMainTaskRunner();
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index a0636a0..0ed1dba 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4928,15 +4928,14 @@
 }
 
 void RenderFrameImpl::DidStartResponse(
-    const url::Origin& origin_of_final_response_url,
+    const GURL& response_url,
     int request_id,
     network::mojom::URLResponseHeadPtr response_head,
     blink::mojom::ResourceType resource_type,
     PreviewsState previews_state) {
-  for (auto& observer : observers_) {
-    observer.DidStartResponse(origin_of_final_response_url, request_id,
-                              *response_head, resource_type, previews_state);
-  }
+  for (auto& observer : observers_)
+    observer.DidStartResponse(response_url, request_id, *response_head,
+                              resource_type, previews_state);
 }
 
 void RenderFrameImpl::DidCompleteResponse(
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index a1a014b..0d03e04c0 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -902,7 +902,7 @@
   // browser.
   void OnDroppedNavigation();
 
-  void DidStartResponse(const url::Origin& origin_of_final_response_url,
+  void DidStartResponse(const GURL& response_url,
                         int request_id,
                         network::mojom::URLResponseHeadPtr response_head,
                         blink::mojom::ResourceType resource_type,
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index 49f48cf..1b853ee 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -146,9 +146,8 @@
       mojo::PendingAssociatedRemote<mojom::NavigationClient>,
       mojo::PendingRemote<blink::mojom::NavigationInitiator>) override {}
 
-  void SubresourceResponseStarted(
-      const url::Origin& origin_of_final_response_url,
-      net::CertStatus cert_status) override {}
+  void SubresourceResponseStarted(const GURL& url,
+                                  net::CertStatus cert_status) override {}
 
   void ResourceLoadComplete(
       blink::mojom::ResourceLoadInfoPtr resource_load_info) override {}
diff --git a/third_party/blink/public/mojom/loader/resource_load_info.mojom b/third_party/blink/public/mojom/loader/resource_load_info.mojom
index 85fdccf..5b7d75c 100644
--- a/third_party/blink/public/mojom/loader/resource_load_info.mojom
+++ b/third_party/blink/public/mojom/loader/resource_load_info.mojom
@@ -72,18 +72,14 @@
   // An ID that uniquely identifies this request.
   int64 request_id;
 
-  // The origin of the final URL of the response (final = after all redirects).
-  //
-  // The full URL is not available, because in some cases the path and query
-  // may be sanitized away - see https://crbug.com/973885.
-  url.mojom.Origin origin_of_final_url;
+  // The final URL of the response (final = after all redirects).
+  url.mojom.Url final_url;
 
   // The response referrer.
   url.mojom.Url referrer;
 
-  // The original URL is the URL used to initialize the subresource request, and
-  // it may differ from "final url" (see |origin_of_final_url|) if the request
-  // was redirected.
+  // The original URL is the URL used to initialize the subresource request,
+  // and it may differ from the |final_url| if the request was redirected.
   url.mojom.Url original_url;
 
   // The request method used to fetch this response.