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

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

Issue 8851006: [Sync] Replace all instances of ModelTypeSet with ModelEnumSet (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup pass #2 Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/sync_backend_registrar.h" 5 #include "chrome/browser/sync/glue/sync_backend_registrar.h"
6 6
7 #include <algorithm>
8 #include <cstddef> 7 #include <cstddef>
9 8
10 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
11 #include "base/logging.h" 10 #include "base/logging.h"
12 #include "base/message_loop.h" 11 #include "base/message_loop.h"
13 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/sync/engine/passive_model_worker.h" 13 #include "chrome/browser/sync/engine/passive_model_worker.h"
15 #include "chrome/browser/sync/glue/browser_thread_model_worker.h" 14 #include "chrome/browser/sync/glue/browser_thread_model_worker.h"
16 #include "chrome/browser/sync/glue/change_processor.h" 15 #include "chrome/browser/sync/glue/change_processor.h"
17 #include "chrome/browser/sync/glue/history_model_worker.h" 16 #include "chrome/browser/sync/glue/history_model_worker.h"
(...skipping 27 matching lines...) Expand all
45 return true; 44 return true;
46 case MODEL_SAFE_GROUP_COUNT: 45 case MODEL_SAFE_GROUP_COUNT:
47 default: 46 default:
48 return false; 47 return false;
49 } 48 }
50 } 49 }
51 50
52 } // namespace 51 } // namespace
53 52
54 SyncBackendRegistrar::SyncBackendRegistrar( 53 SyncBackendRegistrar::SyncBackendRegistrar(
55 const syncable::ModelTypeSet& initial_types, 54 syncable::ModelEnumSet initial_types,
56 const std::string& name, Profile* profile, 55 const std::string& name, Profile* profile,
57 MessageLoop* sync_loop) : 56 MessageLoop* sync_loop) :
58 name_(name), 57 name_(name),
59 profile_(profile), 58 profile_(profile),
60 sync_loop_(sync_loop), 59 sync_loop_(sync_loop),
61 ui_worker_(new UIModelWorker()), 60 ui_worker_(new UIModelWorker()),
62 stopped_on_ui_thread_(false) { 61 stopped_on_ui_thread_(false) {
63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
64 CHECK(profile_); 63 CHECK(profile_);
65 DCHECK(sync_loop_); 64 DCHECK(sync_loop_);
66 workers_[GROUP_DB] = new DatabaseModelWorker(); 65 workers_[GROUP_DB] = new DatabaseModelWorker();
67 workers_[GROUP_FILE] = new FileModelWorker(); 66 workers_[GROUP_FILE] = new FileModelWorker();
68 workers_[GROUP_UI] = ui_worker_; 67 workers_[GROUP_UI] = ui_worker_;
69 workers_[GROUP_PASSIVE] = new PassiveModelWorker(sync_loop_); 68 workers_[GROUP_PASSIVE] = new PassiveModelWorker(sync_loop_);
70 69
71 // Any datatypes that we want the syncer to pull down must be in the 70 // Any datatypes that we want the syncer to pull down must be in the
72 // routing_info map. We set them to group passive, meaning that 71 // routing_info map. We set them to group passive, meaning that
73 // updates will be applied to sync, but not dispatched to the native 72 // updates will be applied to sync, but not dispatched to the native
74 // models. 73 // models.
75 for (syncable::ModelTypeSet::const_iterator it = initial_types.begin(); 74 for (syncable::ModelEnumSet::Iterator it = initial_types.First();
76 it != initial_types.end(); ++it) { 75 it.Good(); it.Inc()) {
77 routing_info_[*it] = GROUP_PASSIVE; 76 routing_info_[it.Get()] = GROUP_PASSIVE;
78 } 77 }
79 78
80 HistoryService* history_service = profile->GetHistoryService( 79 HistoryService* history_service = profile->GetHistoryService(
81 Profile::IMPLICIT_ACCESS); 80 Profile::IMPLICIT_ACCESS);
82 if (history_service) { 81 if (history_service) {
83 workers_[GROUP_HISTORY] = new HistoryModelWorker(history_service); 82 workers_[GROUP_HISTORY] = new HistoryModelWorker(history_service);
84 } else { 83 } else {
85 LOG_IF(WARNING, initial_types.count(syncable::TYPED_URLS) > 0) 84 LOG_IF(WARNING, initial_types.Has(syncable::TYPED_URLS))
86 << "History store disabled, cannot sync Omnibox History"; 85 << "History store disabled, cannot sync Omnibox History";
87 routing_info_.erase(syncable::TYPED_URLS); 86 routing_info_.erase(syncable::TYPED_URLS);
88 } 87 }
89 88
90 PasswordStore* password_store = 89 PasswordStore* password_store =
91 profile->GetPasswordStore(Profile::IMPLICIT_ACCESS); 90 profile->GetPasswordStore(Profile::IMPLICIT_ACCESS);
92 if (password_store) { 91 if (password_store) {
93 workers_[GROUP_PASSWORD] = new PasswordModelWorker(password_store); 92 workers_[GROUP_PASSWORD] = new PasswordModelWorker(password_store);
94 } else { 93 } else {
95 LOG_IF(WARNING, initial_types.count(syncable::PASSWORDS) > 0) 94 LOG_IF(WARNING, initial_types.Has(syncable::PASSWORDS))
96 << "Password store not initialized, cannot sync passwords"; 95 << "Password store not initialized, cannot sync passwords";
97 routing_info_.erase(syncable::PASSWORDS); 96 routing_info_.erase(syncable::PASSWORDS);
98 } 97 }
99 } 98 }
100 99
101 SyncBackendRegistrar::~SyncBackendRegistrar() { 100 SyncBackendRegistrar::~SyncBackendRegistrar() {
102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
103 DCHECK(stopped_on_ui_thread_); 102 DCHECK(stopped_on_ui_thread_);
104 } 103 }
105 104
106 bool SyncBackendRegistrar::IsNigoriEnabled() const { 105 bool SyncBackendRegistrar::IsNigoriEnabled() const {
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 106 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
108 base::AutoLock lock(lock_); 107 base::AutoLock lock(lock_);
109 return routing_info_.find(syncable::NIGORI) != routing_info_.end(); 108 return routing_info_.find(syncable::NIGORI) != routing_info_.end();
110 } 109 }
111 110
112 syncable::ModelTypeSet SyncBackendRegistrar::ConfigureDataTypes( 111 syncable::ModelEnumSet SyncBackendRegistrar::ConfigureDataTypes(
113 const syncable::ModelTypeSet& types_to_add, 112 syncable::ModelEnumSet types_to_add,
114 const syncable::ModelTypeSet& types_to_remove) { 113 syncable::ModelEnumSet types_to_remove) {
115 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
116 if (DCHECK_IS_ON()) { 115 DCHECK(Intersection(types_to_add, types_to_remove).Empty());
117 syncable::ModelTypeSet intersection; 116 syncable::ModelEnumSet filtered_types_to_add = types_to_add;
118 std::set_intersection(types_to_add.begin(), types_to_add.end(),
119 types_to_remove.begin(), types_to_remove.end(),
120 std::inserter(intersection, intersection.end()));
121 DCHECK(intersection.empty());
122 }
123 syncable::ModelTypeSet filtered_types_to_add = types_to_add;
124 if (workers_.count(GROUP_HISTORY) == 0) { 117 if (workers_.count(GROUP_HISTORY) == 0) {
125 LOG(WARNING) << "No history worker -- removing TYPED_URLS"; 118 LOG(WARNING) << "No history worker -- removing TYPED_URLS";
126 filtered_types_to_add.erase(syncable::TYPED_URLS); 119 filtered_types_to_add.Remove(syncable::TYPED_URLS);
127 } 120 }
128 if (workers_.count(GROUP_PASSWORD) == 0) { 121 if (workers_.count(GROUP_PASSWORD) == 0) {
129 LOG(WARNING) << "No password worker -- removing PASSWORDS"; 122 LOG(WARNING) << "No password worker -- removing PASSWORDS";
130 filtered_types_to_add.erase(syncable::PASSWORDS); 123 filtered_types_to_add.Remove(syncable::PASSWORDS);
131 } 124 }
132 125
133 base::AutoLock lock(lock_); 126 base::AutoLock lock(lock_);
134 syncable::ModelTypeSet newly_added_types; 127 syncable::ModelEnumSet newly_added_types;
135 for (syncable::ModelTypeSet::const_iterator it = 128 for (syncable::ModelEnumSet::Iterator it =
136 filtered_types_to_add.begin(); 129 filtered_types_to_add.First();
137 it != filtered_types_to_add.end(); ++it) { 130 it.Good(); it.Inc()) {
138 // Add a newly specified data type as GROUP_PASSIVE into the 131 // Add a newly specified data type as GROUP_PASSIVE into the
139 // routing_info, if it does not already exist. 132 // routing_info, if it does not already exist.
140 if (routing_info_.count(*it) == 0) { 133 if (routing_info_.count(it.Get()) == 0) {
141 routing_info_[*it] = GROUP_PASSIVE; 134 routing_info_[it.Get()] = GROUP_PASSIVE;
142 newly_added_types.insert(*it); 135 newly_added_types.Put(it.Get());
143 } 136 }
144 } 137 }
145 for (syncable::ModelTypeSet::const_iterator it = types_to_remove.begin(); 138 for (syncable::ModelEnumSet::Iterator it = types_to_remove.First();
146 it != types_to_remove.end(); ++it) { 139 it.Good(); it.Inc()) {
147 routing_info_.erase(*it); 140 routing_info_.erase(it.Get());
148 } 141 }
149 142
150 // TODO(akalin): Use SVLOG/SLOG if we add any more logging. 143 // TODO(akalin): Use SVLOG/SLOG if we add any more logging.
151 DVLOG(1) << name_ << ": Adding types " 144 DVLOG(1) << name_ << ": Adding types "
152 << syncable::ModelTypeSetToString(types_to_add) 145 << syncable::ModelEnumSetToString(types_to_add)
153 << " (with newly-added types " 146 << " (with newly-added types "
154 << syncable::ModelTypeSetToString(newly_added_types) 147 << syncable::ModelEnumSetToString(newly_added_types)
155 << ") and removing types " 148 << ") and removing types "
156 << syncable::ModelTypeSetToString(types_to_remove) 149 << syncable::ModelEnumSetToString(types_to_remove)
157 << " to get new routing info " 150 << " to get new routing info "
158 << ModelSafeRoutingInfoToString(routing_info_); 151 << ModelSafeRoutingInfoToString(routing_info_);
159 152
160 return newly_added_types; 153 return newly_added_types;
161 } 154 }
162 155
163 void SyncBackendRegistrar::StopOnUIThread() { 156 void SyncBackendRegistrar::StopOnUIThread() {
164 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
165 DCHECK(!stopped_on_ui_thread_); 158 DCHECK(!stopped_on_ui_thread_);
166 ui_worker_->Stop(); 159 ui_worker_->Stop();
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 return it->second; 278 return it->second;
286 } 279 }
287 280
288 bool SyncBackendRegistrar::IsCurrentThreadSafeForModel( 281 bool SyncBackendRegistrar::IsCurrentThreadSafeForModel(
289 syncable::ModelType model_type) const { 282 syncable::ModelType model_type) const {
290 lock_.AssertAcquired(); 283 lock_.AssertAcquired();
291 return IsOnThreadForGroup(GetGroupForModelType(model_type, routing_info_)); 284 return IsOnThreadForGroup(GetGroupForModelType(model_type, routing_info_));
292 } 285 }
293 286
294 } // namespace browser_sync 287 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_registrar.h ('k') | chrome/browser/sync/glue/sync_backend_registrar_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698