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#ifndef CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_DELEGATE_H_
6#define CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_DELEGATE_H_
7
8#include <string>
9#include <vector>
10
11#include "chrome/browser/profiles/profile.h"
12#include "chrome/browser/sessions/session_id.h"
13#include "chrome/browser/ui/host_desktop.h"
14
15class Profile;
16
17namespace content {
18class NavigationController;
19class SessionStorageNamespace;
20class WebContents;
21}
22
23namespace sessions {
24class SerializedNavigationEntry;
25}
26
27// Objects implement this interface to provide necessary functionality for
28// TabRestoreService to operate. These methods are mostly copies of existing
29// Browser methods.
30class TabRestoreServiceDelegate {
31 public:
32  // see BrowserWindow::Show()
33  virtual void ShowBrowserWindow() = 0;
34
35  // see Browser::session_id()
36  virtual const SessionID& GetSessionID() const = 0;
37
38  // see Browser::tab_count()
39  virtual int GetTabCount() const = 0;
40
41  // see Browser::active_index()
42  virtual int GetSelectedIndex() const = 0;
43
44  // see Browser::app_name()
45  virtual std::string GetAppName() const = 0;
46
47  // see Browser methods with the same names
48  virtual content::WebContents* GetWebContentsAt(int index) const = 0;
49  virtual content::WebContents* GetActiveWebContents() const = 0;
50  virtual bool IsTabPinned(int index) const = 0;
51  virtual content::WebContents* AddRestoredTab(
52      const std::vector<sessions::SerializedNavigationEntry>& navigations,
53      int tab_index,
54      int selected_navigation,
55      const std::string& extension_app_id,
56      bool select,
57      bool pin,
58      bool from_last_session,
59      content::SessionStorageNamespace* storage_namespace,
60      const std::string& user_agent_override) = 0;
61  virtual content::WebContents* ReplaceRestoredTab(
62      const std::vector<sessions::SerializedNavigationEntry>& navigations,
63      int selected_navigation,
64      bool from_last_session,
65      const std::string& extension_app_id,
66      content::SessionStorageNamespace* session_storage_namespace,
67      const std::string& user_agent_override) = 0;
68  virtual void CloseTab() = 0;
69
70  // see Browser::Create
71  static TabRestoreServiceDelegate* Create(
72      Profile* profile,
73      chrome::HostDesktopType host_desktop_type,
74      const std::string& app_name);
75
76  // see browser::FindBrowserForWebContents
77  static TabRestoreServiceDelegate* FindDelegateForWebContents(
78      const content::WebContents* contents);
79
80  // see chrome::FindBrowserWithID
81  // Returns the TabRestoreServiceDelegate of the Browser with |desired_id| if
82  // such a Browser exists and is on the desktop defined by |host_desktop_type|.
83  static TabRestoreServiceDelegate* FindDelegateWithID(
84      SessionID::id_type desired_id,
85      chrome::HostDesktopType host_desktop_type);
86
87 protected:
88  virtual ~TabRestoreServiceDelegate() {}
89};
90
91#endif  // CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_DELEGATE_H_
92