OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
310 void PrerenderManager::Shutdown() { | 310 void PrerenderManager::Shutdown() { |
311 DoShutdown(); | 311 DoShutdown(); |
312 } | 312 } |
313 | 313 |
314 void PrerenderManager::SetPrerenderContentsFactory( | 314 void PrerenderManager::SetPrerenderContentsFactory( |
315 PrerenderContents::Factory* prerender_contents_factory) { | 315 PrerenderContents::Factory* prerender_contents_factory) { |
316 DCHECK(CalledOnValidThread()); | 316 DCHECK(CalledOnValidThread()); |
317 prerender_contents_factory_.reset(prerender_contents_factory); | 317 prerender_contents_factory_.reset(prerender_contents_factory); |
318 } | 318 } |
319 | 319 |
320 bool PrerenderManager::AddPrerenderFromLinkRelPrerender(int process_id, | 320 bool PrerenderManager::AddPrerenderFromLinkRelPrerender( |
321 int route_id, | 321 int process_id, |
322 const GURL& url, | 322 int route_id, |
323 const GURL& referrer) { | 323 const GURL& url, |
324 const content::Referrer& referrer) { | |
324 std::pair<int, int> child_route_id_pair = std::make_pair(process_id, | 325 std::pair<int, int> child_route_id_pair = std::make_pair(process_id, |
325 route_id); | 326 route_id); |
326 | 327 |
327 return AddPrerender(ORIGIN_LINK_REL_PRERENDER, child_route_id_pair, | 328 return AddPrerender(ORIGIN_LINK_REL_PRERENDER, child_route_id_pair, |
328 url, referrer, NULL); | 329 url, referrer, NULL); |
329 } | 330 } |
330 | 331 |
331 bool PrerenderManager::AddPrerenderFromOmnibox( | 332 bool PrerenderManager::AddPrerenderFromOmnibox( |
332 const GURL& url, | 333 const GURL& url, |
333 SessionStorageNamespace* session_storage_namespace) { | 334 SessionStorageNamespace* session_storage_namespace) { |
334 DCHECK(session_storage_namespace); | 335 DCHECK(session_storage_namespace); |
335 if (!IsOmniboxEnabled(profile_)) | 336 if (!IsOmniboxEnabled(profile_)) |
336 return false; | 337 return false; |
337 | 338 |
338 Origin origin = ORIGIN_MAX; | 339 Origin origin = ORIGIN_MAX; |
339 switch (GetOmniboxHeuristicToUse()) { | 340 switch (GetOmniboxHeuristicToUse()) { |
340 case OMNIBOX_HEURISTIC_EXACT: | 341 case OMNIBOX_HEURISTIC_EXACT: |
341 origin = ORIGIN_OMNIBOX_EXACT; | 342 origin = ORIGIN_OMNIBOX_EXACT; |
342 break; | 343 break; |
343 | 344 |
344 case OMNIBOX_HEURISTIC_EXACT_FULL: | 345 case OMNIBOX_HEURISTIC_EXACT_FULL: |
345 origin = ORIGIN_OMNIBOX_EXACT_FULL; | 346 origin = ORIGIN_OMNIBOX_EXACT_FULL; |
346 break; | 347 break; |
347 | 348 |
348 default: | 349 default: |
349 NOTREACHED(); | 350 NOTREACHED(); |
350 break; | 351 break; |
351 }; | 352 }; |
352 return AddPrerender(origin, std::make_pair(-1, -1), url, GURL(), | 353 return AddPrerender(origin, std::make_pair(-1, -1), url, content::Referrer(), |
353 session_storage_namespace); | 354 session_storage_namespace); |
354 } | 355 } |
355 | 356 |
356 bool PrerenderManager::AddPrerender( | 357 bool PrerenderManager::AddPrerender( |
357 Origin origin, | 358 Origin origin, |
358 const std::pair<int, int>& child_route_id_pair, | 359 const std::pair<int, int>& child_route_id_pair, |
359 const GURL& url_arg, | 360 const GURL& url_arg, |
360 const GURL& referrer, | 361 const content::Referrer& referrer, |
361 SessionStorageNamespace* session_storage_namespace) { | 362 SessionStorageNamespace* session_storage_namespace) { |
362 DCHECK(CalledOnValidThread()); | 363 DCHECK(CalledOnValidThread()); |
363 | 364 |
364 if (origin == ORIGIN_LINK_REL_PRERENDER && IsGoogleSearchResultURL(referrer)) | 365 if (origin == ORIGIN_LINK_REL_PRERENDER && |
366 IsGoogleSearchResultURL(referrer.url)) { | |
365 origin = ORIGIN_GWS_PRERENDER; | 367 origin = ORIGIN_GWS_PRERENDER; |
368 } | |
366 | 369 |
367 // If the referring page is prerendering, defer the prerender. | 370 // If the referring page is prerendering, defer the prerender. |
368 std::list<PrerenderContentsData>::iterator source_prerender = | 371 std::list<PrerenderContentsData>::iterator source_prerender = |
369 FindPrerenderContentsForChildRouteIdPair(child_route_id_pair); | 372 FindPrerenderContentsForChildRouteIdPair(child_route_id_pair); |
370 if (source_prerender != prerender_list_.end()) { | 373 if (source_prerender != prerender_list_.end()) { |
371 source_prerender->contents_->AddPendingPrerender( | 374 source_prerender->contents_->AddPendingPrerender( |
372 origin, url_arg, referrer); | 375 origin, url_arg, referrer); |
373 return true; | 376 return true; |
374 } | 377 } |
375 | 378 |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
763 } | 766 } |
764 | 767 |
765 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { | 768 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { |
766 DCHECK(CalledOnValidThread()); | 769 DCHECK(CalledOnValidThread()); |
767 base::Time now = GetCurrentTime(); | 770 base::Time now = GetCurrentTime(); |
768 return (now - start < config_.max_age); | 771 return (now - start < config_.max_age); |
769 } | 772 } |
770 | 773 |
771 PrerenderContents* PrerenderManager::CreatePrerenderContents( | 774 PrerenderContents* PrerenderManager::CreatePrerenderContents( |
772 const GURL& url, | 775 const GURL& url, |
773 const GURL& referrer, | 776 const content::Refeerrer& referrer, |
cbentzel
2011/12/05 18:03:29
BUG: Referrer
jochen (gone - plz use gerrit)
2011/12/05 20:46:35
Done.
| |
774 Origin origin, | 777 Origin origin, |
775 uint8 experiment_id) { | 778 uint8 experiment_id) { |
776 DCHECK(CalledOnValidThread()); | 779 DCHECK(CalledOnValidThread()); |
777 return prerender_contents_factory_->CreatePrerenderContents( | 780 return prerender_contents_factory_->CreatePrerenderContents( |
778 this, prerender_tracker_, profile_, url, | 781 this, prerender_tracker_, profile_, url, |
779 referrer, origin, experiment_id); | 782 referrer, origin, experiment_id); |
780 } | 783 } |
781 | 784 |
782 bool PrerenderManager::IsPendingDelete(PrerenderContents* entry) const { | 785 bool PrerenderManager::IsPendingDelete(PrerenderContents* entry) const { |
783 DCHECK(CalledOnValidThread()); | 786 DCHECK(CalledOnValidThread()); |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1142 if (!render_process_host || !render_process_host->GetBrowserContext()) | 1145 if (!render_process_host || !render_process_host->GetBrowserContext()) |
1143 return NULL; | 1146 return NULL; |
1144 Profile* profile = Profile::FromBrowserContext( | 1147 Profile* profile = Profile::FromBrowserContext( |
1145 render_process_host->GetBrowserContext()); | 1148 render_process_host->GetBrowserContext()); |
1146 if (!profile) | 1149 if (!profile) |
1147 return NULL; | 1150 return NULL; |
1148 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); | 1151 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); |
1149 } | 1152 } |
1150 | 1153 |
1151 } // namespace prerender | 1154 } // namespace prerender |
OLD | NEW |