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