| Index: chrome/browser/ui/browser_instant_controller.cc
|
| diff --git a/chrome/browser/ui/browser_instant_controller.cc b/chrome/browser/ui/browser_instant_controller.cc
|
| index 7abe3aa900015a2cc93088f32a243fdf112b7983..f162b41d57e339ae54f9cf09d980de9b60f4fa32 100644
|
| --- a/chrome/browser/ui/browser_instant_controller.cc
|
| +++ b/chrome/browser/ui/browser_instant_controller.cc
|
| @@ -78,6 +78,29 @@ void BrowserInstantController::RegisterUserPrefs(PrefServiceSyncable* prefs) {
|
| PrefServiceSyncable::SYNCABLE_PREF);
|
| }
|
|
|
| +bool BrowserInstantController::MaybeSwapInInstantContents(
|
| + const GURL& url,
|
| + content::WebContents* source_contents,
|
| + content::WebContents** target_contents) {
|
| + if (url != GURL(chrome::kChromeUINewTabURL))
|
| + return false;
|
| +
|
| + content::WebContents* instant_ntp = instant_.ReleaseNTPContents();
|
| + if (!instant_ntp)
|
| + return false;
|
| +
|
| + instant_ntp->GetController().PruneAllButActive();
|
| + if (source_contents) {
|
| + instant_ntp->GetController().CopyStateFromAndPrune(
|
| + &source_contents->GetController());
|
| + ReplaceWebContentsAt(
|
| + browser_->tab_strip_model()->GetIndexOfWebContents(source_contents),
|
| + instant_ntp);
|
| + }
|
| + *target_contents = instant_ntp;
|
| + return true;
|
| +}
|
| +
|
| bool BrowserInstantController::OpenInstant(WindowOpenDisposition disposition) {
|
| // Unsupported dispositions.
|
| if (disposition == NEW_BACKGROUND_TAB || disposition == NEW_WINDOW)
|
| @@ -101,15 +124,8 @@ void BrowserInstantController::CommitInstant(content::WebContents* preview,
|
| instant_.last_transition_type(), TabStripModel::ADD_ACTIVE);
|
| } else {
|
| int index = browser_->tab_strip_model()->active_index();
|
| - DCHECK_NE(TabStripModel::kNoTab, index);
|
| - content::WebContents* active_tab =
|
| - browser_->tab_strip_model()->GetWebContentsAt(index);
|
| - // TabStripModel takes ownership of |preview|.
|
| - browser_->tab_strip_model()->ReplaceWebContentsAt(index, preview);
|
| - // InstantUnloadHandler takes ownership of |active_tab|.
|
| - instant_unload_handler_.RunUnloadListenersOrDestroy(active_tab, index);
|
| -
|
| - GURL url = preview->GetURL();
|
| + ReplaceWebContentsAt(index, preview);
|
| + const GURL& url = preview->GetURL();
|
| DCHECK(browser_->profile()->GetExtensionService());
|
| if (browser_->profile()->GetExtensionService()->IsInstalledApp(url)) {
|
| AppLauncherHandler::RecordAppLaunchType(
|
| @@ -118,6 +134,18 @@ void BrowserInstantController::CommitInstant(content::WebContents* preview,
|
| }
|
| }
|
|
|
| +void BrowserInstantController::ReplaceWebContentsAt(
|
| + int index,
|
| + content::WebContents* new_contents) {
|
| + DCHECK_NE(TabStripModel::kNoTab, index);
|
| + content::WebContents* old_contents =
|
| + browser_->tab_strip_model()->GetWebContentsAt(index);
|
| + // TabStripModel takes ownership of |new_contents|.
|
| + browser_->tab_strip_model()->ReplaceWebContentsAt(index, new_contents);
|
| + // InstantUnloadHandler takes ownership of |old_contents|.
|
| + instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents, index);
|
| +}
|
| +
|
| void BrowserInstantController::SetInstantSuggestion(
|
| const InstantSuggestion& suggestion) {
|
| browser_->window()->GetLocationBar()->SetInstantSuggestion(suggestion);
|
|
|