Commit 8791b997 authored by rajendrant's avatar rajendrant Committed by Commit Bot

Use via header to detect if cached main frame response is served by DRP

DRP does not set chrome-proxy response header for streamed responses. So
to detect an cached response is served by DRP, via header should be used
in addition to chrome-proxy header. This records more DRP PageLoadMetrics
metrics and sends more DRP pingbacks.

Change-Id: I13f9fcda455aae53cab19a6fe1d9d5421903aca8

Bug: 924211
Change-Id: I13f9fcda455aae53cab19a6fe1d9d5421903aca8
Reviewed-on: https://chromium-review.googlesource.com/c/1426521Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: rajendrant <rajendrant@chromium.org>
Cr-Commit-Position: refs/heads/master@{#624958}
parent 14bc149e
......@@ -297,7 +297,11 @@ DataReductionProxyChromeSettings::CreateDataFromNavigationHandle(
return data;
if (handle->WasResponseCached() &&
headers->HasHeader(data_reduction_proxy::chrome_proxy_header()) &&
(headers->HasHeader(data_reduction_proxy::chrome_proxy_header()) ||
// Check for via header since Chrome-Proxy header maybe missing in
// streamed responses.
data_reduction_proxy::HasDataReductionProxyViaHeader(*headers,
nullptr)) &&
!handle->GetURL().SchemeIsCryptographic()) {
data->set_was_cached_data_reduction_proxy_response(true);
}
......
......@@ -443,6 +443,23 @@ TEST_F(DataReductionProxyChromeSettingsTest, CreateHTTPSDataCachedResponse) {
EXPECT_FALSE(data->was_cached_data_reduction_proxy_response());
}
TEST_F(DataReductionProxyChromeSettingsTest,
CreateCachedResponseWithViaHeader) {
std::string raw_headers =
"HTTP/1.0 200 OK\n"
"via: 1.1 Chrome-Compression-Proxy\n";
content::MockNavigationHandle handle(GURL(kUrl), main_rfh());
scoped_refptr<net::HttpResponseHeaders> headers =
new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
raw_headers.c_str(), raw_headers.size()));
handle.set_response_headers(headers.get());
handle.set_was_response_cached(true);
auto data = drp_chrome_settings_->CreateDataFromNavigationHandle(
&handle, headers.get());
EXPECT_TRUE(data->was_cached_data_reduction_proxy_response());
}
TEST_F(DataReductionProxyChromeSettingsTest, CreateDataWithLitePage) {
std::string raw_headers =
"HTTP/1.0 200 OK\n"
......
......@@ -511,7 +511,11 @@ void DataReductionProxyNetworkDelegate::OnHeadersReceivedInternal(
if (request->was_cached() && request->url().SchemeIsHTTPOrHTTPS() &&
!request->url().SchemeIsCryptographic() &&
original_response_headers->HasHeader(chrome_proxy_header())) {
(original_response_headers->HasHeader(chrome_proxy_header()) ||
// Check for via header since Chrome-Proxy header maybe missing in
// streamed responses.
data_reduction_proxy::HasDataReductionProxyViaHeader(
*original_response_headers, nullptr))) {
DataReductionProxyData* data =
DataReductionProxyData::GetDataAndCreateIfNecessary(request);
data->set_was_cached_data_reduction_proxy_response(true);
......
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