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

Side by Side Diff: chrome/browser/sync/glue/session_model_associator.cc

Issue 6375007: [Sync] Refactored ProfileSyncService and remove its backend() function (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add comment Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/sync/glue/session_model_associator.h" 5 #include "chrome/browser/sync/glue/session_model_associator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 const std::string& id, 48 const std::string& id,
49 sync_api::BaseNode* sync_node) { 49 sync_api::BaseNode* sync_node) {
50 NOTREACHED(); 50 NOTREACHED();
51 return false; 51 return false;
52 } 52 }
53 53
54 bool SessionModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) { 54 bool SessionModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
55 DCHECK(CalledOnValidThread()); 55 DCHECK(CalledOnValidThread());
56 CHECK(has_nodes); 56 CHECK(has_nodes);
57 *has_nodes = false; 57 *has_nodes = false;
58 sync_api::ReadTransaction trans( 58 sync_api::ReadTransaction trans(sync_service_->GetUserShare());
59 sync_service_->backend()->GetUserShareHandle());
60 sync_api::ReadNode root(&trans); 59 sync_api::ReadNode root(&trans);
61 if (!root.InitByTagLookup(kSessionsTag)) { 60 if (!root.InitByTagLookup(kSessionsTag)) {
62 LOG(ERROR) << kNoSessionsFolderError; 61 LOG(ERROR) << kNoSessionsFolderError;
63 return false; 62 return false;
64 } 63 }
65 // The sync model has user created nodes iff the sessions folder has 64 // The sync model has user created nodes iff the sessions folder has
66 // any children. 65 // any children.
67 *has_nodes = root.GetFirstChildId() != sync_api::kInvalidId; 66 *has_nodes = root.GetFirstChildId() != sync_api::kInvalidId;
68 return true; 67 return true;
69 } 68 }
70 69
71 int64 SessionModelAssociator::GetSyncIdFromChromeId(const size_t& id) { 70 int64 SessionModelAssociator::GetSyncIdFromChromeId(const size_t& id) {
72 DCHECK(CalledOnValidThread()); 71 DCHECK(CalledOnValidThread());
73 return GetSyncIdFromSessionTag(TabIdToTag(GetCurrentMachineTag(), id)); 72 return GetSyncIdFromSessionTag(TabIdToTag(GetCurrentMachineTag(), id));
74 } 73 }
75 74
76 int64 SessionModelAssociator::GetSyncIdFromSessionTag(const std::string& tag) { 75 int64 SessionModelAssociator::GetSyncIdFromSessionTag(const std::string& tag) {
77 DCHECK(CalledOnValidThread()); 76 DCHECK(CalledOnValidThread());
78 sync_api::ReadTransaction trans( 77 sync_api::ReadTransaction trans(sync_service_->GetUserShare());
79 sync_service_->backend()->GetUserShareHandle());
80 sync_api::ReadNode node(&trans); 78 sync_api::ReadNode node(&trans);
81 if (!node.InitByClientTagLookup(syncable::SESSIONS, tag)) 79 if (!node.InitByClientTagLookup(syncable::SESSIONS, tag))
82 return sync_api::kInvalidId; 80 return sync_api::kInvalidId;
83 return node.GetId(); 81 return node.GetId();
84 } 82 }
85 void SessionModelAssociator::ReassociateWindows(bool reload_tabs) { 83 void SessionModelAssociator::ReassociateWindows(bool reload_tabs) {
86 DCHECK(CalledOnValidThread()); 84 DCHECK(CalledOnValidThread());
87 sync_pb::SessionSpecifics specifics; 85 sync_pb::SessionSpecifics specifics;
88 specifics.set_session_tag(GetCurrentMachineTag()); 86 specifics.set_session_tag(GetCurrentMachineTag());
89 sync_pb::SessionHeader* header_s = specifics.mutable_header(); 87 sync_pb::SessionHeader* header_s = specifics.mutable_header();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 } 125 }
128 } 126 }
129 // Only add a window if it contains valid tabs. 127 // Only add a window if it contains valid tabs.
130 if (found_tabs) { 128 if (found_tabs) {
131 sync_pb::SessionWindow* header_window = header_s->add_window(); 129 sync_pb::SessionWindow* header_window = header_s->add_window();
132 *header_window = window_s; 130 *header_window = window_s;
133 } 131 }
134 } 132 }
135 } 133 }
136 134
137 sync_api::WriteTransaction trans( 135 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
138 sync_service_->backend()->GetUserShareHandle());
139 sync_api::WriteNode header_node(&trans); 136 sync_api::WriteNode header_node(&trans);
140 if (!header_node.InitByIdLookup(local_session_syncid_)) { 137 if (!header_node.InitByIdLookup(local_session_syncid_)) {
141 LOG(ERROR) << "Failed to load local session header node."; 138 LOG(ERROR) << "Failed to load local session header node.";
142 return; 139 return;
143 } 140 }
144 header_node.SetSessionSpecifics(specifics); 141 header_node.SetSessionSpecifics(specifics);
145 } 142 }
146 143
147 // Static. 144 // Static.
148 bool SessionModelAssociator::ShouldSyncWindowType(const Browser::Type& type) { 145 bool SessionModelAssociator::ShouldSyncWindowType(const Browser::Type& type) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 Associate(&tab, sync_id); 200 Associate(&tab, sync_id);
204 } 201 }
205 202
206 void SessionModelAssociator::Associate(const TabContents* tab, int64 sync_id) { 203 void SessionModelAssociator::Associate(const TabContents* tab, int64 sync_id) {
207 DCHECK(CalledOnValidThread()); 204 DCHECK(CalledOnValidThread());
208 SessionID::id_type session_id = tab->controller().session_id().id(); 205 SessionID::id_type session_id = tab->controller().session_id().id();
209 206
210 TabLinks t(sync_id, tab); 207 TabLinks t(sync_id, tab);
211 tab_map_[session_id] = t; 208 tab_map_[session_id] = t;
212 209
213 sync_api::WriteTransaction trans( 210 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
214 sync_service_->backend()->GetUserShareHandle());
215 WriteTabContentsToSyncModel(*tab, sync_id, &trans); 211 WriteTabContentsToSyncModel(*tab, sync_id, &trans);
216 } 212 }
217 213
218 bool SessionModelAssociator::WriteTabContentsToSyncModel( 214 bool SessionModelAssociator::WriteTabContentsToSyncModel(
219 const TabContents& tab, 215 const TabContents& tab,
220 int64 sync_id, 216 int64 sync_id,
221 sync_api::WriteTransaction* trans) { 217 sync_api::WriteTransaction* trans) {
222 DCHECK(CalledOnValidThread()); 218 DCHECK(CalledOnValidThread());
223 sync_api::WriteNode tab_node(trans); 219 sync_api::WriteNode tab_node(trans);
224 if (!tab_node.InitByIdLookup(sync_id)) { 220 if (!tab_node.InitByIdLookup(sync_id)) {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 352
357 // Ensure that we disassociated properly, otherwise memory might leak. 353 // Ensure that we disassociated properly, otherwise memory might leak.
358 DCHECK(foreign_session_tracker_.empty()); 354 DCHECK(foreign_session_tracker_.empty());
359 DCHECK_EQ(0U, tab_pool_.capacity()); 355 DCHECK_EQ(0U, tab_pool_.capacity());
360 356
361 local_session_syncid_ = sync_api::kInvalidId; 357 local_session_syncid_ = sync_api::kInvalidId;
362 358
363 // Read any available foreign sessions and load any session data we may have. 359 // Read any available foreign sessions and load any session data we may have.
364 // If we don't have any local session data in the db, create a header node. 360 // If we don't have any local session data in the db, create a header node.
365 { 361 {
366 sync_api::WriteTransaction trans( 362 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
367 sync_service_->backend()->GetUserShareHandle());
368 363
369 sync_api::ReadNode root(&trans); 364 sync_api::ReadNode root(&trans);
370 if (!root.InitByTagLookup(kSessionsTag)) { 365 if (!root.InitByTagLookup(kSessionsTag)) {
371 LOG(ERROR) << kNoSessionsFolderError; 366 LOG(ERROR) << kNoSessionsFolderError;
372 return false; 367 return false;
373 } 368 }
374 369
375 // Make sure we have a machine tag. 370 // Make sure we have a machine tag.
376 if (current_machine_tag_.empty()) 371 if (current_machine_tag_.empty())
377 InitializeCurrentMachineTag(&trans); 372 InitializeCurrentMachineTag(&trans);
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 694
700 void SessionModelAssociator::TabNodePool::AddTabNode(int64 sync_id) { 695 void SessionModelAssociator::TabNodePool::AddTabNode(int64 sync_id) {
701 tab_syncid_pool_.resize(tab_syncid_pool_.size() + 1); 696 tab_syncid_pool_.resize(tab_syncid_pool_.size() + 1);
702 tab_syncid_pool_[static_cast<size_t>(++tab_pool_fp_)] = sync_id; 697 tab_syncid_pool_[static_cast<size_t>(++tab_pool_fp_)] = sync_id;
703 } 698 }
704 699
705 int64 SessionModelAssociator::TabNodePool::GetFreeTabNode() { 700 int64 SessionModelAssociator::TabNodePool::GetFreeTabNode() {
706 DCHECK_GT(machine_tag_.length(), 0U); 701 DCHECK_GT(machine_tag_.length(), 0U);
707 if (tab_pool_fp_ == -1) { 702 if (tab_pool_fp_ == -1) {
708 // Tab pool has no free nodes, allocate new one. 703 // Tab pool has no free nodes, allocate new one.
709 sync_api::WriteTransaction trans( 704 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
710 sync_service_->backend()->GetUserShareHandle());
711 sync_api::ReadNode root(&trans); 705 sync_api::ReadNode root(&trans);
712 if (!root.InitByTagLookup(kSessionsTag)) { 706 if (!root.InitByTagLookup(kSessionsTag)) {
713 LOG(ERROR) << kNoSessionsFolderError; 707 LOG(ERROR) << kNoSessionsFolderError;
714 return 0; 708 return 0;
715 } 709 }
716 size_t tab_node_id = tab_syncid_pool_.size(); 710 size_t tab_node_id = tab_syncid_pool_.size();
717 std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id); 711 std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id);
718 sync_api::WriteNode tab_node(&trans); 712 sync_api::WriteNode tab_node(&trans);
719 if (!tab_node.InitUniqueByCreation(syncable::SESSIONS, root, 713 if (!tab_node.InitUniqueByCreation(syncable::SESSIONS, root,
720 tab_node_tag)) { 714 tab_node_tag)) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 int handle, 825 int handle,
832 std::vector<SessionWindow*>* windows) { 826 std::vector<SessionWindow*>* windows) {
833 DCHECK(CalledOnValidThread()); 827 DCHECK(CalledOnValidThread());
834 DCHECK(local_session_syncid_); 828 DCHECK(local_session_syncid_);
835 829
836 sync_pb::SessionSpecifics specifics; 830 sync_pb::SessionSpecifics specifics;
837 specifics.set_session_tag(GetCurrentMachineTag()); 831 specifics.set_session_tag(GetCurrentMachineTag());
838 sync_pb::SessionHeader* header_s = specifics.mutable_header(); 832 sync_pb::SessionHeader* header_s = specifics.mutable_header();
839 PopulateSessionSpecificsHeader(*windows, header_s); 833 PopulateSessionSpecificsHeader(*windows, header_s);
840 834
841 sync_api::WriteTransaction trans( 835 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
842 sync_service_->backend()->GetUserShareHandle());
843 sync_api::ReadNode root(&trans); 836 sync_api::ReadNode root(&trans);
844 if (!root.InitByTagLookup(kSessionsTag)) { 837 if (!root.InitByTagLookup(kSessionsTag)) {
845 LOG(ERROR) << kNoSessionsFolderError; 838 LOG(ERROR) << kNoSessionsFolderError;
846 return; 839 return;
847 } 840 }
848 841
849 sync_api::WriteNode header_node(&trans); 842 sync_api::WriteNode header_node(&trans);
850 if (!header_node.InitByIdLookup(local_session_syncid_)) { 843 if (!header_node.InitByIdLookup(local_session_syncid_)) {
851 LOG(ERROR) << "Failed to load local session header node."; 844 LOG(ERROR) << "Failed to load local session header node.";
852 return; 845 return;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 DCHECK(CalledOnValidThread()); 899 DCHECK(CalledOnValidThread());
907 DCHECK(tab_map_.empty()); 900 DCHECK(tab_map_.empty());
908 for (size_t i = 0; i < window.tabs.size(); ++i) { 901 for (size_t i = 0; i < window.tabs.size(); ++i) {
909 SessionTab* tab = window.tabs[i]; 902 SessionTab* tab = window.tabs[i];
910 int64 id = tab_pool_.GetFreeTabNode(); 903 int64 id = tab_pool_.GetFreeTabNode();
911 if (id == -1) { 904 if (id == -1) {
912 LOG(ERROR) << "Failed to find/generate free sync node for tab."; 905 LOG(ERROR) << "Failed to find/generate free sync node for tab.";
913 return false; 906 return false;
914 } 907 }
915 908
916 sync_api::WriteTransaction trans( 909 sync_api::WriteTransaction trans(sync_service_->GetUserShare());
917 sync_service_->backend()->GetUserShareHandle());
918 if (!WriteSessionTabToSyncModel(*tab, id, &trans)) { 910 if (!WriteSessionTabToSyncModel(*tab, id, &trans)) {
919 return false; 911 return false;
920 } 912 }
921 913
922 TabLinks t(id, tab); 914 TabLinks t(id, tab);
923 tab_map_[tab->tab_id.id()] = t; 915 tab_map_[tab->tab_id.id()] = t;
924 } 916 }
925 return true; 917 return true;
926 } 918 }
927 919
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 for (std::vector<TabNavigation>::const_iterator i = 951 for (std::vector<TabNavigation>::const_iterator i =
960 tab.navigations.begin(); i != tab.navigations.end(); ++i) { 952 tab.navigations.begin(); i != tab.navigations.end(); ++i) {
961 const TabNavigation navigation = *i; 953 const TabNavigation navigation = *i;
962 sync_pb::TabNavigation* tab_navigation = 954 sync_pb::TabNavigation* tab_navigation =
963 session_tab->add_navigation(); 955 session_tab->add_navigation();
964 PopulateSessionSpecificsNavigation(&navigation, tab_navigation); 956 PopulateSessionSpecificsNavigation(&navigation, tab_navigation);
965 } 957 }
966 } 958 }
967 959
968 } // namespace browser_sync 960 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/preference_model_associator.cc ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698