1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/browser_tab_restore_service_delegate.h"
6
7#include "chrome/browser/ui/browser.h"
8#include "chrome/browser/ui/browser_commands.h"
9#include "chrome/browser/ui/browser_finder.h"
10#include "chrome/browser/ui/browser_tabrestore.h"
11#include "chrome/browser/ui/browser_window.h"
12#include "chrome/browser/ui/tabs/tab_strip_model.h"
13#include "content/public/browser/navigation_controller.h"
14
15using content::NavigationController;
16using content::SessionStorageNamespace;
17using content::WebContents;
18
19void BrowserTabRestoreServiceDelegate::ShowBrowserWindow() {
20  browser_->window()->Show();
21}
22
23const SessionID& BrowserTabRestoreServiceDelegate::GetSessionID() const {
24  return browser_->session_id();
25}
26
27int BrowserTabRestoreServiceDelegate::GetTabCount() const {
28  return browser_->tab_strip_model()->count();
29}
30
31int BrowserTabRestoreServiceDelegate::GetSelectedIndex() const {
32  return browser_->tab_strip_model()->active_index();
33}
34
35std::string BrowserTabRestoreServiceDelegate::GetAppName() const {
36  return browser_->app_name();
37}
38
39WebContents* BrowserTabRestoreServiceDelegate::GetWebContentsAt(
40    int index) const {
41  return browser_->tab_strip_model()->GetWebContentsAt(index);
42}
43
44WebContents* BrowserTabRestoreServiceDelegate::GetActiveWebContents() const {
45  return browser_->tab_strip_model()->GetActiveWebContents();
46}
47
48bool BrowserTabRestoreServiceDelegate::IsTabPinned(int index) const {
49  return browser_->tab_strip_model()->IsTabPinned(index);
50}
51
52WebContents* BrowserTabRestoreServiceDelegate::AddRestoredTab(
53      const std::vector<sessions::SerializedNavigationEntry>& navigations,
54      int tab_index,
55      int selected_navigation,
56      const std::string& extension_app_id,
57      bool select,
58      bool pin,
59      bool from_last_session,
60      SessionStorageNamespace* storage_namespace,
61      const std::string& user_agent_override) {
62  return chrome::AddRestoredTab(browser_, navigations, tab_index,
63                                selected_navigation, extension_app_id, select,
64                                pin, from_last_session, storage_namespace,
65                                user_agent_override);
66}
67
68WebContents* BrowserTabRestoreServiceDelegate::ReplaceRestoredTab(
69      const std::vector<sessions::SerializedNavigationEntry>& navigations,
70      int selected_navigation,
71      bool from_last_session,
72      const std::string& extension_app_id,
73      SessionStorageNamespace* session_storage_namespace,
74      const std::string& user_agent_override) {
75  return chrome::ReplaceRestoredTab(browser_, navigations, selected_navigation,
76                             from_last_session, extension_app_id,
77                             session_storage_namespace, user_agent_override);
78}
79
80void BrowserTabRestoreServiceDelegate::CloseTab() {
81  chrome::CloseTab(browser_);
82}
83
84// Implementations of TabRestoreServiceDelegate static methods
85
86// static
87TabRestoreServiceDelegate* TabRestoreServiceDelegate::Create(
88    Profile* profile,
89    chrome::HostDesktopType host_desktop_type,
90    const std::string& app_name) {
91  Browser* browser;
92  if (app_name.empty()) {
93    browser = new Browser(Browser::CreateParams(profile, host_desktop_type));
94  } else {
95    // Only trusted app popup windows should ever be restored.
96    browser = new Browser(
97        Browser::CreateParams::CreateForApp(
98            app_name, true /* trusted_source */, gfx::Rect(), profile,
99            host_desktop_type));
100  }
101  if (browser)
102    return browser->tab_restore_service_delegate();
103  else
104    return NULL;
105}
106
107// static
108TabRestoreServiceDelegate*
109    TabRestoreServiceDelegate::FindDelegateForWebContents(
110        const WebContents* contents) {
111  Browser* browser = chrome::FindBrowserWithWebContents(contents);
112  return browser ? browser->tab_restore_service_delegate() : NULL;
113}
114
115// static
116TabRestoreServiceDelegate* TabRestoreServiceDelegate::FindDelegateWithID(
117    SessionID::id_type desired_id,
118    chrome::HostDesktopType host_desktop_type) {
119  Browser* browser = chrome::FindBrowserWithID(desired_id);
120  return (browser && browser->host_desktop_type() == host_desktop_type) ?
121             browser->tab_restore_service_delegate() : NULL;
122}
123