| Index: chrome/browser/ui/views/frame/browser_view.cc
|
| diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
|
| index b34ad484d15e25f24cb58d95dacd0e7cfa7dd0fe..56d789d2847645b33e88d5c0781d15147fabd46d 100644
|
| --- a/chrome/browser/ui/views/frame/browser_view.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_view.cc
|
| @@ -1417,29 +1417,80 @@ void BrowserView::ActiveTabChanged(TabContents* old_contents,
|
| TabContents* new_contents,
|
| int index,
|
| bool user_gesture) {
|
| - ProcessTabSelected(new_contents);
|
| -}
|
| -
|
| -void BrowserView::TabReplacedAt(TabStripModel* tab_strip_model,
|
| - TabContents* old_contents,
|
| - TabContents* new_contents,
|
| - int index) {
|
| - if (index != browser_->tab_strip_model()->active_index())
|
| - return;
|
| + DCHECK(new_contents);
|
|
|
| + // See if the Instant preview is being activated (committed).
|
| if (contents_->preview_web_contents() == new_contents->web_contents()) {
|
| if (search_view_controller_.get())
|
| search_view_controller_->WillCommitInstant();
|
| - // If 'preview' is becoming active, swap the 'active' and 'preview' and
|
| - // delete what was the active.
|
| contents_->MakePreviewContentsActiveContents();
|
| views::WebView* old_container = contents_container_;
|
| contents_container_ = preview_controller_->release_preview_container();
|
| old_container->SetWebContents(NULL);
|
| delete old_container;
|
| }
|
| - // Update the UI for the new contents.
|
| - ProcessTabSelected(new_contents);
|
| +
|
| + // If |contents_container_| already has the correct WebContents, we can save
|
| + // some work. This also prevents extra events from being reported by the
|
| + // Visibility API under Windows, as ChangeWebContents will briefly hide
|
| + // the WebContents window.
|
| + bool change_tab_contents =
|
| + contents_container_->web_contents() != new_contents->web_contents();
|
| +
|
| + // Update various elements that are interested in knowing the current
|
| + // WebContents.
|
| +
|
| + // When we toggle the NTP floating bookmarks bar and/or the info bar,
|
| + // we don't want any WebContents to be attached, so that we
|
| + // avoid an unnecessary resize and re-layout of a WebContents.
|
| + // This also applies to the |search_view_controller_| logic, as it can
|
| + // reparent the |contents_container_|.
|
| + if (change_tab_contents)
|
| + contents_container_->SetWebContents(NULL);
|
| + InfoBarTabHelper* new_infobar_tab_helper =
|
| + InfoBarTabHelper::FromWebContents(new_contents->web_contents());
|
| + // Hide infobars when showing Instant Extended suggestions.
|
| + infobar_container_->ChangeTabContents(
|
| + (chrome::search::IsInstantExtendedAPIEnabled(browser()->profile()) &&
|
| + browser()->search_model()->mode().is_search_suggestions()) ?
|
| + NULL : new_infobar_tab_helper);
|
| + if (bookmark_bar_view_.get()) {
|
| + bookmark_bar_view_->SetBookmarkBarState(
|
| + browser_->bookmark_bar_state(),
|
| + BookmarkBar::DONT_ANIMATE_STATE_CHANGE,
|
| + browser_->search_model()->mode());
|
| + }
|
| + UpdateUIForContents(new_contents);
|
| +
|
| + // |change_tab_contents| can mean same WebContents but different TabContents,
|
| + // so let SearchViewController decide how it would handle |new_contents|.
|
| + if (search_view_controller_.get())
|
| + search_view_controller_->SetTabContents(new_contents);
|
| +
|
| + // Layout for DevTools _before_ setting the main WebContents to avoid
|
| + // toggling the size of the main WebContents.
|
| + UpdateDevToolsForContents(new_contents);
|
| +
|
| + if (change_tab_contents)
|
| + contents_container_->SetWebContents(new_contents->web_contents());
|
| +
|
| + if (!browser_->tab_strip_model()->closing_all() && GetWidget()->IsActive() &&
|
| + GetWidget()->IsVisible()) {
|
| + // We only restore focus if our window is visible, to avoid invoking blur
|
| + // handlers when we are eventually shown.
|
| + new_contents->web_contents()->GetView()->RestoreFocus();
|
| + }
|
| +
|
| + // Update all the UI bits.
|
| + UpdateTitleBar();
|
| +
|
| + // Restacking needs to happen after other UI updates. This restores special
|
| + // "widget" stacking that governs the SearchViewController's NTP "content"
|
| + // area.
|
| + RestackLocationBarContainer();
|
| +
|
| + // No need to update Toolbar because it's already updated in
|
| + // browser.cc.
|
| }
|
|
|
| void BrowserView::TabStripEmpty() {
|
| @@ -2457,71 +2508,6 @@ void BrowserView::UpdateAcceleratorMetrics(
|
| #endif
|
| }
|
|
|
| -void BrowserView::ProcessTabSelected(TabContents* new_contents) {
|
| - // If |contents_container_| already has the correct WebContents, we can save
|
| - // some work. This also prevents extra events from being reported by the
|
| - // Visibility API under Windows, as ChangeWebContents will briefly hide
|
| - // the WebContents window.
|
| - DCHECK(new_contents);
|
| - bool change_tab_contents =
|
| - contents_container_->web_contents() != new_contents->web_contents();
|
| -
|
| - // Update various elements that are interested in knowing the current
|
| - // WebContents.
|
| -
|
| - // When we toggle the NTP floating bookmarks bar and/or the info bar,
|
| - // we don't want any WebContents to be attached, so that we
|
| - // avoid an unnecessary resize and re-layout of a WebContents.
|
| - // This also applies to the |search_view_controller_| logic, as it can
|
| - // reparent the |contents_container_|.
|
| - if (change_tab_contents)
|
| - contents_container_->SetWebContents(NULL);
|
| - InfoBarTabHelper* new_infobar_tab_helper =
|
| - InfoBarTabHelper::FromWebContents(new_contents->web_contents());
|
| - // Hide infobars when showing Instant Extended suggestions.
|
| - infobar_container_->ChangeTabContents(
|
| - (chrome::search::IsInstantExtendedAPIEnabled(browser()->profile()) &&
|
| - browser()->search_model()->mode().is_search_suggestions()) ?
|
| - NULL : new_infobar_tab_helper);
|
| - if (bookmark_bar_view_.get()) {
|
| - bookmark_bar_view_->SetBookmarkBarState(
|
| - browser_->bookmark_bar_state(),
|
| - BookmarkBar::DONT_ANIMATE_STATE_CHANGE,
|
| - browser_->search_model()->mode());
|
| - }
|
| - UpdateUIForContents(new_contents);
|
| -
|
| - // |change_tab_contents| can mean same WebContents but different TabContents,
|
| - // so let SearchViewController decide how it would handle |new_contents|.
|
| - if (search_view_controller_.get())
|
| - search_view_controller_->SetTabContents(new_contents);
|
| -
|
| - // Layout for DevTools _before_ setting the main WebContents to avoid
|
| - // toggling the size of the main WebContents.
|
| - UpdateDevToolsForContents(new_contents);
|
| -
|
| - if (change_tab_contents)
|
| - contents_container_->SetWebContents(new_contents->web_contents());
|
| -
|
| - if (!browser_->tab_strip_model()->closing_all() && GetWidget()->IsActive() &&
|
| - GetWidget()->IsVisible()) {
|
| - // We only restore focus if our window is visible, to avoid invoking blur
|
| - // handlers when we are eventually shown.
|
| - new_contents->web_contents()->GetView()->RestoreFocus();
|
| - }
|
| -
|
| - // Update all the UI bits.
|
| - UpdateTitleBar();
|
| -
|
| - // Restacking needs to happen after other UI updates. This restores special
|
| - // "widget" stacking that governs the SearchViewController's NTP "content"
|
| - // area.
|
| - RestackLocationBarContainer();
|
| -
|
| - // No need to update Toolbar because it's already updated in
|
| - // browser.cc.
|
| -}
|
| -
|
| gfx::Size BrowserView::GetResizeCornerSize() const {
|
| return ResizeCorner::GetSize();
|
| }
|
|
|