| Index: chrome/browser/prerender/prerender_manager.cc
|
| diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
|
| index d98a175f99057315f711de6eb49c483cc5481b7c..a0cb533c78189c822f9e647f2d16eca5d48fc221 100644
|
| --- a/chrome/browser/prerender/prerender_manager.cc
|
| +++ b/chrome/browser/prerender/prerender_manager.cc
|
| @@ -58,6 +58,7 @@
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/session_storage_namespace.h"
|
| +#include "content/public/browser/site_instance.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_contents_delegate.h"
|
| #include "content/public/browser/web_contents_view.h"
|
| @@ -128,7 +129,8 @@ bool NeedMatchCompleteDummyForFinalStatus(FinalStatus final_status) {
|
| final_status != FINAL_STATUS_DEVTOOLS_ATTACHED &&
|
| final_status != FINAL_STATUS_CROSS_SITE_NAVIGATION_PENDING &&
|
| final_status != FINAL_STATUS_PAGE_BEING_CAPTURED &&
|
| - final_status != FINAL_STATUS_NAVIGATION_UNCOMMITTED;
|
| + final_status != FINAL_STATUS_NAVIGATION_UNCOMMITTED &&
|
| + final_status != FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE;
|
| }
|
|
|
| void CheckIfCookiesExistForDomainResultOnUIThread(
|
| @@ -529,6 +531,16 @@ WebContents* PrerenderManager::SwapInternal(
|
| }
|
| }
|
|
|
| + // Do not swap if the target WebContents is not the only WebContents in its
|
| + // current BrowsingInstance.
|
| + if (web_contents->GetSiteInstance()->GetRelatedActiveContentsCount() != 1u) {
|
| + DCHECK_GT(
|
| + web_contents->GetSiteInstance()->GetRelatedActiveContentsCount(), 1u);
|
| + prerender_data->contents()->Destroy(
|
| + FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE);
|
| + return NULL;
|
| + }
|
| +
|
| // Do not use the prerendered version if there is an opener object.
|
| if (web_contents->HasOpener()) {
|
| prerender_data->contents()->Destroy(FINAL_STATUS_WINDOW_OPENER);
|
|
|