Index: chrome/browser/ui/browser_tabrestore.cc |
=================================================================== |
--- chrome/browser/ui/browser_tabrestore.cc (revision 0) |
+++ chrome/browser/ui/browser_tabrestore.cc (revision 0) |
@@ -0,0 +1,117 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/browser_tabrestore.h" |
+ |
+#include "chrome/browser/extensions/extension_tab_helper.h" |
+#include "chrome/browser/sessions/session_service.h" |
+#include "chrome/browser/sessions/session_service_factory.h" |
+#include "chrome/browser/tab_contents/tab_util.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_tabstrip.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "content/public/browser/navigation_controller.h" |
+#include "content/public/browser/navigation_entry.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/browser/web_contents_view.h" |
+#include "ipc/ipc_message.h" |
+ |
+using content::WebContents; |
+using content::NavigationController; |
+using content::NavigationEntry; |
+ |
+namespace chrome { |
+ |
+int GetIndexForInsertionDuringRestore(Browser* browser, int relative_index) { |
+ return (browser->tab_strip_model()->insertion_policy() == |
+ TabStripModel::INSERT_AFTER) ? browser->tab_count() : relative_index; |
+} |
+ |
+content::WebContents* AddRestoredTab( |
+ Browser* browser, |
+ const std::vector<TabNavigation>& navigations, |
+ int tab_index, |
+ int selected_navigation, |
+ const std::string& extension_app_id, |
+ bool select, |
+ bool pin, |
+ bool from_last_session, |
+ content::SessionStorageNamespace* storage_namespace) { |
+ GURL restore_url = navigations.at(selected_navigation).virtual_url(); |
+ TabContents* tab_contents = chrome::TabContentsFactory( |
+ browser->profile(), |
+ tab_util::GetSiteInstanceForNewTab(browser->profile(), restore_url), |
+ MSG_ROUTING_NONE, |
+ chrome::GetActiveWebContents(browser), |
+ storage_namespace); |
+ WebContents* new_tab = tab_contents->web_contents(); |
+ tab_contents->extension_tab_helper()->SetExtensionAppById(extension_app_id); |
+ std::vector<NavigationEntry*> entries; |
+ TabNavigation::CreateNavigationEntriesFromTabNavigations( |
+ browser->profile(), navigations, &entries); |
+ new_tab->GetController().Restore( |
+ selected_navigation, from_last_session, &entries); |
+ DCHECK_EQ(0u, entries.size()); |
+ |
+ int add_types = select ? TabStripModel::ADD_ACTIVE : |
+ TabStripModel::ADD_NONE; |
+ if (pin) { |
+ int first_mini_tab_idx = |
+ browser->tab_strip_model()->IndexOfFirstNonMiniTab(); |
+ tab_index = std::min(tab_index, first_mini_tab_idx); |
+ add_types |= TabStripModel::ADD_PINNED; |
+ } |
+ browser->tab_strip_model()->InsertTabContentsAt(tab_index, tab_contents, |
+ add_types); |
+ if (select) { |
+ browser->window()->Activate(); |
+ } else { |
+ // We set the size of the view here, before WebKit does its initial |
+ // layout. If we don't, the initial layout of background tabs will be |
+ // performed with a view width of 0, which may cause script outputs and |
+ // anchor link location calculations to be incorrect even after a new |
+ // layout with proper view dimensions. TabStripModel::AddTabContents() |
+ // contains similar logic. |
+ new_tab->GetView()->SizeContents( |
+ browser->window()->GetRestoredBounds().size()); |
+ new_tab->WasHidden(); |
+ } |
+ SessionService* session_service = |
+ SessionServiceFactory::GetForProfileIfExisting(browser->profile()); |
+ if (session_service) |
+ session_service->TabRestored(tab_contents, pin); |
+ return new_tab; |
+} |
+ |
+void ReplaceRestoredTab( |
+ Browser* browser, |
+ const std::vector<TabNavigation>& navigations, |
+ int selected_navigation, |
+ bool from_last_session, |
+ const std::string& extension_app_id, |
+ content::SessionStorageNamespace* session_storage_namespace) { |
+ GURL restore_url = navigations.at(selected_navigation).virtual_url(); |
+ TabContents* tab_contents = chrome::TabContentsFactory( |
+ browser->profile(), |
+ tab_util::GetSiteInstanceForNewTab(browser->profile(), restore_url), |
+ MSG_ROUTING_NONE, |
+ GetActiveWebContents(browser), |
+ session_storage_namespace); |
+ tab_contents->extension_tab_helper()->SetExtensionAppById(extension_app_id); |
+ WebContents* replacement = tab_contents->web_contents(); |
+ std::vector<NavigationEntry*> entries; |
+ TabNavigation::CreateNavigationEntriesFromTabNavigations( |
+ browser->profile(), navigations, &entries); |
+ replacement->GetController().Restore( |
+ selected_navigation, from_last_session, &entries); |
+ DCHECK_EQ(0u, entries.size()); |
+ |
+ browser->tab_strip_model()->ReplaceNavigationControllerAt( |
+ browser->active_index(), |
+ tab_contents); |
+} |
+ |
+} // namespace chrome |
Property changes on: chrome\browser\ui\browser_tabrestore.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |