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/logging.h" | 9 #include "base/logging.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 } | 405 } |
406 // Entry not found. | 406 // Entry not found. |
407 return NULL; | 407 return NULL; |
408 } | 408 } |
409 | 409 |
410 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) { | 410 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) { |
411 return GetEntryButNotSpecifiedTC(url, NULL); | 411 return GetEntryButNotSpecifiedTC(url, NULL); |
412 } | 412 } |
413 | 413 |
414 bool PrerenderManager::MaybeUsePreloadedPageOld(TabContents* tab_contents, | 414 bool PrerenderManager::MaybeUsePreloadedPageOld(TabContents* tab_contents, |
415 const GURL& url) { | 415 const GURL& url, |
| 416 bool has_opener_set) { |
416 DCHECK(CalledOnValidThread()); | 417 DCHECK(CalledOnValidThread()); |
417 scoped_ptr<PrerenderContents> prerender_contents(GetEntry(url)); | 418 scoped_ptr<PrerenderContents> prerender_contents(GetEntry(url)); |
418 if (prerender_contents.get() == NULL) | 419 if (prerender_contents.get() == NULL) |
419 return false; | 420 return false; |
420 | 421 |
| 422 // Do not use the prerendered version if the opener window.property was |
| 423 // supposed to be set. |
| 424 if (has_opener_set) { |
| 425 prerender_contents.release()->Destroy(FINAL_STATUS_WINDOW_OPENER); |
| 426 return false; |
| 427 } |
| 428 |
421 // If we are just in the control group (which can be detected by noticing | 429 // If we are just in the control group (which can be detected by noticing |
422 // that prerendering hasn't even started yet), record that |tab_contents| now | 430 // that prerendering hasn't even started yet), record that |tab_contents| now |
423 // would be showing a prerendered contents, but otherwise, don't do anything. | 431 // would be showing a prerendered contents, but otherwise, don't do anything. |
424 if (!prerender_contents->prerendering_has_started()) { | 432 if (!prerender_contents->prerendering_has_started()) { |
425 MarkTabContentsAsWouldBePrerendered(tab_contents); | 433 MarkTabContentsAsWouldBePrerendered(tab_contents); |
426 return false; | 434 return false; |
427 } | 435 } |
428 | 436 |
429 if (!prerender_contents->load_start_time().is_null()) | 437 if (!prerender_contents->load_start_time().is_null()) |
430 RecordTimeUntilUsed(GetCurrentTimeTicks() - | 438 RecordTimeUntilUsed(GetCurrentTimeTicks() - |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 urls); | 498 urls); |
491 } | 499 } |
492 | 500 |
493 if (prerender_contents->has_stopped_loading()) | 501 if (prerender_contents->has_stopped_loading()) |
494 render_view_host_delegate->DidStopLoading(); | 502 render_view_host_delegate->DidStopLoading(); |
495 | 503 |
496 return true; | 504 return true; |
497 } | 505 } |
498 | 506 |
499 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tab_contents, | 507 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tab_contents, |
500 const GURL& url) { | 508 const GURL& url, |
| 509 bool has_opener_set) { |
501 if (!PrerenderContents::UseTabContents()) { | 510 if (!PrerenderContents::UseTabContents()) { |
502 VLOG(1) << "Checking for prerender with LEGACY code"; | 511 VLOG(1) << "Checking for prerender with LEGACY code"; |
503 return PrerenderManager::MaybeUsePreloadedPageOld(tab_contents, url); | 512 return PrerenderManager::MaybeUsePreloadedPageOld(tab_contents, url, |
| 513 has_opener_set); |
504 } | 514 } |
505 VLOG(1) << "Checking for prerender with NEW code"; | 515 VLOG(1) << "Checking for prerender with NEW code"; |
506 DCHECK(CalledOnValidThread()); | 516 DCHECK(CalledOnValidThread()); |
507 scoped_ptr<PrerenderContents> prerender_contents( | 517 scoped_ptr<PrerenderContents> prerender_contents( |
508 GetEntryButNotSpecifiedTC(url, tab_contents)); | 518 GetEntryButNotSpecifiedTC(url, tab_contents)); |
509 if (prerender_contents.get() == NULL) | 519 if (prerender_contents.get() == NULL) |
510 return false; | 520 return false; |
511 | 521 |
| 522 // Do not use the prerendered version if the opener window.property was |
| 523 // supposed to be set. |
| 524 if (has_opener_set) { |
| 525 prerender_contents.release()->Destroy(FINAL_STATUS_WINDOW_OPENER); |
| 526 return false; |
| 527 } |
| 528 |
512 // If we are just in the control group (which can be detected by noticing | 529 // If we are just in the control group (which can be detected by noticing |
513 // that prerendering hasn't even started yet), record that |tab_contents| now | 530 // that prerendering hasn't even started yet), record that |tab_contents| now |
514 // would be showing a prerendered contents, but otherwise, don't do anything. | 531 // would be showing a prerendered contents, but otherwise, don't do anything. |
515 if (!prerender_contents->prerendering_has_started()) { | 532 if (!prerender_contents->prerendering_has_started()) { |
516 MarkTabContentsAsWouldBePrerendered(tab_contents); | 533 MarkTabContentsAsWouldBePrerendered(tab_contents); |
517 return false; | 534 return false; |
518 } | 535 } |
519 | 536 |
520 if (!prerender_contents->load_start_time().is_null()) | 537 if (!prerender_contents->load_start_time().is_null()) |
521 RecordTimeUntilUsed(GetCurrentTimeTicks() - | 538 RecordTimeUntilUsed(GetCurrentTimeTicks() - |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 return prerendered_tab_contents_set_.count(tab_contents) > 0; | 916 return prerendered_tab_contents_set_.count(tab_contents) > 0; |
900 } | 917 } |
901 | 918 |
902 bool PrerenderManager::WouldTabContentsBePrerendered( | 919 bool PrerenderManager::WouldTabContentsBePrerendered( |
903 TabContents* tab_contents) const { | 920 TabContents* tab_contents) const { |
904 DCHECK(CalledOnValidThread()); | 921 DCHECK(CalledOnValidThread()); |
905 return would_be_prerendered_tab_contents_set_.count(tab_contents) > 0; | 922 return would_be_prerendered_tab_contents_set_.count(tab_contents) > 0; |
906 } | 923 } |
907 | 924 |
908 } // namespace prerender | 925 } // namespace prerender |
OLD | NEW |