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

Side by Side Diff: components/sync_sessions/synced_session_tracker.cc

Issue 2664023002: Revert of Reland v3 of Session refactor (Closed)
Patch Set: Created 3 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 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 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 #include "components/sync_sessions/synced_session_tracker.h" 5 #include "components/sync_sessions/synced_session_tracker.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 SyncedSessionTracker::SyncedSessionTracker(SyncSessionsClient* sessions_client) 47 SyncedSessionTracker::SyncedSessionTracker(SyncSessionsClient* sessions_client)
48 : sessions_client_(sessions_client) {} 48 : sessions_client_(sessions_client) {}
49 49
50 SyncedSessionTracker::~SyncedSessionTracker() { 50 SyncedSessionTracker::~SyncedSessionTracker() {
51 Clear(); 51 Clear();
52 } 52 }
53 53
54 void SyncedSessionTracker::SetLocalSessionTag( 54 void SyncedSessionTracker::SetLocalSessionTag(
55 const std::string& local_session_tag) { 55 const std::string& local_session_tag) {
56 DCHECK(local_session_tag_.empty());
57 DCHECK(!local_session_tag.empty());
58 local_session_tag_ = local_session_tag; 56 local_session_tag_ = local_session_tag;
59 } 57 }
60 58
61 bool SyncedSessionTracker::LookupAllForeignSessions( 59 bool SyncedSessionTracker::LookupAllForeignSessions(
62 std::vector<const SyncedSession*>* sessions, 60 std::vector<const SyncedSession*>* sessions,
63 SessionLookup lookup) const { 61 SessionLookup lookup) const {
64 DCHECK(sessions); 62 DCHECK(sessions);
65 sessions->clear(); 63 sessions->clear();
66 for (const auto& session_pair : synced_session_map_) { 64 for (const auto& session_pair : synced_session_map_) {
67 SyncedSession* foreign_session = session_pair.second.get(); 65 SyncedSession* foreign_session = session_pair.second.get();
(...skipping 17 matching lines...) Expand all
85 for (const auto& window_pair : iter->second->windows) 83 for (const auto& window_pair : iter->second->windows)
86 windows->push_back(window_pair.second.get()); 84 windows->push_back(window_pair.second.get());
87 85
88 return true; 86 return true;
89 } 87 }
90 88
91 bool SyncedSessionTracker::LookupSessionTab( 89 bool SyncedSessionTracker::LookupSessionTab(
92 const std::string& tag, 90 const std::string& tag,
93 SessionID::id_type tab_id, 91 SessionID::id_type tab_id,
94 const sessions::SessionTab** tab) const { 92 const sessions::SessionTab** tab) const {
95 if (tab_id == TabNodePool::kInvalidTabID)
96 return false;
97
98 DCHECK(tab); 93 DCHECK(tab);
99 auto tab_map_iter = synced_tab_map_.find(tag); 94 auto tab_map_iter = synced_tab_map_.find(tag);
100 if (tab_map_iter == synced_tab_map_.end()) { 95 if (tab_map_iter == synced_tab_map_.end()) {
101 // We have no record of this session. 96 // We have no record of this session.
102 *tab = nullptr; 97 *tab = nullptr;
103 return false; 98 return false;
104 } 99 }
105 auto tab_iter = tab_map_iter->second.find(tab_id); 100 auto tab_iter = tab_map_iter->second.find(tab_id);
106 if (tab_iter == tab_map_iter->second.end()) { 101 if (tab_iter == tab_map_iter->second.end()) {
107 // We have no record of this tab. 102 // We have no record of this tab.
108 *tab = nullptr; 103 *tab = nullptr;
109 return false; 104 return false;
110 } 105 }
111 *tab = tab_iter->second; 106 *tab = tab_iter->second;
112 return true; 107 return true;
113 } 108 }
114 109
115 void SyncedSessionTracker::LookupForeignTabNodeIds( 110 void SyncedSessionTracker::LookupTabNodeIds(const std::string& session_tag,
116 const std::string& session_tag, 111 std::set<int>* tab_node_ids) {
117 std::set<int>* tab_node_ids) const {
118 tab_node_ids->clear(); 112 tab_node_ids->clear();
119 auto session_iter = synced_session_map_.find(session_tag); 113 auto session_iter = synced_session_map_.find(session_tag);
120 if (session_iter != synced_session_map_.end()) { 114 if (session_iter != synced_session_map_.end()) {
121 tab_node_ids->insert(session_iter->second->tab_node_ids.begin(), 115 tab_node_ids->insert(session_iter->second->tab_node_ids.begin(),
122 session_iter->second->tab_node_ids.end()); 116 session_iter->second->tab_node_ids.end());
123 } 117 }
124 // In case an invalid node id was included, remove it. 118 // In case an invalid node id was included, remove it.
125 tab_node_ids->erase(TabNodePool::kInvalidTabNodeID); 119 tab_node_ids->erase(TabNodePool::kInvalidTabNodeID);
126 } 120 }
127 121
(...skipping 15 matching lines...) Expand all
143 std::unique_ptr<SyncedSession> synced_session = 137 std::unique_ptr<SyncedSession> synced_session =
144 base::MakeUnique<SyncedSession>(); 138 base::MakeUnique<SyncedSession>();
145 DVLOG(1) << "Creating new session with tag " << session_tag << " at " 139 DVLOG(1) << "Creating new session with tag " << session_tag << " at "
146 << synced_session.get(); 140 << synced_session.get();
147 synced_session->session_tag = session_tag; 141 synced_session->session_tag = session_tag;
148 synced_session_map_[session_tag] = std::move(synced_session); 142 synced_session_map_[session_tag] = std::move(synced_session);
149 143
150 return synced_session_map_[session_tag].get(); 144 return synced_session_map_[session_tag].get();
151 } 145 }
152 146
153 bool SyncedSessionTracker::DeleteForeignSession( 147 bool SyncedSessionTracker::DeleteSession(const std::string& session_tag) {
154 const std::string& session_tag) {
155 DCHECK_NE(local_session_tag_, session_tag);
156 unmapped_windows_.erase(session_tag); 148 unmapped_windows_.erase(session_tag);
157 unmapped_tabs_.erase(session_tag); 149 unmapped_tabs_.erase(session_tag);
158 150
159 bool header_existed = false; 151 bool header_existed = false;
160 auto iter = synced_session_map_.find(session_tag); 152 auto iter = synced_session_map_.find(session_tag);
161 if (iter != synced_session_map_.end()) { 153 if (iter != synced_session_map_.end()) {
162 // An implicitly created session that has children tabs but no header node 154 // An implicitly created session that has children tabs but no header node
163 // will have never had the device_type changed from unset. 155 // will have never had the device_type changed from unset.
164 header_existed = iter->second->device_type != SyncedSession::TYPE_UNSET; 156 header_existed = iter->second->device_type != SyncedSession::TYPE_UNSET;
165 // SyncedSession's destructor will trigger deletion of windows which will in 157 // SyncedSession's destructor will trigger deletion of windows which will in
(...skipping 23 matching lines...) Expand all
189 181
190 // Then unmap the window itself. 182 // Then unmap the window itself.
191 unmapped_windows_[session_tag][window_pair.first] = 183 unmapped_windows_[session_tag][window_pair.first] =
192 std::move(window_pair.second); 184 std::move(window_pair.second);
193 } 185 }
194 session->windows.clear(); 186 session->windows.clear();
195 } 187 }
196 188
197 void SyncedSessionTracker::DeleteForeignTab(const std::string& session_tag, 189 void SyncedSessionTracker::DeleteForeignTab(const std::string& session_tag,
198 int tab_node_id) { 190 int tab_node_id) {
199 DCHECK_NE(local_session_tag_, session_tag);
200 auto session_iter = synced_session_map_.find(session_tag); 191 auto session_iter = synced_session_map_.find(session_tag);
201 if (session_iter != synced_session_map_.end()) { 192 if (session_iter != synced_session_map_.end()) {
202 session_iter->second->tab_node_ids.erase(tab_node_id); 193 session_iter->second->tab_node_ids.erase(tab_node_id);
203 } 194 }
204 } 195 }
205 196
206 void SyncedSessionTracker::CleanupSessionImpl(const std::string& session_tag) { 197 void SyncedSessionTracker::CleanupSession(const std::string& session_tag) {
207 for (const auto& window_pair : unmapped_windows_[session_tag]) 198 for (const auto& window_pair : unmapped_windows_[session_tag])
208 synced_window_map_[session_tag].erase(window_pair.first); 199 synced_window_map_[session_tag].erase(window_pair.first);
209 unmapped_windows_[session_tag].clear(); 200 unmapped_windows_[session_tag].clear();
210 201
211 for (const auto& tab_pair : unmapped_tabs_[session_tag]) 202 for (const auto& tab_pair : unmapped_tabs_[session_tag])
212 synced_tab_map_[session_tag].erase(tab_pair.first); 203 synced_tab_map_[session_tag].erase(tab_pair.first);
213 unmapped_tabs_[session_tag].clear(); 204 unmapped_tabs_[session_tag].clear();
214 } 205 }
215 206
216 void SyncedSessionTracker::PutWindowInSession(const std::string& session_tag, 207 void SyncedSessionTracker::PutWindowInSession(const std::string& session_tag,
(...skipping 18 matching lines...) Expand all
235 : session_tag); 226 : session_tag);
236 } 227 }
237 DCHECK_EQ(window->window_id.id(), window_id); 228 DCHECK_EQ(window->window_id.id(), window_id);
238 DCHECK(GetSession(session_tag)->windows.end() == 229 DCHECK(GetSession(session_tag)->windows.end() ==
239 GetSession(session_tag)->windows.find(window_id)); 230 GetSession(session_tag)->windows.find(window_id));
240 GetSession(session_tag)->windows[window_id] = std::move(window); 231 GetSession(session_tag)->windows[window_id] = std::move(window);
241 } 232 }
242 233
243 void SyncedSessionTracker::PutTabInWindow(const std::string& session_tag, 234 void SyncedSessionTracker::PutTabInWindow(const std::string& session_tag,
244 SessionID::id_type window_id, 235 SessionID::id_type window_id,
245 SessionID::id_type tab_id) { 236 SessionID::id_type tab_id,
237 size_t tab_index) {
246 // We're called here for two reasons. 1) We've received an update to the 238 // We're called here for two reasons. 1) We've received an update to the
247 // SessionWindow information of a SessionHeader node for a session, 239 // SessionWindow information of a SessionHeader node for a foreign session,
248 // and 2) The SessionHeader node for our local session changed. In both cases 240 // and 2) The SessionHeader node for our local session changed. In both cases
249 // we need to update our tracking state to reflect the change. 241 // we need to update our tracking state to reflect the change.
250 // 242 //
251 // Because the SessionHeader nodes are separate from the individual tab nodes 243 // Because the SessionHeader nodes are separate from the individual tab nodes
252 // and we don't store tab_node_ids in the header / SessionWindow specifics, 244 // and we don't store tab_node_ids in the header / SessionWindow specifics,
253 // the tab_node_ids are not always available when processing headers. We know 245 // the tab_node_ids are not always available when processing headers.
254 // that we will eventually process (via GetTab) every single tab node in the 246 // We know that we will eventually process (via GetTab) every single tab node
255 // system, so we permit ourselves to just call GetTab and ignore the result, 247 // in the system, so we permit ourselves to use kInvalidTabNodeID here and
256 // creating a placeholder SessionTab in the process. 248 // rely on the later update to build the mapping (or a restart).
257 GetTab(session_tag, tab_id); 249 GetTabImpl(session_tag, tab_id, TabNodePool::kInvalidTabNodeID);
258 250
259 // The tab should be unmapped. 251 // The tab should be unmapped.
260 std::unique_ptr<sessions::SessionTab> tab; 252 std::unique_ptr<sessions::SessionTab> tab;
261 auto it = unmapped_tabs_[session_tag].find(tab_id); 253 auto it = unmapped_tabs_[session_tag].find(tab_id);
262 if (it != unmapped_tabs_[session_tag].end()) { 254 if (it != unmapped_tabs_[session_tag].end()) {
263 tab = std::move(it->second); 255 tab = std::move(it->second);
264 unmapped_tabs_[session_tag].erase(it); 256 unmapped_tabs_[session_tag].erase(it);
265 } 257 }
266 CHECK(tab) << "crbug.com/673618 Attempting to map tab " << tab_id 258 DCHECK(tab);
267 << " multiple times!";
268 259
269 tab->window_id.set_id(window_id); 260 tab->window_id.set_id(window_id);
270 DVLOG(1) << " - tab " << tab_id << " added to window " << window_id; 261 DVLOG(1) << " - tab " << tab_id << " added to window " << window_id;
271 DCHECK(GetSession(session_tag)->windows.find(window_id) != 262 DCHECK(GetSession(session_tag)->windows.find(window_id) !=
272 GetSession(session_tag)->windows.end()); 263 GetSession(session_tag)->windows.end());
273 auto& window_tabs = GetSession(session_tag)->windows[window_id]->tabs; 264 auto& window_tabs = GetSession(session_tag)->windows[window_id]->tabs;
274 window_tabs.push_back(std::move(tab)); 265 if (window_tabs.size() <= tab_index) {
275 } 266 window_tabs.resize(tab_index + 1);
276 267 }
277 void SyncedSessionTracker::OnTabNodeSeen(const std::string& session_tag, 268 DCHECK(!window_tabs[tab_index]);
278 int tab_node_id) { 269 window_tabs[tab_index] = std::move(tab);
279 GetSession(session_tag)->tab_node_ids.insert(tab_node_id);
280 } 270 }
281 271
282 sessions::SessionTab* SyncedSessionTracker::GetTab( 272 sessions::SessionTab* SyncedSessionTracker::GetTab(
283 const std::string& session_tag, 273 const std::string& session_tag,
284 SessionID::id_type tab_id) { 274 SessionID::id_type tab_id,
285 CHECK_NE(TabNodePool::kInvalidTabNodeID, tab_id) << "crbug.com/673618"; 275 int tab_node_id) {
276 DCHECK_NE(TabNodePool::kInvalidTabNodeID, tab_node_id);
277 return GetTabImpl(session_tag, tab_id, tab_node_id);
278 }
279
280 sessions::SessionTab* SyncedSessionTracker::GetTabImpl(
281 const std::string& session_tag,
282 SessionID::id_type tab_id,
283 int tab_node_id) {
286 sessions::SessionTab* tab_ptr = nullptr; 284 sessions::SessionTab* tab_ptr = nullptr;
287 auto iter = synced_tab_map_[session_tag].find(tab_id); 285 auto iter = synced_tab_map_[session_tag].find(tab_id);
288 if (iter != synced_tab_map_[session_tag].end()) { 286 if (iter != synced_tab_map_[session_tag].end()) {
289 tab_ptr = iter->second; 287 tab_ptr = iter->second;
288 if (tab_node_id != TabNodePool::kInvalidTabNodeID &&
289 tab_id != TabNodePool::kInvalidTabID) {
290 // TabIDs are not stable across restarts of a client. Consider this
291 // example with two tabs:
292 //
293 // http://a.com TabID1 --> NodeIDA
294 // http://b.com TabID2 --> NodeIDB
295 //
296 // After restart, tab ids are reallocated. e.g, one possibility:
297 // http://a.com TabID2 --> NodeIDA
298 // http://b.com TabID1 --> NodeIDB
299 //
300 // If that happend on a remote client, here we will see an update to
301 // TabID1 with tab_node_id changing from NodeIDA to NodeIDB, and TabID2
302 // with tab_node_id changing from NodeIDB to NodeIDA.
303 //
304 // We can also wind up here if we created this tab as an out-of-order
305 // update to the header node for this session before actually associating
306 // the tab itself, so the tab node id wasn't available at the time and
307 // is currently kInvalidTabNodeID.
308 //
309 // In both cases, we can safely throw it into the set of node ids.
310 GetSession(session_tag)->tab_node_ids.insert(tab_node_id);
311 }
290 312
291 if (VLOG_IS_ON(1)) { 313 if (VLOG_IS_ON(1)) {
292 std::string title; 314 std::string title;
293 if (tab_ptr->navigations.size() > 0) { 315 if (tab_ptr->navigations.size() > 0) {
294 title = 316 title =
295 " (" + base::UTF16ToUTF8(tab_ptr->navigations.back().title()) + ")"; 317 " (" + base::UTF16ToUTF8(tab_ptr->navigations.back().title()) + ")";
296 } 318 }
297 DVLOG(1) << "Getting " 319 DVLOG(1) << "Getting "
298 << (session_tag == local_session_tag_ ? "local session" 320 << (session_tag == local_session_tag_ ? "local session"
299 : session_tag) 321 : session_tag)
300 << "'s seen tab " << tab_id << " at " << tab_ptr << " " << title; 322 << "'s seen tab " << tab_id << " at " << tab_ptr << " " << title;
301 } 323 }
302 } else { 324 } else {
303 std::unique_ptr<sessions::SessionTab> tab = 325 std::unique_ptr<sessions::SessionTab> tab =
304 base::MakeUnique<sessions::SessionTab>(); 326 base::MakeUnique<sessions::SessionTab>();
305 tab_ptr = tab.get(); 327 tab_ptr = tab.get();
306 tab->tab_id.set_id(tab_id); 328 tab->tab_id.set_id(tab_id);
307 synced_tab_map_[session_tag][tab_id] = tab_ptr; 329 synced_tab_map_[session_tag][tab_id] = tab_ptr;
308 unmapped_tabs_[session_tag][tab_id] = std::move(tab); 330 unmapped_tabs_[session_tag][tab_id] = std::move(tab);
331 GetSession(session_tag)->tab_node_ids.insert(tab_node_id);
309 DVLOG(1) << "Getting " 332 DVLOG(1) << "Getting "
310 << (session_tag == local_session_tag_ ? "local session" 333 << (session_tag == local_session_tag_ ? "local session"
311 : session_tag) 334 : session_tag)
312 << "'s new tab " << tab_id << " at " << tab_ptr; 335 << "'s new tab " << tab_id << " at " << tab_ptr;
313 } 336 }
314 DCHECK(tab_ptr); 337 DCHECK(tab_ptr);
315 DCHECK_EQ(tab_ptr->tab_id.id(), tab_id); 338 DCHECK_EQ(tab_ptr->tab_id.id(), tab_id);
316 return tab_ptr; 339 return tab_ptr;
317 } 340 }
318 341
319 void SyncedSessionTracker::CleanupForeignSession(
320 const std::string& session_tag) {
321 DCHECK_NE(local_session_tag_, session_tag);
322 CleanupSessionImpl(session_tag);
323 }
324
325 void SyncedSessionTracker::CleanupLocalTabs(std::set<int>* deleted_node_ids) {
326 DCHECK(!local_session_tag_.empty());
327 for (const auto& tab_pair : unmapped_tabs_[local_session_tag_])
328 local_tab_pool_.FreeTab(tab_pair.first);
329 CleanupSessionImpl(local_session_tag_);
330 local_tab_pool_.CleanupTabNodes(deleted_node_ids);
331 for (int tab_node_id : *deleted_node_ids) {
332 GetSession(local_session_tag_)->tab_node_ids.erase(tab_node_id);
333 }
334 }
335
336 bool SyncedSessionTracker::GetTabNodeFromLocalTabId(SessionID::id_type tab_id,
337 int* tab_node_id) {
338 DCHECK(!local_session_tag_.empty());
339 // Ensure a placeholder SessionTab is in place, if not already.
340 // Although we don't need a SessionTab to fulfill this request, this forces
341 // the
342 // creation of one if it doesn't already exist. This helps to make sure we're
343 // tracking this |tab_id| if |local_tab_pool_| is, and everyone's data
344 // structures
345 // are kept in sync and as consistent as possible.
346 GetTab(local_session_tag_, tab_id); // Ignore result.
347
348 bool reused_existing_tab =
349 local_tab_pool_.GetTabNodeForTab(tab_id, tab_node_id);
350 DCHECK_NE(TabNodePool::kInvalidTabNodeID, *tab_node_id);
351 GetSession(local_session_tag_)->tab_node_ids.insert(*tab_node_id);
352 return reused_existing_tab;
353 }
354
355 bool SyncedSessionTracker::IsLocalTabNodeAssociated(int tab_node_id) {
356 if (tab_node_id == TabNodePool::kInvalidTabNodeID)
357 return false;
358 return local_tab_pool_.GetTabIdFromTabNodeId(tab_node_id) !=
359 TabNodePool::kInvalidTabID;
360 }
361
362 void SyncedSessionTracker::ReassociateLocalTab(int tab_node_id,
363 SessionID::id_type new_tab_id) {
364 DCHECK(!local_session_tag_.empty());
365 DCHECK_NE(TabNodePool::kInvalidTabNodeID, tab_node_id);
366 DCHECK_NE(TabNodePool::kInvalidTabID, new_tab_id);
367
368 SessionID::id_type old_tab_id =
369 local_tab_pool_.GetTabIdFromTabNodeId(tab_node_id);
370 local_tab_pool_.ReassociateTabNode(tab_node_id, new_tab_id);
371
372 sessions::SessionTab* tab_ptr = nullptr;
373
374 auto old_tab_iter = synced_tab_map_[local_session_tag_].find(old_tab_id);
375 if (old_tab_id != TabNodePool::kInvalidTabID &&
376 old_tab_iter != synced_tab_map_[local_session_tag_].end()) {
377 tab_ptr = old_tab_iter->second;
378 // Remove the tab from the synced tab map under the old id.
379 synced_tab_map_[local_session_tag_].erase(old_tab_iter);
380 } else {
381 // It's possible a placeholder is already in place for the new tab. If so,
382 // reuse it, otherwise create a new one (which will default to unmapped).
383 tab_ptr = GetTab(local_session_tag_, new_tab_id);
384 }
385
386 // If the old tab is unmapped, update the tab id under which it is indexed.
387 auto unmapped_tabs_iter = unmapped_tabs_[local_session_tag_].find(old_tab_id);
388 if (old_tab_id != TabNodePool::kInvalidTabID &&
389 unmapped_tabs_iter != unmapped_tabs_[local_session_tag_].end()) {
390 std::unique_ptr<sessions::SessionTab> tab =
391 std::move(unmapped_tabs_iter->second);
392 DCHECK_EQ(tab_ptr, tab.get());
393 unmapped_tabs_[local_session_tag_].erase(unmapped_tabs_iter);
394 unmapped_tabs_[local_session_tag_][new_tab_id] = std::move(tab);
395 }
396
397 // Update the tab id.
398 if (old_tab_id != TabNodePool::kInvalidTabID) {
399 DVLOG(1) << "Remapped tab " << old_tab_id << " with node " << tab_node_id
400 << " to tab " << new_tab_id;
401 } else {
402 DVLOG(1) << "Mapped new tab node " << tab_node_id << " to tab "
403 << new_tab_id;
404 }
405 tab_ptr->tab_id.set_id(new_tab_id);
406
407 // Add the tab back into the tab map with the new id.
408 synced_tab_map_[local_session_tag_][new_tab_id] = tab_ptr;
409 GetSession(local_session_tag_)->tab_node_ids.insert(tab_node_id);
410 }
411
412 void SyncedSessionTracker::Clear() { 342 void SyncedSessionTracker::Clear() {
413 // Cleanup unmapped tabs and windows. 343 // Cleanup unmapped tabs and windows.
414 unmapped_windows_.clear(); 344 unmapped_windows_.clear();
415 unmapped_tabs_.clear(); 345 unmapped_tabs_.clear();
416 346
417 // Delete SyncedSession objects (which also deletes all their windows/tabs). 347 // Delete SyncedSession objects (which also deletes all their windows/tabs).
418 synced_session_map_.clear(); 348 synced_session_map_.clear();
419 349
420 // Get rid of our convenience maps (does not delete the actual Window/Tabs 350 // Get rid of our convenience maps (does not delete the actual Window/Tabs
421 // themselves; they should have all been deleted above). 351 // themselves; they should have all been deleted above).
422 synced_window_map_.clear(); 352 synced_window_map_.clear();
423 synced_tab_map_.clear(); 353 synced_tab_map_.clear();
424 354
425 local_tab_pool_.Clear();
426 local_session_tag_.clear(); 355 local_session_tag_.clear();
427 } 356 }
428 357
429 } // namespace sync_sessions 358 } // namespace sync_sessions
OLDNEW
« no previous file with comments | « components/sync_sessions/synced_session_tracker.h ('k') | components/sync_sessions/synced_session_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698