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 "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 <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "chrome/browser/drive/drive_service_interface.h" | 10 #include "chrome/browser/drive/drive_service_interface.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 namespace sync_file_system { | 29 namespace sync_file_system { |
30 | 30 |
31 class RemoteChangeProcessor; | 31 class RemoteChangeProcessor; |
32 | 32 |
33 namespace drive_backend { | 33 namespace drive_backend { |
34 | 34 |
35 namespace { | 35 namespace { |
36 | 36 |
37 void EmptyStatusCallback(SyncStatusCode status) {} | 37 void EmptyStatusCallback(SyncStatusCode status) {} |
38 | 38 |
39 void QueryAppStatusOnUIThread( | |
40 const base::WeakPtr<ExtensionServiceInterface>& extension_service_ptr, | |
41 const std::vector<std::string>* app_ids, | |
42 SyncWorker::AppStatusMap* status, | |
43 const base::Closure& callback) { | |
44 ExtensionServiceInterface* extension_service = extension_service_ptr.get(); | |
45 if (!extension_service) { | |
46 callback.Run(); | |
47 return; | |
48 } | |
49 | |
50 for (std::vector<std::string>::const_iterator itr = app_ids->begin(); | |
51 itr != app_ids->end(); ++itr) { | |
52 const std::string& app_id = *itr; | |
53 if (!extension_service->GetInstalledExtension(app_id)) | |
54 (*status)[app_id] = SyncWorker::APP_STATUS_UNINSTALLED; | |
55 else if (!extension_service->IsExtensionEnabled(app_id)) | |
56 (*status)[app_id] = SyncWorker::APP_STATUS_DISABLED; | |
57 else | |
58 (*status)[app_id] = SyncWorker::APP_STATUS_ENABLED; | |
59 } | |
60 | |
61 callback.Run(); | |
62 } | |
63 | |
64 } // namespace | 39 } // namespace |
65 | 40 |
66 SyncWorker::SyncWorker( | 41 SyncWorker::SyncWorker( |
67 const base::FilePath& base_dir, | 42 const base::FilePath& base_dir, |
68 const base::WeakPtr<ExtensionServiceInterface>& extension_service, | 43 const base::WeakPtr<ExtensionServiceInterface>& extension_service, |
69 scoped_ptr<SyncEngineContext> sync_engine_context, | 44 scoped_ptr<SyncEngineContext> sync_engine_context, |
70 leveldb::Env* env_override) | 45 leveldb::Env* env_override) |
71 : base_dir_(base_dir), | 46 : base_dir_(base_dir), |
72 env_override_(env_override), | 47 env_override_(env_override), |
73 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), | 48 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
74 should_check_conflict_(true), | 49 should_check_conflict_(true), |
75 should_check_remote_change_(true), | 50 should_check_remote_change_(true), |
76 listing_remote_changes_(false), | 51 listing_remote_changes_(false), |
77 sync_enabled_(false), | 52 sync_enabled_(false), |
78 default_conflict_resolution_policy_( | 53 default_conflict_resolution_policy_( |
79 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), | 54 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), |
80 network_available_(false), | 55 network_available_(false), |
81 extension_service_(extension_service), | 56 extension_service_(extension_service), |
82 context_(sync_engine_context.Pass()), | 57 context_(sync_engine_context.Pass()), |
83 has_refresh_token_(false), | 58 has_refresh_token_(false), |
84 weak_ptr_factory_(this) { | 59 weak_ptr_factory_(this) { |
85 sequence_checker_.DetachFromSequence(); | 60 sequence_checker_.DetachFromSequence(); |
86 DCHECK(base_dir_.IsAbsolute()); | 61 DCHECK(base_dir_.IsAbsolute()); |
87 } | 62 } |
88 | 63 |
89 SyncWorker::~SyncWorker() {} | 64 SyncWorker::~SyncWorker() { |
| 65 observers_.Clear(); |
| 66 } |
90 | 67 |
91 void SyncWorker::Initialize() { | 68 void SyncWorker::Initialize() { |
92 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | 69 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); |
93 DCHECK(!task_manager_); | 70 DCHECK(!task_manager_); |
94 | 71 |
95 task_manager_.reset(new SyncTaskManager( | 72 task_manager_.reset(new SyncTaskManager( |
96 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */)); | 73 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */)); |
97 task_manager_->Initialize(SYNC_STATUS_OK); | 74 task_manager_->Initialize(SYNC_STATUS_OK); |
98 | 75 |
99 PostInitializeTask(); | 76 PostInitializeTask(); |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 metadata_db->GetRegisteredAppIDs(app_ids.get()); | 468 metadata_db->GetRegisteredAppIDs(app_ids.get()); |
492 | 469 |
493 AppStatusMap* app_status = new AppStatusMap; | 470 AppStatusMap* app_status = new AppStatusMap; |
494 base::Closure callback = | 471 base::Closure callback = |
495 base::Bind(&SyncWorker::DidQueryAppStatus, | 472 base::Bind(&SyncWorker::DidQueryAppStatus, |
496 weak_ptr_factory_.GetWeakPtr(), | 473 weak_ptr_factory_.GetWeakPtr(), |
497 base::Owned(app_status)); | 474 base::Owned(app_status)); |
498 | 475 |
499 context_->GetUITaskRunner()->PostTask( | 476 context_->GetUITaskRunner()->PostTask( |
500 FROM_HERE, | 477 FROM_HERE, |
501 base::Bind(&QueryAppStatusOnUIThread, | 478 base::Bind(&SyncWorker::QueryAppStatusOnUIThread, |
502 extension_service_, | 479 extension_service_, |
503 base::Owned(app_ids.release()), | 480 base::Owned(app_ids.release()), |
504 app_status, | 481 app_status, |
505 RelayCallbackToTaskRunner( | 482 RelayCallbackToTaskRunner( |
506 context_->GetWorkerTaskRunner(), | 483 context_->GetWorkerTaskRunner(), |
507 FROM_HERE, callback))); | 484 FROM_HERE, callback))); |
508 } | 485 } |
509 | 486 |
| 487 void SyncWorker::QueryAppStatusOnUIThread( |
| 488 const base::WeakPtr<ExtensionServiceInterface>& extension_service_ptr, |
| 489 const std::vector<std::string>* app_ids, |
| 490 AppStatusMap* status, |
| 491 const base::Closure& callback) { |
| 492 ExtensionServiceInterface* extension_service = extension_service_ptr.get(); |
| 493 if (!extension_service) { |
| 494 callback.Run(); |
| 495 return; |
| 496 } |
| 497 |
| 498 for (std::vector<std::string>::const_iterator itr = app_ids->begin(); |
| 499 itr != app_ids->end(); ++itr) { |
| 500 const std::string& app_id = *itr; |
| 501 if (!extension_service->GetInstalledExtension(app_id)) |
| 502 (*status)[app_id] = APP_STATUS_UNINSTALLED; |
| 503 else if (!extension_service->IsExtensionEnabled(app_id)) |
| 504 (*status)[app_id] = APP_STATUS_DISABLED; |
| 505 else |
| 506 (*status)[app_id] = APP_STATUS_ENABLED; |
| 507 } |
| 508 |
| 509 callback.Run(); |
| 510 } |
| 511 |
510 void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) { | 512 void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) { |
511 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | 513 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); |
512 | 514 |
513 MetadataDatabase* metadata_db = GetMetadataDatabase(); | 515 MetadataDatabase* metadata_db = GetMetadataDatabase(); |
514 DCHECK(metadata_db); | 516 DCHECK(metadata_db); |
515 | 517 |
516 // Update the status of every origin using status from ExtensionService. | 518 // Update the status of every origin using status from ExtensionService. |
517 for (AppStatusMap::const_iterator itr = app_status->begin(); | 519 for (AppStatusMap::const_iterator itr = app_status->begin(); |
518 itr != app_status->end(); ++itr) { | 520 itr != app_status->end(); ++itr) { |
519 const std::string& app_id = itr->first; | 521 const std::string& app_id = itr->first; |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 "Service state changed: %d->%d: %s", | 745 "Service state changed: %d->%d: %s", |
744 old_state, GetCurrentState(), description.c_str()); | 746 old_state, GetCurrentState(), description.c_str()); |
745 | 747 |
746 FOR_EACH_OBSERVER( | 748 FOR_EACH_OBSERVER( |
747 Observer, observers_, | 749 Observer, observers_, |
748 UpdateServiceState(GetCurrentState(), description)); | 750 UpdateServiceState(GetCurrentState(), description)); |
749 } | 751 } |
750 | 752 |
751 } // namespace drive_backend | 753 } // namespace drive_backend |
752 } // namespace sync_file_system | 754 } // namespace sync_file_system |
OLD | NEW |