summaryrefslogtreecommitdiff
path: root/chromium/components/data_use_measurement/content/content_url_request_classifier.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/data_use_measurement/content/content_url_request_classifier.cc')
-rw-r--r--chromium/components/data_use_measurement/content/content_url_request_classifier.cc97
1 files changed, 97 insertions, 0 deletions
diff --git a/chromium/components/data_use_measurement/content/content_url_request_classifier.cc b/chromium/components/data_use_measurement/content/content_url_request_classifier.cc
index 2c723b69684..d3354c45154 100644
--- a/chromium/components/data_use_measurement/content/content_url_request_classifier.cc
+++ b/chromium/components/data_use_measurement/content/content_url_request_classifier.cc
@@ -6,11 +6,39 @@
#include <string>
+#include "base/metrics/histogram_macros.h"
+#include "base/metrics/sparse_histogram.h"
#include "base/strings/string_util.h"
#include "content/public/browser/resource_request_info.h"
#include "content/public/common/resource_type.h"
#include "net/http/http_response_headers.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 {
@@ -67,4 +95,73 @@ DataUseUserData::DataUseContentType ContentURLRequestClassifier::GetContentType(
return DataUseUserData::OTHER;
}
+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;
+ default:
+ return;
+ }
+ }
+ 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));
+}
+
+bool ContentURLRequestClassifier::IsFavIconRequest(
+ const net::URLRequest& request) const {
+ const content::ResourceRequestInfo* request_info =
+ content::ResourceRequestInfo::ForRequest(&request);
+ return request_info && request_info->GetResourceType() ==
+ content::ResourceType::RESOURCE_TYPE_FAVICON;
+}
+
} // namespace data_use_measurement