Index: components/data_usage/core/data_use_aggregator_unittest.cc |
diff --git a/components/data_usage/core/data_use_aggregator_unittest.cc b/components/data_usage/core/data_use_aggregator_unittest.cc |
index fcd5b262fd77a2e6d48cdb7a12b2c8ed3949a360..f0d5f44d67e5288ed7ac72a2242d239983da0c50 100644 |
--- a/components/data_usage/core/data_use_aggregator_unittest.cc |
+++ b/components/data_usage/core/data_use_aggregator_unittest.cc |
@@ -10,9 +10,12 @@ |
#include <string> |
#include <vector> |
+#include "base/callback.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
+#include "base/time/time.h" |
#include "components/data_usage/core/data_use.h" |
+#include "components/data_usage/core/data_use_annotator.h" |
#include "net/base/load_timing_info.h" |
#include "net/base/network_change_notifier.h" |
#include "net/base/network_delegate_impl.h" |
@@ -26,8 +29,20 @@ namespace data_usage { |
namespace { |
+base::TimeTicks GetRequestStart(const net::URLRequest& request) { |
+ net::LoadTimingInfo load_timing_info; |
+ request.GetLoadTimingInfo(&load_timing_info); |
+ return load_timing_info.request_start; |
+} |
+ |
// Test class that can set the network operator's MCCMNC. |
class TestDataUseAggregator : public DataUseAggregator { |
+ public: |
+ TestDataUseAggregator(scoped_ptr<DataUseAnnotator> annotator) |
+ : DataUseAggregator(annotator.Pass()) {} |
+ |
+ ~TestDataUseAggregator() override {} |
+ |
private: |
friend class TestNetworkChangeNotifier; |
using DataUseAggregator::OnConnectionTypeChanged; |
@@ -64,6 +79,29 @@ class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { |
DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifier); |
}; |
+// A fake DataUseAnnotator that sets the tab ID of DataUse objects to a |
+// predetermined fake tab ID. |
+class FakeDataUseAnnotator : public DataUseAnnotator { |
+ public: |
+ FakeDataUseAnnotator() : tab_id_(-1) {} |
+ ~FakeDataUseAnnotator() override {} |
+ |
+ void Annotate( |
+ net::URLRequest* request, |
+ scoped_ptr<DataUse> data_use, |
+ const base::Callback<void(scoped_ptr<DataUse>)>& callback) override { |
+ data_use->tab_id = tab_id_; |
+ callback.Run(data_use.Pass()); |
+ } |
+ |
+ void set_tab_id(int32_t tab_id) { tab_id_ = tab_id; } |
+ |
+ private: |
+ int32_t tab_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeDataUseAnnotator); |
+}; |
+ |
// A network delegate that reports all received and sent network bytes to a |
// DataUseAggregator. |
class ReportingNetworkDelegate : public net::NetworkDelegateImpl { |
@@ -88,8 +126,10 @@ class ReportingNetworkDelegate : public net::NetworkDelegateImpl { |
ReportingNetworkDelegate( |
TestDataUseAggregator* data_use_aggregator, |
+ FakeDataUseAnnotator* fake_data_use_annotator, |
TestNetworkChangeNotifier* test_network_change_notifier) |
: data_use_aggregator_(data_use_aggregator), |
+ fake_data_use_annotator_(fake_data_use_annotator), |
test_network_change_notifier_(test_network_change_notifier) {} |
~ReportingNetworkDelegate() override {} |
@@ -99,7 +139,7 @@ class ReportingNetworkDelegate : public net::NetworkDelegateImpl { |
} |
private: |
- DataUseContext UpdateDataUseContext(const net::URLRequest& request) { |
+ void UpdateDataUseContext(const net::URLRequest& request) { |
DataUseContextMap::const_iterator data_use_context_it = |
data_use_context_map_.find(&request); |
DataUseContext data_use_context = |
@@ -107,29 +147,30 @@ class ReportingNetworkDelegate : public net::NetworkDelegateImpl { |
? DataUseContext() |
: data_use_context_it->second; |
+ fake_data_use_annotator_->set_tab_id(data_use_context.tab_id); |
+ |
if (test_network_change_notifier_->GetCurrentConnectionType() != |
data_use_context.connection_type) { |
test_network_change_notifier_->SimulateNetworkConnectionChange( |
data_use_context.connection_type, data_use_context.mcc_mnc); |
} |
- return data_use_context; |
} |
- void OnNetworkBytesReceived(const net::URLRequest& request, |
+ void OnNetworkBytesReceived(net::URLRequest* request, |
int64_t bytes_received) override { |
- DataUseContext data_use_context = UpdateDataUseContext(request); |
- data_use_aggregator_->ReportDataUse(request, data_use_context.tab_id, |
- 0 /* tx_bytes */, bytes_received); |
+ UpdateDataUseContext(*request); |
+ data_use_aggregator_->ReportDataUse(request, 0 /* tx_bytes */, |
+ bytes_received); |
} |
- void OnNetworkBytesSent(const net::URLRequest& request, |
+ void OnNetworkBytesSent(net::URLRequest* request, |
int64_t bytes_sent) override { |
- DataUseContext data_use_context = UpdateDataUseContext(request); |
- data_use_aggregator_->ReportDataUse(request, data_use_context.tab_id, |
- bytes_sent, 0 /* rx_bytes */); |
+ UpdateDataUseContext(*request); |
+ data_use_aggregator_->ReportDataUse(request, bytes_sent, 0 /* rx_bytes */); |
} |
TestDataUseAggregator* data_use_aggregator_; |
+ FakeDataUseAnnotator* fake_data_use_annotator_; |
TestNetworkChangeNotifier* test_network_change_notifier_; |
DataUseContextMap data_use_context_map_; |
@@ -171,8 +212,12 @@ class TestObserver : public DataUseAggregator::Observer { |
class DataUseAggregatorTest : public testing::Test { |
public: |
DataUseAggregatorTest() |
- : test_network_change_notifier_(&data_use_aggregator_), |
+ : fake_data_use_annotator_(new FakeDataUseAnnotator()), |
+ data_use_aggregator_( |
+ scoped_ptr<DataUseAnnotator>(fake_data_use_annotator_)), |
+ test_network_change_notifier_(&data_use_aggregator_), |
reporting_network_delegate_(&data_use_aggregator_, |
+ fake_data_use_annotator_, |
&test_network_change_notifier_), |
context_(true), |
test_observer_(&data_use_aggregator_) { |
@@ -229,6 +274,8 @@ class DataUseAggregatorTest : public testing::Test { |
private: |
base::MessageLoopForIO loop_; |
+ // Weak, owned by |data_use_aggregator_|. |
+ FakeDataUseAnnotator* fake_data_use_annotator_; |
TestDataUseAggregator data_use_aggregator_; |
TestNetworkChangeNotifier test_network_change_notifier_; |
net::MockClientSocketFactory mock_socket_factory_; |
@@ -262,10 +309,7 @@ TEST_F(DataUseAggregatorTest, ReportDataUse) { |
int64_t observed_foo_tx_bytes = 0, observed_foo_rx_bytes = 0; |
while (data_use_it != test_observer()->observed_data_use().end() && |
data_use_it->url == GURL("http://foo.com")) { |
- net::LoadTimingInfo foo_load_timing_info; |
- foo_request->GetLoadTimingInfo(&foo_load_timing_info); |
- |
- EXPECT_EQ(foo_load_timing_info.request_start, data_use_it->request_start); |
+ EXPECT_EQ(GetRequestStart(*foo_request), data_use_it->request_start); |
EXPECT_EQ(GURL("http://foofirstparty.com"), |
data_use_it->first_party_for_cookies); |
EXPECT_EQ(kFooTabId, data_use_it->tab_id); |
@@ -282,11 +326,8 @@ TEST_F(DataUseAggregatorTest, ReportDataUse) { |
// Then, the |bar_request| data use should have happened. |
int64_t observed_bar_tx_bytes = 0, observed_bar_rx_bytes = 0; |
while (data_use_it != test_observer()->observed_data_use().end()) { |
- net::LoadTimingInfo bar_load_timing_info; |
- bar_request->GetLoadTimingInfo(&bar_load_timing_info); |
- |
EXPECT_EQ(GURL("http://bar.com"), data_use_it->url); |
- EXPECT_EQ(bar_load_timing_info.request_start, data_use_it->request_start); |
+ EXPECT_EQ(GetRequestStart(*bar_request), data_use_it->request_start); |
EXPECT_EQ(GURL("http://barfirstparty.com"), |
data_use_it->first_party_for_cookies); |
EXPECT_EQ(kBarTabId, data_use_it->tab_id); |
@@ -367,9 +408,7 @@ TEST_F(DataUseAggregatorTest, ReportCombinedDataUse) { |
// DataUse element. |
const DataUse& foo_data_use = test_observer()->observed_data_use().front(); |
EXPECT_EQ(GURL("http://foo.com"), foo_data_use.url); |
- net::LoadTimingInfo foo_load_timing_info; |
- foo_request->GetLoadTimingInfo(&foo_load_timing_info); |
- EXPECT_EQ(foo_load_timing_info.request_start, foo_data_use.request_start); |
+ EXPECT_EQ(GetRequestStart(*foo_request), foo_data_use.request_start); |
EXPECT_EQ(GURL("http://foofirstparty.com"), |
foo_data_use.first_party_for_cookies); |
EXPECT_EQ(kFooTabId, foo_data_use.tab_id); |
@@ -382,9 +421,7 @@ TEST_F(DataUseAggregatorTest, ReportCombinedDataUse) { |
// DataUse element. |
const DataUse& bar_data_use = test_observer()->observed_data_use().back(); |
EXPECT_EQ(GURL("http://bar.com"), bar_data_use.url); |
- net::LoadTimingInfo bar_load_timing_info; |
- bar_request->GetLoadTimingInfo(&bar_load_timing_info); |
- EXPECT_EQ(bar_load_timing_info.request_start, bar_data_use.request_start); |
+ EXPECT_EQ(GetRequestStart(*bar_request), bar_data_use.request_start); |
EXPECT_EQ(GURL("http://barfirstparty.com"), |
bar_data_use.first_party_for_cookies); |
EXPECT_EQ(kBarTabId, bar_data_use.tab_id); |