Commit ba7fcf52 authored by Ryan Sturm's avatar Ryan Sturm Committed by Commit Bot

Rewriting virtual URL for HTTPS URLLoader Previews

This CL adds a handler for virtual URL re-write whenever the HTTPS
Previews is on and data saver is on. This will act on the committed URL
when it matches the lite page server URL.

This CL also adds UMA for server response and when a host is
blacklisted.

Bug: 921757,929969
Change-Id: I458f9bfb9b9c292a3f3a96065a7c6a9073ec2c23
Reviewed-on: https://chromium-review.googlesource.com/c/1488015
Commit-Queue: Ryan Sturm <ryansturm@chromium.org>
Reviewed-by: default avatarRobert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#635714}
parent 56aac4d8
...@@ -356,19 +356,14 @@ class PreviewsLitePageServerBrowserTest ...@@ -356,19 +356,14 @@ class PreviewsLitePageServerBrowserTest
EXPECT_EQ(content::PAGE_TYPE_NORMAL, entry->GetPageType()); EXPECT_EQ(content::PAGE_TYPE_NORMAL, entry->GetPageType());
const GURL virtual_url = entry->GetVirtualURL(); const GURL virtual_url = entry->GetVirtualURL();
if (!GetParam()) {
// The loaded url should be the previews version of the virtual url. // The loaded url should be the previews version of the virtual url.
EXPECT_EQ(loaded_url, EXPECT_EQ(loaded_url,
PreviewsLitePageNavigationThrottle::GetPreviewsURLForURL( PreviewsLitePageNavigationThrottle::GetPreviewsURLForURL(
virtual_url)); virtual_url));
}
// The Virtual URL should not be on the previews server.
if (!GetParam()) {
EXPECT_FALSE(virtual_url.DomainIs(previews_server_url().host()) && EXPECT_FALSE(virtual_url.DomainIs(previews_server_url().host()) &&
virtual_url.EffectiveIntPort() == virtual_url.EffectiveIntPort() ==
previews_server_url().EffectiveIntPort()); previews_server_url().EffectiveIntPort());
}
} }
void VerifyPreviewNotLoaded() const { void VerifyPreviewNotLoaded() const {
...@@ -624,9 +619,11 @@ class PreviewsLitePageServerBrowserTest ...@@ -624,9 +619,11 @@ class PreviewsLitePageServerBrowserTest
} }
} }
// The chrome-proxy header should have the pid option. // The chrome-proxy header should have the pid or s option.
if (request.headers.find("chrome-proxy")->second.find(", pid=") == if (request.headers.find("chrome-proxy")->second.find("s=") ==
std::string::npos) { std::string::npos ||
request.headers.find("chrome-proxy")->second.find("pid=") ==
std::string::npos) {
response->set_code( response->set_code(
net::HttpStatusCode::HTTP_PROXY_AUTHENTICATION_REQUIRED); net::HttpStatusCode::HTTP_PROXY_AUTHENTICATION_REQUIRED);
return response; return response;
...@@ -788,10 +785,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -788,10 +785,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyPreviewLoaded(); VerifyPreviewLoaded();
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kSuccess); previews::ServerLitePageStatus::kSuccess);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
}
} }
{ {
...@@ -805,10 +798,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -805,10 +798,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
PreviewsLitePageNavigationThrottle::BlacklistReason:: PreviewsLitePageNavigationThrottle::BlacklistReason::
kPathSuffixBlacklisted, kPathSuffixBlacklisted,
1); 1);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 1);
}
} }
{ {
...@@ -843,8 +832,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -843,8 +832,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
HttpsLitePageURL(kSuccess))); HttpsLitePageURL(kSuccess)));
if (!GetParam()) { if (!GetParam()) {
VerifyPreviewNotLoaded(); VerifyPreviewNotLoaded();
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 2);
} else { } else {
VerifyPreviewLoaded(); VerifyPreviewLoaded();
} }
...@@ -859,10 +846,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -859,10 +846,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
PreviewsLitePageNavigationThrottle::BlacklistReason:: PreviewsLitePageNavigationThrottle::BlacklistReason::
kNavigationToPrivateDomain, kNavigationToPrivateDomain,
1); 1);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 1);
}
VerifyErrorPageLoaded(); VerifyErrorPageLoaded();
} }
...@@ -877,10 +860,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -877,10 +860,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
PreviewsLitePageNavigationThrottle::BlacklistReason:: PreviewsLitePageNavigationThrottle::BlacklistReason::
kNavigationToPrivateDomain, kNavigationToPrivateDomain,
1); 1);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 1);
}
} }
{ {
...@@ -894,10 +873,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -894,10 +873,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyPreviewNotLoaded(); VerifyPreviewNotLoaded();
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 1);
}
// Reset ECT for future tests. // Reset ECT for future tests.
g_browser_process->network_quality_tracker() g_browser_process->network_quality_tracker()
...@@ -916,10 +891,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -916,10 +891,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyPreviewNotLoaded(); VerifyPreviewNotLoaded();
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
false, 1);
}
// Reset ECT for future tests. // Reset ECT for future tests.
g_browser_process->network_quality_tracker() g_browser_process->network_quality_tracker()
...@@ -981,10 +952,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -981,10 +952,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
const base::string16 kSubframeTitle = base::ASCIIToUTF16("Subframe"); const base::string16 kSubframeTitle = base::ASCIIToUTF16("Subframe");
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
ui_test_utils::NavigateToURL(browser(), subframe_url()); ui_test_utils::NavigateToURL(browser(), subframe_url());
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 0);
}
// Navigate in the subframe and wait for it to finish. The waiting is // Navigate in the subframe and wait for it to finish. The waiting is
// accomplished by |ExecuteScriptAndExtractString| which waits for // accomplished by |ExecuteScriptAndExtractString| which waits for
...@@ -996,10 +963,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -996,10 +963,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
"\", \"subframe\")", "\", \"subframe\")",
&result)); &result));
EXPECT_EQ(kSubframeTitle, base::ASCIIToUTF16(result)); EXPECT_EQ(kSubframeTitle, base::ASCIIToUTF16(result));
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 0);
}
} }
} }
...@@ -1063,10 +1026,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1063,10 +1026,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyPreviewLoaded(); VerifyPreviewLoaded();
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kSuccess); previews::ServerLitePageStatus::kSuccess);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
}
} }
{ {
...@@ -1076,10 +1035,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1076,10 +1035,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyPreviewLoaded(); VerifyPreviewLoaded();
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kSuccess); previews::ServerLitePageStatus::kSuccess);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
}
} }
{ {
...@@ -1092,13 +1047,9 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1092,13 +1047,9 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kRedirect); previews::ServerLitePageStatus::kRedirect);
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kRedirect, 1); PreviewsLitePageNavigationThrottle::ServerResponse::kRedirect, 1);
}
} }
{ {
...@@ -1111,16 +1062,12 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1111,16 +1062,12 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
previews::ServerLitePageStatus::kSuccess); previews::ServerLitePageStatus::kSuccess);
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 2);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kRedirect, 1); PreviewsLitePageNavigationThrottle::ServerResponse::kRedirect, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kOk, 1); PreviewsLitePageNavigationThrottle::ServerResponse::kOk, 1);
}
} }
} }
...@@ -1135,9 +1082,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1135,9 +1082,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kBypass); previews::ServerLitePageStatus::kBypass);
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse:: PreviewsLitePageNavigationThrottle::ServerResponse::
...@@ -1146,7 +1090,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1146,7 +1090,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.HostBlacklistedOnBypass", false, 1); "Previews.ServerLitePage.HostBlacklistedOnBypass", false, 1);
}
} }
{ {
...@@ -1158,9 +1101,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1158,9 +1101,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kBypass); previews::ServerLitePageStatus::kBypass);
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse:: PreviewsLitePageNavigationThrottle::ServerResponse::
...@@ -1168,7 +1108,7 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1168,7 +1108,7 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
1); 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.HostBlacklistedOnBypass", true, 1); "Previews.ServerLitePage.HostBlacklistedOnBypass", true, 1);
}
ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kSuccess)); ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kSuccess));
VerifyPreviewNotLoaded(); VerifyPreviewNotLoaded();
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
...@@ -1190,13 +1130,9 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1190,13 +1130,9 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kFailure); previews::ServerLitePageStatus::kFailure);
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kAuthFailure, 1); PreviewsLitePageNavigationThrottle::ServerResponse::kAuthFailure, 1);
}
} }
{ {
...@@ -1207,15 +1143,11 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1207,15 +1143,11 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kFailure); previews::ServerLitePageStatus::kFailure);
ClearDeciderState(); ClearDeciderState();
if (!GetParam()) {
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse:: PreviewsLitePageNavigationThrottle::ServerResponse::
kServiceUnavailable, kServiceUnavailable,
1); 1);
}
} }
} }
...@@ -1266,8 +1198,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, ...@@ -1266,8 +1198,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest, IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBrowserTest,
DISABLE_ON_WIN_MAC(LitePageURLNotReportedToHistory)) { DISABLE_ON_WIN_MAC(LitePageURLNotReportedToHistory)) {
if (GetParam())
return;
base::CancelableTaskTracker tracker_; base::CancelableTaskTracker tracker_;
history::HistoryService* history_service = history::HistoryService* history_service =
HistoryServiceFactory::GetForProfile(browser()->profile(), HistoryServiceFactory::GetForProfile(browser()->profile(),
...@@ -1459,8 +1389,6 @@ INSTANTIATE_TEST_SUITE_P(URLLoaderImplementation, ...@@ -1459,8 +1389,6 @@ INSTANTIATE_TEST_SUITE_P(URLLoaderImplementation,
IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBadServerBrowserTest, IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBadServerBrowserTest,
DISABLE_ON_WIN_MAC(LitePagePreviewsBadServer)) { DISABLE_ON_WIN_MAC(LitePagePreviewsBadServer)) {
if (GetParam())
return;
// TODO(crbug.com/874150): Use ExpectUniqueSample in this tests. // TODO(crbug.com/874150): Use ExpectUniqueSample in this tests.
// The histograms in this tests can only be checked by the expected bucket, // The histograms in this tests can only be checked by the expected bucket,
// and not by a unique sample. This is because each navigation to a preview // and not by a unique sample. This is because each navigation to a preview
...@@ -1475,9 +1403,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBadServerBrowserTest, ...@@ -1475,9 +1403,6 @@ IN_PROC_BROWSER_TEST_P(PreviewsLitePageServerBadServerBrowserTest,
VerifyInfoStatus(&histogram_tester, VerifyInfoStatus(&histogram_tester,
previews::ServerLitePageStatus::kFailure); previews::ServerLitePageStatus::kFailure);
ClearDeciderState(); ClearDeciderState();
histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
true, 1);
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Previews.ServerLitePage.ServerResponse", "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kFailed, 1); PreviewsLitePageNavigationThrottle::ServerResponse::kFailed, 1);
...@@ -1544,8 +1469,6 @@ INSTANTIATE_TEST_SUITE_P(URLLoaderImplementation, ...@@ -1544,8 +1469,6 @@ INSTANTIATE_TEST_SUITE_P(URLLoaderImplementation,
IN_PROC_BROWSER_TEST_P( IN_PROC_BROWSER_TEST_P(
PreviewsLitePageServerNoDataSaverHeaderBrowserTest, PreviewsLitePageServerNoDataSaverHeaderBrowserTest,
DISABLE_ON_WIN_MAC(LitePagePreviewsDSNoHeaderTriggering)) { DISABLE_ON_WIN_MAC(LitePagePreviewsDSNoHeaderTriggering)) {
if (GetParam())
return;
// Verify the preview is not triggered on HTTPS pageloads without data saver. // Verify the preview is not triggered on HTTPS pageloads without data saver.
ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kSuccess)); ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kSuccess));
VerifyPreviewNotLoaded(); VerifyPreviewNotLoaded();
...@@ -1743,8 +1666,6 @@ IN_PROC_BROWSER_TEST_P( ...@@ -1743,8 +1666,6 @@ IN_PROC_BROWSER_TEST_P(
DISABLE_ON_WIN_MAC(LitePagePreviewsDoesNotOverridePageHints)) { DISABLE_ON_WIN_MAC(LitePagePreviewsDoesNotOverridePageHints)) {
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
if (GetParam())
return;
// Whitelist test URL for resource loading hints. // Whitelist test URL for resource loading hints.
GURL url = HttpsLitePageURL(kSuccess); GURL url = HttpsLitePageURL(kSuccess);
SetResourceLoadingHints({url.host()}); SetResourceLoadingHints({url.host()});
......
...@@ -249,7 +249,18 @@ bool HandlePreviewsLitePageURLRewrite( ...@@ -249,7 +249,18 @@ bool HandlePreviewsLitePageURLRewrite(
content::BrowserContext* browser_context) { content::BrowserContext* browser_context) {
// Don't change the |url|, just register our interest in reversing it before // Don't change the |url|, just register our interest in reversing it before
// it is displayed to the user in |HandlePreviewsLitePageURLRewriteReverse|. // it is displayed to the user in |HandlePreviewsLitePageURLRewriteReverse|.
return previews::IsLitePageRedirectPreviewURL(*url); // Without returning true here, |HandlePreviewsLitePageURLRewriteReverse|
// would not be called.
auto* data_reduction_proxy_settings =
DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
browser_context);
if (!data_reduction_proxy_settings)
return false;
return data_reduction_proxy_settings->IsDataReductionProxyEnabled() &&
previews::params::IsLitePageServerPreviewsEnabled();
} }
bool HandlePreviewsLitePageURLRewriteReverse( bool HandlePreviewsLitePageURLRewriteReverse(
......
...@@ -10,12 +10,14 @@ ...@@ -10,12 +10,14 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
#include "base/rand_util.h" #include "base/rand_util.h"
#include "base/task/post_task.h" #include "base/task/post_task.h"
#include "base/task/task_traits.h" #include "base/task/task_traits.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/previews/previews_lite_page_decider.h" #include "chrome/browser/previews/previews_lite_page_decider.h"
#include "chrome/browser/previews/previews_lite_page_navigation_throttle.h"
#include "chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h" #include "chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h"
#include "chrome/browser/previews/previews_service.h" #include "chrome/browser/previews/previews_service.h"
#include "chrome/browser/previews/previews_service_factory.h" #include "chrome/browser/previews/previews_service_factory.h"
...@@ -209,9 +211,19 @@ void PreviewsLitePageServingURLLoader::OnReceiveResponse( ...@@ -209,9 +211,19 @@ void PreviewsLitePageServingURLLoader::OnReceiveResponse(
const net::HttpResponseHeaders* response_headers = head.headers.get(); const net::HttpResponseHeaders* response_headers = head.headers.get();
// TODO: evaluate all the responses we allow, don't hard code 200. // TODO: evaluate all the responses we allow, don't hard code 200.
if (!response_headers || response_headers->response_code() != net::HTTP_OK) { if (!response_headers) {
if (response_headers && UMA_HISTOGRAM_ENUMERATION(
response_headers->response_code() == net::HTTP_SERVICE_UNAVAILABLE) { "Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kFailed);
Fallback();
return;
}
if (response_headers->response_code() != net::HTTP_OK) {
if (response_headers->response_code() == net::HTTP_SERVICE_UNAVAILABLE) {
UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::
ServerResponse::kServiceUnavailable);
std::string retry_after_header; std::string retry_after_header;
base::TimeDelta retry_after = base::TimeDelta::FromSeconds(base::RandInt( base::TimeDelta retry_after = base::TimeDelta::FromSeconds(base::RandInt(
60, previews::params::PreviewServerLoadshedMaxSeconds())); 60, previews::params::PreviewServerLoadshedMaxSeconds()));
...@@ -221,12 +233,24 @@ void PreviewsLitePageServingURLLoader::OnReceiveResponse( ...@@ -221,12 +233,24 @@ void PreviewsLitePageServingURLLoader::OnReceiveResponse(
base::Time::Now(), &retry_after); base::Time::Now(), &retry_after);
} }
SetServerUnavailableFor(retry_after, frame_tree_node_id_); SetServerUnavailableFor(retry_after, frame_tree_node_id_);
} else if (response_headers->response_code() == net::HTTP_FORBIDDEN) {
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kAuthFailure);
} else {
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kOther);
} }
Fallback(); Fallback();
return; return;
} }
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kOk);
// Store head and pause new messages until the forwarding client is set up. // Store head and pause new messages until the forwarding client is set up.
// Make a deep copy of ResourceResponseHead before passing it cross-thread. // Make a deep copy of ResourceResponseHead before passing it cross-thread.
resource_response_ = base::MakeRefCounted<network::ResourceResponse>(); resource_response_ = base::MakeRefCounted<network::ResourceResponse>();
...@@ -253,6 +277,9 @@ void PreviewsLitePageServingURLLoader::OnReceiveRedirect( ...@@ -253,6 +277,9 @@ void PreviewsLitePageServingURLLoader::OnReceiveRedirect(
if (previews::ExtractOriginalURLFromLitePageRedirectURL(previews_url_, if (previews::ExtractOriginalURLFromLitePageRedirectURL(previews_url_,
&original_url) && &original_url) &&
GURL(original_url) == redirect_info.new_url) { GURL(original_url) == redirect_info.new_url) {
UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::
ServerResponse::kPreviewUnavailable);
const net::HttpResponseHeaders* response_headers = head.headers.get(); const net::HttpResponseHeaders* response_headers = head.headers.get();
std::string chrome_proxy_header; std::string chrome_proxy_header;
...@@ -266,10 +293,18 @@ void PreviewsLitePageServingURLLoader::OnReceiveRedirect( ...@@ -266,10 +293,18 @@ void PreviewsLitePageServingURLLoader::OnReceiveRedirect(
if (blacklist_host) if (blacklist_host)
BlacklistBypassedHost(GURL(original_url).host(), kBlacklistDuration, BlacklistBypassedHost(GURL(original_url).host(), kBlacklistDuration,
frame_tree_node_id_); frame_tree_node_id_);
UMA_HISTOGRAM_BOOLEAN("Previews.ServerLitePage.HostBlacklistedOnBypass",
blacklist_host);
Fallback(); Fallback();
return; return;
} }
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kRedirect);
std::move(result_callback_) std::move(result_callback_)
.Run(ServingLoaderResult::kRedirect, redirect_info, resource_response_); .Run(ServingLoaderResult::kRedirect, redirect_info, resource_response_);
} }
...@@ -306,10 +341,12 @@ void PreviewsLitePageServingURLLoader::OnComplete( ...@@ -306,10 +341,12 @@ void PreviewsLitePageServingURLLoader::OnComplete(
return; return;
} }
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kFailed);
// If OnComplete is called before, OnReceiveResponse, this is indicative of a // If OnComplete is called before, OnReceiveResponse, this is indicative of a
// failure of some sort. // failure of some sort.
// TODO(ryansturm): Handle specific errors with a bypass pattern.
// https://crbug.com/921744
Fallback(); Fallback();
} }
...@@ -352,6 +389,9 @@ void PreviewsLitePageServingURLLoader::OnConnectionError() { ...@@ -352,6 +389,9 @@ void PreviewsLitePageServingURLLoader::OnConnectionError() {
// When we are not yet bound to the navigation code, fallback, which will // When we are not yet bound to the navigation code, fallback, which will
// destroy this object. // destroy this object.
if (!result_callback_.is_null()) { if (!result_callback_.is_null()) {
UMA_HISTOGRAM_ENUMERATION(
"Previews.ServerLitePage.ServerResponse",
PreviewsLitePageNavigationThrottle::ServerResponse::kFailed);
Fallback(); Fallback();
return; return;
} }
......
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