Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync_file_system / sync_file_system_service.h
index 8831beb..38b21e6 100644 (file)
 #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;
 }
 
@@ -39,49 +40,55 @@ class LocalFileSyncService;
 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;
@@ -103,6 +110,16 @@ class SyncFileSystemService
   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);
@@ -114,28 +131,31 @@ class SyncFileSystemService
   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.
@@ -151,16 +171,10 @@ class SyncFileSystemService
   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_;
@@ -168,8 +182,12 @@ class SyncFileSystemService
   // 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);
 };