OLD | NEW |
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/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 worker_task_runner_, | 310 worker_task_runner_, |
311 file_task_runner_)); | 311 file_task_runner_)); |
312 | 312 |
313 worker_observer_.reset( | 313 worker_observer_.reset( |
314 new WorkerObserver(ui_task_runner_, weak_ptr_factory_.GetWeakPtr())); | 314 new WorkerObserver(ui_task_runner_, weak_ptr_factory_.GetWeakPtr())); |
315 | 315 |
316 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; | 316 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; |
317 if (extension_service_) | 317 if (extension_service_) |
318 extension_service_weak_ptr = extension_service_->AsWeakPtr(); | 318 extension_service_weak_ptr = extension_service_->AsWeakPtr(); |
319 | 319 |
320 sync_worker_.reset(new SyncWorker( | 320 scoped_ptr<SyncWorker> worker(new SyncWorker( |
321 sync_file_system_dir_, | 321 sync_file_system_dir_, |
322 extension_service_weak_ptr, | 322 extension_service_weak_ptr, |
323 sync_engine_context.Pass(), | 323 sync_engine_context.Pass(), |
324 env_override_)); | 324 env_override_)); |
325 | 325 |
326 sync_worker_->AddObserver(worker_observer_.get()); | 326 worker->AddObserver(worker_observer_.get()); |
| 327 sync_worker_ = worker.PassAs<SyncWorkerInterface>(); |
| 328 |
327 if (remote_change_processor_) | 329 if (remote_change_processor_) |
328 SetRemoteChangeProcessor(remote_change_processor_); | 330 SetRemoteChangeProcessor(remote_change_processor_); |
329 | 331 |
330 worker_task_runner_->PostTask( | 332 worker_task_runner_->PostTask( |
331 FROM_HERE, | 333 FROM_HERE, |
332 base::Bind(&SyncWorker::Initialize, | 334 base::Bind(&SyncWorkerInterface::Initialize, |
333 base::Unretained(sync_worker_.get()))); | 335 base::Unretained(sync_worker_.get()))); |
334 | 336 |
335 if (notification_manager_) | 337 if (notification_manager_) |
336 notification_manager_->AddObserver(this); | 338 notification_manager_->AddObserver(this); |
337 drive_service_->AddObserver(this); | 339 drive_service_->AddObserver(this); |
338 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 340 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
339 | 341 |
340 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; | 342 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; |
341 SetSyncEnabled(sync_enabled_); | 343 SetSyncEnabled(sync_enabled_); |
342 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); | 344 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); |
343 } | 345 } |
344 | 346 |
345 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { | 347 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { |
346 service_observers_.AddObserver(observer); | 348 service_observers_.AddObserver(observer); |
347 } | 349 } |
348 | 350 |
349 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { | 351 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { |
350 file_status_observers_.AddObserver(observer); | 352 file_status_observers_.AddObserver(observer); |
351 } | 353 } |
352 | 354 |
353 void SyncEngine::RegisterOrigin(const GURL& origin, | 355 void SyncEngine::RegisterOrigin(const GURL& origin, |
354 const SyncStatusCallback& callback) { | 356 const SyncStatusCallback& callback) { |
355 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 357 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
356 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), | 358 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), |
357 TrackCallback(callback))); | 359 TrackCallback(callback))); |
358 | 360 |
359 worker_task_runner_->PostTask( | 361 worker_task_runner_->PostTask( |
360 FROM_HERE, | 362 FROM_HERE, |
361 base::Bind(&SyncWorker::RegisterOrigin, | 363 base::Bind(&SyncWorkerInterface::RegisterOrigin, |
362 base::Unretained(sync_worker_.get()), | 364 base::Unretained(sync_worker_.get()), |
363 origin, relayed_callback)); | 365 origin, relayed_callback)); |
364 } | 366 } |
365 | 367 |
366 void SyncEngine::EnableOrigin( | 368 void SyncEngine::EnableOrigin( |
367 const GURL& origin, const SyncStatusCallback& callback) { | 369 const GURL& origin, const SyncStatusCallback& callback) { |
368 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 370 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
369 FROM_HERE, TrackCallback(callback)); | 371 FROM_HERE, TrackCallback(callback)); |
370 | 372 |
371 worker_task_runner_->PostTask( | 373 worker_task_runner_->PostTask( |
372 FROM_HERE, | 374 FROM_HERE, |
373 base::Bind(&SyncWorker::EnableOrigin, | 375 base::Bind(&SyncWorkerInterface::EnableOrigin, |
374 base::Unretained(sync_worker_.get()), | 376 base::Unretained(sync_worker_.get()), |
375 origin, relayed_callback)); | 377 origin, relayed_callback)); |
376 } | 378 } |
377 | 379 |
378 void SyncEngine::DisableOrigin( | 380 void SyncEngine::DisableOrigin( |
379 const GURL& origin, const SyncStatusCallback& callback) { | 381 const GURL& origin, const SyncStatusCallback& callback) { |
380 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 382 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
381 FROM_HERE, TrackCallback(callback)); | 383 FROM_HERE, TrackCallback(callback)); |
382 | 384 |
383 worker_task_runner_->PostTask( | 385 worker_task_runner_->PostTask( |
384 FROM_HERE, | 386 FROM_HERE, |
385 base::Bind(&SyncWorker::DisableOrigin, | 387 base::Bind(&SyncWorkerInterface::DisableOrigin, |
386 base::Unretained(sync_worker_.get()), | 388 base::Unretained(sync_worker_.get()), |
387 origin, | 389 origin, |
388 relayed_callback)); | 390 relayed_callback)); |
389 } | 391 } |
390 | 392 |
391 void SyncEngine::UninstallOrigin( | 393 void SyncEngine::UninstallOrigin( |
392 const GURL& origin, | 394 const GURL& origin, |
393 UninstallFlag flag, | 395 UninstallFlag flag, |
394 const SyncStatusCallback& callback) { | 396 const SyncStatusCallback& callback) { |
395 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 397 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
396 FROM_HERE, TrackCallback(callback)); | 398 FROM_HERE, TrackCallback(callback)); |
397 worker_task_runner_->PostTask( | 399 worker_task_runner_->PostTask( |
398 FROM_HERE, | 400 FROM_HERE, |
399 base::Bind(&SyncWorker::UninstallOrigin, | 401 base::Bind(&SyncWorkerInterface::UninstallOrigin, |
400 base::Unretained(sync_worker_.get()), | 402 base::Unretained(sync_worker_.get()), |
401 origin, flag, relayed_callback)); | 403 origin, flag, relayed_callback)); |
402 } | 404 } |
403 | 405 |
404 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { | 406 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { |
405 SyncFileCallback tracked_callback = callback_tracker_.Register( | 407 SyncFileCallback tracked_callback = callback_tracker_.Register( |
406 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), | 408 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), |
407 callback); | 409 callback); |
408 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( | 410 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( |
409 FROM_HERE, tracked_callback); | 411 FROM_HERE, tracked_callback); |
410 worker_task_runner_->PostTask( | 412 worker_task_runner_->PostTask( |
411 FROM_HERE, | 413 FROM_HERE, |
412 base::Bind(&SyncWorker::ProcessRemoteChange, | 414 base::Bind(&SyncWorkerInterface::ProcessRemoteChange, |
413 base::Unretained(sync_worker_.get()), | 415 base::Unretained(sync_worker_.get()), |
414 relayed_callback)); | 416 relayed_callback)); |
415 } | 417 } |
416 | 418 |
417 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { | 419 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { |
418 remote_change_processor_ = processor; | 420 remote_change_processor_ = processor; |
419 remote_change_processor_wrapper_.reset( | 421 remote_change_processor_wrapper_.reset( |
420 new RemoteChangeProcessorWrapper(processor)); | 422 new RemoteChangeProcessorWrapper(processor)); |
421 | 423 |
422 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( | 424 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( |
423 remote_change_processor_wrapper_->AsWeakPtr(), | 425 remote_change_processor_wrapper_->AsWeakPtr(), |
424 ui_task_runner_, worker_task_runner_)); | 426 ui_task_runner_, worker_task_runner_)); |
425 | 427 |
426 worker_task_runner_->PostTask( | 428 worker_task_runner_->PostTask( |
427 FROM_HERE, | 429 FROM_HERE, |
428 base::Bind(&SyncWorker::SetRemoteChangeProcessor, | 430 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, |
429 base::Unretained(sync_worker_.get()), | 431 base::Unretained(sync_worker_.get()), |
430 remote_change_processor_on_worker_.get())); | 432 remote_change_processor_on_worker_.get())); |
431 } | 433 } |
432 | 434 |
433 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { | 435 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
434 return this; | 436 return this; |
435 } | 437 } |
436 | 438 |
437 RemoteServiceState SyncEngine::GetCurrentState() const { | 439 RemoteServiceState SyncEngine::GetCurrentState() const { |
438 return service_state_; | 440 return service_state_; |
439 } | 441 } |
440 | 442 |
441 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { | 443 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { |
442 StatusMapCallback tracked_callback = | 444 StatusMapCallback tracked_callback = |
443 callback_tracker_.Register( | 445 callback_tracker_.Register( |
444 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), | 446 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), |
445 callback); | 447 callback); |
446 | 448 |
447 StatusMapCallback relayed_callback = | 449 StatusMapCallback relayed_callback = |
448 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); | 450 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); |
449 | 451 |
450 worker_task_runner_->PostTask( | 452 worker_task_runner_->PostTask( |
451 FROM_HERE, | 453 FROM_HERE, |
452 base::Bind(&SyncWorker::GetOriginStatusMap, | 454 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, |
453 base::Unretained(sync_worker_.get()), | 455 base::Unretained(sync_worker_.get()), |
454 relayed_callback)); | 456 relayed_callback)); |
455 } | 457 } |
456 | 458 |
457 void SyncEngine::DumpFiles(const GURL& origin, | 459 void SyncEngine::DumpFiles(const GURL& origin, |
458 const ListCallback& callback) { | 460 const ListCallback& callback) { |
459 ListCallback tracked_callback = | 461 ListCallback tracked_callback = |
460 callback_tracker_.Register( | 462 callback_tracker_.Register( |
461 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 463 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
462 callback); | 464 callback); |
463 | 465 |
464 PostTaskAndReplyWithResult( | 466 PostTaskAndReplyWithResult( |
465 worker_task_runner_, | 467 worker_task_runner_, |
466 FROM_HERE, | 468 FROM_HERE, |
467 base::Bind(&SyncWorker::DumpFiles, | 469 base::Bind(&SyncWorkerInterface::DumpFiles, |
468 base::Unretained(sync_worker_.get()), | 470 base::Unretained(sync_worker_.get()), |
469 origin), | 471 origin), |
470 tracked_callback); | 472 tracked_callback); |
471 } | 473 } |
472 | 474 |
473 void SyncEngine::DumpDatabase(const ListCallback& callback) { | 475 void SyncEngine::DumpDatabase(const ListCallback& callback) { |
474 ListCallback tracked_callback = | 476 ListCallback tracked_callback = |
475 callback_tracker_.Register( | 477 callback_tracker_.Register( |
476 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 478 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
477 callback); | 479 callback); |
478 | 480 |
479 PostTaskAndReplyWithResult( | 481 PostTaskAndReplyWithResult( |
480 worker_task_runner_, | 482 worker_task_runner_, |
481 FROM_HERE, | 483 FROM_HERE, |
482 base::Bind(&SyncWorker::DumpDatabase, | 484 base::Bind(&SyncWorkerInterface::DumpDatabase, |
483 base::Unretained(sync_worker_.get())), | 485 base::Unretained(sync_worker_.get())), |
484 tracked_callback); | 486 tracked_callback); |
485 } | 487 } |
486 | 488 |
487 void SyncEngine::SetSyncEnabled(bool sync_enabled) { | 489 void SyncEngine::SetSyncEnabled(bool sync_enabled) { |
488 sync_enabled_ = sync_enabled; | 490 sync_enabled_ = sync_enabled; |
489 worker_task_runner_->PostTask( | 491 worker_task_runner_->PostTask( |
490 FROM_HERE, | 492 FROM_HERE, |
491 base::Bind(&SyncWorker::SetSyncEnabled, | 493 base::Bind(&SyncWorkerInterface::SetSyncEnabled, |
492 base::Unretained(sync_worker_.get()), | 494 base::Unretained(sync_worker_.get()), |
493 sync_enabled)); | 495 sync_enabled)); |
494 } | 496 } |
495 | 497 |
496 void SyncEngine::PromoteDemotedChanges() { | 498 void SyncEngine::PromoteDemotedChanges() { |
497 worker_task_runner_->PostTask( | 499 worker_task_runner_->PostTask( |
498 FROM_HERE, | 500 FROM_HERE, |
499 base::Bind(&SyncWorker::PromoteDemotedChanges, | 501 base::Bind(&SyncWorkerInterface::PromoteDemotedChanges, |
500 base::Unretained(sync_worker_.get()))); | 502 base::Unretained(sync_worker_.get()))); |
501 } | 503 } |
502 | 504 |
503 void SyncEngine::ApplyLocalChange( | 505 void SyncEngine::ApplyLocalChange( |
504 const FileChange& local_change, | 506 const FileChange& local_change, |
505 const base::FilePath& local_path, | 507 const base::FilePath& local_path, |
506 const SyncFileMetadata& local_metadata, | 508 const SyncFileMetadata& local_metadata, |
507 const fileapi::FileSystemURL& url, | 509 const fileapi::FileSystemURL& url, |
508 const SyncStatusCallback& callback) { | 510 const SyncStatusCallback& callback) { |
509 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 511 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
510 FROM_HERE, TrackCallback(callback)); | 512 FROM_HERE, TrackCallback(callback)); |
511 worker_task_runner_->PostTask( | 513 worker_task_runner_->PostTask( |
512 FROM_HERE, | 514 FROM_HERE, |
513 base::Bind(&SyncWorker::ApplyLocalChange, | 515 base::Bind(&SyncWorkerInterface::ApplyLocalChange, |
514 base::Unretained(sync_worker_.get()), | 516 base::Unretained(sync_worker_.get()), |
515 local_change, | 517 local_change, |
516 local_path, | 518 local_path, |
517 local_metadata, | 519 local_metadata, |
518 url, | 520 url, |
519 relayed_callback)); | 521 relayed_callback)); |
520 } | 522 } |
521 | 523 |
522 void SyncEngine::OnNotificationReceived() { | 524 void SyncEngine::OnNotificationReceived() { |
523 worker_task_runner_->PostTask( | 525 worker_task_runner_->PostTask( |
524 FROM_HERE, | 526 FROM_HERE, |
525 base::Bind(&SyncWorker::OnNotificationReceived, | 527 base::Bind(&SyncWorkerInterface::OnNotificationReceived, |
526 base::Unretained(sync_worker_.get()))); | 528 base::Unretained(sync_worker_.get()))); |
527 } | 529 } |
528 | 530 |
529 void SyncEngine::OnPushNotificationEnabled(bool) {} | 531 void SyncEngine::OnPushNotificationEnabled(bool) {} |
530 | 532 |
531 void SyncEngine::OnReadyToSendRequests() { | 533 void SyncEngine::OnReadyToSendRequests() { |
532 // TODO(tzik): Drop current Syncworker and replace with new one. | 534 // TODO(tzik): Drop current Syncworker and replace with new one. |
533 | 535 |
534 const std::string account_id = | 536 const std::string account_id = |
535 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; | 537 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; |
536 | 538 |
537 worker_task_runner_->PostTask( | 539 worker_task_runner_->PostTask( |
538 FROM_HERE, | 540 FROM_HERE, |
539 base::Bind(&SyncWorker::OnReadyToSendRequests, | 541 base::Bind(&SyncWorkerInterface::OnReadyToSendRequests, |
540 base::Unretained(sync_worker_.get()), | 542 base::Unretained(sync_worker_.get()), |
541 account_id)); | 543 account_id)); |
542 } | 544 } |
543 | 545 |
544 void SyncEngine::OnRefreshTokenInvalid() { | 546 void SyncEngine::OnRefreshTokenInvalid() { |
545 worker_task_runner_->PostTask( | 547 worker_task_runner_->PostTask( |
546 FROM_HERE, | 548 FROM_HERE, |
547 base::Bind(&SyncWorker::OnRefreshTokenInvalid, | 549 base::Bind(&SyncWorkerInterface::OnRefreshTokenInvalid, |
548 base::Unretained(sync_worker_.get()))); | 550 base::Unretained(sync_worker_.get()))); |
549 } | 551 } |
550 | 552 |
551 void SyncEngine::OnNetworkChanged( | 553 void SyncEngine::OnNetworkChanged( |
552 net::NetworkChangeNotifier::ConnectionType type) { | 554 net::NetworkChangeNotifier::ConnectionType type) { |
553 worker_task_runner_->PostTask( | 555 worker_task_runner_->PostTask( |
554 FROM_HERE, | 556 FROM_HERE, |
555 base::Bind(&SyncWorker::OnNetworkChanged, | 557 base::Bind(&SyncWorkerInterface::OnNetworkChanged, |
556 base::Unretained(sync_worker_.get()), | 558 base::Unretained(sync_worker_.get()), |
557 type)); | 559 type)); |
558 } | 560 } |
559 | 561 |
560 SyncEngine::SyncEngine( | 562 SyncEngine::SyncEngine( |
561 base::SingleThreadTaskRunner* ui_task_runner, | 563 base::SingleThreadTaskRunner* ui_task_runner, |
562 base::SequencedTaskRunner* worker_task_runner, | 564 base::SequencedTaskRunner* worker_task_runner, |
563 base::SequencedTaskRunner* file_task_runner, | 565 base::SequencedTaskRunner* file_task_runner, |
564 base::SequencedTaskRunner* drive_task_runner, | 566 base::SequencedTaskRunner* drive_task_runner, |
565 const base::FilePath& sync_file_system_dir, | 567 const base::FilePath& sync_file_system_dir, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 | 616 |
615 SyncStatusCallback SyncEngine::TrackCallback( | 617 SyncStatusCallback SyncEngine::TrackCallback( |
616 const SyncStatusCallback& callback) { | 618 const SyncStatusCallback& callback) { |
617 return callback_tracker_.Register( | 619 return callback_tracker_.Register( |
618 base::Bind(callback, SYNC_STATUS_ABORT), | 620 base::Bind(callback, SYNC_STATUS_ABORT), |
619 callback); | 621 callback); |
620 } | 622 } |
621 | 623 |
622 } // namespace drive_backend | 624 } // namespace drive_backend |
623 } // namespace sync_file_system | 625 } // namespace sync_file_system |
OLD | NEW |