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());