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

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

Issue 2583703002: Record the tab state during data use (Closed)
Patch Set: minor fix 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..e478605435514e92f93b03da20a8c5a5f6740368 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,30 @@ class UserRequestUserDataForTesting : public base::SupportsUserData::Data,
}
};
+class TestDataUseAscriber : public DataUseAscriber {
+ public:
+ TestDataUseAscriber() {}
+
+ DataUseRecorder* GetOrCreateDataUseRecorder(
+ net::URLRequest* request) override {
+ return &recorder_;
+ }
+
+ DataUseRecorder* GetDataUseRecorder(const net::URLRequest& request) 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;
@@ -63,7 +89,8 @@ class DataUseMeasurementTest : public testing::Test {
: data_use_measurement_(
base::MakeUnique<UserRequestUserDataForTesting>(),
base::Bind(&DataUseMeasurementTest::FakeDataUseforwarder,
- base::Unretained(this))) {
+ base::Unretained(this)),
+ &ascriber_) {
// During the test it is expected to not have cellular connection.
DCHECK(!net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType()));
@@ -165,7 +192,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 +372,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