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

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

Issue 2302433002: [NoStatePrefetch] Track redirects in UMA (Closed)
Patch Set: Rebase 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
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..200e2865557792db5a3c5c694c05a6bfac76474b 100644
--- a/chrome/browser/prerender/prerender_resource_throttle.cc
+++ b/chrome/browser/prerender/prerender_resource_throttle.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/prerender/prerender_resource_throttle.h"
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/prerender/prerender_final_status.h"
#include "chrome/browser/prerender/prerender_manager.h"
@@ -26,6 +28,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(const net::URLRequest& request) {
+ 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 +70,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 +83,16 @@ 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");
- }
+ DCHECK_GT(request_->url_chain().size(), 0u);
+ int redirect_count =
+ base::saturated_cast<int>(request_->url_chain().size()) - 1;
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_), redirect_count,
+ info->GetChildID(), info->GetRenderFrameID()));
}
const char* PrerenderResourceThrottle::GetNameForLogging() const {
@@ -144,6 +151,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 +159,10 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
PrerenderContents* prerender_contents =
PrerenderContentsFromRenderFrame(render_process_id, render_frame_id);
if (prerender_contents) {
+ prerender_contents->prerender_manager()->RecordPrefetchResponseReceived(
+ prerender_contents->origin(),
+ content::IsResourceTypeFrame(resource_type), true /* is_redirect */,
+ 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 +195,7 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
// static
void PrerenderResourceThrottle::WillProcessResponseOnUI(bool is_main_resource,
bool is_no_store,
+ int redirect_count,
int render_process_id,
int render_frame_id) {
PrerenderContents* prerender_contents =
@@ -193,8 +206,11 @@ void PrerenderResourceThrottle::WillProcessResponseOnUI(bool is_main_resource,
if (prerender_contents->prerender_mode() != PREFETCH_ONLY)
return;
- prerender_contents->prerender_manager()->RecordResourcePrefetch(
- prerender_contents->origin(), is_main_resource, is_no_store);
+ prerender_contents->prerender_manager()->RecordPrefetchResponseReceived(
+ 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
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698