| OLD | NEW |
| 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 #include "components/sync_sessions/sessions_sync_manager.h" | 5 #include "components/sync_sessions/sessions_sync_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 windows.begin(); | 223 windows.begin(); |
| 224 i != windows.end(); ++i) { | 224 i != windows.end(); ++i) { |
| 225 if (option == RELOAD_TABS) { | 225 if (option == RELOAD_TABS) { |
| 226 UMA_HISTOGRAM_COUNTS("Sync.SessionTabs", (*i)->GetTabCount()); | 226 UMA_HISTOGRAM_COUNTS("Sync.SessionTabs", (*i)->GetTabCount()); |
| 227 } | 227 } |
| 228 | 228 |
| 229 // Make sure the window has tabs and a viewable window. The viewable window | 229 // Make sure the window has tabs and a viewable window. The viewable window |
| 230 // check is necessary because, for example, when a browser is closed the | 230 // check is necessary because, for example, when a browser is closed the |
| 231 // destructor is not necessarily run immediately. This means its possible | 231 // destructor is not necessarily run immediately. This means its possible |
| 232 // for us to get a handle to a browser that is about to be removed. If | 232 // for us to get a handle to a browser that is about to be removed. If |
| 233 // the tab count is 0 or the window is NULL, the browser is about to be | 233 // the tab count is 0 or the window is null, the browser is about to be |
| 234 // deleted, so we ignore it. | 234 // deleted, so we ignore it. |
| 235 if ((*i)->ShouldSync() && (*i)->GetTabCount() && (*i)->HasWindow()) { | 235 if ((*i)->ShouldSync() && (*i)->GetTabCount() && (*i)->HasWindow()) { |
| 236 sync_pb::SessionWindow window_s; | 236 sync_pb::SessionWindow window_s; |
| 237 SessionID::id_type window_id = (*i)->GetSessionId(); | 237 SessionID::id_type window_id = (*i)->GetSessionId(); |
| 238 DVLOG(1) << "Associating window " << window_id << " with " | 238 DVLOG(1) << "Associating window " << window_id << " with " |
| 239 << (*i)->GetTabCount() << " tabs."; | 239 << (*i)->GetTabCount() << " tabs."; |
| 240 window_s.set_window_id(window_id); | 240 window_s.set_window_id(window_id); |
| 241 // Note: We don't bother to set selected tab index anymore. We still | 241 // Note: We don't bother to set selected tab index anymore. We still |
| 242 // consume it when receiving foreign sessions, as reading it is free, but | 242 // consume it when receiving foreign sessions, as reading it is free, but |
| 243 // it triggers too many sync cycles with too little value to make setting | 243 // it triggers too many sync cycles with too little value to make setting |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 } | 276 } |
| 277 | 277 |
| 278 if (RELOAD_TABS == option) | 278 if (RELOAD_TABS == option) |
| 279 AssociateTab(synced_tab, change_output); | 279 AssociateTab(synced_tab, change_output); |
| 280 | 280 |
| 281 // If the tab is valid, it would have been added to the tracker either | 281 // If the tab is valid, it would have been added to the tracker either |
| 282 // by the above AssociateTab call (at association time), or by the | 282 // by the above AssociateTab call (at association time), or by the |
| 283 // change processor calling AssociateTab for all modified tabs. | 283 // change processor calling AssociateTab for all modified tabs. |
| 284 // Therefore, we can key whether this window has valid tabs based on | 284 // Therefore, we can key whether this window has valid tabs based on |
| 285 // the tab's presence in the tracker. | 285 // the tab's presence in the tracker. |
| 286 const sessions::SessionTab* tab = NULL; | 286 const sessions::SessionTab* tab = nullptr; |
| 287 if (session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) { | 287 if (session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) { |
| 288 found_tabs = true; | 288 found_tabs = true; |
| 289 window_s.add_tab(tab_id); | 289 window_s.add_tab(tab_id); |
| 290 } | 290 } |
| 291 } | 291 } |
| 292 if (found_tabs) { | 292 if (found_tabs) { |
| 293 sync_pb::SessionWindow* header_window = header_s->add_window(); | 293 sync_pb::SessionWindow* header_window = header_s->add_window(); |
| 294 *header_window = window_s; | 294 *header_window = window_s; |
| 295 | 295 |
| 296 // Update this window's representation in the synced session tracker. | 296 // Update this window's representation in the synced session tracker. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 } | 329 } |
| 330 local_tab_pool_.FreeTabNode(tab_iter->second->tab_node_id(), change_output); | 330 local_tab_pool_.FreeTabNode(tab_iter->second->tab_node_id(), change_output); |
| 331 local_tab_map_.erase(tab_iter); | 331 local_tab_map_.erase(tab_iter); |
| 332 return; | 332 return; |
| 333 } | 333 } |
| 334 | 334 |
| 335 if (!tab->ShouldSync(sessions_client_)) | 335 if (!tab->ShouldSync(sessions_client_)) |
| 336 return; | 336 return; |
| 337 | 337 |
| 338 TabLinksMap::iterator local_tab_map_iter = local_tab_map_.find(tab_id); | 338 TabLinksMap::iterator local_tab_map_iter = local_tab_map_.find(tab_id); |
| 339 TabLink* tab_link = NULL; | 339 TabLink* tab_link = nullptr; |
| 340 | 340 |
| 341 if (local_tab_map_iter == local_tab_map_.end()) { | 341 if (local_tab_map_iter == local_tab_map_.end()) { |
| 342 int tab_node_id = tab->GetSyncId(); | 342 int tab_node_id = tab->GetSyncId(); |
| 343 // If there is an old sync node for the tab, reuse it. If this is a new | 343 // If there is an old sync node for the tab, reuse it. If this is a new |
| 344 // tab, get a sync node for it. | 344 // tab, get a sync node for it. |
| 345 if (!local_tab_pool_.IsUnassociatedTabNode(tab_node_id)) { | 345 if (!local_tab_pool_.IsUnassociatedTabNode(tab_node_id)) { |
| 346 tab_node_id = local_tab_pool_.GetFreeTabNode(change_output); | 346 tab_node_id = local_tab_pool_.GetFreeTabNode(change_output); |
| 347 tab->SetSyncId(tab_node_id); | 347 tab->SetSyncId(tab_node_id); |
| 348 } | 348 } |
| 349 local_tab_pool_.AssociateTabNode(tab_node_id, tab_id); | 349 local_tab_pool_.AssociateTabNode(tab_node_id, tab_id); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 } | 457 } |
| 458 } | 458 } |
| 459 | 459 |
| 460 void SessionsSyncManager::StopSyncing(syncer::ModelType type) { | 460 void SessionsSyncManager::StopSyncing(syncer::ModelType type) { |
| 461 local_event_router_->Stop(); | 461 local_event_router_->Stop(); |
| 462 if (sync_processor_.get() && lost_navigations_recorder_.get()) { | 462 if (sync_processor_.get() && lost_navigations_recorder_.get()) { |
| 463 sync_processor_->RemoveLocalChangeObserver( | 463 sync_processor_->RemoveLocalChangeObserver( |
| 464 lost_navigations_recorder_.get()); | 464 lost_navigations_recorder_.get()); |
| 465 lost_navigations_recorder_.reset(); | 465 lost_navigations_recorder_.reset(); |
| 466 } | 466 } |
| 467 sync_processor_.reset(NULL); | 467 sync_processor_.reset(nullptr); |
| 468 error_handler_.reset(); | 468 error_handler_.reset(); |
| 469 session_tracker_.Clear(); | 469 session_tracker_.Clear(); |
| 470 local_tab_map_.clear(); | 470 local_tab_map_.clear(); |
| 471 local_tab_pool_.Clear(); | 471 local_tab_pool_.Clear(); |
| 472 current_machine_tag_.clear(); | 472 current_machine_tag_.clear(); |
| 473 current_session_name_.clear(); | 473 current_session_name_.clear(); |
| 474 local_session_header_node_id_ = TabNodePool::kInvalidTabNodeID; | 474 local_session_header_node_id_ = TabNodePool::kInvalidTabNodeID; |
| 475 } | 475 } |
| 476 | 476 |
| 477 syncer::SyncDataList SessionsSyncManager::GetAllSyncData( | 477 syncer::SyncDataList SessionsSyncManager::GetAllSyncData( |
| 478 syncer::ModelType type) const { | 478 syncer::ModelType type) const { |
| 479 syncer::SyncDataList list; | 479 syncer::SyncDataList list; |
| 480 const SyncedSession* session = NULL; | 480 const SyncedSession* session = nullptr; |
| 481 if (!session_tracker_.LookupLocalSession(&session)) | 481 if (!session_tracker_.LookupLocalSession(&session)) |
| 482 return syncer::SyncDataList(); | 482 return syncer::SyncDataList(); |
| 483 | 483 |
| 484 // First construct the header node. | 484 // First construct the header node. |
| 485 sync_pb::EntitySpecifics header_entity; | 485 sync_pb::EntitySpecifics header_entity; |
| 486 header_entity.mutable_session()->set_session_tag(current_machine_tag()); | 486 header_entity.mutable_session()->set_session_tag(current_machine_tag()); |
| 487 sync_pb::SessionHeader* header_specifics = | 487 sync_pb::SessionHeader* header_specifics = |
| 488 header_entity.mutable_session()->mutable_header(); | 488 header_entity.mutable_session()->mutable_header(); |
| 489 header_specifics->MergeFrom(session->ToSessionHeader()); | 489 header_specifics->MergeFrom(session->ToSessionHeader()); |
| 490 syncer::SyncData data = syncer::SyncData::CreateLocalData( | 490 syncer::SyncData data = syncer::SyncData::CreateLocalData( |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 tabs->push_back(tab); | 940 tabs->push_back(tab); |
| 941 } | 941 } |
| 942 } | 942 } |
| 943 std::sort(tabs->begin(), tabs->end(), TabsRecencyComparator); | 943 std::sort(tabs->begin(), tabs->end(), TabsRecencyComparator); |
| 944 return true; | 944 return true; |
| 945 } | 945 } |
| 946 | 946 |
| 947 bool SessionsSyncManager::GetForeignTab(const std::string& tag, | 947 bool SessionsSyncManager::GetForeignTab(const std::string& tag, |
| 948 const SessionID::id_type tab_id, | 948 const SessionID::id_type tab_id, |
| 949 const sessions::SessionTab** tab) { | 949 const sessions::SessionTab** tab) { |
| 950 const sessions::SessionTab* synced_tab = NULL; | 950 const sessions::SessionTab* synced_tab = nullptr; |
| 951 bool success = session_tracker_.LookupSessionTab(tag, tab_id, &synced_tab); | 951 bool success = session_tracker_.LookupSessionTab(tag, tab_id, &synced_tab); |
| 952 if (success) | 952 if (success) |
| 953 *tab = synced_tab; | 953 *tab = synced_tab; |
| 954 return success; | 954 return success; |
| 955 } | 955 } |
| 956 | 956 |
| 957 void SessionsSyncManager::LocalTabDelegateToSpecifics( | 957 void SessionsSyncManager::LocalTabDelegateToSpecifics( |
| 958 const SyncedTabDelegate& tab_delegate, | 958 const SyncedTabDelegate& tab_delegate, |
| 959 sync_pb::SessionSpecifics* specifics) { | 959 sync_pb::SessionSpecifics* specifics) { |
| 960 sessions::SessionTab* session_tab = NULL; | 960 sessions::SessionTab* session_tab = nullptr; |
| 961 session_tab = session_tracker_.GetTab(current_machine_tag(), | 961 session_tab = session_tracker_.GetTab(current_machine_tag(), |
| 962 tab_delegate.GetSessionId(), | 962 tab_delegate.GetSessionId(), |
| 963 tab_delegate.GetSyncId()); | 963 tab_delegate.GetSyncId()); |
| 964 SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab); | 964 SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab); |
| 965 SetVariationIds(session_tab); | 965 SetVariationIds(session_tab); |
| 966 sync_pb::SessionTab tab_s = session_tab->ToSyncData(); | 966 sync_pb::SessionTab tab_s = session_tab->ToSyncData(); |
| 967 specifics->set_session_tag(current_machine_tag_); | 967 specifics->set_session_tag(current_machine_tag_); |
| 968 specifics->set_tab_node_id(tab_delegate.GetSyncId()); | 968 specifics->set_tab_node_id(tab_delegate.GetSyncId()); |
| 969 specifics->mutable_tab()->CopyFrom(tab_s); | 969 specifics->mutable_tab()->CopyFrom(tab_s); |
| 970 } | 970 } |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1125 } | 1125 } |
| 1126 | 1126 |
| 1127 // static | 1127 // static |
| 1128 std::string SessionsSyncManager::TagHashFromSpecifics( | 1128 std::string SessionsSyncManager::TagHashFromSpecifics( |
| 1129 const sync_pb::SessionSpecifics& specifics) { | 1129 const sync_pb::SessionSpecifics& specifics) { |
| 1130 return syncer::syncable::GenerateSyncableHash(syncer::SESSIONS, | 1130 return syncer::syncable::GenerateSyncableHash(syncer::SESSIONS, |
| 1131 TagFromSpecifics(specifics)); | 1131 TagFromSpecifics(specifics)); |
| 1132 } | 1132 } |
| 1133 | 1133 |
| 1134 }; // namespace sync_sessions | 1134 }; // namespace sync_sessions |
| OLD | NEW |