Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3263)

Unified Diff: chrome/browser/sessions/tab_restore_service_helper.cc

Issue 21022018: Sessions API - previously Session Restore API. Supports restoring currently open foreign windows an… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added assert true to test Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sessions/tab_restore_service_helper.cc
diff --git a/chrome/browser/sessions/tab_restore_service_helper.cc b/chrome/browser/sessions/tab_restore_service_helper.cc
index 7e1ca3a6ad952dc6b80138a22c18bb00ad3f2303..02293aed8ac79f9b57f73932e547f686bcb4bd36 100644
--- a/chrome/browser/sessions/tab_restore_service_helper.cc
+++ b/chrome/browser/sessions/tab_restore_service_helper.cc
@@ -170,13 +170,14 @@ const TabRestoreService::Entries& TabRestoreServiceHelper::entries() const {
return entries_;
}
-void TabRestoreServiceHelper::RestoreMostRecentEntry(
+content::WebContents* TabRestoreServiceHelper::RestoreMostRecentEntry(
TabRestoreServiceDelegate* delegate,
chrome::HostDesktopType host_desktop_type) {
if (entries_.empty())
- return;
+ return NULL;
- RestoreEntryById(delegate, entries_.front()->id, host_desktop_type, UNKNOWN);
+ return RestoreEntryById(delegate, entries_.front()->id, host_desktop_type,
+ UNKNOWN);
}
TabRestoreService::Tab* TabRestoreServiceHelper::RemoveTabEntryById(
@@ -194,7 +195,7 @@ TabRestoreService::Tab* TabRestoreServiceHelper::RemoveTabEntryById(
return tab;
}
-void TabRestoreServiceHelper::RestoreEntryById(
+content::WebContents* TabRestoreServiceHelper::RestoreEntryById(
TabRestoreServiceDelegate* delegate,
SessionID::id_type id,
chrome::HostDesktopType host_desktop_type,
@@ -202,7 +203,7 @@ void TabRestoreServiceHelper::RestoreEntryById(
Entries::iterator entry_iterator = GetEntryIteratorById(id);
if (entry_iterator == entries_.end())
// Don't hoark here, we allow an invalid id.
- return;
+ return NULL;
if (observer_)
observer_->OnRestoreEntryById(id, entry_iterator);
@@ -221,9 +222,11 @@ void TabRestoreServiceHelper::RestoreEntryById(
// |delegate| will be NULL in cases where one isn't already available (eg,
// when invoked on Mac OS X with no windows open). In this case, create a
// new browser into which we restore the tabs.
+ WebContents* web_contents = NULL;
if (entry->type == TabRestoreService::TAB) {
Tab* tab = static_cast<Tab*>(entry);
- delegate = RestoreTab(*tab, delegate, host_desktop_type, disposition);
+ delegate = RestoreTab(*tab, delegate, host_desktop_type, disposition,
+ &web_contents);
delegate->ShowBrowserWindow();
} else if (entry->type == TabRestoreService::WINDOW) {
TabRestoreServiceDelegate* current_delegate = delegate;
@@ -250,6 +253,8 @@ void TabRestoreServiceHelper::RestoreEntryById(
if (restored_tab) {
restored_tab->GetController().LoadIfNecessary();
RecordAppLaunch(profile_, tab);
+ // Return the last successfully restored tab for window entries.
+ web_contents = restored_tab;
}
}
// All the window's tabs had the same former browser_id.
@@ -264,7 +269,8 @@ void TabRestoreServiceHelper::RestoreEntryById(
tab_i != window->tabs.end(); ++tab_i) {
const Tab& tab = *tab_i;
if (tab.id == id) {
- delegate = RestoreTab(tab, delegate, host_desktop_type, disposition);
+ delegate = RestoreTab(tab, delegate, host_desktop_type, disposition,
+ &web_contents);
window->tabs.erase(tab_i);
// If restoring the tab leaves the window with nothing else, delete it
// as well.
@@ -302,6 +308,10 @@ void TabRestoreServiceHelper::RestoreEntryById(
restoring_ = false;
NotifyTabsChanged();
+ // Returns the WebContents of the restored tab if entry is a Tab. In the case
+ // of restoring type Window, returns the WebContents of the last successfully
+ // restored tab in the window.
+ return web_contents;
}
void TabRestoreServiceHelper::NotifyTabsChanged() {
@@ -437,14 +447,17 @@ TabRestoreServiceDelegate* TabRestoreServiceHelper::RestoreTab(
const Tab& tab,
TabRestoreServiceDelegate* delegate,
chrome::HostDesktopType host_desktop_type,
- WindowOpenDisposition disposition) {
+ WindowOpenDisposition disposition,
+ WebContents** contents) {
+ WebContents* web_contents;
if (disposition == CURRENT_TAB && delegate) {
- delegate->ReplaceRestoredTab(tab.navigations,
- tab.current_navigation_index,
- tab.from_last_session,
- tab.extension_app_id,
- tab.session_storage_namespace.get(),
- tab.user_agent_override);
+ web_contents = delegate->ReplaceRestoredTab(
+ tab.navigations,
+ tab.current_navigation_index,
+ tab.from_last_session,
+ tab.extension_app_id,
+ tab.session_storage_namespace.get(),
+ tab.user_agent_override);
} else {
// We only respsect the tab's original browser if there's no disposition.
if (disposition == UNKNOWN && tab.has_browser()) {
@@ -473,19 +486,21 @@ TabRestoreServiceDelegate* TabRestoreServiceHelper::RestoreTab(
tab_index = delegate->GetTabCount();
}
- WebContents* web_contents =
- delegate->AddRestoredTab(tab.navigations,
- tab_index,
- tab.current_navigation_index,
- tab.extension_app_id,
- disposition != NEW_BACKGROUND_TAB,
- tab.pinned,
- tab.from_last_session,
- tab.session_storage_namespace.get(),
- tab.user_agent_override);
+ web_contents = delegate->AddRestoredTab(tab.navigations,
+ tab_index,
+ tab.current_navigation_index,
+ tab.extension_app_id,
+ disposition != NEW_BACKGROUND_TAB,
+ tab.pinned,
+ tab.from_last_session,
+ tab.session_storage_namespace.get(),
+ tab.user_agent_override);
web_contents->GetController().LoadIfNecessary();
}
RecordAppLaunch(profile_, tab);
+ if (contents)
+ *contents = web_contents;
+
return delegate;
}

Powered by Google App Engine
This is Rietveld 408576698