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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/sync_file_system/drive_backend/fake_sync_worker.h" 6 7 #include "base/values.h" 8 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" 9 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" 10 #include "chrome/browser/sync_file_system/sync_status_code.h" 11 12 namespace sync_file_system { 13 namespace drive_backend { 14 15 FakeSyncWorker::FakeSyncWorker() 16 : sync_enabled_(true), 17 has_refresh_token_(true), 18 network_available_(true) { 19 sequence_checker_.DetachFromSequence(); 20 } 21 22 FakeSyncWorker::~FakeSyncWorker() { 23 observers_.Clear(); 24 } 25 26 void FakeSyncWorker::Initialize( 27 scoped_ptr<SyncEngineContext> sync_engine_context) { 28 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 29 30 sync_engine_context_ = sync_engine_context.Pass(); 31 status_map_.clear(); 32 // TODO(peria): Set |status_map_| as a fake metadata database. 33 } 34 35 void FakeSyncWorker::RegisterOrigin(const GURL& origin, 36 const SyncStatusCallback& callback) { 37 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 38 // TODO(peria): Check how it should act on installing installed app? 39 status_map_[origin] = REGISTERED; 40 callback.Run(SYNC_STATUS_OK); 41 } 42 43 void FakeSyncWorker::EnableOrigin(const GURL& origin, 44 const SyncStatusCallback& callback) { 45 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 46 // TODO(peria): Check how it should act on enabling non-installed app? 47 status_map_[origin] = ENABLED; 48 callback.Run(SYNC_STATUS_OK); 49 } 50 51 void FakeSyncWorker::DisableOrigin(const GURL& origin, 52 const SyncStatusCallback& callback) { 53 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 54 // TODO(peria): Check how it should act on disabling non-installed app? 55 status_map_[origin] = DISABLED; 56 callback.Run(SYNC_STATUS_OK); 57 } 58 59 void FakeSyncWorker::UninstallOrigin(const GURL& origin, 60 RemoteFileSyncService::UninstallFlag flag, 61 const SyncStatusCallback& callback) { 62 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 63 // TODO(peria): Check how it should act on uninstalling non-installed app? 64 status_map_[origin] = UNINSTALLED; 65 callback.Run(SYNC_STATUS_OK); 66 } 67 68 void FakeSyncWorker::ProcessRemoteChange( 69 const SyncFileCallback& callback) { 70 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 71 callback.Run(SYNC_STATUS_OK, fileapi::FileSystemURL()); 72 } 73 74 void FakeSyncWorker::SetRemoteChangeProcessor( 75 RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) { 76 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 77 } 78 79 RemoteServiceState FakeSyncWorker::GetCurrentState() const { 80 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 81 return REMOTE_SERVICE_OK; 82 } 83 84 void FakeSyncWorker::GetOriginStatusMap( 85 const RemoteFileSyncService::StatusMapCallback& callback) { 86 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 87 88 scoped_ptr<RemoteFileSyncService::OriginStatusMap> 89 status_map(new RemoteFileSyncService::OriginStatusMap); 90 for (StatusMap::const_iterator itr = status_map_.begin(); 91 itr != status_map_.end(); ++itr) { 92 switch (itr->second) { 93 case REGISTERED: 94 (*status_map)[itr->first] = "Registered"; 95 break; 96 case ENABLED: 97 (*status_map)[itr->first] = "Enabled"; 98 break; 99 case DISABLED: 100 (*status_map)[itr->first] = "Disabled"; 101 break; 102 case UNINSTALLED: 103 (*status_map)[itr->first] = "Uninstalled"; 104 break; 105 default: 106 (*status_map)[itr->first] = "Unknown"; 107 break; 108 } 109 } 110 callback.Run(status_map.Pass()); 111 } 112 113 scoped_ptr<base::ListValue> FakeSyncWorker::DumpFiles(const GURL& origin) { 114 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 115 return scoped_ptr<base::ListValue>(); 116 } 117 118 scoped_ptr<base::ListValue> FakeSyncWorker::DumpDatabase() { 119 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 120 return scoped_ptr<base::ListValue>(); 121 } 122 123 void FakeSyncWorker::SetSyncEnabled(bool enabled) { 124 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 125 sync_enabled_ = enabled; 126 127 if (enabled) 128 UpdateServiceState(REMOTE_SERVICE_OK, "Set FakeSyncWorker enabled."); 129 else 130 UpdateServiceState(REMOTE_SERVICE_DISABLED, "Disabled FakeSyncWorker."); 131 } 132 133 void FakeSyncWorker::PromoteDemotedChanges() { 134 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 135 FOR_EACH_OBSERVER( 136 Observer, 137 observers_, 138 OnPendingFileListUpdated(10)); 139 } 140 141 void FakeSyncWorker::ApplyLocalChange( 142 const FileChange& local_change, 143 const base::FilePath& local_path, 144 const SyncFileMetadata& local_metadata, 145 const fileapi::FileSystemURL& url, 146 const SyncStatusCallback& callback) { 147 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 148 callback.Run(SYNC_STATUS_OK); 149 } 150 151 void FakeSyncWorker::OnNotificationReceived() { 152 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 153 UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive."); 154 } 155 156 void FakeSyncWorker::OnReadyToSendRequests() { 157 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 158 has_refresh_token_ = true; 159 UpdateServiceState(REMOTE_SERVICE_OK, "ReadyToSendRequests"); 160 } 161 162 void FakeSyncWorker::OnRefreshTokenInvalid() { 163 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 164 has_refresh_token_ = false; 165 UpdateServiceState(REMOTE_SERVICE_OK, "RefreshTokenInvalid"); 166 } 167 168 void FakeSyncWorker::OnNetworkChanged( 169 net::NetworkChangeNotifier::ConnectionType type) { 170 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 171 bool new_network_availability = 172 type != net::NetworkChangeNotifier::CONNECTION_NONE; 173 if (network_available_ && !new_network_availability) { 174 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, "Disconnected"); 175 } else if (!network_available_ && new_network_availability) { 176 UpdateServiceState(REMOTE_SERVICE_OK, "Connected"); 177 } 178 network_available_ = new_network_availability; 179 } 180 181 drive::DriveServiceInterface* FakeSyncWorker::GetDriveService() { 182 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 183 return NULL; 184 } 185 186 drive::DriveUploaderInterface* FakeSyncWorker::GetDriveUploader() { 187 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 188 return NULL; 189 } 190 191 MetadataDatabase* FakeSyncWorker::GetMetadataDatabase() { 192 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 193 return NULL; 194 } 195 196 SyncTaskManager* FakeSyncWorker::GetSyncTaskManager() { 197 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 198 return NULL; 199 } 200 201 void FakeSyncWorker::DetachFromSequence() { 202 sequence_checker_.DetachFromSequence(); 203 } 204 205 void FakeSyncWorker::AddObserver(Observer* observer) { 206 // This method is called on UI thread. 207 observers_.AddObserver(observer); 208 } 209 210 void FakeSyncWorker::SetHasRefreshToken(bool has_refresh_token) { 211 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 212 has_refresh_token_ = has_refresh_token; 213 } 214 215 void FakeSyncWorker::UpdateServiceState(RemoteServiceState state, 216 const std::string& description) { 217 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 218 219 FOR_EACH_OBSERVER( 220 Observer, observers_, 221 UpdateServiceState(state, description)); 222 } 223 224 } // namespace drive_backend 225 } // namespace sync_file_system 226