Index: chrome/browser/prerender/prerender_manager.cc |
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
index deba1a9e095e3d9b3c9de9abacad01f91baeeae4..90696676ba35cce70acfa6deef708a0f73e7d4bd 100644 |
--- a/chrome/browser/prerender/prerender_manager.cc |
+++ b/chrome/browser/prerender/prerender_manager.cc |
@@ -494,7 +494,8 @@ bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, |
RecordEvent(prerender_data->contents(), |
PRERENDER_EVENT_SWAPIN_ISSUING_MERGE); |
prerender_data->set_pending_swap(new PendingSwap( |
- this, web_contents, prerender_data, url)); |
+ this, web_contents, prerender_data, url, |
+ params->should_replace_current_entry)); |
prerender_data->pending_swap()->BeginSwap(); |
// Although this returns false, creating a PendingSwap registers with |
// PrerenderTracker to throttle MAIN_FRAME navigations while the swap is |
@@ -503,8 +504,9 @@ bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, |
} |
// No need to merge; swap synchronously. |
- WebContents* new_web_contents = SwapInternal(url, web_contents, |
- prerender_data); |
+ WebContents* new_web_contents = SwapInternal( |
+ url, web_contents, prerender_data, |
+ params->should_replace_current_entry); |
if (!new_web_contents) |
return false; |
@@ -516,7 +518,8 @@ bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, |
WebContents* PrerenderManager::SwapInternal( |
const GURL& url, |
WebContents* web_contents, |
- PrerenderData* prerender_data) { |
+ PrerenderData* prerender_data, |
+ bool should_replace_current_entry) { |
DCHECK(CalledOnValidThread()); |
DCHECK(!IsWebContentsPrerendering(web_contents, NULL)); |
@@ -648,7 +651,8 @@ WebContents* PrerenderManager::SwapInternal( |
// Merge the browsing history. |
new_web_contents->GetController().CopyStateFromAndPrune( |
- &old_web_contents->GetController()); |
+ &old_web_contents->GetController(), |
+ should_replace_current_entry); |
CoreTabHelper::FromWebContents(old_web_contents)->delegate()-> |
SwapTabContents(old_web_contents, new_web_contents); |
prerender_contents->CommitHistory(new_web_contents); |
@@ -1158,12 +1162,14 @@ PrerenderManager::PendingSwap::PendingSwap( |
PrerenderManager* manager, |
content::WebContents* target_contents, |
PrerenderData* prerender_data, |
- const GURL& url) |
+ const GURL& url, |
+ bool should_replace_current_entry) |
: content::WebContentsObserver(target_contents), |
manager_(manager), |
target_contents_(target_contents), |
prerender_data_(prerender_data), |
url_(url), |
+ should_replace_current_entry_(should_replace_current_entry), |
start_time_(base::TimeTicks::Now()), |
swap_successful_(false), |
weak_factory_(this) { |
@@ -1300,7 +1306,8 @@ void PrerenderManager::PendingSwap::OnMergeCompleted( |
// TODO(davidben): See about deleting PrerenderData asynchronously so this |
// behavior is more reasonable. |
WebContents* new_web_contents = |
- manager_->SwapInternal(GURL(url_), target_contents_, prerender_data_); |
+ manager_->SwapInternal(GURL(url_), target_contents_, prerender_data_, |
+ should_replace_current_entry_); |
if (!new_web_contents) { |
RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPIN_FAILED); |
prerender_data_->ClearPendingSwap(); |