Index: chrome/browser/sessions/session_restore_android.cc |
diff --git a/chrome/browser/sessions/session_restore_android.cc b/chrome/browser/sessions/session_restore_android.cc |
index e283e88b70f6ec0fa3ef89b0057350d039fe2ec3..e2f257382607496586bd126fef5b21a72f79107a 100644 |
--- a/chrome/browser/sessions/session_restore_android.cc |
+++ b/chrome/browser/sessions/session_restore_android.cc |
@@ -6,14 +6,36 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/sessions/session_types.h" |
-#include "webkit/glue/window_open_disposition.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_finder.h" |
+#include "chrome/browser/ui/android/tab_model/tab_model.h" |
+#include "chrome/browser/ui/android/tab_model/tab_model_list.h" |
+#include "content/public/browser/navigation_controller.h" |
+#include "content/public/browser/web_contents.h" |
+#include "ipc/ipc_message.h" |
// static |
+// The android implementation does not do anything "foreign session" specific. |
+// We use it to restore tabs from "recently closed" too. |
void SessionRestore::RestoreForeignSessionTab( |
- content::WebContents* source_web_contents, |
+ content::WebContents* web_contents, |
const SessionTab& session_tab, |
WindowOpenDisposition disposition) { |
- NOTIMPLEMENTED() << "TODO(yfriedman, dtrainor): Upstream this."; |
+ DCHECK(session_tab.navigations.size() > 0); |
+ content::BrowserContext* context = web_contents->GetBrowserContext(); |
+ Profile* profile = Profile::FromBrowserContext(context); |
+ TabModel* tab_model = TabModelList::GetTabModelWithProfile(profile); |
+ DCHECK(tab_model); |
+ std::vector<content::NavigationEntry*> entries; |
+ TabNavigation::CreateNavigationEntriesFromTabNavigations( |
+ profile, session_tab.navigations, &entries); |
+ content::WebContents* new_web_contents = content::WebContents::Create( |
+ context, NULL, MSG_ROUTING_NONE, 0, 0); |
+ int selected_index = session_tab.normalized_navigation_index(); |
+ new_web_contents->GetController().Restore(selected_index, |
+ true, /* from_last_session */ |
+ &entries); |
+ tab_model->CreateTab(new_web_contents); |
} |
// static |