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

Unified Diff: chrome/browser/prerender/prerender_resource_throttle.cc

Issue 2302433002: [NoStatePrefetch] Track redirects in UMA (Closed)
Patch Set: Add histograms for redirect count Created 4 years, 3 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: chrome/browser/prerender/prerender_resource_throttle.cc
diff --git a/chrome/browser/prerender/prerender_resource_throttle.cc b/chrome/browser/prerender/prerender_resource_throttle.cc
index a8b9796acdbb0e0f567d3e3cde37cd0acccf8309..f4b08ca5f9d72a8a3abfac5d0471e911cae0d855 100644
--- a/chrome/browser/prerender/prerender_resource_throttle.cc
+++ b/chrome/browser/prerender/prerender_resource_throttle.cc
@@ -26,6 +26,14 @@ static const char kFollowOnlyWhenPrerenderShown[] =
"follow-only-when-prerender-shown";
PrerenderContents* g_prerender_contents_for_testing;
+
+// Returns true if the response has a "no-store" cache control header.
+bool IsNoStoreResponse(net::URLRequest* request) {
pasko 2016/09/02 16:34:48 would it be possible to pass the argument by const
droger 2016/09/05 12:38:47 Done.
+ const net::HttpResponseInfo& response_info = request->response_info();
+ return response_info.headers.get() &&
+ response_info.headers->HasHeaderValue("cache-control", "no-store");
+}
+
} // namespace
void PrerenderResourceThrottle::OverridePrerenderContentsForTesting(
@@ -60,12 +68,11 @@ void PrerenderResourceThrottle::WillRedirectRequest(
request_->GetResponseHeaderByName(kFollowOnlyWhenPrerenderShown, &header);
content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
+ content::BrowserThread::UI, FROM_HERE,
base::Bind(&PrerenderResourceThrottle::WillRedirectRequestOnUI,
AsWeakPtr(), header, info->GetResourceType(), info->IsAsync(),
- info->GetChildID(), info->GetRenderFrameID(),
- redirect_info.new_url));
+ IsNoStoreResponse(request_), info->GetChildID(),
+ info->GetRenderFrameID(), redirect_info.new_url));
}
void PrerenderResourceThrottle::WillProcessResponse(bool* defer) {
@@ -74,18 +81,12 @@ void PrerenderResourceThrottle::WillProcessResponse(bool* defer) {
if (!info)
return;
- bool is_no_store = false;
- const net::HttpResponseInfo& response_info = request_->response_info();
- if (response_info.headers.get()) {
- is_no_store =
- response_info.headers->HasHeaderValue("cache-control", "no-store");
- }
-
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&PrerenderResourceThrottle::WillProcessResponseOnUI,
content::IsResourceTypeFrame(info->GetResourceType()),
- is_no_store, info->GetChildID(), info->GetRenderFrameID()));
+ IsNoStoreResponse(request_), request_->url_chain().size() - 1,
pasko 2016/09/02 16:34:48 Even though size of the chain is unlikely to be ze
droger 2016/09/05 12:38:47 Done.
+ info->GetChildID(), info->GetRenderFrameID()));
}
const char* PrerenderResourceThrottle::GetNameForLogging() const {
@@ -144,6 +145,7 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
const std::string& follow_only_when_prerender_shown_header,
ResourceType resource_type,
bool async,
+ bool is_no_store,
int render_process_id,
int render_frame_id,
const GURL& new_url) {
@@ -151,6 +153,10 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
PrerenderContents* prerender_contents =
PrerenderContentsFromRenderFrame(render_process_id, render_frame_id);
if (prerender_contents) {
+ prerender_contents->prerender_manager()->RecordResourcePrefetch(
+ prerender_contents->origin(),
+ content::IsResourceTypeFrame(resource_type), true /*is_redirect*/,
pasko 2016/09/02 16:34:48 most code I see surrounds the parameter name with
droger 2016/09/05 12:38:47 Done.
+ is_no_store);
// Abort any prerenders with requests which redirect to invalid schemes.
if (!PrerenderManager::DoesURLHaveValidScheme(new_url)) {
prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME);
@@ -183,6 +189,7 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
// static
void PrerenderResourceThrottle::WillProcessResponseOnUI(bool is_main_resource,
bool is_no_store,
+ size_t redirect_count,
int render_process_id,
int render_frame_id) {
PrerenderContents* prerender_contents =
@@ -194,7 +201,10 @@ void PrerenderResourceThrottle::WillProcessResponseOnUI(bool is_main_resource,
return;
prerender_contents->prerender_manager()->RecordResourcePrefetch(
- prerender_contents->origin(), is_main_resource, is_no_store);
+ prerender_contents->origin(), is_main_resource, false /*is_redirect*/,
+ is_no_store);
+ prerender_contents->prerender_manager()->RecordPrefetchRedirectCount(
+ prerender_contents->origin(), is_main_resource, redirect_count);
}
// static

Powered by Google App Engine
This is Rietveld 408576698