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

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc

Issue 2833523002: Adding opt out and previews type information to DRP pingback (Closed)
Patch Set: moved definition up Created 3 years, 8 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_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
index 76f0dddd3d45d5f40afbf47b1778ef59377ae6bb..aa76a07fa0d983392bf2d246e23e538fed34e2e2 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
@@ -6,9 +6,11 @@
#include <stdint.h>
+#include "base/bind_helpers.h"
#include "base/metrics/histogram_macros.h"
#include "base/optional.h"
#include "base/rand_util.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h"
@@ -33,10 +35,16 @@ static const char kHistogramAttempted[] =
"DataReductionProxy.Pingback.Attempted";
// Adds the relevant information to |request| for this page load based on page
-// timing and data reduction proxy state.
+// timing and data reduction proxy state. |opt_out_page_id| represents an opt
+// out for a given load. If |opt_out_page_id| is empty, there was no opt out. If
+// |opt_out_page_id| does not match the page id in |request_data|, it means the
+// navigation for |opt_out_page_id| is old and was not originally tracked by the
+// metrics observer when the opt out occured and the current page load did not
+// see an opt out.
void AddDataToPageloadMetrics(const DataReductionProxyData& request_data,
const DataReductionProxyPageLoadTiming& timing,
- PageloadMetrics* request) {
+ PageloadMetrics* request,
+ base::Optional<uint64_t> opt_out_page_id) {
request->set_session_key(request_data.session_key());
// For the timing events, any of them could be zero. Fill the message as a
// best effort.
@@ -96,6 +104,29 @@ void AddDataToPageloadMetrics(const DataReductionProxyData& request_data,
if (request_data.page_id()) {
request->set_page_id(request_data.page_id().value());
}
+
+ bool was_preview_shown = false;
+ if (request_data.lofi_received()) {
+ request->set_previews_type(PageloadMetrics_PreviewsType_LOFI);
+ was_preview_shown = true;
+ } else if (request_data.lite_page_received()) {
+ request->set_previews_type(PageloadMetrics_PreviewsType_LITE_PAGE);
+ was_preview_shown = true;
+ } else {
+ request->set_previews_type(PageloadMetrics_PreviewsType_NONE);
+ }
+
+ if (!was_preview_shown || timing.app_background_occured) {
+ request->set_previews_opt_out(PageloadMetrics_PreviewsOptOut_UNKNOWN);
+ return;
+ }
+
+ if (opt_out_page_id && request_data.page_id() &&
+ opt_out_page_id.value() == request_data.page_id().value()) {
+ request->set_previews_opt_out(PageloadMetrics_PreviewsOptOut_OPT_OUT);
+ return;
+ }
+ request->set_previews_opt_out(PageloadMetrics_PreviewsOptOut_NON_OPT_OUT);
}
// Adds |current_time| as the metrics sent time to |request_data|, and returns
@@ -119,6 +150,7 @@ DataReductionProxyPingbackClient::DataReductionProxyPingbackClient(
pingback_reporting_fraction_(0.0) {}
DataReductionProxyPingbackClient::~DataReductionProxyPingbackClient() {
+ DCHECK(tab_page_id_map_.empty());
DCHECK(thread_checker_.CalledOnValidThread());
}
@@ -135,14 +167,24 @@ void DataReductionProxyPingbackClient::OnURLFetchComplete(
void DataReductionProxyPingbackClient::SendPingback(
const DataReductionProxyData& request_data,
- const DataReductionProxyPageLoadTiming& timing) {
+ const DataReductionProxyPageLoadTiming& timing,
+ const void* tab_identifier_key) {
DCHECK(thread_checker_.CalledOnValidThread());
bool send_pingback = ShouldSendPingback();
UMA_HISTOGRAM_BOOLEAN(kHistogramAttempted, send_pingback);
if (!send_pingback)
return;
+
+ auto page_id_iter = tab_page_id_map_.find(tab_identifier_key);
+ base::Optional<uint64_t> opt_out_page_id;
+ if (page_id_iter != tab_page_id_map_.end()) {
+ opt_out_page_id = page_id_iter->second;
+ tab_page_id_map_.erase(page_id_iter);
+ }
+
PageloadMetrics* pageload_metrics = metrics_request_.add_pageloads();
- AddDataToPageloadMetrics(request_data, timing, pageload_metrics);
+ AddDataToPageloadMetrics(request_data, timing, pageload_metrics,
+ opt_out_page_id);
if (current_fetcher_.get())
return;
DCHECK_EQ(1, metrics_request_.pageloads_size());
@@ -191,4 +233,25 @@ void DataReductionProxyPingbackClient::SetPingbackReportingFraction(
pingback_reporting_fraction_ = pingback_reporting_fraction;
}
+void DataReductionProxyPingbackClient::AddOptOut(const void* tab_identifier_key,
+ uint64_t page_id) {
+ tab_page_id_map_[tab_identifier_key] = page_id;
+}
+
+void DataReductionProxyPingbackClient::ClearTabKeySync(
+ const void* tab_identifier_key) {
+ tab_page_id_map_.erase(tab_identifier_key);
+}
+
+void DataReductionProxyPingbackClient::ClearTabKeyAsync(
+ const void* tab_identifier_key) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&DataReductionProxyPingbackClient::ClearTabKeySync,
+ base::Unretained(this), tab_identifier_key));
+}
+
+size_t DataReductionProxyPingbackClient::PendingTabLoadsForTesting() const {
+ return tab_page_id_map_.size();
+}
+
} // namespace data_reduction_proxy

Powered by Google App Engine
This is Rietveld 408576698