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

Side by Side Diff: chrome/browser/prerender/prerender_manager.cc

Issue 6915019: Changes to not use the prerendered contents when window.opener needs to be set. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Addressing Sreeram's comments. Created 9 years, 7 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) 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698