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

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

Issue 243583005: Revert of [SyncFS] Post tasks between SyncEngine and SyncWorker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_engine.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId()); 83 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId());
84 84
85 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( 85 scoped_ptr<drive::DriveUploaderInterface> drive_uploader(
86 new drive::DriveUploader(drive_service.get(), drive_task_runner.get())); 86 new drive::DriveUploader(drive_service.get(), drive_task_runner.get()));
87 87
88 drive::DriveNotificationManager* notification_manager = 88 drive::DriveNotificationManager* notification_manager =
89 drive::DriveNotificationManagerFactory::GetForBrowserContext(context); 89 drive::DriveNotificationManagerFactory::GetForBrowserContext(context);
90 ExtensionService* extension_service = 90 ExtensionService* extension_service =
91 extensions::ExtensionSystem::Get(context)->extension_service(); 91 extensions::ExtensionSystem::Get(context)->extension_service();
92 92
93 scoped_refptr<base::SequencedTaskRunner> file_task_runner( 93 scoped_refptr<base::SequencedTaskRunner> task_runner(
94 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 94 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
95 worker_pool->GetSequenceToken(), 95 worker_pool->GetSequenceToken(),
96 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); 96 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
97 97
98 // TODO(peria): Create another task runner to manage SyncWorker.
99 scoped_refptr<base::SingleThreadTaskRunner>
100 worker_task_runner = base::MessageLoopProxy::current();
101
102 scoped_ptr<drive_backend::SyncEngine> sync_engine( 98 scoped_ptr<drive_backend::SyncEngine> sync_engine(
103 new SyncEngine(drive_service.Pass(), 99 new SyncEngine(drive_service.Pass(),
104 drive_uploader.Pass(), 100 drive_uploader.Pass(),
105 worker_task_runner,
106 notification_manager, 101 notification_manager,
107 extension_service, 102 extension_service,
108 signin_manager)); 103 signin_manager));
109 sync_engine->Initialize( 104 sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()),
110 GetSyncFileSystemDir(context->GetPath()), 105 task_runner.get(),
111 file_task_runner.get(), 106 NULL);
112 NULL);
113 107
114 return sync_engine.Pass(); 108 return sync_engine.Pass();
115 } 109 }
116 110
117 void SyncEngine::AppendDependsOnFactories( 111 void SyncEngine::AppendDependsOnFactories(
118 std::set<BrowserContextKeyedServiceFactory*>* factories) { 112 std::set<BrowserContextKeyedServiceFactory*>* factories) {
119 DCHECK(factories); 113 DCHECK(factories);
120 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); 114 factories->insert(drive::DriveNotificationManagerFactory::GetInstance());
121 factories->insert(SigninManagerFactory::GetInstance()); 115 factories->insert(SigninManagerFactory::GetInstance());
122 factories->insert( 116 factories->insert(
123 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 117 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
124 } 118 }
125 119
126 SyncEngine::~SyncEngine() { 120 SyncEngine::~SyncEngine() {
127 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 121 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
128 GetDriveService()->RemoveObserver(this); 122 GetDriveService()->RemoveObserver(this);
129 if (notification_manager_) 123 if (notification_manager_)
130 notification_manager_->RemoveObserver(this); 124 notification_manager_->RemoveObserver(this);
131 } 125 }
132 126
133 void SyncEngine::Initialize(const base::FilePath& base_dir, 127 void SyncEngine::Initialize(const base::FilePath& base_dir,
134 base::SequencedTaskRunner* file_task_runner, 128 base::SequencedTaskRunner* task_runner,
135 leveldb::Env* env_override) { 129 leveldb::Env* env_override) {
136 scoped_ptr<SyncEngineContext> sync_engine_context( 130 scoped_ptr<SyncEngineContext> sync_engine_context(
137 new SyncEngineContext(drive_service_.get(), 131 new SyncEngineContext(drive_service_.get(),
138 drive_uploader_.get(), 132 drive_uploader_.get(),
139 base::MessageLoopProxy::current(), 133 task_runner));
140 file_task_runner)); 134 // TODO(peria): Move this create function to thread pool.
141 // TODO(peria): Use PostTask on |worker_task_runner_| to call this function.
142 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(), 135 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(),
143 base_dir, 136 base_dir,
144 sync_engine_context.Pass(), 137 sync_engine_context.Pass(),
145 env_override); 138 env_override);
146 139
147 if (notification_manager_) 140 if (notification_manager_)
148 notification_manager_->AddObserver(this); 141 notification_manager_->AddObserver(this);
149 GetDriveService()->AddObserver(this); 142 GetDriveService()->AddObserver(this);
150 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 143 net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
151 } 144 }
152 145
153 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { 146 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) {
154 service_observers_.AddObserver(observer); 147 service_observers_.AddObserver(observer);
155 } 148 }
156 149
157 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { 150 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) {
158 file_status_observers_.AddObserver(observer); 151 file_status_observers_.AddObserver(observer);
159 } 152 }
160 153
161 void SyncEngine::RegisterOrigin( 154 void SyncEngine::RegisterOrigin(
162 const GURL& origin, const SyncStatusCallback& callback) { 155 const GURL& origin, const SyncStatusCallback& callback) {
163 worker_task_runner_->PostTask( 156 sync_worker_->RegisterOrigin(origin, callback);
164 FROM_HERE,
165 base::Bind(&SyncWorker::RegisterOrigin,
166 base::Unretained(sync_worker_.get()),
167 origin, callback));
168 } 157 }
169 158
170 void SyncEngine::EnableOrigin( 159 void SyncEngine::EnableOrigin(
171 const GURL& origin, const SyncStatusCallback& callback) { 160 const GURL& origin, const SyncStatusCallback& callback) {
172 worker_task_runner_->PostTask( 161 sync_worker_->EnableOrigin(origin, callback);
173 FROM_HERE,
174 base::Bind(&SyncWorker::EnableOrigin,
175 base::Unretained(sync_worker_.get()),
176 origin, callback));
177 } 162 }
178 163
179 void SyncEngine::DisableOrigin( 164 void SyncEngine::DisableOrigin(
180 const GURL& origin, const SyncStatusCallback& callback) { 165 const GURL& origin, const SyncStatusCallback& callback) {
181 worker_task_runner_->PostTask( 166 sync_worker_->DisableOrigin(origin, callback);
182 FROM_HERE,
183 base::Bind(&SyncWorker::DisableOrigin,
184 base::Unretained(sync_worker_.get()),
185 origin, callback));
186 } 167 }
187 168
188 void SyncEngine::UninstallOrigin( 169 void SyncEngine::UninstallOrigin(
189 const GURL& origin, 170 const GURL& origin,
190 UninstallFlag flag, 171 UninstallFlag flag,
191 const SyncStatusCallback& callback) { 172 const SyncStatusCallback& callback) {
192 worker_task_runner_->PostTask( 173 sync_worker_->UninstallOrigin(origin, flag, callback);
193 FROM_HERE,
194 base::Bind(&SyncWorker::UninstallOrigin,
195 base::Unretained(sync_worker_.get()),
196 origin, flag, callback));
197 } 174 }
198 175
199 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { 176 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) {
200 worker_task_runner_->PostTask( 177 sync_worker_->ProcessRemoteChange(callback);
201 FROM_HERE,
202 base::Bind(&SyncWorker::ProcessRemoteChange,
203 base::Unretained(sync_worker_.get()),
204 callback));
205 } 178 }
206 179
207 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { 180 void SyncEngine::SetRemoteChangeProcessor(
208 worker_task_runner_->PostTask( 181 RemoteChangeProcessor* processor) {
209 FROM_HERE, 182 sync_worker_->SetRemoteChangeProcessor(processor);
210 base::Bind(&SyncWorker::SetRemoteChangeProcessor,
211 base::Unretained(sync_worker_.get()),
212 processor));
213 } 183 }
214 184
215 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { 185 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() {
216 return this; 186 return this;
217 } 187 }
218 188
219 bool SyncEngine::IsConflicting(const fileapi::FileSystemURL& url) { 189 bool SyncEngine::IsConflicting(const fileapi::FileSystemURL& url) {
220 // TODO(tzik): Implement this before we support manual conflict resolution. 190 // TODO(tzik): Implement this before we support manual conflict resolution.
221 return false; 191 return false;
222 } 192 }
223 193
224 RemoteServiceState SyncEngine::GetCurrentState() const { 194 RemoteServiceState SyncEngine::GetCurrentState() const {
225 // TODO(peria): Post task
226 return sync_worker_->GetCurrentState(); 195 return sync_worker_->GetCurrentState();
227 } 196 }
228 197
229 void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) { 198 void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) {
230 // TODO(peria): Make this route asynchronous.
231 sync_worker_->GetOriginStatusMap(status_map); 199 sync_worker_->GetOriginStatusMap(status_map);
232 } 200 }
233 201
234 scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) { 202 scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) {
235 // TODO(peria): Make this route asynchronous.
236 return sync_worker_->DumpFiles(origin); 203 return sync_worker_->DumpFiles(origin);
237 } 204 }
238 205
239 scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() { 206 scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() {
240 // TODO(peria): Make this route asynchronous.
241 return sync_worker_->DumpDatabase(); 207 return sync_worker_->DumpDatabase();
242 } 208 }
243 209
244 void SyncEngine::SetSyncEnabled(bool enabled) { 210 void SyncEngine::SetSyncEnabled(bool enabled) {
245 worker_task_runner_->PostTask( 211 sync_worker_->SetSyncEnabled(enabled);
246 FROM_HERE,
247 base::Bind(&SyncWorker::SetSyncEnabled,
248 base::Unretained(sync_worker_.get()),
249 enabled));
250 } 212 }
251 213
252 void SyncEngine::UpdateSyncEnabled(bool enabled) { 214 void SyncEngine::UpdateSyncEnabled(bool enabled) {
253 const char* status_message = enabled ? "Sync is enabled" : "Sync is disabled"; 215 const char* status_message = enabled ? "Sync is enabled" : "Sync is disabled";
254 FOR_EACH_OBSERVER( 216 FOR_EACH_OBSERVER(
255 Observer, service_observers_, 217 Observer, service_observers_,
256 OnRemoteServiceStateUpdated(GetCurrentState(), status_message)); 218 OnRemoteServiceStateUpdated(GetCurrentState(), status_message));
257 } 219 }
258 220
259 SyncStatusCode SyncEngine::SetDefaultConflictResolutionPolicy( 221 SyncStatusCode SyncEngine::SetDefaultConflictResolutionPolicy(
260 ConflictResolutionPolicy policy) { 222 ConflictResolutionPolicy policy) {
261 // TODO(peria): Make this route asynchronous.
262 return sync_worker_->SetDefaultConflictResolutionPolicy(policy); 223 return sync_worker_->SetDefaultConflictResolutionPolicy(policy);
263 } 224 }
264 225
265 SyncStatusCode SyncEngine::SetConflictResolutionPolicy( 226 SyncStatusCode SyncEngine::SetConflictResolutionPolicy(
266 const GURL& origin, 227 const GURL& origin,
267 ConflictResolutionPolicy policy) { 228 ConflictResolutionPolicy policy) {
268 // TODO(peria): Make this route asynchronous.
269 return sync_worker_->SetConflictResolutionPolicy(origin, policy); 229 return sync_worker_->SetConflictResolutionPolicy(origin, policy);
270 } 230 }
271 231
272 ConflictResolutionPolicy SyncEngine::GetDefaultConflictResolutionPolicy() 232 ConflictResolutionPolicy SyncEngine::GetDefaultConflictResolutionPolicy()
273 const { 233 const {
274 // TODO(peria): Make this route asynchronous.
275 return sync_worker_->GetDefaultConflictResolutionPolicy(); 234 return sync_worker_->GetDefaultConflictResolutionPolicy();
276 } 235 }
277 236
278 ConflictResolutionPolicy SyncEngine::GetConflictResolutionPolicy( 237 ConflictResolutionPolicy SyncEngine::GetConflictResolutionPolicy(
279 const GURL& origin) const { 238 const GURL& origin) const {
280 // TODO(peria): Make this route asynchronous.
281 return sync_worker_->GetConflictResolutionPolicy(origin); 239 return sync_worker_->GetConflictResolutionPolicy(origin);
282 } 240 }
283 241
284 void SyncEngine::GetRemoteVersions( 242 void SyncEngine::GetRemoteVersions(
285 const fileapi::FileSystemURL& url, 243 const fileapi::FileSystemURL& url,
286 const RemoteVersionsCallback& callback) { 244 const RemoteVersionsCallback& callback) {
287 // TODO(tzik): Implement this before we support manual conflict resolution. 245 // TODO(tzik): Implement this before we support manual conflict resolution.
288 callback.Run(SYNC_STATUS_FAILED, std::vector<Version>()); 246 callback.Run(SYNC_STATUS_FAILED, std::vector<Version>());
289 } 247 }
290 248
(...skipping 15 matching lines...) Expand all
306 OnRemoteChangeQueueUpdated(metadata_db->CountDirtyTracker())); 264 OnRemoteChangeQueueUpdated(metadata_db->CountDirtyTracker()));
307 } 265 }
308 } 266 }
309 267
310 void SyncEngine::ApplyLocalChange( 268 void SyncEngine::ApplyLocalChange(
311 const FileChange& local_change, 269 const FileChange& local_change,
312 const base::FilePath& local_path, 270 const base::FilePath& local_path,
313 const SyncFileMetadata& local_metadata, 271 const SyncFileMetadata& local_metadata,
314 const fileapi::FileSystemURL& url, 272 const fileapi::FileSystemURL& url,
315 const SyncStatusCallback& callback) { 273 const SyncStatusCallback& callback) {
316 worker_task_runner_->PostTask( 274 sync_worker_->ApplyLocalChange(
317 FROM_HERE, 275 local_change, local_path, local_metadata, url, callback);
318 base::Bind(&SyncWorker::ApplyLocalChange,
319 base::Unretained(sync_worker_.get()),
320 local_change,
321 local_path,
322 local_metadata,
323 url,
324 callback));
325 } 276 }
326 277
327 SyncTaskManager* SyncEngine::GetSyncTaskManagerForTesting() { 278 SyncTaskManager* SyncEngine::GetSyncTaskManagerForTesting() {
328 // TODO(peria): Post task
329 return sync_worker_->GetSyncTaskManager(); 279 return sync_worker_->GetSyncTaskManager();
330 } 280 }
331 281
332 void SyncEngine::OnNotificationReceived() { 282 void SyncEngine::OnNotificationReceived() {
333 worker_task_runner_->PostTask( 283 sync_worker_->OnNotificationReceived();
334 FROM_HERE,
335 base::Bind(&SyncWorker::OnNotificationReceived,
336 base::Unretained(sync_worker_.get())));
337 } 284 }
338 285
339 void SyncEngine::OnPushNotificationEnabled(bool) {} 286 void SyncEngine::OnPushNotificationEnabled(bool) {}
340 287
341 void SyncEngine::OnReadyToSendRequests() { 288 void SyncEngine::OnReadyToSendRequests() {
342 const std::string account_id = 289 sync_worker_->OnReadyToSendRequests(
343 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; 290 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : "");
344
345 worker_task_runner_->PostTask(
346 FROM_HERE,
347 base::Bind(&SyncWorker::OnReadyToSendRequests,
348 base::Unretained(sync_worker_.get()),
349 account_id));
350 } 291 }
351 292
352 void SyncEngine::OnRefreshTokenInvalid() { 293 void SyncEngine::OnRefreshTokenInvalid() {
353 worker_task_runner_->PostTask( 294 sync_worker_->OnRefreshTokenInvalid();
354 FROM_HERE,
355 base::Bind(&SyncWorker::OnRefreshTokenInvalid,
356 base::Unretained(sync_worker_.get())));
357 } 295 }
358 296
359 void SyncEngine::OnNetworkChanged( 297 void SyncEngine::OnNetworkChanged(
360 net::NetworkChangeNotifier::ConnectionType type) { 298 net::NetworkChangeNotifier::ConnectionType type) {
361 worker_task_runner_->PostTask( 299 sync_worker_->OnNetworkChanged(type);
362 FROM_HERE,
363 base::Bind(&SyncWorker::OnNetworkChanged,
364 base::Unretained(sync_worker_.get()),
365 type));
366 } 300 }
367 301
368 drive::DriveServiceInterface* SyncEngine::GetDriveService() { 302 drive::DriveServiceInterface* SyncEngine::GetDriveService() {
369 return drive_service_.get(); 303 return sync_worker_->GetDriveService();
370 } 304 }
371 305
372 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { 306 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() {
373 return drive_uploader_.get(); 307 return sync_worker_->GetDriveUploader();
374 } 308 }
375 309
376 MetadataDatabase* SyncEngine::GetMetadataDatabase() { 310 MetadataDatabase* SyncEngine::GetMetadataDatabase() {
377 // TODO(peria): Post task
378 return sync_worker_->GetMetadataDatabase(); 311 return sync_worker_->GetMetadataDatabase();
379 } 312 }
380 313
381 SyncEngine::SyncEngine( 314 SyncEngine::SyncEngine(
382 scoped_ptr<drive::DriveServiceInterface> drive_service, 315 scoped_ptr<drive::DriveServiceInterface> drive_service,
383 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, 316 scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
384 base::SequencedTaskRunner* worker_task_runner,
385 drive::DriveNotificationManager* notification_manager, 317 drive::DriveNotificationManager* notification_manager,
386 ExtensionServiceInterface* extension_service, 318 ExtensionServiceInterface* extension_service,
387 SigninManagerBase* signin_manager) 319 SigninManagerBase* signin_manager)
388 : drive_service_(drive_service.Pass()), 320 : drive_service_(drive_service.Pass()),
389 drive_uploader_(drive_uploader.Pass()), 321 drive_uploader_(drive_uploader.Pass()),
390 notification_manager_(notification_manager), 322 notification_manager_(notification_manager),
391 extension_service_(extension_service), 323 extension_service_(extension_service),
392 signin_manager_(signin_manager), 324 signin_manager_(signin_manager),
393 worker_task_runner_(worker_task_runner),
394 weak_ptr_factory_(this) {} 325 weak_ptr_factory_(this) {}
395 326
396 void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer) { 327 void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer) {
397 if (syncer->sync_action() != SYNC_ACTION_NONE && syncer->url().is_valid()) { 328 if (syncer->sync_action() != SYNC_ACTION_NONE && syncer->url().is_valid()) {
398 FOR_EACH_OBSERVER(FileStatusObserver, 329 FOR_EACH_OBSERVER(FileStatusObserver,
399 file_status_observers_, 330 file_status_observers_,
400 OnFileStatusChanged(syncer->url(), 331 OnFileStatusChanged(syncer->url(),
401 SYNC_FILE_STATUS_SYNCED, 332 SYNC_FILE_STATUS_SYNCED,
402 syncer->sync_action(), 333 syncer->sync_action(),
403 SYNC_DIRECTION_REMOTE_TO_LOCAL)); 334 SYNC_DIRECTION_REMOTE_TO_LOCAL));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 void SyncEngine::NotifyLastOperationStatus() { 402 void SyncEngine::NotifyLastOperationStatus() {
472 FOR_EACH_OBSERVER( 403 FOR_EACH_OBSERVER(
473 Observer, 404 Observer,
474 service_observers_, 405 service_observers_,
475 OnRemoteChangeQueueUpdated( 406 OnRemoteChangeQueueUpdated(
476 GetMetadataDatabase()->CountDirtyTracker())); 407 GetMetadataDatabase()->CountDirtyTracker()));
477 } 408 }
478 409
479 } // namespace drive_backend 410 } // namespace drive_backend
480 } // namespace sync_file_system 411 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698