| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/sync_file_system_service.h" | 5 #include "chrome/browser/sync_file_system/sync_file_system_service.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 | 316 |
| 317 void SyncFileSystemService::DumpDatabase(const DumpFilesCallback& callback) { | 317 void SyncFileSystemService::DumpDatabase(const DumpFilesCallback& callback) { |
| 318 remote_service_->DumpDatabase( | 318 remote_service_->DumpDatabase( |
| 319 base::Bind(&SyncFileSystemService::DidDumpDatabase, | 319 base::Bind(&SyncFileSystemService::DidDumpDatabase, |
| 320 AsWeakPtr(), callback)); | 320 AsWeakPtr(), callback)); |
| 321 } | 321 } |
| 322 | 322 |
| 323 void SyncFileSystemService::GetFileSyncStatus( | 323 void SyncFileSystemService::GetFileSyncStatus( |
| 324 const FileSystemURL& url, const SyncFileStatusCallback& callback) { | 324 const FileSystemURL& url, const SyncFileStatusCallback& callback) { |
| 325 DCHECK(local_service_); | 325 DCHECK(local_service_); |
| 326 DCHECK(GetRemoteService(url.origin())); | 326 DCHECK(remote_service_); |
| 327 | 327 |
| 328 // It's possible to get an invalid FileEntry. | 328 // It's possible to get an invalid FileEntry. |
| 329 if (!url.is_valid()) { | 329 if (!url.is_valid()) { |
| 330 base::ThreadTaskRunnerHandle::Get()->PostTask( | 330 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 331 FROM_HERE, | 331 FROM_HERE, |
| 332 base::Bind(callback, | 332 base::Bind(callback, |
| 333 SYNC_FILE_ERROR_INVALID_URL, | 333 SYNC_FILE_ERROR_INVALID_URL, |
| 334 SYNC_FILE_STATUS_UNKNOWN)); | 334 SYNC_FILE_STATUS_UNKNOWN)); |
| 335 return; | 335 return; |
| 336 } | 336 } |
| 337 | 337 |
| 338 local_service_->HasPendingLocalChanges( | 338 local_service_->HasPendingLocalChanges( |
| 339 url, | 339 url, |
| 340 base::Bind(&SyncFileSystemService::DidGetLocalChangeStatus, | 340 base::Bind(&SyncFileSystemService::DidGetLocalChangeStatus, |
| 341 AsWeakPtr(), callback)); | 341 AsWeakPtr(), callback)); |
| 342 } | 342 } |
| 343 | 343 |
| 344 void SyncFileSystemService::AddSyncEventObserver(SyncEventObserver* observer) { | 344 void SyncFileSystemService::AddSyncEventObserver(SyncEventObserver* observer) { |
| 345 observers_.AddObserver(observer); | 345 observers_.AddObserver(observer); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void SyncFileSystemService::RemoveSyncEventObserver( | 348 void SyncFileSystemService::RemoveSyncEventObserver( |
| 349 SyncEventObserver* observer) { | 349 SyncEventObserver* observer) { |
| 350 observers_.RemoveObserver(observer); | 350 observers_.RemoveObserver(observer); |
| 351 } | 351 } |
| 352 | 352 |
| 353 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor( | 353 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor( |
| 354 const GURL& origin) { | 354 const GURL& origin) { |
| 355 return GetRemoteService(origin)->GetLocalChangeProcessor(); | 355 return remote_service_->GetLocalChangeProcessor(); |
| 356 } | 356 } |
| 357 | 357 |
| 358 void SyncFileSystemService::OnSyncIdle() { | 358 void SyncFileSystemService::OnSyncIdle() { |
| 359 if (promoting_demoted_changes_) | 359 if (promoting_demoted_changes_) |
| 360 return; | 360 return; |
| 361 promoting_demoted_changes_ = true; | 361 promoting_demoted_changes_ = true; |
| 362 | 362 |
| 363 int* job_count = new int(1); | 363 int* job_count = new int(1); |
| 364 base::Closure promote_completion_callback = | 364 base::Closure promote_completion_callback = |
| 365 base::Bind(&SyncFileSystemService::OnPromotionCompleted, | 365 base::Bind(&SyncFileSystemService::OnPromotionCompleted, |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 callback.Run(SYNC_STATUS_ABORT); | 518 callback.Run(SYNC_STATUS_ABORT); |
| 519 return; | 519 return; |
| 520 } | 520 } |
| 521 | 521 |
| 522 UMA_HISTOGRAM_ENUMERATION("SyncFileSystem.RegisterOriginResult", | 522 UMA_HISTOGRAM_ENUMERATION("SyncFileSystem.RegisterOriginResult", |
| 523 remote_service_->GetCurrentState(), | 523 remote_service_->GetCurrentState(), |
| 524 REMOTE_SERVICE_STATE_MAX); | 524 REMOTE_SERVICE_STATE_MAX); |
| 525 | 525 |
| 526 if (status == SYNC_STATUS_FAILED) { | 526 if (status == SYNC_STATUS_FAILED) { |
| 527 // If we got generic error return the service status information. | 527 // If we got generic error return the service status information. |
| 528 switch (GetRemoteService(app_origin)->GetCurrentState()) { | 528 switch (remote_service_->GetCurrentState()) { |
| 529 case REMOTE_SERVICE_AUTHENTICATION_REQUIRED: | 529 case REMOTE_SERVICE_AUTHENTICATION_REQUIRED: |
| 530 callback.Run(SYNC_STATUS_AUTHENTICATION_FAILED); | 530 callback.Run(SYNC_STATUS_AUTHENTICATION_FAILED); |
| 531 return; | 531 return; |
| 532 case REMOTE_SERVICE_TEMPORARY_UNAVAILABLE: | 532 case REMOTE_SERVICE_TEMPORARY_UNAVAILABLE: |
| 533 callback.Run(SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE); | 533 callback.Run(SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE); |
| 534 return; | 534 return; |
| 535 default: | 535 default: |
| 536 break; | 536 break; |
| 537 } | 537 } |
| 538 } | 538 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 549 if (status != SYNC_STATUS_OK) { | 549 if (status != SYNC_STATUS_OK) { |
| 550 callback.Run(base::ListValue()); | 550 callback.Run(base::ListValue()); |
| 551 return; | 551 return; |
| 552 } | 552 } |
| 553 | 553 |
| 554 if (!remote_service_) { | 554 if (!remote_service_) { |
| 555 callback.Run(base::ListValue()); | 555 callback.Run(base::ListValue()); |
| 556 return; | 556 return; |
| 557 } | 557 } |
| 558 | 558 |
| 559 GetRemoteService(origin)->DumpFiles( | 559 remote_service_->DumpFiles( |
| 560 origin, | 560 origin, |
| 561 base::Bind( | 561 base::Bind( |
| 562 &SyncFileSystemService::DidDumpFiles, | 562 &SyncFileSystemService::DidDumpFiles, |
| 563 AsWeakPtr(), | 563 AsWeakPtr(), |
| 564 origin, | 564 origin, |
| 565 callback)); | 565 callback)); |
| 566 } | 566 } |
| 567 | 567 |
| 568 void SyncFileSystemService::DidDumpFiles( | 568 void SyncFileSystemService::DidDumpFiles( |
| 569 const GURL& origin, | 569 const GURL& origin, |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 // handled as enabled origin in the SyncFS. This should be safe and will be | 675 // handled as enabled origin in the SyncFS. This should be safe and will be |
| 676 // recovered when the user re-enables the app manually or the sync service | 676 // recovered when the user re-enables the app manually or the sync service |
| 677 // restarts. | 677 // restarts. |
| 678 DVLOG(1) << "Handle extension notification for UNLOAD(DISABLE_RELOAD): " | 678 DVLOG(1) << "Handle extension notification for UNLOAD(DISABLE_RELOAD): " |
| 679 << app_origin; | 679 << app_origin; |
| 680 return; | 680 return; |
| 681 } | 681 } |
| 682 | 682 |
| 683 DVLOG(1) << "Handle extension notification for UNLOAD(DISABLE): " | 683 DVLOG(1) << "Handle extension notification for UNLOAD(DISABLE): " |
| 684 << app_origin; | 684 << app_origin; |
| 685 GetRemoteService(app_origin)->DisableOrigin( | 685 remote_service_->DisableOrigin( |
| 686 app_origin, | 686 app_origin, |
| 687 base::Bind(&DidHandleUnloadedEvent, app_origin)); | 687 base::Bind(&DidHandleUnloadedEvent, app_origin)); |
| 688 local_service_->SetOriginEnabled(app_origin, false); | 688 local_service_->SetOriginEnabled(app_origin, false); |
| 689 } | 689 } |
| 690 | 690 |
| 691 void SyncFileSystemService::OnExtensionUninstalled( | 691 void SyncFileSystemService::OnExtensionUninstalled( |
| 692 content::BrowserContext* browser_context, | 692 content::BrowserContext* browser_context, |
| 693 const Extension* extension, | 693 const Extension* extension, |
| 694 extensions::UninstallReason reason) { | 694 extensions::UninstallReason reason) { |
| 695 RemoteFileSyncService::UninstallFlag flag = | 695 RemoteFileSyncService::UninstallFlag flag = |
| 696 RemoteFileSyncService::UNINSTALL_AND_PURGE_REMOTE; | 696 RemoteFileSyncService::UNINSTALL_AND_PURGE_REMOTE; |
| 697 // If it's loaded from an unpacked package and with key: field, | 697 // If it's loaded from an unpacked package and with key: field, |
| 698 // the uninstall will not be sync'ed and the user might be using the | 698 // the uninstall will not be sync'ed and the user might be using the |
| 699 // same app key in other installs, so avoid purging the remote folder. | 699 // same app key in other installs, so avoid purging the remote folder. |
| 700 if (extensions::Manifest::IsUnpackedLocation(extension->location()) && | 700 if (extensions::Manifest::IsUnpackedLocation(extension->location()) && |
| 701 extension->manifest()->HasKey(extensions::manifest_keys::kKey)) { | 701 extension->manifest()->HasKey(extensions::manifest_keys::kKey)) { |
| 702 flag = RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE; | 702 flag = RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE; |
| 703 } | 703 } |
| 704 | 704 |
| 705 GURL app_origin = Extension::GetBaseURLFromExtensionId(extension->id()); | 705 GURL app_origin = Extension::GetBaseURLFromExtensionId(extension->id()); |
| 706 DVLOG(1) << "Handle extension notification for UNINSTALLED: " | 706 DVLOG(1) << "Handle extension notification for UNINSTALLED: " |
| 707 << app_origin; | 707 << app_origin; |
| 708 GetRemoteService(app_origin)->UninstallOrigin( | 708 remote_service_->UninstallOrigin( |
| 709 app_origin, flag, | 709 app_origin, flag, |
| 710 base::Bind(&DidHandleUninstalledEvent, app_origin)); | 710 base::Bind(&DidHandleUninstalledEvent, app_origin)); |
| 711 local_service_->SetOriginEnabled(app_origin, false); | 711 local_service_->SetOriginEnabled(app_origin, false); |
| 712 } | 712 } |
| 713 | 713 |
| 714 void SyncFileSystemService::OnExtensionLoaded( | 714 void SyncFileSystemService::OnExtensionLoaded( |
| 715 content::BrowserContext* browser_context, | 715 content::BrowserContext* browser_context, |
| 716 const Extension* extension) { | 716 const Extension* extension) { |
| 717 GURL app_origin = Extension::GetBaseURLFromExtensionId(extension->id()); | 717 GURL app_origin = Extension::GetBaseURLFromExtensionId(extension->id()); |
| 718 DVLOG(1) << "Handle extension notification for LOADED: " << app_origin; | 718 DVLOG(1) << "Handle extension notification for LOADED: " << app_origin; |
| 719 GetRemoteService(app_origin)->EnableOrigin( | 719 remote_service_->EnableOrigin( |
| 720 app_origin, | 720 app_origin, |
| 721 base::Bind(&DidHandleLoadEvent, app_origin)); | 721 base::Bind(&DidHandleLoadEvent, app_origin)); |
| 722 local_service_->SetOriginEnabled(app_origin, true); | 722 local_service_->SetOriginEnabled(app_origin, true); |
| 723 } | 723 } |
| 724 | 724 |
| 725 void SyncFileSystemService::OnStateChanged() { | 725 void SyncFileSystemService::OnStateChanged() { |
| 726 ProfileSyncServiceBase* profile_sync_service = | 726 ProfileSyncServiceBase* profile_sync_service = |
| 727 ProfileSyncServiceFactory::GetForProfile(profile_); | 727 ProfileSyncServiceFactory::GetForProfile(profile_); |
| 728 if (profile_sync_service) | 728 if (profile_sync_service) |
| 729 UpdateSyncEnabledStatus(profile_sync_service); | 729 UpdateSyncEnabledStatus(profile_sync_service); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 757 for (ScopedVector<SyncProcessRunner>::iterator iter = | 757 for (ScopedVector<SyncProcessRunner>::iterator iter = |
| 758 local_sync_runners_.begin(); | 758 local_sync_runners_.begin(); |
| 759 iter != local_sync_runners_.end(); ++iter) | 759 iter != local_sync_runners_.end(); ++iter) |
| 760 ((*iter)->*method)(); | 760 ((*iter)->*method)(); |
| 761 for (ScopedVector<SyncProcessRunner>::iterator iter = | 761 for (ScopedVector<SyncProcessRunner>::iterator iter = |
| 762 remote_sync_runners_.begin(); | 762 remote_sync_runners_.begin(); |
| 763 iter != remote_sync_runners_.end(); ++iter) | 763 iter != remote_sync_runners_.end(); ++iter) |
| 764 ((*iter)->*method)(); | 764 ((*iter)->*method)(); |
| 765 } | 765 } |
| 766 | 766 |
| 767 RemoteFileSyncService* SyncFileSystemService::GetRemoteService( | |
| 768 const GURL& origin) { | |
| 769 return remote_service_.get(); | |
| 770 } | |
| 771 | |
| 772 } // namespace sync_file_system | 767 } // namespace sync_file_system |
| OLD | NEW |