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

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

Issue 10933065: Separate same domain and cross domain <link rel=...> prerenders for reporting. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: ... upload correct diff Created 8 years, 2 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_manager.cc
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index fb24531d9df91aafc14c1437451296e2230f587b..832839ff88954adbc7bb9c006fd270b929ddbe5a 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -227,24 +227,9 @@ PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
return NULL;
#else
DCHECK(!size.IsEmpty());
- if (PrerenderData* parent_prerender_data =
- FindPrerenderDataForChildAndRoute(process_id, route_id)) {
- // Instead of prerendering from inside of a running prerender, we will defer
- // this request until its launcher is made visible.
- if (PrerenderContents* contents = parent_prerender_data->contents_) {
- pending_prerender_list_.push_back(
- linked_ptr<PrerenderData>(new PrerenderData(this)));
- PrerenderHandle* prerender_handle =
- new PrerenderHandle(pending_prerender_list_.back().get());
- contents->AddPendingPrerender(
- prerender_handle->weak_ptr_factory_.GetWeakPtr(),
- ORIGIN_LINK_REL_PRERENDER, url, referrer, size);
- return prerender_handle;
- }
- }
-
- // Unit tests pass in a process_id == -1.
+ bool is_same_domain = false;
SessionStorageNamespace* session_storage_namespace = NULL;
+ // Unit tests pass in a process_id == -1.
if (process_id != -1) {
RenderViewHost* source_render_view_host =
RenderViewHost::FromID(process_id, route_id);
@@ -254,13 +239,33 @@ PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
WebContents::FromRenderViewHost(source_render_view_host);
if (!source_web_contents)
return NULL;
+ is_same_domain = (source_web_contents->GetURL().host() == url.host());
dominich 2012/10/08 17:03:04 does this return true if you have https://google.c
// TODO(ajwong): This does not correctly handle storage for isolated apps.
session_storage_namespace =
source_web_contents->GetController()
.GetDefaultSessionStorageNamespace();
}
- return AddPrerender(ORIGIN_LINK_REL_PRERENDER,
+ if (PrerenderData* parent_prerender_data =
+ FindPrerenderDataForChildAndRoute(process_id, route_id)) {
+ // Instead of prerendering from inside of a running prerender, we will defer
+ // this request until its launcher is made visible.
+ if (PrerenderContents* contents = parent_prerender_data->contents_) {
+ pending_prerender_list_.push_back(
+ linked_ptr<PrerenderData>(new PrerenderData(this)));
+ PrerenderHandle* prerender_handle =
+ new PrerenderHandle(pending_prerender_list_.back().get());
+ contents->AddPendingPrerender(
+ prerender_handle->weak_ptr_factory_.GetWeakPtr(),
+ is_same_domain ? ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN
+ : ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
+ url, referrer, size);
+ return prerender_handle;
+ }
+ }
+
+ return AddPrerender(is_same_domain ? ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN
+ : ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
process_id, url, referrer, size,
session_storage_namespace);
#endif
@@ -520,7 +525,7 @@ void PrerenderManager::RecordPerceivedPageLoadTime(
return;
if (!prerender_manager->IsEnabled())
return;
- Origin prerender_origin = ORIGIN_NONE;
+ const Origin* prerender_origin = NULL;
bool was_prerender =
prerender_manager->IsWebContentsPrerendered(web_contents,
&prerender_origin);
@@ -528,15 +533,15 @@ void PrerenderManager::RecordPerceivedPageLoadTime(
prerender_manager->WouldWebContentsBePrerendered(web_contents);
if (prerender_manager->IsWebContentsPrerendering(web_contents)) {
prerender_manager->histograms_->RecordPageLoadTimeNotSwappedIn(
- prerender_origin, perceived_page_load_time, url);
+ was_prerender ? *prerender_origin : ORIGIN_NONE,
+ perceived_page_load_time, url);
} else {
prerender_manager->histograms_->RecordPerceivedPageLoadTime(
- prerender_origin, perceived_page_load_time, was_prerender,
- was_complete_prerender, url);
- if (was_prerender) {
- prerender_manager->histograms_->RecordPercentLoadDoneAtSwapin(
- prerender_origin, fraction_plt_elapsed_at_swap_in);
- }
+ was_prerender ? *prerender_origin : ORIGIN_NONE,
+ perceived_page_load_time, was_prerender, was_complete_prerender, url);
+ prerender_manager->histograms_->RecordPercentLoadDoneAtSwapin(
+ was_prerender ? *prerender_origin : ORIGIN_NONE,
+ fraction_plt_elapsed_at_swap_in);
if (prerender_manager->local_predictor_.get()) {
prerender_manager->local_predictor_->
OnPLTEventForURL(url, perceived_page_load_time);
@@ -547,9 +552,10 @@ void PrerenderManager::RecordPerceivedPageLoadTime(
void PrerenderManager::RecordFractionPixelsFinalAtSwapin(
content::WebContents* web_contents,
double fraction) {
- Origin origin = ORIGIN_NONE;
+ const Origin* origin = NULL;
IsWebContentsPrerendered(web_contents, &origin);
- histograms_->RecordFractionPixelsFinalAtSwapin(origin, fraction);
+ histograms_->RecordFractionPixelsFinalAtSwapin(
+ origin ? *origin : ORIGIN_NONE, fraction);
}
void PrerenderManager::set_enabled(bool enabled) {
@@ -691,17 +697,17 @@ void PrerenderManager::MarkWebContentsAsNotPrerendered(
bool PrerenderManager::IsWebContentsPrerendered(
content::WebContents* web_contents,
- Origin* origin) const {
+ const Origin** origin) const {
DCHECK(CalledOnValidThread());
base::hash_map<content::WebContents*, PrerenderedWebContentsData>::
const_iterator it = prerendered_web_contents_data_.find(web_contents);
if (it == prerendered_web_contents_data_.end()) {
if (origin)
- *origin = ORIGIN_NONE;
+ *origin = NULL;
dominich 2012/10/08 17:03:04 this could be ORIGIN_MAX. Or a new ORIGIN_INVALID
return false;
}
if (origin)
- *origin = it->second.origin;
+ *origin = &it->second.origin;
dominich 2012/10/08 17:03:04 this could lead to lifetime issues depending on wh
return true;
}
@@ -957,7 +963,8 @@ PrerenderHandle* PrerenderManager::AddPrerender(
if (!IsEnabled())
return NULL;
- if (origin == ORIGIN_LINK_REL_PRERENDER &&
+ if ((origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN ||
+ origin == ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN) &&
IsGoogleSearchResultURL(referrer.url)) {
origin = ORIGIN_GWS_PRERENDER;
}

Powered by Google App Engine
This is Rietveld 408576698