OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ | 5 #ifndef COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ |
6 #define COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ | 6 #define COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 virtual base::Time TimeNow() = 0; | 45 virtual base::Time TimeNow() = 0; |
46 }; | 46 }; |
47 | 47 |
48 // The type of entry. | 48 // The type of entry. |
49 enum Type { | 49 enum Type { |
50 TAB, | 50 TAB, |
51 WINDOW | 51 WINDOW |
52 }; | 52 }; |
53 | 53 |
54 struct SESSIONS_EXPORT Entry { | 54 struct SESSIONS_EXPORT Entry { |
55 Entry(); | |
56 explicit Entry(Type type); | |
57 virtual ~Entry(); | 55 virtual ~Entry(); |
58 | 56 |
59 // Unique id for this entry. The id is guaranteed to be unique for a | 57 // Unique id for this entry. The id is guaranteed to be unique for a |
60 // session. | 58 // session. |
61 SessionID::id_type id; | 59 SessionID::id_type id; |
62 | 60 |
63 // The type of the entry. | 61 // The type of the entry. |
64 Type type; | 62 const Type type; |
65 | 63 |
66 // The time when the window or tab was closed. | 64 // The time when the window or tab was closed. |
67 base::Time timestamp; | 65 base::Time timestamp; |
68 | 66 |
69 // Is this entry from the last session? This is set to true for entries that | 67 // Is this entry from the last session? This is set to true for entries that |
70 // were closed during the last session, and false for entries that were | 68 // were closed during the last session, and false for entries that were |
71 // closed during this session. | 69 // closed during this session. |
72 bool from_last_session; | 70 bool from_last_session = false; |
| 71 |
| 72 protected: |
| 73 explicit Entry(Type type); |
| 74 |
| 75 private: |
| 76 DISALLOW_COPY_AND_ASSIGN(Entry); |
73 }; | 77 }; |
74 | 78 |
75 // Represents a previously open tab. | 79 // Represents a previously open tab. |
76 struct SESSIONS_EXPORT Tab : public Entry { | 80 struct SESSIONS_EXPORT Tab : public Entry { |
77 Tab(); | 81 Tab(); |
78 Tab(const Tab& tab); | |
79 ~Tab() override; | 82 ~Tab() override; |
80 | 83 |
81 Tab& operator=(const Tab& tab); | |
82 | |
83 bool has_browser() const { return browser_id > 0; } | |
84 | |
85 // The navigations. | 84 // The navigations. |
86 std::vector<SerializedNavigationEntry> navigations; | 85 std::vector<SerializedNavigationEntry> navigations; |
87 | 86 |
88 // Index of the selected navigation in navigations. | 87 // Index of the selected navigation in navigations. |
89 int current_navigation_index; | 88 int current_navigation_index = -1; |
90 | 89 |
91 // The ID of the browser to which this tab belonged, so it can be restored | 90 // The ID of the browser to which this tab belonged, so it can be restored |
92 // there. May be 0 (an invalid SessionID) when restoring an entire session. | 91 // there. May be 0 (an invalid SessionID) when restoring an entire session. |
93 SessionID::id_type browser_id; | 92 SessionID::id_type browser_id = 0; |
94 | 93 |
95 // Index within the tab strip. May be -1 for an unknown index. | 94 // Index within the tab strip. May be -1 for an unknown index. |
96 int tabstrip_index; | 95 int tabstrip_index = -1; |
97 | 96 |
98 // True if the tab was pinned. | 97 // True if the tab was pinned. |
99 bool pinned; | 98 bool pinned = false; |
100 | 99 |
101 // If non-empty gives the id of the extension for the tab. | 100 // If non-empty gives the id of the extension for the tab. |
102 std::string extension_app_id; | 101 std::string extension_app_id; |
103 | 102 |
104 // The associated client data. | 103 // The associated client data. |
105 std::unique_ptr<PlatformSpecificTabData> platform_data; | 104 std::unique_ptr<PlatformSpecificTabData> platform_data; |
106 | 105 |
107 // The user agent override used for the tab's navigations (if applicable). | 106 // The user agent override used for the tab's navigations (if applicable). |
108 std::string user_agent_override; | 107 std::string user_agent_override; |
109 }; | 108 }; |
110 | 109 |
111 // Represents a previously open window. | 110 // Represents a previously open window. |
112 struct SESSIONS_EXPORT Window : public Entry { | 111 struct SESSIONS_EXPORT Window : public Entry { |
113 Window(); | 112 Window(); |
114 ~Window() override; | 113 ~Window() override; |
115 | 114 |
116 // The tabs that comprised the window, in order. | 115 // The tabs that comprised the window, in order. |
117 std::vector<Tab> tabs; | 116 std::vector<std::unique_ptr<Tab>> tabs; |
118 | 117 |
119 // Index of the selected tab. | 118 // Index of the selected tab. |
120 int selected_tab_index; | 119 int selected_tab_index = -1; |
121 | 120 |
122 // If an application window, the name of the app. | 121 // If an application window, the name of the app. |
123 std::string app_name; | 122 std::string app_name; |
124 }; | 123 }; |
125 | 124 |
126 typedef std::list<Entry*> Entries; | 125 typedef std::list<std::unique_ptr<Entry>> Entries; |
127 | 126 |
128 ~TabRestoreService() override; | 127 ~TabRestoreService() override; |
129 | 128 |
130 // Adds/removes an observer. TabRestoreService does not take ownership of | 129 // Adds/removes an observer. TabRestoreService does not take ownership of |
131 // the observer. | 130 // the observer. |
132 virtual void AddObserver(TabRestoreServiceObserver* observer) = 0; | 131 virtual void AddObserver(TabRestoreServiceObserver* observer) = 0; |
133 virtual void RemoveObserver(TabRestoreServiceObserver* observer) = 0; | 132 virtual void RemoveObserver(TabRestoreServiceObserver* observer) = 0; |
134 | 133 |
135 // Creates a Tab to represent |live_tab| and notifies observers the list of | 134 // Creates a Tab to represent |live_tab| and notifies observers the list of |
136 // entries has changed. | 135 // entries has changed. |
(...skipping 16 matching lines...) Expand all Loading... |
153 // Returns the entries, ordered with most recently closed entries at the | 152 // Returns the entries, ordered with most recently closed entries at the |
154 // front. | 153 // front. |
155 virtual const Entries& entries() const = 0; | 154 virtual const Entries& entries() const = 0; |
156 | 155 |
157 // Restores the most recently closed entry. Does nothing if there are no | 156 // Restores the most recently closed entry. Does nothing if there are no |
158 // entries to restore. If the most recently restored entry is a tab, it is | 157 // entries to restore. If the most recently restored entry is a tab, it is |
159 // added to |context|. Returns the LiveTab instances of the restored tab(s). | 158 // added to |context|. Returns the LiveTab instances of the restored tab(s). |
160 virtual std::vector<LiveTab*> RestoreMostRecentEntry( | 159 virtual std::vector<LiveTab*> RestoreMostRecentEntry( |
161 LiveTabContext* context) = 0; | 160 LiveTabContext* context) = 0; |
162 | 161 |
163 // Removes the Tab with id |id| from the list and returns it; ownership is | 162 // Removes the Tab with id |id| from the list and returns it. |
164 // passed to the caller. | 163 virtual std::unique_ptr<Tab> RemoveTabEntryById(SessionID::id_type id) = 0; |
165 virtual Tab* RemoveTabEntryById(SessionID::id_type id) = 0; | |
166 | 164 |
167 // Restores an entry by id. If there is no entry with an id matching |id|, | 165 // Restores an entry by id. If there is no entry with an id matching |id|, |
168 // this does nothing. If |context| is NULL, this creates a new window for the | 166 // this does nothing. If |context| is NULL, this creates a new window for the |
169 // entry. |disposition| is respected, but the attributes (tabstrip index, | 167 // entry. |disposition| is respected, but the attributes (tabstrip index, |
170 // browser window) of the tab when it was closed will be respected if | 168 // browser window) of the tab when it was closed will be respected if |
171 // disposition is UNKNOWN. Returns the LiveTab instances of the restored | 169 // disposition is UNKNOWN. Returns the LiveTab instances of the restored |
172 // tab(s). | 170 // tab(s). |
173 virtual std::vector<LiveTab*> RestoreEntryById( | 171 virtual std::vector<LiveTab*> RestoreEntryById( |
174 LiveTabContext* context, | 172 LiveTabContext* context, |
175 SessionID::id_type id, | 173 SessionID::id_type id, |
176 WindowOpenDisposition disposition) = 0; | 174 WindowOpenDisposition disposition) = 0; |
177 | 175 |
178 // Loads the tabs and previous session. This does nothing if the tabs | 176 // Loads the tabs and previous session. This does nothing if the tabs |
179 // from the previous session have already been loaded. | 177 // from the previous session have already been loaded. |
180 virtual void LoadTabsFromLastSession() = 0; | 178 virtual void LoadTabsFromLastSession() = 0; |
181 | 179 |
182 // Returns true if the tab entries have been loaded. | 180 // Returns true if the tab entries have been loaded. |
183 virtual bool IsLoaded() const = 0; | 181 virtual bool IsLoaded() const = 0; |
184 | 182 |
185 // Deletes the last session. | 183 // Deletes the last session. |
186 virtual void DeleteLastSession() = 0; | 184 virtual void DeleteLastSession() = 0; |
187 }; | 185 }; |
188 | 186 |
189 // A class that is used to associate platform-specific data with | 187 // A class that is used to associate platform-specific data with |
190 // TabRestoreService::Tab. See LiveTab::GetPlatformSpecificTabData(). | 188 // TabRestoreService::Tab. See LiveTab::GetPlatformSpecificTabData(). |
191 // Subclasses of this class must be copyable by implementing the Clone() method | |
192 // for usage by the Tab struct, which is itself copyable and assignable. | |
193 class SESSIONS_EXPORT PlatformSpecificTabData { | 189 class SESSIONS_EXPORT PlatformSpecificTabData { |
194 public: | 190 public: |
195 virtual ~PlatformSpecificTabData(); | 191 virtual ~PlatformSpecificTabData(); |
196 | |
197 private: | |
198 friend TabRestoreService::Tab; | |
199 | |
200 virtual std::unique_ptr<PlatformSpecificTabData> Clone() = 0; | |
201 }; | 192 }; |
202 | 193 |
203 } // namespace sessions | 194 } // namespace sessions |
204 | 195 |
205 #endif // COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ | 196 #endif // COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ |
OLD | NEW |