Index: chrome/browser/net/chrome_network_delegate_unittest.cc |
diff --git a/chrome/browser/net/chrome_network_delegate_unittest.cc b/chrome/browser/net/chrome_network_delegate_unittest.cc |
index 07dac2b19e965c50faf880b3e67b9b782f461b8d..a4d97afeb44bac952afd6d15784369d42fdc0c17 100644 |
--- a/chrome/browser/net/chrome_network_delegate_unittest.cc |
+++ b/chrome/browser/net/chrome_network_delegate_unittest.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/net/chrome_network_delegate.h" |
+#include <stdint.h> |
+ |
#include "base/command_line.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
@@ -20,6 +22,7 @@ |
#include "chrome/test/base/testing_profile_manager.h" |
#include "components/content_settings/core/browser/cookie_settings.h" |
#include "components/content_settings/core/common/pref_names.h" |
+#include "components/data_usage/core/data_use_aggregator.h" |
#include "components/syncable_prefs/testing_pref_service_syncable.h" |
#include "content/public/browser/resource_request_info.h" |
#include "content/public/common/content_switches.h" |
@@ -49,10 +52,11 @@ namespace { |
// 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. |
-void RequestURL(net::URLRequestContext* context, |
- net::MockClientSocketFactory* socket_factory, |
- bool from_user, |
- bool redirect) { |
+scoped_ptr<net::URLRequest> RequestURL( |
+ net::URLRequestContext* context, |
+ net::MockClientSocketFactory* socket_factory, |
+ bool from_user, |
+ bool redirect) { |
net::MockRead redirect_mock_reads[] = { |
net::MockRead("HTTP/1.1 302 Found\r\n" |
"Location: http://bar.com/\r\n\r\n"), |
@@ -87,8 +91,45 @@ void RequestURL(net::URLRequestContext* context, |
} |
request->Start(); |
base::RunLoop().RunUntilIdle(); |
+ return request.Pass(); |
} |
+// A fake DataUseAggregator for testing that only counts how many times its |
+// respective methods have been called. |
+class FakeDataUseAggregator : public data_usage::DataUseAggregator { |
+ public: |
+ FakeDataUseAggregator() |
+ : on_the_record_tx_bytes_(0), |
+ on_the_record_rx_bytes_(0), |
+ off_the_record_tx_bytes_(0), |
+ off_the_record_rx_bytes_(0) {} |
+ ~FakeDataUseAggregator() override {} |
+ |
+ void ReportDataUse(const net::URLRequest& request, |
+ int32_t tab_id, |
+ int64_t tx_bytes, |
+ int64_t rx_bytes) override { |
+ on_the_record_tx_bytes_ += tx_bytes; |
+ on_the_record_rx_bytes_ += rx_bytes; |
+ } |
+ |
+ void ReportOffTheRecordDataUse(int64_t tx_bytes, int64_t rx_bytes) override { |
+ off_the_record_tx_bytes_ += tx_bytes; |
+ off_the_record_rx_bytes_ += rx_bytes; |
+ } |
+ |
+ int64_t on_the_record_tx_bytes() const { return on_the_record_tx_bytes_; } |
+ int64_t on_the_record_rx_bytes() const { return on_the_record_rx_bytes_; } |
+ int64_t off_the_record_tx_bytes() const { return off_the_record_tx_bytes_; } |
+ int64_t off_the_record_rx_bytes() const { return off_the_record_rx_bytes_; } |
+ |
+ private: |
+ int64_t on_the_record_tx_bytes_; |
+ int64_t on_the_record_rx_bytes_; |
+ int64_t off_the_record_tx_bytes_; |
+ int64_t off_the_record_rx_bytes_; |
+}; |
+ |
} // namespace |
class ChromeNetworkDelegateTest : public testing::Test { |
@@ -122,6 +163,10 @@ class ChromeNetworkDelegateTest : public testing::Test { |
net::NetworkDelegate* network_delegate() { return network_delegate_.get(); } |
net::MockClientSocketFactory* socket_factory() { return &socket_factory_; } |
+ ChromeNetworkDelegate* chrome_network_delegate() { |
+ return network_delegate_.get(); |
+ } |
+ |
extensions::EventRouterForwarder* forwarder() { |
#if defined(ENABLE_EXTENSIONS) |
return forwarder_.get(); |
@@ -138,7 +183,7 @@ class ChromeNetworkDelegateTest : public testing::Test { |
#endif |
TestingProfile profile_; |
BooleanPrefMember enable_referrers_; |
- scoped_ptr<net::NetworkDelegate> network_delegate_; |
+ scoped_ptr<ChromeNetworkDelegate> network_delegate_; |
net::MockClientSocketFactory socket_factory_; |
scoped_ptr<net::TestURLRequestContext> context_; |
}; |
@@ -247,6 +292,40 @@ TEST_F(ChromeNetworkDelegateTest, EnableFirstPartyOnlyCookiesIffFlagEnabled) { |
EXPECT_TRUE(network_delegate()->FirstPartyOnlyCookieExperimentEnabled()); |
} |
+TEST_F(ChromeNetworkDelegateTest, ReportDataUseToAggregator) { |
+ FakeDataUseAggregator fake_aggregator; |
+ Initialize(); |
+ |
+ chrome_network_delegate()->set_data_use_aggregator( |
+ &fake_aggregator, false /* is_data_usage_off_the_record */); |
+ |
+ scoped_ptr<net::URLRequest> request = |
+ RequestURL(context(), socket_factory(), true, false); |
+ EXPECT_EQ(request->GetTotalSentBytes(), |
+ fake_aggregator.on_the_record_tx_bytes()); |
+ EXPECT_EQ(request->GetTotalReceivedBytes(), |
+ fake_aggregator.on_the_record_rx_bytes()); |
+ EXPECT_EQ(0, fake_aggregator.off_the_record_tx_bytes()); |
+ EXPECT_EQ(0, fake_aggregator.off_the_record_rx_bytes()); |
+} |
+ |
+TEST_F(ChromeNetworkDelegateTest, ReportOffTheRecordDataUseToAggregator) { |
+ FakeDataUseAggregator fake_aggregator; |
+ Initialize(); |
+ |
+ chrome_network_delegate()->set_data_use_aggregator( |
+ &fake_aggregator, true /* is_data_usage_off_the_record */); |
+ scoped_ptr<net::URLRequest> request = |
+ RequestURL(context(), socket_factory(), true, false); |
+ |
+ EXPECT_EQ(0, fake_aggregator.on_the_record_tx_bytes()); |
+ EXPECT_EQ(0, fake_aggregator.on_the_record_rx_bytes()); |
+ EXPECT_EQ(request->GetTotalSentBytes(), |
+ fake_aggregator.off_the_record_tx_bytes()); |
+ EXPECT_EQ(request->GetTotalReceivedBytes(), |
+ fake_aggregator.off_the_record_rx_bytes()); |
+} |
+ |
class ChromeNetworkDelegateSafeSearchTest : public testing::Test { |
public: |
ChromeNetworkDelegateSafeSearchTest() |