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

Side by Side Diff: components/sync_sessions/sessions_sync_manager.h

Issue 2507543002: Revert of [Sync] Put session tracker in charge of maintaining local state. (Closed)
Patch Set: Created 4 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_ 5 #ifndef COMPONENTS_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
6 #define COMPONENTS_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_ 6 #define COMPONENTS_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <map> 10 #include <map>
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 112 }
113 113
114 FaviconCache* GetFaviconCache(); 114 FaviconCache* GetFaviconCache();
115 115
116 // Triggers garbage collection of stale sessions (as defined by 116 // Triggers garbage collection of stale sessions (as defined by
117 // |stale_session_threshold_days_|). This is called every time we see new 117 // |stale_session_threshold_days_|). This is called every time we see new
118 // sessions data downloaded (sync cycles complete). 118 // sessions data downloaded (sync cycles complete).
119 void DoGarbageCollection(); 119 void DoGarbageCollection();
120 120
121 private: 121 private:
122 // Track links between a tab id and it's sync tab node id and url. The tab 122 // Keep all the links to local tab data in one place. A tab_node_id and tab
123 // node id is not mutable, as the entity backing a tab should never change 123 // must be passed at creation. The tab_node_id is not mutable, although
124 // during runtime. The url can be updated as navigations are performed. 124 // all other fields are.
125 class TabLink { 125 class TabLink {
126 public: 126 public:
127 explicit TabLink(int tab_node_id) : tab_node_id_(tab_node_id) {} 127 TabLink(int tab_node_id, const SyncedTabDelegate* tab)
128 : tab_node_id_(tab_node_id), tab_(tab) {}
128 129
130 void set_tab(const SyncedTabDelegate* tab) { tab_ = tab; }
129 void set_url(const GURL& url) { url_ = url; } 131 void set_url(const GURL& url) { url_ = url; }
130 132
131 int tab_node_id() const { return tab_node_id_; } 133 int tab_node_id() const { return tab_node_id_; }
134 const SyncedTabDelegate* tab() const { return tab_; }
132 const GURL& url() const { return url_; } 135 const GURL& url() const { return url_; }
133 136
134 private: 137 private:
135 // The id for the sync node this tab is stored in. 138 // The id for the sync node this tab is stored in.
136 const int tab_node_id_; 139 const int tab_node_id_;
137 140
141 // The tab object itself.
142 const SyncedTabDelegate* tab_;
143
138 // The currently visible url of the tab (used for syncing favicons). 144 // The currently visible url of the tab (used for syncing favicons).
139 GURL url_; 145 GURL url_;
140 146
141 DISALLOW_COPY_AND_ASSIGN(TabLink); 147 DISALLOW_COPY_AND_ASSIGN(TabLink);
142 }; 148 };
143 149
144 // Container for accessing local tab data by tab id. 150 // Container for accessing local tab data by tab id.
145 typedef std::map<SessionID::id_type, linked_ptr<TabLink>> TabLinksMap; 151 typedef std::map<SessionID::id_type, linked_ptr<TabLink>> TabLinksMap;
146 152
147 friend class extensions::ExtensionSessionsTest; 153 friend class extensions::ExtensionSessionsTest;
(...skipping 22 matching lines...) Expand all
170 CheckPrerenderedWebContentsSwap); 176 CheckPrerenderedWebContentsSwap);
171 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, 177 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
172 AssociateWindowsDontReloadTabs); 178 AssociateWindowsDontReloadTabs);
173 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SwappedOutOnRestore); 179 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SwappedOutOnRestore);
174 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, 180 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
175 ProcessRemoteDeleteOfLocalSession); 181 ProcessRemoteDeleteOfLocalSession);
176 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SetVariationIds); 182 FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SetVariationIds);
177 183
178 void InitializeCurrentMachineTag(); 184 void InitializeCurrentMachineTag();
179 185
180 // Load and add window or tab data from synced specifics to our internal 186 // Load and add window or tab data for a foreign session to our internal
181 // tracking. 187 // tracking.
182 void UpdateTrackerWithSpecifics(const sync_pb::SessionSpecifics& specifics, 188 void UpdateTrackerWithForeignSession(
183 const base::Time& modification_time); 189 const sync_pb::SessionSpecifics& specifics,
190 const base::Time& modification_time);
184 191
185 // Returns true if |sync_data| contained a header node for the current 192 // Returns true if |sync_data| contained a header node for the current
186 // machine, false otherwise. |new_changes| is a link to the SyncChange 193 // machine, false otherwise. |restored_tabs| is a filtered tab-only
187 // pipeline that exists in the caller's context. This function will append 194 // subset of |sync_data| returned by this function for convenience.
188 // necessary changes for processing later. 195 // |new_changes| is a link to the SyncChange pipeline that exists in the
196 // caller's context. This function will append necessary changes for
197 // processing later.
189 bool InitFromSyncModel(const syncer::SyncDataList& sync_data, 198 bool InitFromSyncModel(const syncer::SyncDataList& sync_data,
199 syncer::SyncDataList* restored_tabs,
190 syncer::SyncChangeList* new_changes); 200 syncer::SyncChangeList* new_changes);
191 201
192 // Helper to construct a deletion SyncChange for a *tab node*. 202 // Helper to construct a deletion SyncChange for a *tab node*.
193 // Caller should check IsValid() on the returned change, as it's possible 203 // Caller should check IsValid() on the returned change, as it's possible
194 // this node could not be deleted. 204 // this node could not be deleted.
195 syncer::SyncChange TombstoneTab(const sync_pb::SessionSpecifics& tab); 205 syncer::SyncChange TombstoneTab(const sync_pb::SessionSpecifics& tab);
196 206
197 // Helper method to load the favicon data from the tab specifics. If the 207 // Helper method to load the favicon data from the tab specifics. If the
198 // favicon is valid, stores the favicon data into the favicon cache. 208 // favicon is valid, stores the favicon data into the favicon cache.
199 void RefreshFaviconVisitTimesFromForeignTab( 209 void RefreshFaviconVisitTimesFromForeignTab(
(...skipping 28 matching lines...) Expand all
228 sessions::SessionWindow* session_window); 238 sessions::SessionWindow* session_window);
229 239
230 // Resync local window information. Updates the local sessions header node 240 // Resync local window information. Updates the local sessions header node
231 // with the status of open windows and the order of tabs they contain. Should 241 // with the status of open windows and the order of tabs they contain. Should
232 // only be called for changes that affect a window, not a change within a 242 // only be called for changes that affect a window, not a change within a
233 // single tab. 243 // single tab.
234 // 244 //
235 // RELOAD_TABS will additionally cause a resync of all tabs (same as calling 245 // RELOAD_TABS will additionally cause a resync of all tabs (same as calling
236 // AssociateTabs with a vector of all tabs). 246 // AssociateTabs with a vector of all tabs).
237 // 247 //
248 // |restored_tabs| is a filtered tab-only subset of initial sync data, if
249 // available (during MergeDataAndStartSyncing). It can be used to obtain
250 // baseline SessionSpecifics for tabs we can't fully associate any other
251 // way because they don't yet have a WebContents.
252 //
238 // Returns: false if the local session's sync nodes were deleted and 253 // Returns: false if the local session's sync nodes were deleted and
239 // reassociation is necessary, true otherwise. 254 // reassociation is necessary, true otherwise.
240 // 255 //
241 // |change_output| *must* be provided as a link to the SyncChange pipeline 256 // |change_output| *must* be provided as a link to the SyncChange pipeline
242 // that exists in the caller's context. This function will append necessary 257 // that exists in the caller's context. This function will append necessary
243 // changes for processing later. 258 // changes for processing later.
244 enum ReloadTabsOption { RELOAD_TABS, DONT_RELOAD_TABS }; 259 enum ReloadTabsOption { RELOAD_TABS, DONT_RELOAD_TABS };
245 void AssociateWindows(ReloadTabsOption option, 260 void AssociateWindows(ReloadTabsOption option,
261 const syncer::SyncDataList& restored_tabs,
246 syncer::SyncChangeList* change_output); 262 syncer::SyncChangeList* change_output);
247 263
248 // Loads and reassociates the local tabs referenced in |tabs|. 264 // Loads and reassociates the local tabs referenced in |tabs|.
249 // |change_output| *must* be provided as a link to the SyncChange pipeline 265 // |change_output| *must* be provided as a link to the SyncChange pipeline
250 // that exists in the caller's context. This function will append necessary 266 // that exists in the caller's context. This function will append necessary
251 // changes for processing later. 267 // changes for processing later.
252 void AssociateTab(SyncedTabDelegate* const tab, 268 void AssociateTab(SyncedTabDelegate* const tab,
253 syncer::SyncChangeList* change_output); 269 syncer::SyncChangeList* change_output);
254 270
255 // Set |session_tab| from |tab_delegate| and |mtime|. 271 // Set |session_tab| from |tab_delegate| and |mtime|.
256 void SetSessionTabFromDelegate(const SyncedTabDelegate& tab_delegate, 272 void SetSessionTabFromDelegate(const SyncedTabDelegate& tab_delegate,
257 base::Time mtime, 273 base::Time mtime,
258 sessions::SessionTab* session_tab); 274 sessions::SessionTab* session_tab);
259 275
260 // Sets |variation_ids| field of |session_tab| with the ids of the currently 276 // Sets |variation_ids| field of |session_tab| with the ids of the currently
261 // assigned variations which should be sent to sync. 277 // assigned variations which should be sent to sync.
262 static void SetVariationIds(sessions::SessionTab* session_tab); 278 static void SetVariationIds(sessions::SessionTab* session_tab);
263 279
264 // Populates |specifics| based on the data in |tab_delegate|. 280 // Populates |specifics| based on the data in |tab_delegate|.
265 void LocalTabDelegateToSpecifics(const SyncedTabDelegate& tab_delegate, 281 void LocalTabDelegateToSpecifics(const SyncedTabDelegate& tab_delegate,
266 sync_pb::SessionSpecifics* specifics); 282 sync_pb::SessionSpecifics* specifics);
267 283
268 // It's possible that when we associate windows, tabs aren't all loaded 284 // It's possible that when we associate windows, tabs aren't all loaded
269 // into memory yet (e.g on android) and we don't have a WebContents. In this 285 // into memory yet (e.g on android) and we don't have a WebContents. In this
270 // case we can't do a full association, but we still want to update tab IDs 286 // case we can't do a full association, but we still want to update tab IDs
271 // as they may have changed after a session was restored. This method 287 // as they may have changed after a session was restored. This method
272 // compares new_tab_id and new_window_id against the previously persisted tab 288 // compares new_tab_id and new_window_id against the previously persisted tab
273 // ID and window ID (from our TabNodePool) and updates them if either differs. 289 // ID and window ID (from our TabNodePool) and updates them if either differs.
290 // |restored_tabs| is a filtered tab-only subset of initial sync data, if
291 // available (during MergeDataAndStartSyncing). It can be used to obtain
292 // baseline SessionSpecifics for tabs we can't fully associate any other
293 // way because they don't yet have a WebContents.
294 // TODO(tim): Bug 98892. We should be able to test this for this on android
295 // even though we didn't have tests for old API-based sessions sync.
274 void AssociateRestoredPlaceholderTab( 296 void AssociateRestoredPlaceholderTab(
275 const SyncedTabDelegate& tab_delegate, 297 const SyncedTabDelegate& tab_delegate,
276 SessionID::id_type new_tab_id, 298 SessionID::id_type new_tab_id,
277 SessionID::id_type new_window_id, 299 SessionID::id_type new_window_id,
300 const syncer::SyncDataList& restored_tabs,
278 syncer::SyncChangeList* change_output); 301 syncer::SyncChangeList* change_output);
279 302
280 // Stops and re-starts syncing to rebuild association mappings. 303 // Stops and re-starts syncing to rebuild association mappings.
281 // See |local_tab_pool_out_of_sync_|. 304 // See |local_tab_pool_out_of_sync_|.
282 void RebuildAssociations(); 305 void RebuildAssociations();
283 306
284 // Validates the content of a SessionHeader protobuf. 307 // Validates the content of a SessionHeader protobuf.
285 // Returns false if validation fails. 308 // Returns false if validation fails.
286 static bool IsValidSessionHeader(const sync_pb::SessionHeader& header); 309 static bool IsValidSessionHeader(const sync_pb::SessionHeader& header);
287 310
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 376
354 // Callback to inform sync that a sync data refresh is requested. 377 // Callback to inform sync that a sync data refresh is requested.
355 base::Closure datatype_refresh_callback_; 378 base::Closure datatype_refresh_callback_;
356 379
357 DISALLOW_COPY_AND_ASSIGN(SessionsSyncManager); 380 DISALLOW_COPY_AND_ASSIGN(SessionsSyncManager);
358 }; 381 };
359 382
360 } // namespace sync_sessions 383 } // namespace sync_sessions
361 384
362 #endif // COMPONENTS_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_ 385 #endif // COMPONENTS_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc ('k') | components/sync_sessions/sessions_sync_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698