Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(839)

Side by Side Diff: components/sessions/core/tab_restore_service.h

Issue 2200993004: Make TabRestoreService::Entry noncopyable and fix up surrounding code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tab-test-cleanup
Patch Set: Add back NOTREACHED() and a return for gcc Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(); 55 Entry();
56 explicit Entry(Type type); 56 virtual ~Entry() = 0;
57 virtual ~Entry(); 57 virtual Type type() const = 0;
sky 2016/08/02 23:12:30 Virtual functions shouldn't use unix_hacker_style.
Sidney San Martín 2016/08/03 14:35:32 Just to confirm, the non-unix_hacker_style would j
Sidney San Martín 2016/08/03 14:35:32 Could you fill me in on why (I'm still new on the
sky 2016/08/03 15:16:07 Expressing the type in the constructor implies the
Sidney San Martín 2016/08/03 15:50:23 OK. Can I make the member const, and the construct
58 58
59 // Unique id for this entry. The id is guaranteed to be unique for a 59 // Unique id for this entry. The id is guaranteed to be unique for a
60 // session. 60 // session.
61 SessionID::id_type id; 61 SessionID::id_type id;
62 62
63 // The type of the entry.
64 Type type;
65
66 // The time when the window or tab was closed. 63 // The time when the window or tab was closed.
67 base::Time timestamp; 64 base::Time timestamp;
68 65
69 // Is this entry from the last session? This is set to true for entries that 66 // 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 67 // were closed during the last session, and false for entries that were
71 // closed during this session. 68 // closed during this session.
72 bool from_last_session; 69 bool from_last_session{false};
sky 2016/08/02 23:12:30 Why the {} for many of these? = works just fine.
Sidney San Martín 2016/08/03 14:35:32 I do uniform initialization because it doesn't all
sky 2016/08/03 15:16:07 "Use C++11 "uniform init" syntax ("{}" without '='
Sidney San Martín 2016/08/04 04:24:57 Done. I misread the mailing list thread — I though
70
71 private:
72 DISALLOW_COPY_AND_ASSIGN(Entry);
73 }; 73 };
74 74
75 // Represents a previously open tab. 75 // Represents a previously open tab.
76 struct SESSIONS_EXPORT Tab : public Entry { 76 struct SESSIONS_EXPORT Tab : public Entry {
77 Tab(); 77 Tab();
78 Tab(const Tab& tab);
79 ~Tab() override; 78 ~Tab() override;
80 79 Type type() const override;
81 Tab& operator=(const Tab& tab);
82
83 bool has_browser() const { return browser_id > 0; }
84 80
85 // The navigations. 81 // The navigations.
86 std::vector<SerializedNavigationEntry> navigations; 82 std::vector<SerializedNavigationEntry> navigations;
87 83
88 // Index of the selected navigation in navigations. 84 // Index of the selected navigation in navigations.
89 int current_navigation_index; 85 size_t current_navigation_index{-1};
sky 2016/08/02 23:12:30 Please keep these as ints, I don't want to have to
Sidney San Martín 2016/08/03 14:35:32 Done. For future reference, what issues come up ar
sky 2016/08/03 15:16:07 My concern is around overflow and special casing -
Sidney San Martín 2016/08/04 04:24:57 Done.
90 86
91 // The ID of the browser to which this tab belonged, so it can be restored 87 // 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. 88 // there. May be 0 (an invalid SessionID) when restoring an entire session.
93 SessionID::id_type browser_id; 89 SessionID::id_type browser_id{0};
94 90
95 // Index within the tab strip. May be -1 for an unknown index. 91 // Index within the tab strip. May be -1 for an unknown index.
96 int tabstrip_index; 92 size_t tabstrip_index{-1};
97 93
98 // True if the tab was pinned. 94 // True if the tab was pinned.
99 bool pinned; 95 bool pinned{false};
100 96
101 // If non-empty gives the id of the extension for the tab. 97 // If non-empty gives the id of the extension for the tab.
102 std::string extension_app_id; 98 std::string extension_app_id;
103 99
104 // The associated client data. 100 // The associated client data.
105 std::unique_ptr<PlatformSpecificTabData> platform_data; 101 std::unique_ptr<const PlatformSpecificTabData> platform_data;
106 102
107 // The user agent override used for the tab's navigations (if applicable). 103 // The user agent override used for the tab's navigations (if applicable).
108 std::string user_agent_override; 104 std::string user_agent_override;
109 }; 105 };
110 106
111 // Represents a previously open window. 107 // Represents a previously open window.
112 struct SESSIONS_EXPORT Window : public Entry { 108 struct SESSIONS_EXPORT Window : public Entry {
113 Window(); 109 Window();
114 ~Window() override; 110 ~Window() override;
111 Type type() const override;
115 112
116 // The tabs that comprised the window, in order. 113 // The tabs that comprised the window, in order.
117 std::vector<Tab> tabs; 114 std::vector<std::unique_ptr<Tab>> tabs;
118 115
119 // Index of the selected tab. 116 // Index of the selected tab.
120 int selected_tab_index; 117 size_t selected_tab_index{-1};
121 118
122 // If an application window, the name of the app. 119 // If an application window, the name of the app.
123 std::string app_name; 120 std::string app_name;
124 }; 121 };
125 122
126 typedef std::list<Entry*> Entries; 123 typedef std::list<std::unique_ptr<Entry>> Entries;
127 124
128 ~TabRestoreService() override; 125 ~TabRestoreService() override;
129 126
130 // Adds/removes an observer. TabRestoreService does not take ownership of 127 // Adds/removes an observer. TabRestoreService does not take ownership of
131 // the observer. 128 // the observer.
132 virtual void AddObserver(TabRestoreServiceObserver* observer) = 0; 129 virtual void AddObserver(TabRestoreServiceObserver* observer) = 0;
133 virtual void RemoveObserver(TabRestoreServiceObserver* observer) = 0; 130 virtual void RemoveObserver(TabRestoreServiceObserver* observer) = 0;
134 131
135 // Creates a Tab to represent |live_tab| and notifies observers the list of 132 // Creates a Tab to represent |live_tab| and notifies observers the list of
136 // entries has changed. 133 // entries has changed.
137 virtual void CreateHistoricalTab(LiveTab* live_tab, int index) = 0; 134 virtual void CreateHistoricalTab(LiveTab* live_tab, size_t index) = 0;
138 135
139 // TODO(blundell): Rename and fix comment. 136 // TODO(blundell): Rename and fix comment.
140 // Invoked when a browser is closing. If |context| is a tabbed browser with 137 // Invoked when a browser is closing. If |context| is a tabbed browser with
141 // at least one tab, a Window is created, added to entries and observers are 138 // at least one tab, a Window is created, added to entries and observers are
142 // notified. 139 // notified.
143 virtual void BrowserClosing(LiveTabContext* context) = 0; 140 virtual void BrowserClosing(LiveTabContext* context) = 0;
144 141
145 // TODO(blundell): Rename and fix comment. 142 // TODO(blundell): Rename and fix comment.
146 // Invoked when the browser is done closing. 143 // Invoked when the browser is done closing.
147 virtual void BrowserClosed(LiveTabContext* context) = 0; 144 virtual void BrowserClosed(LiveTabContext* context) = 0;
148 145
149 // Removes all entries from the list and notifies observers the list 146 // Removes all entries from the list and notifies observers the list
150 // of tabs has changed. 147 // of tabs has changed.
151 virtual void ClearEntries() = 0; 148 virtual void ClearEntries() = 0;
152 149
153 // Returns the entries, ordered with most recently closed entries at the 150 // Returns the entries, ordered with most recently closed entries at the
154 // front. 151 // front.
155 virtual const Entries& entries() const = 0; 152 virtual const Entries& entries() const = 0;
156 153
157 // Restores the most recently closed entry. Does nothing if there are no 154 // 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 155 // 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). 156 // added to |context|. Returns the LiveTab instances of the restored tab(s).
160 virtual std::vector<LiveTab*> RestoreMostRecentEntry( 157 virtual std::vector<LiveTab*> RestoreMostRecentEntry(
161 LiveTabContext* context) = 0; 158 LiveTabContext* context) = 0;
162 159
163 // Removes the Tab with id |id| from the list and returns it; ownership is 160 // Removes the Tab with id |id| from the list and returns it.
164 // passed to the caller. 161 virtual std::unique_ptr<Tab> RemoveTabEntryById(SessionID::id_type id) = 0;
165 virtual Tab* RemoveTabEntryById(SessionID::id_type id) = 0;
166 162
167 // Restores an entry by id. If there is no entry with an id matching |id|, 163 // 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 164 // this does nothing. If |context| is NULL, this creates a new window for the
169 // entry. |disposition| is respected, but the attributes (tabstrip index, 165 // entry. |disposition| is respected, but the attributes (tabstrip index,
170 // browser window) of the tab when it was closed will be respected if 166 // browser window) of the tab when it was closed will be respected if
171 // disposition is UNKNOWN. Returns the LiveTab instances of the restored 167 // disposition is UNKNOWN. Returns the LiveTab instances of the restored
172 // tab(s). 168 // tab(s).
173 virtual std::vector<LiveTab*> RestoreEntryById( 169 virtual std::vector<LiveTab*> RestoreEntryById(
174 LiveTabContext* context, 170 LiveTabContext* context,
175 SessionID::id_type id, 171 SessionID::id_type id,
176 WindowOpenDisposition disposition) = 0; 172 WindowOpenDisposition disposition) = 0;
177 173
178 // Loads the tabs and previous session. This does nothing if the tabs 174 // Loads the tabs and previous session. This does nothing if the tabs
179 // from the previous session have already been loaded. 175 // from the previous session have already been loaded.
180 virtual void LoadTabsFromLastSession() = 0; 176 virtual void LoadTabsFromLastSession() = 0;
181 177
182 // Returns true if the tab entries have been loaded. 178 // Returns true if the tab entries have been loaded.
183 virtual bool IsLoaded() const = 0; 179 virtual bool IsLoaded() const = 0;
184 180
185 // Deletes the last session. 181 // Deletes the last session.
186 virtual void DeleteLastSession() = 0; 182 virtual void DeleteLastSession() = 0;
187 }; 183 };
188 184
189 // A class that is used to associate platform-specific data with 185 // A class that is used to associate platform-specific data with
190 // TabRestoreService::Tab. See LiveTab::GetPlatformSpecificTabData(). 186 // 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 { 187 class SESSIONS_EXPORT PlatformSpecificTabData {
194 public: 188 public:
195 virtual ~PlatformSpecificTabData(); 189 virtual ~PlatformSpecificTabData();
196
197 private:
198 friend TabRestoreService::Tab;
199
200 virtual std::unique_ptr<PlatformSpecificTabData> Clone() = 0;
201 }; 190 };
202 191
203 } // namespace sessions 192 } // namespace sessions
204 193
205 #endif // COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_ 194 #endif // COMPONENTS_SESSIONS_CORE_TAB_RESTORE_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698