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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/sync_worker.cc

Issue 2189113002: Rename CalledOnValidSequencedThread() to CalledOnValidSequence(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 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 "chrome/browser/sync_file_system/drive_backend/sync_worker.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 weak_ptr_factory_(this) { 60 weak_ptr_factory_(this) {
61 sequence_checker_.DetachFromSequence(); 61 sequence_checker_.DetachFromSequence();
62 DCHECK(base_dir_.IsAbsolute()); 62 DCHECK(base_dir_.IsAbsolute());
63 } 63 }
64 64
65 SyncWorker::~SyncWorker() { 65 SyncWorker::~SyncWorker() {
66 observers_.Clear(); 66 observers_.Clear();
67 } 67 }
68 68
69 void SyncWorker::Initialize(std::unique_ptr<SyncEngineContext> context) { 69 void SyncWorker::Initialize(std::unique_ptr<SyncEngineContext> context) {
70 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 70 DCHECK(sequence_checker_.CalledOnValidSequence());
71 DCHECK(!task_manager_); 71 DCHECK(!task_manager_);
72 72
73 context_ = std::move(context); 73 context_ = std::move(context);
74 74
75 task_manager_.reset(new SyncTaskManager( 75 task_manager_.reset(new SyncTaskManager(
76 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */, 76 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */,
77 context_->GetWorkerTaskRunner(), 77 context_->GetWorkerTaskRunner(),
78 context_->GetWorkerPool())); 78 context_->GetWorkerPool()));
79 task_manager_->Initialize(SYNC_STATUS_OK); 79 task_manager_->Initialize(SYNC_STATUS_OK);
80 80
81 PostInitializeTask(); 81 PostInitializeTask();
82 } 82 }
83 83
84 void SyncWorker::RegisterOrigin( 84 void SyncWorker::RegisterOrigin(
85 const GURL& origin, 85 const GURL& origin,
86 const SyncStatusCallback& callback) { 86 const SyncStatusCallback& callback) {
87 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 87 DCHECK(sequence_checker_.CalledOnValidSequence());
88 88
89 if (!GetMetadataDatabase()) 89 if (!GetMetadataDatabase())
90 PostInitializeTask(); 90 PostInitializeTask();
91 91
92 std::unique_ptr<RegisterAppTask> task( 92 std::unique_ptr<RegisterAppTask> task(
93 new RegisterAppTask(context_.get(), origin.host())); 93 new RegisterAppTask(context_.get(), origin.host()));
94 if (task->CanFinishImmediately()) { 94 if (task->CanFinishImmediately()) {
95 callback.Run(SYNC_STATUS_OK); 95 callback.Run(SYNC_STATUS_OK);
96 return; 96 return;
97 } 97 }
98 98
99 task_manager_->ScheduleSyncTask(FROM_HERE, std::move(task), 99 task_manager_->ScheduleSyncTask(FROM_HERE, std::move(task),
100 SyncTaskManager::PRIORITY_HIGH, callback); 100 SyncTaskManager::PRIORITY_HIGH, callback);
101 } 101 }
102 102
103 void SyncWorker::EnableOrigin( 103 void SyncWorker::EnableOrigin(
104 const GURL& origin, 104 const GURL& origin,
105 const SyncStatusCallback& callback) { 105 const SyncStatusCallback& callback) {
106 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 106 DCHECK(sequence_checker_.CalledOnValidSequence());
107 107
108 task_manager_->ScheduleTask( 108 task_manager_->ScheduleTask(
109 FROM_HERE, 109 FROM_HERE,
110 base::Bind(&SyncWorker::DoEnableApp, 110 base::Bind(&SyncWorker::DoEnableApp,
111 weak_ptr_factory_.GetWeakPtr(), 111 weak_ptr_factory_.GetWeakPtr(),
112 origin.host()), 112 origin.host()),
113 SyncTaskManager::PRIORITY_HIGH, 113 SyncTaskManager::PRIORITY_HIGH,
114 callback); 114 callback);
115 } 115 }
116 116
117 void SyncWorker::DisableOrigin( 117 void SyncWorker::DisableOrigin(
118 const GURL& origin, 118 const GURL& origin,
119 const SyncStatusCallback& callback) { 119 const SyncStatusCallback& callback) {
120 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 120 DCHECK(sequence_checker_.CalledOnValidSequence());
121 121
122 task_manager_->ScheduleTask( 122 task_manager_->ScheduleTask(
123 FROM_HERE, 123 FROM_HERE,
124 base::Bind(&SyncWorker::DoDisableApp, 124 base::Bind(&SyncWorker::DoDisableApp,
125 weak_ptr_factory_.GetWeakPtr(), 125 weak_ptr_factory_.GetWeakPtr(),
126 origin.host()), 126 origin.host()),
127 SyncTaskManager::PRIORITY_HIGH, 127 SyncTaskManager::PRIORITY_HIGH,
128 callback); 128 callback);
129 } 129 }
130 130
131 void SyncWorker::UninstallOrigin( 131 void SyncWorker::UninstallOrigin(
132 const GURL& origin, 132 const GURL& origin,
133 RemoteFileSyncService::UninstallFlag flag, 133 RemoteFileSyncService::UninstallFlag flag,
134 const SyncStatusCallback& callback) { 134 const SyncStatusCallback& callback) {
135 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 135 DCHECK(sequence_checker_.CalledOnValidSequence());
136 136
137 task_manager_->ScheduleSyncTask( 137 task_manager_->ScheduleSyncTask(
138 FROM_HERE, std::unique_ptr<SyncTask>( 138 FROM_HERE, std::unique_ptr<SyncTask>(
139 new UninstallAppTask(context_.get(), origin.host(), flag)), 139 new UninstallAppTask(context_.get(), origin.host(), flag)),
140 SyncTaskManager::PRIORITY_HIGH, callback); 140 SyncTaskManager::PRIORITY_HIGH, callback);
141 } 141 }
142 142
143 void SyncWorker::ProcessRemoteChange(const SyncFileCallback& callback) { 143 void SyncWorker::ProcessRemoteChange(const SyncFileCallback& callback) {
144 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 144 DCHECK(sequence_checker_.CalledOnValidSequence());
145 145
146 RemoteToLocalSyncer* syncer = new RemoteToLocalSyncer(context_.get()); 146 RemoteToLocalSyncer* syncer = new RemoteToLocalSyncer(context_.get());
147 task_manager_->ScheduleSyncTask( 147 task_manager_->ScheduleSyncTask(
148 FROM_HERE, std::unique_ptr<SyncTask>(syncer), 148 FROM_HERE, std::unique_ptr<SyncTask>(syncer),
149 SyncTaskManager::PRIORITY_MED, 149 SyncTaskManager::PRIORITY_MED,
150 base::Bind(&SyncWorker::DidProcessRemoteChange, 150 base::Bind(&SyncWorker::DidProcessRemoteChange,
151 weak_ptr_factory_.GetWeakPtr(), syncer, callback)); 151 weak_ptr_factory_.GetWeakPtr(), syncer, callback));
152 } 152 }
153 153
154 void SyncWorker::SetRemoteChangeProcessor( 154 void SyncWorker::SetRemoteChangeProcessor(
155 RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) { 155 RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) {
156 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 156 DCHECK(sequence_checker_.CalledOnValidSequence());
157 157
158 context_->SetRemoteChangeProcessor(remote_change_processor_on_worker); 158 context_->SetRemoteChangeProcessor(remote_change_processor_on_worker);
159 } 159 }
160 160
161 RemoteServiceState SyncWorker::GetCurrentState() const { 161 RemoteServiceState SyncWorker::GetCurrentState() const {
162 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 162 DCHECK(sequence_checker_.CalledOnValidSequence());
163 163
164 if (!sync_enabled_) 164 if (!sync_enabled_)
165 return REMOTE_SERVICE_DISABLED; 165 return REMOTE_SERVICE_DISABLED;
166 return service_state_; 166 return service_state_;
167 } 167 }
168 168
169 void SyncWorker::GetOriginStatusMap( 169 void SyncWorker::GetOriginStatusMap(
170 const RemoteFileSyncService::StatusMapCallback& callback) { 170 const RemoteFileSyncService::StatusMapCallback& callback) {
171 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 171 DCHECK(sequence_checker_.CalledOnValidSequence());
172 172
173 if (!GetMetadataDatabase()) 173 if (!GetMetadataDatabase())
174 return; 174 return;
175 175
176 std::vector<std::string> app_ids; 176 std::vector<std::string> app_ids;
177 GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids); 177 GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids);
178 178
179 std::unique_ptr<RemoteFileSyncService::OriginStatusMap> status_map( 179 std::unique_ptr<RemoteFileSyncService::OriginStatusMap> status_map(
180 new RemoteFileSyncService::OriginStatusMap); 180 new RemoteFileSyncService::OriginStatusMap);
181 for (std::vector<std::string>::const_iterator itr = app_ids.begin(); 181 for (std::vector<std::string>::const_iterator itr = app_ids.begin();
182 itr != app_ids.end(); ++itr) { 182 itr != app_ids.end(); ++itr) {
183 const std::string& app_id = *itr; 183 const std::string& app_id = *itr;
184 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id); 184 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id);
185 (*status_map)[origin] = 185 (*status_map)[origin] =
186 GetMetadataDatabase()->IsAppEnabled(app_id) ? "Enabled" : "Disabled"; 186 GetMetadataDatabase()->IsAppEnabled(app_id) ? "Enabled" : "Disabled";
187 } 187 }
188 188
189 callback.Run(std::move(status_map)); 189 callback.Run(std::move(status_map));
190 } 190 }
191 191
192 std::unique_ptr<base::ListValue> SyncWorker::DumpFiles(const GURL& origin) { 192 std::unique_ptr<base::ListValue> SyncWorker::DumpFiles(const GURL& origin) {
193 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 193 DCHECK(sequence_checker_.CalledOnValidSequence());
194 194
195 if (!GetMetadataDatabase()) 195 if (!GetMetadataDatabase())
196 return std::unique_ptr<base::ListValue>(); 196 return std::unique_ptr<base::ListValue>();
197 return GetMetadataDatabase()->DumpFiles(origin.host()); 197 return GetMetadataDatabase()->DumpFiles(origin.host());
198 } 198 }
199 199
200 std::unique_ptr<base::ListValue> SyncWorker::DumpDatabase() { 200 std::unique_ptr<base::ListValue> SyncWorker::DumpDatabase() {
201 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 201 DCHECK(sequence_checker_.CalledOnValidSequence());
202 202
203 if (!GetMetadataDatabase()) 203 if (!GetMetadataDatabase())
204 return std::unique_ptr<base::ListValue>(); 204 return std::unique_ptr<base::ListValue>();
205 return GetMetadataDatabase()->DumpDatabase(); 205 return GetMetadataDatabase()->DumpDatabase();
206 } 206 }
207 207
208 void SyncWorker::SetSyncEnabled(bool enabled) { 208 void SyncWorker::SetSyncEnabled(bool enabled) {
209 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 209 DCHECK(sequence_checker_.CalledOnValidSequence());
210 210
211 if (sync_enabled_ == enabled) 211 if (sync_enabled_ == enabled)
212 return; 212 return;
213 213
214 RemoteServiceState old_state = GetCurrentState(); 214 RemoteServiceState old_state = GetCurrentState();
215 sync_enabled_ = enabled; 215 sync_enabled_ = enabled;
216 if (old_state == GetCurrentState()) 216 if (old_state == GetCurrentState())
217 return; 217 return;
218 218
219 FOR_EACH_OBSERVER( 219 FOR_EACH_OBSERVER(
220 Observer, 220 Observer,
221 observers_, 221 observers_,
222 UpdateServiceState( 222 UpdateServiceState(
223 GetCurrentState(), 223 GetCurrentState(),
224 enabled ? "Sync is enabled" : "Sync is disabled")); 224 enabled ? "Sync is enabled" : "Sync is disabled"));
225 } 225 }
226 226
227 void SyncWorker::PromoteDemotedChanges(const base::Closure& callback) { 227 void SyncWorker::PromoteDemotedChanges(const base::Closure& callback) {
228 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 228 DCHECK(sequence_checker_.CalledOnValidSequence());
229 229
230 MetadataDatabase* metadata_db = GetMetadataDatabase(); 230 MetadataDatabase* metadata_db = GetMetadataDatabase();
231 if (metadata_db && metadata_db->HasDemotedDirtyTracker()) { 231 if (metadata_db && metadata_db->HasDemotedDirtyTracker()) {
232 metadata_db->PromoteDemotedTrackers(); 232 metadata_db->PromoteDemotedTrackers();
233 FOR_EACH_OBSERVER( 233 FOR_EACH_OBSERVER(
234 Observer, 234 Observer,
235 observers_, 235 observers_,
236 OnPendingFileListUpdated(metadata_db->CountDirtyTracker())); 236 OnPendingFileListUpdated(metadata_db->CountDirtyTracker()));
237 } 237 }
238 callback.Run(); 238 callback.Run();
239 } 239 }
240 240
241 void SyncWorker::ApplyLocalChange(const FileChange& local_change, 241 void SyncWorker::ApplyLocalChange(const FileChange& local_change,
242 const base::FilePath& local_path, 242 const base::FilePath& local_path,
243 const SyncFileMetadata& local_metadata, 243 const SyncFileMetadata& local_metadata,
244 const storage::FileSystemURL& url, 244 const storage::FileSystemURL& url,
245 const SyncStatusCallback& callback) { 245 const SyncStatusCallback& callback) {
246 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 246 DCHECK(sequence_checker_.CalledOnValidSequence());
247 247
248 LocalToRemoteSyncer* syncer = new LocalToRemoteSyncer( 248 LocalToRemoteSyncer* syncer = new LocalToRemoteSyncer(
249 context_.get(), local_metadata, local_change, local_path, url); 249 context_.get(), local_metadata, local_change, local_path, url);
250 task_manager_->ScheduleSyncTask( 250 task_manager_->ScheduleSyncTask(
251 FROM_HERE, std::unique_ptr<SyncTask>(syncer), 251 FROM_HERE, std::unique_ptr<SyncTask>(syncer),
252 SyncTaskManager::PRIORITY_MED, 252 SyncTaskManager::PRIORITY_MED,
253 base::Bind(&SyncWorker::DidApplyLocalChange, 253 base::Bind(&SyncWorker::DidApplyLocalChange,
254 weak_ptr_factory_.GetWeakPtr(), syncer, callback)); 254 weak_ptr_factory_.GetWeakPtr(), syncer, callback));
255 } 255 }
256 256
257 void SyncWorker::MaybeScheduleNextTask() { 257 void SyncWorker::MaybeScheduleNextTask() {
258 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 258 DCHECK(sequence_checker_.CalledOnValidSequence());
259 259
260 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) 260 if (GetCurrentState() == REMOTE_SERVICE_DISABLED)
261 return; 261 return;
262 262
263 // TODO(tzik): Notify observer of OnRemoteChangeQueueUpdated. 263 // TODO(tzik): Notify observer of OnRemoteChangeQueueUpdated.
264 // TODO(tzik): Add an interface to get the number of dirty trackers to 264 // TODO(tzik): Add an interface to get the number of dirty trackers to
265 // MetadataDatabase. 265 // MetadataDatabase.
266 266
267 if (MaybeStartFetchChanges()) 267 if (MaybeStartFetchChanges())
268 return; 268 return;
269 269
270 if (!call_on_idle_callback_.is_null()) { 270 if (!call_on_idle_callback_.is_null()) {
271 base::Closure callback = call_on_idle_callback_; 271 base::Closure callback = call_on_idle_callback_;
272 call_on_idle_callback_.Reset(); 272 call_on_idle_callback_.Reset();
273 callback.Run(); 273 callback.Run();
274 } 274 }
275 } 275 }
276 276
277 void SyncWorker::NotifyLastOperationStatus( 277 void SyncWorker::NotifyLastOperationStatus(
278 SyncStatusCode status, 278 SyncStatusCode status,
279 bool used_network) { 279 bool used_network) {
280 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 280 DCHECK(sequence_checker_.CalledOnValidSequence());
281 281
282 UpdateServiceStateFromSyncStatusCode(status, used_network); 282 UpdateServiceStateFromSyncStatusCode(status, used_network);
283 283
284 if (GetMetadataDatabase()) { 284 if (GetMetadataDatabase()) {
285 FOR_EACH_OBSERVER( 285 FOR_EACH_OBSERVER(
286 Observer, observers_, 286 Observer, observers_,
287 OnPendingFileListUpdated(GetMetadataDatabase()->CountDirtyTracker())); 287 OnPendingFileListUpdated(GetMetadataDatabase()->CountDirtyTracker()));
288 } 288 }
289 } 289 }
290 290
291 void SyncWorker::RecordTaskLog(std::unique_ptr<TaskLogger::TaskLog> task_log) { 291 void SyncWorker::RecordTaskLog(std::unique_ptr<TaskLogger::TaskLog> task_log) {
292 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 292 DCHECK(sequence_checker_.CalledOnValidSequence());
293 293
294 context_->GetUITaskRunner()->PostTask( 294 context_->GetUITaskRunner()->PostTask(
295 FROM_HERE, 295 FROM_HERE,
296 base::Bind(&TaskLogger::RecordLog, 296 base::Bind(&TaskLogger::RecordLog,
297 context_->GetTaskLogger(), 297 context_->GetTaskLogger(),
298 base::Passed(&task_log))); 298 base::Passed(&task_log)));
299 } 299 }
300 300
301 void SyncWorker::ActivateService(RemoteServiceState service_state, 301 void SyncWorker::ActivateService(RemoteServiceState service_state,
302 const std::string& description) { 302 const std::string& description) {
303 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 303 DCHECK(sequence_checker_.CalledOnValidSequence());
304 UpdateServiceState(service_state, description); 304 UpdateServiceState(service_state, description);
305 if (!GetMetadataDatabase()) { 305 if (!GetMetadataDatabase()) {
306 PostInitializeTask(); 306 PostInitializeTask();
307 return; 307 return;
308 } 308 }
309 309
310 should_check_remote_change_ = true; 310 should_check_remote_change_ = true;
311 MaybeScheduleNextTask(); 311 MaybeScheduleNextTask();
312 } 312 }
313 313
314 void SyncWorker::DeactivateService(const std::string& description) { 314 void SyncWorker::DeactivateService(const std::string& description) {
315 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 315 DCHECK(sequence_checker_.CalledOnValidSequence());
316 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, description); 316 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, description);
317 } 317 }
318 318
319 void SyncWorker::DetachFromSequence() { 319 void SyncWorker::DetachFromSequence() {
320 task_manager_->DetachFromSequence(); 320 task_manager_->DetachFromSequence();
321 context_->DetachFromSequence(); 321 context_->DetachFromSequence();
322 sequence_checker_.DetachFromSequence(); 322 sequence_checker_.DetachFromSequence();
323 } 323 }
324 324
325 void SyncWorker::AddObserver(Observer* observer) { 325 void SyncWorker::AddObserver(Observer* observer) {
326 observers_.AddObserver(observer); 326 observers_.AddObserver(observer);
327 } 327 }
328 328
329 void SyncWorker::DoDisableApp(const std::string& app_id, 329 void SyncWorker::DoDisableApp(const std::string& app_id,
330 const SyncStatusCallback& callback) { 330 const SyncStatusCallback& callback) {
331 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 331 DCHECK(sequence_checker_.CalledOnValidSequence());
332 332
333 if (!GetMetadataDatabase()) { 333 if (!GetMetadataDatabase()) {
334 callback.Run(SYNC_STATUS_OK); 334 callback.Run(SYNC_STATUS_OK);
335 return; 335 return;
336 } 336 }
337 337
338 SyncStatusCode status = GetMetadataDatabase()->DisableApp(app_id); 338 SyncStatusCode status = GetMetadataDatabase()->DisableApp(app_id);
339 callback.Run(status); 339 callback.Run(status);
340 } 340 }
341 341
342 void SyncWorker::DoEnableApp(const std::string& app_id, 342 void SyncWorker::DoEnableApp(const std::string& app_id,
343 const SyncStatusCallback& callback) { 343 const SyncStatusCallback& callback) {
344 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 344 DCHECK(sequence_checker_.CalledOnValidSequence());
345 345
346 if (!GetMetadataDatabase()) { 346 if (!GetMetadataDatabase()) {
347 callback.Run(SYNC_STATUS_OK); 347 callback.Run(SYNC_STATUS_OK);
348 return; 348 return;
349 } 349 }
350 350
351 SyncStatusCode status = GetMetadataDatabase()->EnableApp(app_id); 351 SyncStatusCode status = GetMetadataDatabase()->EnableApp(app_id);
352 callback.Run(status); 352 callback.Run(status);
353 } 353 }
354 354
355 void SyncWorker::PostInitializeTask() { 355 void SyncWorker::PostInitializeTask() {
356 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 356 DCHECK(sequence_checker_.CalledOnValidSequence());
357 DCHECK(!GetMetadataDatabase()); 357 DCHECK(!GetMetadataDatabase());
358 358
359 // This initializer task may not run if MetadataDatabase in context_ is 359 // This initializer task may not run if MetadataDatabase in context_ is
360 // already initialized when it runs. 360 // already initialized when it runs.
361 SyncEngineInitializer* initializer = 361 SyncEngineInitializer* initializer =
362 new SyncEngineInitializer(context_.get(), 362 new SyncEngineInitializer(context_.get(),
363 base_dir_.Append(kDatabaseName), 363 base_dir_.Append(kDatabaseName),
364 env_override_); 364 env_override_);
365 task_manager_->ScheduleSyncTask( 365 task_manager_->ScheduleSyncTask(
366 FROM_HERE, std::unique_ptr<SyncTask>(initializer), 366 FROM_HERE, std::unique_ptr<SyncTask>(initializer),
367 SyncTaskManager::PRIORITY_HIGH, 367 SyncTaskManager::PRIORITY_HIGH,
368 base::Bind(&SyncWorker::DidInitialize, weak_ptr_factory_.GetWeakPtr(), 368 base::Bind(&SyncWorker::DidInitialize, weak_ptr_factory_.GetWeakPtr(),
369 initializer)); 369 initializer));
370 } 370 }
371 371
372 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer, 372 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer,
373 SyncStatusCode status) { 373 SyncStatusCode status) {
374 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 374 DCHECK(sequence_checker_.CalledOnValidSequence());
375 375
376 if (status == SYNC_STATUS_ACCESS_FORBIDDEN) { 376 if (status == SYNC_STATUS_ACCESS_FORBIDDEN) {
377 UpdateServiceState(REMOTE_SERVICE_ACCESS_FORBIDDEN, "Access forbidden"); 377 UpdateServiceState(REMOTE_SERVICE_ACCESS_FORBIDDEN, "Access forbidden");
378 return; 378 return;
379 } 379 }
380 if (status != SYNC_STATUS_OK) { 380 if (status != SYNC_STATUS_OK) {
381 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, 381 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE,
382 "Could not initialize remote service"); 382 "Could not initialize remote service");
383 return; 383 return;
384 } 384 }
385 385
386 std::unique_ptr<MetadataDatabase> metadata_database = 386 std::unique_ptr<MetadataDatabase> metadata_database =
387 initializer->PassMetadataDatabase(); 387 initializer->PassMetadataDatabase();
388 if (metadata_database) { 388 if (metadata_database) {
389 context_->SetMetadataDatabase(std::move(metadata_database)); 389 context_->SetMetadataDatabase(std::move(metadata_database));
390 return; 390 return;
391 } 391 }
392 392
393 UpdateServiceState(REMOTE_SERVICE_OK, std::string()); 393 UpdateServiceState(REMOTE_SERVICE_OK, std::string());
394 UpdateRegisteredApps(); 394 UpdateRegisteredApps();
395 } 395 }
396 396
397 void SyncWorker::UpdateRegisteredApps() { 397 void SyncWorker::UpdateRegisteredApps() {
398 MetadataDatabase* metadata_db = GetMetadataDatabase(); 398 MetadataDatabase* metadata_db = GetMetadataDatabase();
399 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 399 DCHECK(sequence_checker_.CalledOnValidSequence());
400 DCHECK(metadata_db); 400 DCHECK(metadata_db);
401 401
402 std::unique_ptr<std::vector<std::string>> app_ids( 402 std::unique_ptr<std::vector<std::string>> app_ids(
403 new std::vector<std::string>); 403 new std::vector<std::string>);
404 metadata_db->GetRegisteredAppIDs(app_ids.get()); 404 metadata_db->GetRegisteredAppIDs(app_ids.get());
405 405
406 AppStatusMap* app_status = new AppStatusMap; 406 AppStatusMap* app_status = new AppStatusMap;
407 base::Closure callback = 407 base::Closure callback =
408 base::Bind(&SyncWorker::DidQueryAppStatus, 408 base::Bind(&SyncWorker::DidQueryAppStatus,
409 weak_ptr_factory_.GetWeakPtr(), 409 weak_ptr_factory_.GetWeakPtr(),
(...skipping 29 matching lines...) Expand all
439 else if (!extension_service->IsExtensionEnabled(app_id)) 439 else if (!extension_service->IsExtensionEnabled(app_id))
440 (*status)[app_id] = APP_STATUS_DISABLED; 440 (*status)[app_id] = APP_STATUS_DISABLED;
441 else 441 else
442 (*status)[app_id] = APP_STATUS_ENABLED; 442 (*status)[app_id] = APP_STATUS_ENABLED;
443 } 443 }
444 444
445 callback.Run(); 445 callback.Run();
446 } 446 }
447 447
448 void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) { 448 void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) {
449 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 449 DCHECK(sequence_checker_.CalledOnValidSequence());
450 450
451 MetadataDatabase* metadata_db = GetMetadataDatabase(); 451 MetadataDatabase* metadata_db = GetMetadataDatabase();
452 DCHECK(metadata_db); 452 DCHECK(metadata_db);
453 453
454 // Update the status of every origin using status from ExtensionService. 454 // Update the status of every origin using status from ExtensionService.
455 for (AppStatusMap::const_iterator itr = app_status->begin(); 455 for (AppStatusMap::const_iterator itr = app_status->begin();
456 itr != app_status->end(); ++itr) { 456 itr != app_status->end(); ++itr) {
457 const std::string& app_id = itr->first; 457 const std::string& app_id = itr->first;
458 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id); 458 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id);
459 459
(...skipping 21 matching lines...) Expand all
481 if (is_app_enabled && !is_app_root_tracker_enabled) 481 if (is_app_enabled && !is_app_root_tracker_enabled)
482 EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); 482 EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
483 else if (!is_app_enabled && is_app_root_tracker_enabled) 483 else if (!is_app_enabled && is_app_root_tracker_enabled)
484 DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); 484 DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
485 } 485 }
486 } 486 }
487 487
488 void SyncWorker::DidProcessRemoteChange(RemoteToLocalSyncer* syncer, 488 void SyncWorker::DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
489 const SyncFileCallback& callback, 489 const SyncFileCallback& callback,
490 SyncStatusCode status) { 490 SyncStatusCode status) {
491 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 491 DCHECK(sequence_checker_.CalledOnValidSequence());
492 492
493 if (syncer->is_sync_root_deletion()) { 493 if (syncer->is_sync_root_deletion()) {
494 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase()); 494 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase());
495 PostInitializeTask(); 495 PostInitializeTask();
496 callback.Run(status, syncer->url()); 496 callback.Run(status, syncer->url());
497 return; 497 return;
498 } 498 }
499 499
500 if (status == SYNC_STATUS_OK) { 500 if (status == SYNC_STATUS_OK) {
501 if (syncer->sync_action() != SYNC_ACTION_NONE && 501 if (syncer->sync_action() != SYNC_ACTION_NONE &&
(...skipping 14 matching lines...) Expand all
516 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback)); 516 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback));
517 } 517 }
518 should_check_conflict_ = true; 518 should_check_conflict_ = true;
519 } 519 }
520 callback.Run(status, syncer->url()); 520 callback.Run(status, syncer->url());
521 } 521 }
522 522
523 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer, 523 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer,
524 const SyncStatusCallback& callback, 524 const SyncStatusCallback& callback,
525 SyncStatusCode status) { 525 SyncStatusCode status) {
526 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 526 DCHECK(sequence_checker_.CalledOnValidSequence());
527 527
528 if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) && 528 if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) &&
529 syncer->url().is_valid() && 529 syncer->url().is_valid() &&
530 syncer->sync_action() != SYNC_ACTION_NONE) { 530 syncer->sync_action() != SYNC_ACTION_NONE) {
531 storage::FileSystemURL updated_url = syncer->url(); 531 storage::FileSystemURL updated_url = syncer->url();
532 if (!syncer->target_path().empty()) { 532 if (!syncer->target_path().empty()) {
533 updated_url = CreateSyncableFileSystemURL(syncer->url().origin(), 533 updated_url = CreateSyncableFileSystemURL(syncer->url().origin(),
534 syncer->target_path()); 534 syncer->target_path());
535 } 535 }
536 FOR_EACH_OBSERVER(Observer, observers_, 536 FOR_EACH_OBSERVER(Observer, observers_,
(...skipping 24 matching lines...) Expand all
561 base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); 561 base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds);
562 } 562 }
563 563
564 if (status == SYNC_STATUS_OK) 564 if (status == SYNC_STATUS_OK)
565 should_check_conflict_ = true; 565 should_check_conflict_ = true;
566 566
567 callback.Run(status); 567 callback.Run(status);
568 } 568 }
569 569
570 bool SyncWorker::MaybeStartFetchChanges() { 570 bool SyncWorker::MaybeStartFetchChanges() {
571 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 571 DCHECK(sequence_checker_.CalledOnValidSequence());
572 572
573 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) 573 if (GetCurrentState() == REMOTE_SERVICE_DISABLED)
574 return false; 574 return false;
575 575
576 if (!GetMetadataDatabase()) 576 if (!GetMetadataDatabase())
577 return false; 577 return false;
578 578
579 if (listing_remote_changes_) 579 if (listing_remote_changes_)
580 return false; 580 return false;
581 581
(...skipping 19 matching lines...) Expand all
601 should_check_remote_change_ = false; 601 should_check_remote_change_ = false;
602 listing_remote_changes_ = true; 602 listing_remote_changes_ = true;
603 time_to_check_changes_ = 603 time_to_check_changes_ =
604 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); 604 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds);
605 return true; 605 return true;
606 } 606 }
607 return false; 607 return false;
608 } 608 }
609 609
610 void SyncWorker::DidResolveConflict(SyncStatusCode status) { 610 void SyncWorker::DidResolveConflict(SyncStatusCode status) {
611 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 611 DCHECK(sequence_checker_.CalledOnValidSequence());
612 612
613 if (status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) 613 if (status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY)
614 should_check_conflict_ = true; 614 should_check_conflict_ = true;
615 } 615 }
616 616
617 void SyncWorker::DidFetchChanges(SyncStatusCode status) { 617 void SyncWorker::DidFetchChanges(SyncStatusCode status) {
618 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 618 DCHECK(sequence_checker_.CalledOnValidSequence());
619 619
620 if (status == SYNC_STATUS_OK) 620 if (status == SYNC_STATUS_OK)
621 should_check_conflict_ = true; 621 should_check_conflict_ = true;
622 listing_remote_changes_ = false; 622 listing_remote_changes_ = false;
623 } 623 }
624 624
625 void SyncWorker::UpdateServiceStateFromSyncStatusCode( 625 void SyncWorker::UpdateServiceStateFromSyncStatusCode(
626 SyncStatusCode status, 626 SyncStatusCode status,
627 bool used_network) { 627 bool used_network) {
628 switch (status) { 628 switch (status) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 break; 661 break;
662 662
663 default: 663 default:
664 // Other errors don't affect service state 664 // Other errors don't affect service state
665 break; 665 break;
666 } 666 }
667 } 667 }
668 668
669 void SyncWorker::UpdateServiceState(RemoteServiceState state, 669 void SyncWorker::UpdateServiceState(RemoteServiceState state,
670 const std::string& description) { 670 const std::string& description) {
671 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 671 DCHECK(sequence_checker_.CalledOnValidSequence());
672 672
673 RemoteServiceState old_state = GetCurrentState(); 673 RemoteServiceState old_state = GetCurrentState();
674 service_state_ = state; 674 service_state_ = state;
675 675
676 if (old_state == GetCurrentState()) 676 if (old_state == GetCurrentState())
677 return; 677 return;
678 678
679 util::Log(logging::LOG_VERBOSE, FROM_HERE, 679 util::Log(logging::LOG_VERBOSE, FROM_HERE,
680 "Service state changed: %d->%d: %s", 680 "Service state changed: %d->%d: %s",
681 old_state, GetCurrentState(), description.c_str()); 681 old_state, GetCurrentState(), description.c_str());
682 682
683 FOR_EACH_OBSERVER( 683 FOR_EACH_OBSERVER(
684 Observer, observers_, 684 Observer, observers_,
685 UpdateServiceState(GetCurrentState(), description)); 685 UpdateServiceState(GetCurrentState(), description));
686 } 686 }
687 687
688 void SyncWorker::CallOnIdleForTesting(const base::Closure& callback) { 688 void SyncWorker::CallOnIdleForTesting(const base::Closure& callback) {
689 if (task_manager_->ScheduleTaskIfIdle( 689 if (task_manager_->ScheduleTaskIfIdle(
690 FROM_HERE, 690 FROM_HERE,
691 base::Bind(&InvokeIdleCallback, callback), 691 base::Bind(&InvokeIdleCallback, callback),
692 base::Bind(&EmptyStatusCallback))) 692 base::Bind(&EmptyStatusCallback)))
693 return; 693 return;
694 call_on_idle_callback_ = base::Bind( 694 call_on_idle_callback_ = base::Bind(
695 &SyncWorker::CallOnIdleForTesting, 695 &SyncWorker::CallOnIdleForTesting,
696 weak_ptr_factory_.GetWeakPtr(), 696 weak_ptr_factory_.GetWeakPtr(),
697 callback); 697 callback);
698 } 698 }
699 699
700 drive::DriveServiceInterface* SyncWorker::GetDriveService() { 700 drive::DriveServiceInterface* SyncWorker::GetDriveService() {
701 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 701 DCHECK(sequence_checker_.CalledOnValidSequence());
702 return context_->GetDriveService(); 702 return context_->GetDriveService();
703 } 703 }
704 704
705 drive::DriveUploaderInterface* SyncWorker::GetDriveUploader() { 705 drive::DriveUploaderInterface* SyncWorker::GetDriveUploader() {
706 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 706 DCHECK(sequence_checker_.CalledOnValidSequence());
707 return context_->GetDriveUploader(); 707 return context_->GetDriveUploader();
708 } 708 }
709 709
710 MetadataDatabase* SyncWorker::GetMetadataDatabase() { 710 MetadataDatabase* SyncWorker::GetMetadataDatabase() {
711 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 711 DCHECK(sequence_checker_.CalledOnValidSequence());
712 return context_->GetMetadataDatabase(); 712 return context_->GetMetadataDatabase();
713 } 713 }
714 714
715 } // namespace drive_backend 715 } // namespace drive_backend
716 } // namespace sync_file_system 716 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698