Move data use measurement to DataUseNetworkDelegate

Currently data_use_measurement hooks to ChromeNetworkDelegate. It is more
appropriate to hook to DataUseNetworkDelegate, since getting web content
observer events other UI events will be easier (in future CLs) from
DataUseAscriber.

BUG=648808

Review-Url: https://codereview.chromium.org/2462983003
Cr-Commit-Position: refs/heads/master@{#432910}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 693b044..1331eb8 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1314,7 +1314,7 @@
     "//components/data_reduction_proxy/core/browser",
     "//components/data_usage/core",
     "//components/data_use_measurement/content",
-    "//components/data_use_measurement/core",
+    "//components/data_use_measurement/core:ascriber",
     "//components/device_event_log",
     "//components/dom_distiller/content/browser",
     "//components/domain_reliability",
diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
index 8495f37..a41f029 100644
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.cc
@@ -5,8 +5,10 @@
 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h"
 
 #include "base/memory/ptr_util.h"
+#include "components/data_use_measurement/content/content_url_request_classifier.h"
 #include "components/data_use_measurement/core/data_use_recorder.h"
 #include "components/data_use_measurement/core/data_use_user_data.h"
+#include "components/data_use_measurement/core/url_request_classifier.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
@@ -183,4 +185,9 @@
   }
 }
 
+std::unique_ptr<URLRequestClassifier>
+ChromeDataUseAscriber::CreateURLRequestClassifier() const {
+  return base::MakeUnique<ContentURLRequestClassifier>();
+}
+
 }  // namespace data_use_measurement
diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.h b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.h
index 74bc6db9..dc83994b 100644
--- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber.h
+++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber.h
@@ -25,6 +25,8 @@
 
 namespace data_use_measurement {
 
+class URLRequestClassifier;
+
 // Browser implementation of DataUseAscriber. Maintains a list of
 // DataUseRecorder instances, one for each source of data, such as a page
 // load.
@@ -59,6 +61,9 @@
   // Called when a URLRequest is being destroyed.
   void OnUrlRequestDestroyed(net::URLRequest* request) override;
 
+  std::unique_ptr<URLRequestClassifier> CreateURLRequestClassifier()
+      const override;
+
   // Called when a render frame host is created.
   void RenderFrameCreated(int render_process_id,
                           int render_frame_id,
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
index 4ba5d6f..004116e 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -193,8 +193,7 @@
         &enable_referrers_, nullptr, nullptr, nullptr, nullptr,
         profile_.GetTestingPrefService());
     network_delegate_.reset(
-        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_));
     network_delegate_->set_profile(&profile_);
     network_delegate_->set_cookie_settings(
         CookieSettingsFactory::GetForProfile(&profile_).get());
@@ -1000,8 +999,7 @@
         &enable_referrers_, nullptr, nullptr, nullptr, nullptr,
         profile_.GetTestingPrefService());
     network_delegate_.reset(
-        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_));
     network_delegate_->set_profile(&profile_);
     network_delegate_->set_cookie_settings(
         CookieSettingsFactory::GetForProfile(&profile_).get());
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index f25a7ec..662c9e7b 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -515,8 +515,7 @@
 
   std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate(
       new ChromeNetworkDelegate(extension_event_router_forwarder(),
-                                &system_enable_referrers_,
-                                metrics_data_use_forwarder_));
+                                &system_enable_referrers_));
   // By default, data usage is considered off the record.
   chrome_network_delegate->set_data_use_aggregator(
       globals_->data_use_aggregator.get(),
@@ -532,7 +531,7 @@
 
   globals_->system_network_delegate =
       globals_->data_use_ascriber->CreateNetworkDelegate(
-          std::move(chrome_network_delegate));
+          std::move(chrome_network_delegate), metrics_data_use_forwarder_);
 
   globals_->host_resolver = CreateGlobalHostResolver(net_log_);
 
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index 1fed51b..ab7f556 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -24,6 +24,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/net/chrome_network_delegate.h"
 #include "chrome/common/features.h"
+#include "components/metrics/data_use_tracker.h"
 #include "components/prefs/pref_member.h"
 #include "components/ssl_config/ssl_config_service_manager.h"
 #include "content/public/browser/browser_thread.h"
@@ -400,7 +401,7 @@
   const base::TimeTicks creation_time_;
 
   // Callback for updating data use prefs which needs to be initialized on UI
-  // thread and passed to |ChromeNetworkDelegate|.
+  // thread and passed to |DataUseNetworkDelegate|.
   metrics::UpdateUsagePrefCallbackType metrics_data_use_forwarder_;
 
   base::WeakPtrFactory<IOThread> weak_factory_;
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index 3543941d..81712b7a 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -144,8 +144,7 @@
 
 ChromeNetworkDelegate::ChromeNetworkDelegate(
     extensions::EventRouterForwarder* event_router,
-    BooleanPrefMember* enable_referrers,
-    const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
+    BooleanPrefMember* enable_referrers)
     : profile_(nullptr),
       enable_referrers_(enable_referrers),
       enable_do_not_track_(nullptr),
@@ -154,7 +153,6 @@
       allowed_domains_for_apps_(nullptr),
       url_blacklist_manager_(nullptr),
       domain_reliability_monitor_(nullptr),
-      data_use_measurement_(metrics_data_use_forwarder),
       experimental_web_platform_features_enabled_(
           base::CommandLine::ForCurrentProcess()->HasSwitch(
               switches::kEnableExperimentalWebPlatformFeatures)),
@@ -237,8 +235,6 @@
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
           "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest"));
 
-  data_use_measurement_.OnBeforeURLRequest(request);
-
   // TODO(joaodasilva): This prevents extensions from seeing URLs that are
   // blocked. However, an extension might redirect the request to another URL,
   // which is not blocked.
@@ -353,7 +349,6 @@
 
 void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request,
                                              const GURL& new_location) {
-  data_use_measurement_.OnBeforeRedirect(*request, new_location);
   if (domain_reliability_monitor_)
     domain_reliability_monitor_->OnBeforeRedirect(request);
   extensions_delegate_->OnBeforeRedirect(request, new_location);
@@ -373,13 +368,11 @@
 #endif  // defined(ENABLE_TASK_MANAGER)
 
   ReportDataUsageStats(request, 0 /* tx_bytes */, bytes_received);
-  data_use_measurement_.OnNetworkBytesReceived(*request, bytes_received);
 }
 
 void ChromeNetworkDelegate::OnNetworkBytesSent(net::URLRequest* request,
                                                int64_t bytes_sent) {
   ReportDataUsageStats(request, bytes_sent, 0 /* rx_bytes */);
-  data_use_measurement_.OnNetworkBytesSent(*request, bytes_sent);
 }
 
 void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request,
@@ -389,7 +382,6 @@
 
   // TODO(amohammadkhan): Verify that there is no double recording in data use
   // of redirected requests.
-  data_use_measurement_.OnCompleted(*request, started);
   RecordNetworkErrorHistograms(request, net_error);
 
   if (net_error == net::OK) {
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index dd3d549..549b5e6e 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -17,8 +17,6 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/net/safe_search_util.h"
-#include "components/data_use_measurement/content/data_use_measurement.h"
-#include "components/metrics/data_use_tracker.h"
 #include "components/prefs/pref_member.h"
 #include "net/base/network_delegate_impl.h"
 
@@ -65,10 +63,8 @@
   // |enable_referrers| (and all of the other optional PrefMembers) should be
   // initialized on the UI thread (see below) beforehand. This object's owner is
   // responsible for cleaning them up at shutdown.
-  ChromeNetworkDelegate(
-      extensions::EventRouterForwarder* event_router,
-      BooleanPrefMember* enable_referrers,
-      const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder);
+  ChromeNetworkDelegate(extensions::EventRouterForwarder* event_router,
+                        BooleanPrefMember* enable_referrers);
   ~ChromeNetworkDelegate() override;
 
   // Pass through to ChromeExtensionsNetworkDelegate::set_extension_info_map().
@@ -216,9 +212,6 @@
   // When true, allow access to all file:// URLs.
   static bool g_allow_file_access_;
 
-  // Component to measure data use.
-  data_use_measurement::DataUseMeasurement data_use_measurement_;
-
   bool experimental_web_platform_features_enabled_;
 
   // Aggregates and reports network usage.
diff --git a/chrome/browser/net/chrome_network_delegate_unittest.cc b/chrome/browser/net/chrome_network_delegate_unittest.cc
index 4a1da852..7f5e1099 100644
--- a/chrome/browser/net/chrome_network_delegate_unittest.cc
+++ b/chrome/browser/net/chrome_network_delegate_unittest.cc
@@ -28,7 +28,6 @@
 #include "components/data_usage/core/data_use_aggregator.h"
 #include "components/data_usage/core/data_use_amortizer.h"
 #include "components/data_usage/core/data_use_annotator.h"
-#include "components/data_use_measurement/core/data_use_user_data.h"
 #include "components/prefs/pref_member.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/browser/resource_request_info.h"
@@ -50,18 +49,12 @@
 
 namespace {
 
-// This function requests a URL, and makes it return a known response. If
-// |from_user| is true, it attaches a ResourceRequestInfo to the URLRequest,
-// because requests from users have this info. If |from_user| is false, the
-// request is presumed to be from a service, and the service name is set in the
-// request's user data. (As an example suggestions service tag is attached). if
-// |redirect| is true, it adds necessary socket data to have it follow redirect
-// before getting the final response.
+// This function requests a URL, and makes it return a known response.
+// ResourceRequestInfo is attached to the URLRequest, to represent this request
+// as an user initiated.
 std::unique_ptr<net::URLRequest> RequestURL(
     net::URLRequestContext* context,
-    net::MockClientSocketFactory* socket_factory,
-    bool from_user,
-    bool redirect) {
+    net::MockClientSocketFactory* socket_factory) {
   net::MockRead redirect_mock_reads[] = {
       net::MockRead("HTTP/1.1 302 Found\r\n"
                     "Location: http://bar.com/\r\n\r\n"),
@@ -70,8 +63,6 @@
   net::StaticSocketDataProvider redirect_socket_data_provider(
       redirect_mock_reads, arraysize(redirect_mock_reads), nullptr, 0);
 
-  if (redirect)
-    socket_factory->AddSocketDataProvider(&redirect_socket_data_provider);
   net::MockRead response_mock_reads[] = {
       net::MockRead("HTTP/1.1 200 OK\r\n\r\n"), net::MockRead("response body"),
       net::MockRead(net::SYNCHRONOUS, net::OK),
@@ -84,17 +75,10 @@
   std::unique_ptr<net::URLRequest> request(context->CreateRequest(
       GURL("http://example.com"), net::DEFAULT_PRIORITY, &test_delegate));
 
-  if (from_user) {
-    content::ResourceRequestInfo::AllocateForTesting(
-        request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2,
-        true, false, true, true, false);
-  } else {
-    request->SetUserData(
-        data_use_measurement::DataUseUserData::kUserDataKey,
-        new data_use_measurement::DataUseUserData(
-            data_use_measurement::DataUseUserData::SUGGESTIONS,
-            data_use_measurement::DataUseUserData::FOREGROUND));
-  }
+  content::ResourceRequestInfo::AllocateForTesting(
+      request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2,
+      true, false, true, true, false);
+
   request->Start();
   base::RunLoop().RunUntilIdle();
   return request;
@@ -161,8 +145,7 @@
 
   void Initialize() {
     network_delegate_.reset(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
     context_->set_client_socket_factory(&socket_factory_);
     context_->set_network_delegate(network_delegate_.get());
     context_->Init();
@@ -197,125 +180,6 @@
   std::unique_ptr<net::TestURLRequestContext> context_;
 };
 
-// Test that the total data use consumed by Chrome is recorded correctly.
-TEST_F(ChromeNetworkDelegateTest, TotalDataUseMeasurementTest) {
-  Initialize();
-  base::HistogramTester histogram_tester;
-
-  // A query from a user without redirection.
-  RequestURL(context(), socket_factory(), true, false);
-  std::vector<base::Bucket> buckets =
-      histogram_tester.GetAllSamples("DataUse.BytesSent.Delegate");
-  EXPECT_FALSE(buckets.empty());
-
-  buckets = histogram_tester.GetAllSamples("DataUse.BytesReceived.Delegate");
-  EXPECT_FALSE(buckets.empty());
-}
-
-// This function tests data use measurement for requests by services. it makes a
-// query which is similar to a query of a service, so it should affect
-// DataUse.TrafficSize.System.Dimensions and DataUse.MessageSize.ServiceName
-// histograms. AppState and ConnectionType dimensions are always Foreground and
-// NotCellular respectively.
-TEST_F(ChromeNetworkDelegateTest, DataUseMeasurementServiceTest) {
-  Initialize();
-  base::HistogramTester histogram_tester;
-
-  // A query from a service without redirection.
-  RequestURL(context(), socket_factory(), false, false);
-  EXPECT_FALSE(
-      histogram_tester
-          .GetTotalCountsForPrefix(
-              "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular")
-          .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 1);
-  EXPECT_FALSE(histogram_tester
-                   .GetTotalCountsForPrefix("DataUse.MessageSize.Suggestions")
-                   .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Downstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Upstream.Foreground.NotCellular", 0);
-}
-
-// This function tests data use measurement for requests by user.The query from
-// a user should affect DataUse.TrafficSize.User.Dimensions histogram. AppState
-// and ConnectionType dimensions are always Foreground and NotCellular
-// respectively.
-TEST_F(ChromeNetworkDelegateTest, DataUseMeasurementUserTest) {
-  Initialize();
-  base::HistogramTester histogram_tester;
-
-  // A query from user without redirection.
-  RequestURL(context(), socket_factory(), true, false);
-  EXPECT_FALSE(
-      histogram_tester
-          .GetTotalCountsForPrefix(
-              "DataUse.TrafficSize.User.Downstream.Foreground.NotCellular")
-          .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Upstream.Foreground.NotCellular", 1);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount("DataUse.MessageSize.Suggestions", 0);
-}
-
-// This function tests data use measurement for requests by services in case the
-// request is redirected once. it makes a query which is similar to a query of a
-// service, so it should affect DataUse.TrafficSize.System.Dimensions and
-// DataUse.MessageSize.ServiceName histograms. AppState and ConnectionType
-// dimensions are always Foreground and NotCellular respectively.
-TEST_F(ChromeNetworkDelegateTest, DataUseMeasurementServiceTestWithRedirect) {
-  Initialize();
-  base::HistogramTester histogram_tester;
-
-  // A query from user with one redirection.
-  RequestURL(context(), socket_factory(), false, true);
-  EXPECT_FALSE(
-      histogram_tester
-          .GetTotalCountsForPrefix(
-              "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular")
-          .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 2);
-  // Two uploads and two downloads message, so totalCount should be 4.
-  EXPECT_FALSE(histogram_tester
-                   .GetTotalCountsForPrefix("DataUse.MessageSize.Suggestions")
-                   .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Downstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Upstream.Foreground.NotCellular", 0);
-}
-
-// This function tests data use measurement for requests by user in case the
-// request is redirected once.The query from a user should affect
-// DataUse.TrafficSize.User.Dimensions histogram. AppState and ConnectionType
-// dimensions are always Foreground and NotCellular respectively.
-TEST_F(ChromeNetworkDelegateTest, DataUseMeasurementUserTestWithRedirect) {
-  Initialize();
-  base::HistogramTester histogram_tester;
-
-  // A query from user with one redirection.
-  RequestURL(context(), socket_factory(), true, true);
-
-  EXPECT_FALSE(
-      histogram_tester
-          .GetTotalCountsForPrefix(
-              "DataUse.TrafficSize.User.Downstream.Foreground.NotCellular")
-          .empty());
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.User.Upstream.Foreground.NotCellular", 2);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount(
-      "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 0);
-  histogram_tester.ExpectTotalCount("DataUse.MessageSize.Suggestions", 0);
-}
-
 TEST_F(ChromeNetworkDelegateTest, DisableSameSiteCookiesIffFlagDisabled) {
   Initialize();
   EXPECT_FALSE(network_delegate()->AreExperimentalCookieFeaturesEnabled());
@@ -336,7 +200,7 @@
       &fake_aggregator, false /* is_data_usage_off_the_record */);
 
   std::unique_ptr<net::URLRequest> request =
-      RequestURL(context(), socket_factory(), true, false);
+      RequestURL(context(), socket_factory());
   EXPECT_EQ(request->GetTotalSentBytes(),
             fake_aggregator.on_the_record_tx_bytes());
   EXPECT_EQ(request->GetTotalReceivedBytes(),
@@ -352,7 +216,7 @@
   chrome_network_delegate()->set_data_use_aggregator(
       &fake_aggregator, true /* is_data_usage_off_the_record */);
   std::unique_ptr<net::URLRequest> request =
-      RequestURL(context(), socket_factory(), true, false);
+      RequestURL(context(), socket_factory());
 
   EXPECT_EQ(0, fake_aggregator.on_the_record_tx_bytes());
   EXPECT_EQ(0, fake_aggregator.on_the_record_rx_bytes());
@@ -411,8 +275,7 @@
  protected:
   std::unique_ptr<net::NetworkDelegate> CreateNetworkDelegate() {
     std::unique_ptr<ChromeNetworkDelegate> network_delegate(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
     network_delegate->set_force_google_safe_search(&force_google_safe_search_);
     network_delegate->set_force_youtube_restrict(&force_youtube_restrict_);
     return std::move(network_delegate);
@@ -483,8 +346,7 @@
  protected:
   std::unique_ptr<net::NetworkDelegate> CreateNetworkDelegate() {
     std::unique_ptr<ChromeNetworkDelegate> network_delegate(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
     network_delegate->set_allowed_domains_for_apps(&allowed_domains_for_apps_);
     return std::move(network_delegate);
   }
@@ -578,8 +440,7 @@
  protected:
   std::unique_ptr<ChromeNetworkDelegate> CreateNetworkDelegate() {
     std::unique_ptr<ChromeNetworkDelegate> network_delegate(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
-                                  metrics::UpdateUsagePrefCallbackType()));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
     network_delegate->set_cookie_settings(cookie_settings_);
     return network_delegate;
   }
diff --git a/chrome/browser/precache/precache_util.cc b/chrome/browser/precache/precache_util.cc
index 060819b..049155b 100644
--- a/chrome/browser/precache/precache_util.cc
+++ b/chrome/browser/precache/precache_util.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/precache/precache_manager_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "components/data_use_measurement/content/data_use_measurement.h"
+#include "components/data_use_measurement/content/content_url_request_classifier.h"
 #include "components/precache/content/precache_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/url_request/url_request.h"
@@ -64,13 +64,10 @@
   // precaching is allowed.
   content::BrowserThread::PostTask(
       content::BrowserThread::UI, FROM_HERE,
-      base::Bind(
-          &UpdatePrecacheMetricsAndStateOnUIThread, request->url(),
-          GURL(request->referrer()), latency, base::Time::Now(),
-          request->response_info(), received_content_length,
-          data_use_measurement::DataUseMeasurement::IsUserInitiatedRequest(
-              *request),
-          profile_id));
+      base::Bind(&UpdatePrecacheMetricsAndStateOnUIThread, request->url(),
+                 GURL(request->referrer()), latency, base::Time::Now(),
+                 request->response_info(), received_content_length,
+                 data_use_measurement::IsUserRequest(*request), profile_id));
 }
 
 }  // namespace precache
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index a8d9d72..88da0c7 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -485,7 +485,8 @@
   main_context_storage->set_network_delegate(
       data_reduction_proxy_io_data()->CreateNetworkDelegate(
           io_thread_globals->data_use_ascriber->CreateNetworkDelegate(
-              std::move(chrome_network_delegate)),
+              std::move(chrome_network_delegate),
+              io_thread->GetMetricsDataUseForwarder()),
           true));
 
   main_context->set_host_resolver(
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 298404ce..c165abe 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -1033,7 +1033,7 @@
 #else
           NULL,
 #endif
-          &enable_referrers_, io_thread->GetMetricsDataUseForwarder()));
+          &enable_referrers_));
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   network_delegate->set_extension_info_map(
       profile_params_->extension_info_map.get());