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

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: fix pending prerenders Created 8 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_manager.cc
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index b33554a8f7dd19c5082e0f6f1284034b52ec1dc5..fed31a154a863183b310b91c6b87798c6ebd4bd0 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -222,24 +222,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(),
- 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);
@@ -249,13 +234,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());
// 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
@@ -912,7 +917,7 @@ PrerenderHandle* PrerenderManager::AddPrerender(
if (!IsEnabled())
return NULL;
- if (origin == ORIGIN_LINK_REL_PRERENDER &&
+ if (origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN &&
IsGoogleSearchResultURL(referrer.url)) {
origin = ORIGIN_GWS_PRERENDER;
}

Powered by Google App Engine
This is Rietveld 408576698