| Index: chrome/browser/prerender/prerender_manager.cc
|
| diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
|
| index 3a89deb86b7ca0120658b8caab145df1222c33c3..4c25663a2d0c64e82b2395198c22817e21c41a5c 100644
|
| --- a/chrome/browser/prerender/prerender_manager.cc
|
| +++ b/chrome/browser/prerender/prerender_manager.cc
|
| @@ -232,24 +232,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.
|
| + Origin origin = ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN;
|
| 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);
|
| @@ -259,14 +244,31 @@ PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
|
| WebContents::FromRenderViewHost(source_render_view_host);
|
| if (!source_web_contents)
|
| return NULL;
|
| + if (source_web_contents->GetURL().host() == url.host())
|
| + origin = ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN;
|
| // 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,
|
| - process_id, url, referrer, size,
|
| + 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,
|
| + url, referrer, size);
|
| + return prerender_handle;
|
| + }
|
| + }
|
| +
|
| + return AddPrerender(origin, process_id, url, referrer, size,
|
| session_storage_namespace);
|
| #endif
|
| }
|
| @@ -987,7 +989,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;
|
| }
|
|
|