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

Unified Diff: components/data_use_measurement/content/content_url_request_classifier.cc

Issue 2614203002: Record data use of user traffic by different core page transition types (Closed)
Patch Set: Addressed comments Created 3 years, 11 months 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/content/content_url_request_classifier.cc
diff --git a/components/data_use_measurement/content/content_url_request_classifier.cc b/components/data_use_measurement/content/content_url_request_classifier.cc
index 23bbd8baa9624a0515bfab3b4bf2026ab5e4243a..35d7ac575fa7c0b7c50721b42c92417d364b6ba3 100644
--- a/components/data_use_measurement/content/content_url_request_classifier.cc
+++ b/components/data_use_measurement/content/content_url_request_classifier.cc
@@ -4,8 +4,36 @@
#include "components/data_use_measurement/content/content_url_request_classifier.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/metrics/sparse_histogram.h"
#include "content/public/browser/resource_request_info.h"
#include "net/url_request/url_request.h"
+#include "ui/base/page_transition_types.h"
+
+namespace {
+
+// Data use broken by page transition type. This enum must remain synchronized
+// with the enum of the same name in metrics/histograms/histograms.xml. The enum
+// values have the same meaning as ui::PageTransition in
+// ui/base/page_transition_types.h. These values are written to logs. New enum
+// values can be added, but existing enums must never be renumbered or deleted
+// and reused.
+enum DataUsePageTransition {
+ LINK = 0,
+ TYPED = 1,
+ AUTO_BOOKMARK = 2,
+ SUBFRAME = 3, // AUTO_SUBFRAME and MANUAL_SUBFRAME transitions.
+ GENERATED = 4,
+ AUTO_TOPLEVEL = 5,
+ FORM_SUBMIT = 6,
+ RELOAD = 7,
+ KEYWORD = 8, // KEYWORD and KEYWORD_GENERATED transitions.
+ FORWARD_BACK = 9,
+ HOME_PAGE = 10,
+ TRANSITION_MAX = 11,
+};
+
+} // namespace
namespace data_use_measurement {
@@ -26,4 +54,63 @@ bool ContentURLRequestClassifier::IsUserRequest(
return data_use_measurement::IsUserRequest(request);
}
+void ContentURLRequestClassifier::RecordPageTransitionUMA(
+ uint64_t page_transition,
+ int64_t received_bytes) const {
+ DataUsePageTransition data_use_page_transition =
+ DataUsePageTransition::TRANSITION_MAX;
+ if (received_bytes <= 0)
+ return;
+
+ if (page_transition & ui::PAGE_TRANSITION_FORWARD_BACK) {
+ data_use_page_transition = DataUsePageTransition::FORWARD_BACK;
+ } else if (page_transition & ui::PAGE_TRANSITION_HOME_PAGE) {
+ data_use_page_transition = DataUsePageTransition::HOME_PAGE;
+ } else {
+ switch (page_transition & ui::PAGE_TRANSITION_CORE_MASK) {
+ case ui::PAGE_TRANSITION_LINK:
+ data_use_page_transition = DataUsePageTransition::LINK;
+ break;
+ case ui::PAGE_TRANSITION_TYPED:
+ data_use_page_transition = DataUsePageTransition::TYPED;
+ break;
+ case ui::PAGE_TRANSITION_AUTO_BOOKMARK:
+ data_use_page_transition = DataUsePageTransition::AUTO_BOOKMARK;
+ break;
+ case ui::PAGE_TRANSITION_AUTO_SUBFRAME:
+ case ui::PAGE_TRANSITION_MANUAL_SUBFRAME:
+ data_use_page_transition = DataUsePageTransition::SUBFRAME;
+ break;
+ case ui::PAGE_TRANSITION_GENERATED:
+ data_use_page_transition = DataUsePageTransition::GENERATED;
+ break;
+ case ui::PAGE_TRANSITION_AUTO_TOPLEVEL:
+ data_use_page_transition = DataUsePageTransition::AUTO_TOPLEVEL;
+ break;
+ case ui::PAGE_TRANSITION_FORM_SUBMIT:
+ data_use_page_transition = DataUsePageTransition::FORM_SUBMIT;
+ break;
+ case ui::PAGE_TRANSITION_RELOAD:
+ data_use_page_transition = DataUsePageTransition::RELOAD;
+ break;
+ case ui::PAGE_TRANSITION_KEYWORD:
+ case ui::PAGE_TRANSITION_KEYWORD_GENERATED:
+ data_use_page_transition = DataUsePageTransition::KEYWORD;
+ break;
+ }
+ }
+ DCHECK_NE(DataUsePageTransition::TRANSITION_MAX, data_use_page_transition);
+
+ // Use the more primitive STATIC_HISTOGRAM_POINTER_BLOCK macro because the
+ // simple UMA_HISTOGRAM_ENUMERATION macros don't expose 'AddCount'.
+ STATIC_HISTOGRAM_POINTER_BLOCK(
+ "DataUse.PageTransition.UserTraffic",
+ AddCount(data_use_page_transition, received_bytes),
+ base::LinearHistogram::FactoryGet(
+ "DataUse.PageTransition.UserTraffic", 1,
+ DataUsePageTransition::TRANSITION_MAX,
+ DataUsePageTransition::TRANSITION_MAX + 1,
+ base::HistogramBase::kUmaTargetedHistogramFlag));
+}
+
} // namespace data_use_measurement

Powered by Google App Engine
This is Rietveld 408576698