#include "chrome/browser/sync_file_system/file_status_observer.h"
#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
#include "chrome/browser/sync_file_system/sync_callbacks.h"
+#include "chrome/browser/sync_file_system/sync_process_runner.h"
#include "chrome/browser/sync_file_system/sync_service_state.h"
+#include "chrome/browser/sync_file_system/task_logger.h"
#include "components/keyed_service/core/keyed_service.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/extension_registry_observer.h"
#include "url/gurl.h"
class Profile;
class ProfileSyncServiceBase;
-namespace fileapi {
+namespace storage {
class FileSystemContext;
}
class LocalSyncRunner;
class RemoteSyncRunner;
class SyncEventObserver;
-class SyncProcessRunner;
class SyncFileSystemService
: public KeyedService,
+ public SyncProcessRunner::Client,
public ProfileSyncServiceObserver,
public FileStatusObserver,
- public content::NotificationObserver,
+ public extensions::ExtensionRegistryObserver,
public base::SupportsWeakPtr<SyncFileSystemService> {
public:
- typedef base::Callback<void(const base::ListValue* files)> DumpFilesCallback;
+ typedef base::Callback<void(const base::ListValue&)> DumpFilesCallback;
+ typedef base::Callback<void(const RemoteFileSyncService::OriginStatusMap&)>
+ ExtensionStatusMapCallback;
- // KeyedService overrides.
+ // KeyedService implementation.
virtual void Shutdown() OVERRIDE;
- void InitializeForApp(
- fileapi::FileSystemContext* file_system_context,
- const GURL& app_origin,
- const SyncStatusCallback& callback);
+ void InitializeForApp(storage::FileSystemContext* file_system_context,
+ const GURL& app_origin,
+ const SyncStatusCallback& callback);
- SyncServiceState GetSyncServiceState();
- void GetExtensionStatusMap(std::map<GURL, std::string>* status_map);
+ void GetExtensionStatusMap(const ExtensionStatusMapCallback& callback);
void DumpFiles(const GURL& origin, const DumpFilesCallback& callback);
- scoped_ptr<base::ListValue> DumpDatabase();
+ void DumpDatabase(const DumpFilesCallback& callback);
// Returns the file |url|'s sync status.
- void GetFileSyncStatus(
- const fileapi::FileSystemURL& url,
- const SyncFileStatusCallback& callback);
+ void GetFileSyncStatus(const storage::FileSystemURL& url,
+ const SyncFileStatusCallback& callback);
void AddSyncEventObserver(SyncEventObserver* observer);
void RemoveSyncEventObserver(SyncEventObserver* observer);
- ConflictResolutionPolicy GetConflictResolutionPolicy(const GURL& origin);
- SyncStatusCode SetConflictResolutionPolicy(const GURL& origin,
- ConflictResolutionPolicy policy);
-
LocalChangeProcessor* GetLocalChangeProcessor(const GURL& origin);
- void OnSyncIdle();
+ // SyncProcessRunner::Client implementations.
+ virtual void OnSyncIdle() OVERRIDE;
+ virtual SyncServiceState GetSyncServiceState() OVERRIDE;
+ virtual SyncFileSystemService* GetSyncService() OVERRIDE;
+
+ void OnPromotionCompleted(int* num_running_jobs);
+ void CheckIfIdle();
+
+ TaskLogger* task_logger() { return &task_logger_; }
+
+ void CallOnIdleForTesting(const base::Closure& callback);
private:
friend class SyncFileSystemServiceFactory;
friend class SyncFileSystemServiceTest;
+ friend class SyncFileSystemTest;
friend struct base::DefaultDeleter<SyncFileSystemService>;
friend class LocalSyncRunner;
friend class RemoteSyncRunner;
void DidInitializeFileSystemForDump(const GURL& app_origin,
const DumpFilesCallback& callback,
SyncStatusCode status);
+ void DidDumpFiles(const GURL& app_origin,
+ const DumpFilesCallback& callback,
+ scoped_ptr<base::ListValue> files);
+
+ void DidDumpDatabase(const DumpFilesCallback& callback,
+ scoped_ptr<base::ListValue> list);
+
+ void DidGetExtensionStatusMap(
+ const ExtensionStatusMapCallback& callback,
+ scoped_ptr<RemoteFileSyncService::OriginStatusMap> status_map);
// Overrides sync_enabled_ setting. This should be called only by tests.
void SetSyncEnabledForTesting(bool enabled);
void OnRemoteServiceStateUpdated(RemoteServiceState state,
const std::string& description);
- // content::NotificationObserver implementation.
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- void HandleExtensionInstalled(const content::NotificationDetails& details);
- void HandleExtensionUnloaded(int type,
- const content::NotificationDetails& details);
- void HandleExtensionUninstalled(int type,
- const content::NotificationDetails& details);
- void HandleExtensionEnabled(int type,
- const content::NotificationDetails& details);
-
- // ProfileSyncServiceObserver:
+ // extensions::ExtensionRegistryObserver implementations.
+ virtual void OnExtensionInstalled(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ bool is_update) OVERRIDE;
+ virtual void OnExtensionUnloaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
+ virtual void OnExtensionUninstalled(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UninstallReason reason) OVERRIDE;
+ virtual void OnExtensionLoaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension) OVERRIDE;
+
+ // ProfileSyncServiceObserver implementation.
virtual void OnStateChanged() OVERRIDE;
- // SyncFileStatusObserver:
- virtual void OnFileStatusChanged(
- const fileapi::FileSystemURL& url,
- SyncFileStatus sync_status,
- SyncAction action_taken,
- SyncDirection direction) OVERRIDE;
+ // SyncFileStatusObserver implementation.
+ virtual void OnFileStatusChanged(const storage::FileSystemURL& url,
+ SyncFileStatus sync_status,
+ SyncAction action_taken,
+ SyncDirection direction) OVERRIDE;
// Check the profile's sync preference settings and call
// remote_file_service_->SetSyncEnabled() to update the status.
RemoteFileSyncService* GetRemoteService(const GURL& origin);
Profile* profile_;
- content::NotificationRegistrar registrar_;
scoped_ptr<LocalFileSyncService> local_service_;
scoped_ptr<RemoteFileSyncService> remote_service_;
- // Holds v2 RemoteFileSyncService, gets created lazily
- // in case we need to run multiple remote services depending on origin/app.
- // (crbug.com/324215)
- scoped_ptr<RemoteFileSyncService> v2_remote_service_;
-
// Holds all SyncProcessRunners.
ScopedVector<SyncProcessRunner> local_sync_runners_;
ScopedVector<SyncProcessRunner> remote_sync_runners_;
// Indicates if sync is currently enabled or not.
bool sync_enabled_;
+ TaskLogger task_logger_;
ObserverList<SyncEventObserver> observers_;
+ bool promoting_demoted_changes_;
+ base::Closure idle_callback_;
+
DISALLOW_COPY_AND_ASSIGN(SyncFileSystemService);
};