| 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 |