| 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;
|
| }
|
|
|