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

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

Issue 2791183003: [Sync] Restore previous session if no tabbed windows present (Closed)
Patch Set: Fix android compile Created 3 years, 8 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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 unmapped_tabs_[session_tag].clear(); 214 unmapped_tabs_[session_tag].clear();
215 } 215 }
216 216
217 bool SyncedSessionTracker::IsTabUnmappedForTesting(SessionID::id_type tab_id) { 217 bool SyncedSessionTracker::IsTabUnmappedForTesting(SessionID::id_type tab_id) {
218 auto it = unmapped_tabs_[local_session_tag_].find(tab_id); 218 auto it = unmapped_tabs_[local_session_tag_].find(tab_id);
219 return it != unmapped_tabs_[local_session_tag_].end(); 219 return it != unmapped_tabs_[local_session_tag_].end();
220 } 220 }
221 221
222 void SyncedSessionTracker::PutWindowInSession(const std::string& session_tag, 222 void SyncedSessionTracker::PutWindowInSession(const std::string& session_tag,
223 SessionID::id_type window_id) { 223 SessionID::id_type window_id) {
224 if (GetSession(session_tag)->windows.find(window_id) !=
225 GetSession(session_tag)->windows.end()) {
226 DVLOG(1) << "Window " << window_id << " already added to session "
227 << session_tag;
228 return;
229 }
224 std::unique_ptr<SyncedSessionWindow> window; 230 std::unique_ptr<SyncedSessionWindow> window;
225 231
226 auto iter = unmapped_windows_[session_tag].find(window_id); 232 auto iter = unmapped_windows_[session_tag].find(window_id);
227 if (iter != unmapped_windows_[session_tag].end()) { 233 if (iter != unmapped_windows_[session_tag].end()) {
228 DCHECK_EQ(synced_window_map_[session_tag][window_id], iter->second.get()); 234 DCHECK_EQ(synced_window_map_[session_tag][window_id], iter->second.get());
229 window = std::move(iter->second); 235 window = std::move(iter->second);
230 unmapped_windows_[session_tag].erase(iter); 236 unmapped_windows_[session_tag].erase(iter);
231 DVLOG(1) << "Putting seen window " << window_id << " at " << window.get() 237 DVLOG(1) << "Putting seen window " << window_id << " at " << window.get()
232 << "in " << (session_tag == local_session_tag_ ? "local session" 238 << "in " << (session_tag == local_session_tag_ ? "local session"
233 : session_tag); 239 : session_tag);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 DVLOG(1) << "Getting " 344 DVLOG(1) << "Getting "
339 << (session_tag == local_session_tag_ ? "local session" 345 << (session_tag == local_session_tag_ ? "local session"
340 : session_tag) 346 : session_tag)
341 << "'s new tab " << tab_id << " at " << tab_ptr; 347 << "'s new tab " << tab_id << " at " << tab_ptr;
342 } 348 }
343 DCHECK(tab_ptr); 349 DCHECK(tab_ptr);
344 DCHECK_EQ(tab_ptr->tab_id.id(), tab_id); 350 DCHECK_EQ(tab_ptr->tab_id.id(), tab_id);
345 return tab_ptr; 351 return tab_ptr;
346 } 352 }
347 353
348 void SyncedSessionTracker::CleanupForeignSession( 354 void SyncedSessionTracker::CleanupSession(const std::string& session_tag) {
349 const std::string& session_tag) {
350 DCHECK_NE(local_session_tag_, session_tag);
351 CleanupSessionImpl(session_tag); 355 CleanupSessionImpl(session_tag);
352 } 356 }
353 357
354 void SyncedSessionTracker::CleanupLocalTabs(std::set<int>* deleted_node_ids) { 358 void SyncedSessionTracker::CleanupLocalTabs(std::set<int>* deleted_node_ids) {
355 DCHECK(!local_session_tag_.empty()); 359 DCHECK(!local_session_tag_.empty());
356 for (const auto& tab_pair : unmapped_tabs_[local_session_tag_]) 360 for (const auto& tab_pair : unmapped_tabs_[local_session_tag_])
357 local_tab_pool_.FreeTab(tab_pair.first); 361 local_tab_pool_.FreeTab(tab_pair.first);
358 CleanupSessionImpl(local_session_tag_); 362 CleanupSessionImpl(local_session_tag_);
359 local_tab_pool_.CleanupTabNodes(deleted_node_ids); 363 local_tab_pool_.CleanupTabNodes(deleted_node_ids);
360 for (int tab_node_id : *deleted_node_ids) { 364 for (int tab_node_id : *deleted_node_ids) {
361 GetSession(local_session_tag_)->tab_node_ids.erase(tab_node_id); 365 GetSession(local_session_tag_)->tab_node_ids.erase(tab_node_id);
362 } 366 }
363 } 367 }
364 368
365 bool SyncedSessionTracker::GetTabNodeFromLocalTabId(SessionID::id_type tab_id, 369 bool SyncedSessionTracker::GetTabNodeFromLocalTabId(SessionID::id_type tab_id,
366 int* tab_node_id) { 370 int* tab_node_id) {
367 DCHECK(!local_session_tag_.empty()); 371 DCHECK(!local_session_tag_.empty());
368 // Ensure a placeholder SessionTab is in place, if not already. 372 // Ensure a placeholder SessionTab is in place, if not already. Although we
369 // Although we don't need a SessionTab to fulfill this request, this forces 373 // don't need a SessionTab to fulfill this request, this forces the creation
370 // the 374 // of one if it doesn't already exist. This helps to make sure we're tracking
371 // creation of one if it doesn't already exist. This helps to make sure we're 375 // this |tab_id| if |local_tab_pool_| is, and everyone's data structures are
372 // tracking this |tab_id| if |local_tab_pool_| is, and everyone's data 376 // kept in sync and as consistent as possible.
373 // structures
374 // are kept in sync and as consistent as possible.
375 GetTab(local_session_tag_, tab_id); // Ignore result. 377 GetTab(local_session_tag_, tab_id); // Ignore result.
376 378
377 bool reused_existing_tab = 379 bool reused_existing_tab =
378 local_tab_pool_.GetTabNodeForTab(tab_id, tab_node_id); 380 local_tab_pool_.GetTabNodeForTab(tab_id, tab_node_id);
379 DCHECK_NE(TabNodePool::kInvalidTabNodeID, *tab_node_id); 381 DCHECK_NE(TabNodePool::kInvalidTabNodeID, *tab_node_id);
380 GetSession(local_session_tag_)->tab_node_ids.insert(*tab_node_id); 382 GetSession(local_session_tag_)->tab_node_ids.insert(*tab_node_id);
381 return reused_existing_tab; 383 return reused_existing_tab;
382 } 384 }
383 385
384 bool SyncedSessionTracker::IsLocalTabNodeAssociated(int tab_node_id) { 386 bool SyncedSessionTracker::IsLocalTabNodeAssociated(int tab_node_id) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 // Get rid of our convenience maps (does not delete the actual Window/Tabs 450 // Get rid of our convenience maps (does not delete the actual Window/Tabs
449 // themselves; they should have all been deleted above). 451 // themselves; they should have all been deleted above).
450 synced_window_map_.clear(); 452 synced_window_map_.clear();
451 synced_tab_map_.clear(); 453 synced_tab_map_.clear();
452 454
453 local_tab_pool_.Clear(); 455 local_tab_pool_.Clear();
454 local_session_tag_.clear(); 456 local_session_tag_.clear();
455 } 457 }
456 458
457 } // namespace sync_sessions 459 } // 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