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

Side by Side 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: rebase... 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 int route_id, 225 int route_id,
226 const GURL& url, 226 const GURL& url,
227 const content::Referrer& referrer, 227 const content::Referrer& referrer,
228 const gfx::Size& size) { 228 const gfx::Size& size) {
229 #if defined(OS_ANDROID) 229 #if defined(OS_ANDROID)
230 // TODO(jcivelli): http://crbug.com/113322 We should have an option to disable 230 // TODO(jcivelli): http://crbug.com/113322 We should have an option to disable
231 // link-prerender and enable omnibox-prerender only. 231 // link-prerender and enable omnibox-prerender only.
232 return NULL; 232 return NULL;
233 #else 233 #else
234 DCHECK(!size.IsEmpty()); 234 DCHECK(!size.IsEmpty());
235 if (PrerenderData* parent_prerender_data = 235 bool is_same_domain = false;
236 FindPrerenderDataForChildAndRoute(process_id, route_id)) { 236 SessionStorageNamespace* session_storage_namespace = NULL;
237 // Instead of prerendering from inside of a running prerender, we will defer
238 // this request until its launcher is made visible.
239 if (PrerenderContents* contents = parent_prerender_data->contents_) {
240 pending_prerender_list_.push_back(
241 linked_ptr<PrerenderData>(new PrerenderData(this)));
242 PrerenderHandle* prerender_handle =
243 new PrerenderHandle(pending_prerender_list_.back().get());
244 contents->AddPendingPrerender(
245 prerender_handle->weak_ptr_factory_.GetWeakPtr(),
246 ORIGIN_LINK_REL_PRERENDER, url, referrer, size);
247 return prerender_handle;
248 }
249 }
250
251 // Unit tests pass in a process_id == -1. 237 // Unit tests pass in a process_id == -1.
252 SessionStorageNamespace* session_storage_namespace = NULL;
253 if (process_id != -1) { 238 if (process_id != -1) {
254 RenderViewHost* source_render_view_host = 239 RenderViewHost* source_render_view_host =
255 RenderViewHost::FromID(process_id, route_id); 240 RenderViewHost::FromID(process_id, route_id);
256 if (!source_render_view_host) 241 if (!source_render_view_host)
257 return NULL; 242 return NULL;
258 WebContents* source_web_contents = 243 WebContents* source_web_contents =
259 WebContents::FromRenderViewHost(source_render_view_host); 244 WebContents::FromRenderViewHost(source_render_view_host);
260 if (!source_web_contents) 245 if (!source_web_contents)
261 return NULL; 246 return NULL;
247 is_same_domain = (source_web_contents->GetURL().host() == url.host());
262 // TODO(ajwong): This does not correctly handle storage for isolated apps. 248 // TODO(ajwong): This does not correctly handle storage for isolated apps.
263 session_storage_namespace = 249 session_storage_namespace =
264 source_web_contents->GetController() 250 source_web_contents->GetController()
265 .GetDefaultSessionStorageNamespace(); 251 .GetDefaultSessionStorageNamespace();
266 } 252 }
267 253
268 return AddPrerender(ORIGIN_LINK_REL_PRERENDER, 254 if (PrerenderData* parent_prerender_data =
255 FindPrerenderDataForChildAndRoute(process_id, route_id)) {
256 // Instead of prerendering from inside of a running prerender, we will defer
257 // this request until its launcher is made visible.
258 if (PrerenderContents* contents = parent_prerender_data->contents_) {
259 pending_prerender_list_.push_back(
260 linked_ptr<PrerenderData>(new PrerenderData(this)));
261 PrerenderHandle* prerender_handle =
262 new PrerenderHandle(pending_prerender_list_.back().get());
263 contents->AddPendingPrerender(
264 prerender_handle->weak_ptr_factory_.GetWeakPtr(),
265 is_same_domain ? ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN
266 : ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
267 url, referrer, size);
268 return prerender_handle;
269 }
270 }
271
272 return AddPrerender(is_same_domain ? ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN
273 : ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN,
mmenke 2012/10/17 15:12:16 rather than duplicating this logic, suggest replac
gavinp 2012/10/17 20:57:49 Done.
269 process_id, url, referrer, size, 274 process_id, url, referrer, size,
270 session_storage_namespace); 275 session_storage_namespace);
271 #endif 276 #endif
272 } 277 }
273 278
274 PrerenderHandle* PrerenderManager::AddPrerenderFromOmnibox( 279 PrerenderHandle* PrerenderManager::AddPrerenderFromOmnibox(
275 const GURL& url, 280 const GURL& url,
276 SessionStorageNamespace* session_storage_namespace, 281 SessionStorageNamespace* session_storage_namespace,
277 const gfx::Size& size) { 282 const gfx::Size& size) {
278 if (!IsOmniboxEnabled(profile_)) 283 if (!IsOmniboxEnabled(profile_))
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 int process_id, 985 int process_id,
981 const GURL& url_arg, 986 const GURL& url_arg,
982 const content::Referrer& referrer, 987 const content::Referrer& referrer,
983 const gfx::Size& size, 988 const gfx::Size& size,
984 SessionStorageNamespace* session_storage_namespace) { 989 SessionStorageNamespace* session_storage_namespace) {
985 DCHECK(CalledOnValidThread()); 990 DCHECK(CalledOnValidThread());
986 991
987 if (!IsEnabled()) 992 if (!IsEnabled())
988 return NULL; 993 return NULL;
989 994
990 if (origin == ORIGIN_LINK_REL_PRERENDER && 995 if ((origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN ||
996 origin == ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN) &&
mmenke 2012/10/17 15:12:16 Random comment: Wonder if we even need an origin
991 IsGoogleSearchResultURL(referrer.url)) { 997 IsGoogleSearchResultURL(referrer.url)) {
992 origin = ORIGIN_GWS_PRERENDER; 998 origin = ORIGIN_GWS_PRERENDER;
993 } 999 }
994 1000
995 DeleteOldEntries(); 1001 DeleteOldEntries();
996 DeletePendingDeleteEntries(); 1002 DeletePendingDeleteEntries();
997 1003
998 GURL url = url_arg; 1004 GURL url = url_arg;
999 GURL alias_url; 1005 GURL alias_url;
1000 uint8 experiment = GetQueryStringBasedExperiment(url_arg); 1006 uint8 experiment = GetQueryStringBasedExperiment(url_arg);
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
1363 if (!render_process_host || !render_process_host->GetBrowserContext()) 1369 if (!render_process_host || !render_process_host->GetBrowserContext())
1364 return NULL; 1370 return NULL;
1365 Profile* profile = Profile::FromBrowserContext( 1371 Profile* profile = Profile::FromBrowserContext(
1366 render_process_host->GetBrowserContext()); 1372 render_process_host->GetBrowserContext());
1367 if (!profile) 1373 if (!profile)
1368 return NULL; 1374 return NULL;
1369 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1375 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1370 } 1376 }
1371 1377
1372 } // namespace prerender 1378 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698