Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(425)

Unified Diff: components/data_use_measurement/core/data_use_measurement_unittest.cc

Issue 2583703002: Record the tab state during data use (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/data_use_measurement/core/data_use_measurement_unittest.cc
diff --git a/components/data_use_measurement/core/data_use_measurement_unittest.cc b/components/data_use_measurement/core/data_use_measurement_unittest.cc
index 6f0f66dbe9a656bef997d4969fa66a6be56435e7..d42396257fb8be76ecba072619cf6d80d5676845 100644
--- a/components/data_use_measurement/core/data_use_measurement_unittest.cc
+++ b/components/data_use_measurement/core/data_use_measurement_unittest.cc
@@ -12,6 +12,8 @@
#include "base/run_loop.h"
#include "base/test/histogram_tester.h"
#include "build/build_config.h"
+#include "components/data_use_measurement/core/data_use_ascriber.h"
+#include "components/data_use_measurement/core/data_use_recorder.h"
#include "components/data_use_measurement/core/url_request_classifier.h"
#include "net/base/network_change_notifier.h"
#include "net/base/request_priority.h"
@@ -41,6 +43,31 @@ class UserRequestUserDataForTesting : public base::SupportsUserData::Data,
}
};
+class TestDataUseAscriber : public DataUseAscriber {
+ public:
+ TestDataUseAscriber() {}
+
+ DataUseRecorder* GetDataUseRecorder(net::URLRequest* request,
+ bool can_create_new) override {
+ return &recorder_;
+ }
+
+ const DataUseRecorder* GetDataUseRecorderIfExists(
+ const net::URLRequest* request) const override {
+ return &recorder_;
+ }
+
+ std::unique_ptr<URLRequestClassifier> CreateURLRequestClassifier()
+ const override {
+ return nullptr;
+ }
+
+ void SetTabVisibility(bool visible) { recorder_.set_is_visible(visible); }
+
+ private:
+ DataUseRecorder recorder_;
+};
+
// The more usual initialization of kUserDataKey would be along the lines of
// const void* const UserRequestUserDataForTesting::kUserDataKey =
// &UserRequestUserDataForTesting::kUserDataKey;
@@ -61,6 +88,7 @@ class DataUseMeasurementTest : public testing::Test {
public:
DataUseMeasurementTest()
: data_use_measurement_(
+ &ascriber_,
base::MakeUnique<UserRequestUserDataForTesting>(),
base::Bind(&DataUseMeasurementTest::FakeDataUseforwarder,
base::Unretained(this))) {
@@ -165,7 +193,10 @@ class DataUseMeasurementTest : public testing::Test {
}
base::MessageLoopForIO loop_;
+
+ TestDataUseAscriber ascriber_;
DataUseMeasurement data_use_measurement_;
+
std::unique_ptr<net::MockClientSocketFactory> socket_factory_;
std::unique_ptr<net::TestURLRequestContext> context_;
const std::string kConnectionType = "NotCellular";
@@ -342,6 +373,48 @@ TEST_F(DataUseMeasurementTest, TimeOfBackgroundDownstreamBytes) {
"DataUse.BackgroundToFirstDownstream.User", 0);
}
}
+
+TEST_F(DataUseMeasurementTest, AppTabState) {
+ base::HistogramTester histogram_tester;
+ std::unique_ptr<net::URLRequest> request = CreateTestRequest(kUserRequest);
+
+ // App in foreground, Tab in background.
+ data_use_measurement_.OnBeforeURLRequest(request.get());
+ data_use_measurement_.OnNetworkBytesReceived(*request, 1000);
+ data_use_measurement_.OnNetworkBytesSent(*request, 100);
+
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Upstream.AppForeground.TabBackground", 1);
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Downstream.AppForeground.TabBackground", 1);
+
+ // App and Tab in foreground.
+ ascriber_.SetTabVisibility(true);
+ data_use_measurement_.OnBeforeURLRequest(request.get());
+ data_use_measurement_.OnNetworkBytesReceived(*request, 1000);
+ data_use_measurement_.OnNetworkBytesSent(*request, 100);
+
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Upstream.AppForeground.TabForeground", 1);
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Downstream.AppForeground.TabForeground", 1);
+
+ // App and Tab in background.
+ data_use_measurement()->OnApplicationStateChangeForTesting(
+ base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES);
+ ascriber_.SetTabVisibility(false);
+ data_use_measurement_.OnBeforeURLRequest(request.get());
+ // First network access changes the app state to UNKNOWN and the next nextwork
+ // access changes to BACKGROUND.
+ data_use_measurement_.OnNetworkBytesReceived(*request, 1000);
+ data_use_measurement_.OnNetworkBytesReceived(*request, 1000);
+ data_use_measurement_.OnNetworkBytesSent(*request, 100);
+
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Upstream.AppBackground", 1);
+ histogram_tester.ExpectTotalCount(
+ "DataUse.AppTabState.Downstream.AppBackground", 1);
+}
#endif
} // namespace data_use_measurement

Powered by Google App Engine
This is Rietveld 408576698