Commit d64c807d authored by Tarun Bansal's avatar Tarun Bansal Committed by Commit Bot

NavigationPredictor: Disable on incognito profiles

In incognito profiles, do not predict the next navigation, either at
the time of load, or at the time of element click.

Bug: 899406
Change-Id: Iccddf772ed8fc5de63233e427e7eab35d8a3f20c
TBR: ryansturm@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/1330702Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607066}
parent 3664c953
...@@ -152,6 +152,10 @@ TemplateURLService* NavigationPredictor::GetTemplateURLService() const { ...@@ -152,6 +152,10 @@ TemplateURLService* NavigationPredictor::GetTemplateURLService() const {
void NavigationPredictor::ReportAnchorElementMetricsOnClick( void NavigationPredictor::ReportAnchorElementMetricsOnClick(
blink::mojom::AnchorElementMetricsPtr metrics) { blink::mojom::AnchorElementMetricsPtr metrics) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (browser_context_->IsOffTheRecord())
return;
if (!IsValidMetricFromRenderer(*metrics)) { if (!IsValidMetricFromRenderer(*metrics)) {
mojo::ReportBadMessage("Bad anchor element metrics: onClick."); mojo::ReportBadMessage("Bad anchor element metrics: onClick.");
return; return;
...@@ -343,6 +347,9 @@ void NavigationPredictor::ReportAnchorElementMetricsOnLoad( ...@@ -343,6 +347,9 @@ void NavigationPredictor::ReportAnchorElementMetricsOnLoad(
// Each document should only report metrics once when page is loaded. // Each document should only report metrics once when page is loaded.
DCHECK(navigation_scores_map_.empty()); DCHECK(navigation_scores_map_.empty());
if (browser_context_->IsOffTheRecord())
return;
if (metrics.empty()) { if (metrics.empty()) {
mojo::ReportBadMessage("Bad anchor element metrics: empty."); mojo::ReportBadMessage("Bad anchor element metrics: empty.");
return; return;
...@@ -460,6 +467,8 @@ double NavigationPredictor::CalculateAnchorNavigationScore( ...@@ -460,6 +467,8 @@ double NavigationPredictor::CalculateAnchorNavigationScore(
double target_engagement_score, double target_engagement_score,
int area_rank, int area_rank,
int number_of_anchors) const { int number_of_anchors) const {
DCHECK(!browser_context_->IsOffTheRecord());
if (sum_scales_ == 0) if (sum_scales_ == 0)
return 0.0; return 0.0;
...@@ -524,6 +533,8 @@ double NavigationPredictor::CalculateAnchorNavigationScore( ...@@ -524,6 +533,8 @@ double NavigationPredictor::CalculateAnchorNavigationScore(
void NavigationPredictor::MaybeTakeActionOnLoad( void NavigationPredictor::MaybeTakeActionOnLoad(
const std::vector<std::unique_ptr<NavigationScore>>& const std::vector<std::unique_ptr<NavigationScore>>&
sorted_navigation_scores) const { sorted_navigation_scores) const {
DCHECK(!browser_context_->IsOffTheRecord());
// TODO(chelu): https://crbug.com/850624/. Given the calculated navigation // TODO(chelu): https://crbug.com/850624/. Given the calculated navigation
// scores, this function decides which action to take, or decides not to do // scores, this function decides which action to take, or decides not to do
// anything. Example actions including preresolve, preload, prerendering, etc. // anything. Example actions including preresolve, preload, prerendering, etc.
...@@ -537,6 +548,8 @@ void NavigationPredictor::MaybeTakeActionOnLoad( ...@@ -537,6 +548,8 @@ void NavigationPredictor::MaybeTakeActionOnLoad(
void NavigationPredictor::RecordMetricsOnLoad( void NavigationPredictor::RecordMetricsOnLoad(
const blink::mojom::AnchorElementMetrics& metric) const { const blink::mojom::AnchorElementMetrics& metric) const {
DCHECK(!browser_context_->IsOffTheRecord());
UMA_HISTOGRAM_PERCENTAGE("AnchorElementMetrics.Visible.RatioArea", UMA_HISTOGRAM_PERCENTAGE("AnchorElementMetrics.Visible.RatioArea",
static_cast<int>(metric.ratio_area * 100)); static_cast<int>(metric.ratio_area * 100));
......
...@@ -112,6 +112,21 @@ IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, Pipeline) { ...@@ -112,6 +112,21 @@ IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, Pipeline) {
} }
} }
// Test that no metrics are recorded in off-the-record profiles.
IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, PipelineOffTheRecord) {
base::HistogramTester histogram_tester;
const GURL& url = GetTestURL("/simple_page_with_anchors.html");
Browser* incognito = CreateIncognitoBrowser();
ui_test_utils::NavigateToURL(incognito, url);
base::RunLoop().RunUntilIdle();
histogram_tester.ExpectTotalCount(
"AnchorElementMetrics.Visible.NumberOfAnchorElements", 0);
histogram_tester.ExpectTotalCount(
"AnchorElementMetrics.Visible.NumberOfAnchorElementsAfterMerge", 0);
}
// Test that anchor elements within an iframe tagged as an ad are discarded when // Test that anchor elements within an iframe tagged as an ad are discarded when
// predicting next navigation. // predicting next navigation.
IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, PipelineAdsFrameTagged) { IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, PipelineAdsFrameTagged) {
...@@ -226,6 +241,27 @@ IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, ClickAnchorElement) { ...@@ -226,6 +241,27 @@ IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, ClickAnchorElement) {
} }
} }
// Simulate a click at the anchor element in off-the-record profile. Metrics
// should not be recorded.
IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest,
ClickAnchorElementOffTheRecord) {
base::HistogramTester histogram_tester;
const GURL& url = GetTestURL("/simple_page_with_anchors.html");
Browser* incognito = CreateIncognitoBrowser();
ui_test_utils::NavigateToURL(incognito, url);
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(content::ExecuteScript(
incognito->tab_strip_model()->GetActiveWebContents(),
"document.getElementById('google').click();"));
base::RunLoop().RunUntilIdle();
histogram_tester.ExpectTotalCount(
"AnchorElementMetrics.Clicked.HrefEngagementScore2", 0);
}
// Simulate click at the anchor element. // Simulate click at the anchor element.
// Test that correct area ranks are recorded. // Test that correct area ranks are recorded.
IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, AreaRank) { IN_PROC_BROWSER_TEST_P(NavigationPredictorBrowserTest, AreaRank) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment