Index: chrome/browser/prerender/prerender_manager.cc |
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
index 5c5db3ba745a800a3930603f3dd7bd26cf6988dd..984b159c7a831a86f2b1e7eae3990e45a61b8e42 100644 |
--- a/chrome/browser/prerender/prerender_manager.cc |
+++ b/chrome/browser/prerender/prerender_manager.cc |
@@ -413,12 +413,20 @@ PrerenderContents* PrerenderManager::GetEntry(const GURL& url) { |
} |
bool PrerenderManager::MaybeUsePreloadedPageOld(TabContents* tab_contents, |
- const GURL& url) { |
+ const GURL& url, |
+ bool has_opener_set) { |
DCHECK(CalledOnValidThread()); |
scoped_ptr<PrerenderContents> prerender_contents(GetEntry(url)); |
if (prerender_contents.get() == NULL) |
return false; |
+ // Do not use the prerendered version if the opener window.property was |
+ // supposed to be set. |
+ if (has_opener_set) { |
+ prerender_contents.release()->Destroy(FINAL_STATUS_WINDOW_OPENER); |
+ return false; |
+ } |
+ |
// If we are just in the control group (which can be detected by noticing |
// that prerendering hasn't even started yet), record that |tab_contents| now |
// would be showing a prerendered contents, but otherwise, don't do anything. |
@@ -499,10 +507,12 @@ bool PrerenderManager::MaybeUsePreloadedPageOld(TabContents* tab_contents, |
} |
bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tab_contents, |
- const GURL& url) { |
+ const GURL& url, |
+ bool has_opener_set) { |
if (!PrerenderContents::UseTabContents()) { |
VLOG(1) << "Checking for prerender with LEGACY code"; |
- return PrerenderManager::MaybeUsePreloadedPageOld(tab_contents, url); |
+ return PrerenderManager::MaybeUsePreloadedPageOld(tab_contents, url, |
+ has_opener_set); |
} |
VLOG(1) << "Checking for prerender with NEW code"; |
DCHECK(CalledOnValidThread()); |
@@ -511,6 +521,13 @@ bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tab_contents, |
if (prerender_contents.get() == NULL) |
return false; |
+ // Do not use the prerendered version if the opener window.property was |
+ // supposed to be set. |
+ if (has_opener_set) { |
+ prerender_contents.release()->Destroy(FINAL_STATUS_WINDOW_OPENER); |
+ return false; |
+ } |
+ |
// If we are just in the control group (which can be detected by noticing |
// that prerendering hasn't even started yet), record that |tab_contents| now |
// would be showing a prerendered contents, but otherwise, don't do anything. |