Index: chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h |
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h b/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h |
index 04b9054aaec04fb414ad7f6ba4b032e69e92040c..e282b05a45ae7c30fb2d899092db58dcc7fb1cbc 100644 |
--- a/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h |
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h |
@@ -5,13 +5,16 @@ |
#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INTERFACE_H_ |
#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INTERFACE_H_ |
+#include <map> |
#include <string> |
+#include <vector> |
#include "base/callback.h" |
#include "base/files/file.h" |
#include "base/files/file_path.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/observer_list.h" |
#include "storage/browser/fileapi/async_file_util.h" |
class EventRouter; |
@@ -30,8 +33,7 @@ namespace file_system_provider { |
class ProvidedFileSystemInfo; |
class RequestManager; |
-// Represents metadata for either a file or a directory. Returned by GetMetadata |
-// method in ProvidedFileSystemInterface. |
+// Represents metadata for either a file or a directory. |
struct EntryMetadata { |
EntryMetadata(); |
~EntryMetadata(); |
@@ -54,6 +56,9 @@ struct EntryMetadata { |
// fails synchronously. |
class ProvidedFileSystemInterface { |
public: |
+ struct ObservedEntry; |
+ struct ChildChange; |
+ |
// Mode of opening a file. Used by OpenFile(). |
enum OpenFileMode { OPEN_FILE_MODE_READ, OPEN_FILE_MODE_WRITE }; |
@@ -63,6 +68,9 @@ class ProvidedFileSystemInterface { |
METADATA_FIELD_THUMBNAIL = 1 << 0 |
}; |
+ // Type of a change to an observed entry. |
+ enum ChangeType { CHANGED, DELETED }; |
+ |
typedef base::Callback<void(int file_handle, base::File::Error result)> |
OpenFileCallback; |
@@ -79,6 +87,44 @@ class ProvidedFileSystemInterface { |
// Mask of fields requested from the GetMetadata() call. |
typedef int MetadataFieldMask; |
+ // List of observed entries. |
+ typedef std::map<base::FilePath, ObservedEntry> ObservedEntries; |
+ |
+ // Lust of child changes. |
+ typedef std::vector<ChildChange> ChildChanges; |
+ |
+ // Represents an observed entry on the file system. |
+ struct ObservedEntry { |
+ ObservedEntry(); |
+ ~ObservedEntry(); |
+ |
+ base::FilePath entry_path; |
+ bool recursive; |
+ std::string last_tag; |
+ }; |
+ |
+ // Describes a change in an entry contained in an observed directory. |
+ struct ChildChange { |
+ ChildChange(); |
+ ~ChildChange(); |
+ |
+ base::FilePath entry_path; |
+ ChangeType change_type; |
+ }; |
+ |
+ // Observer class to be notified about changes happened to the file system. |
+ class Observer { |
+ public: |
+ // Called when an observed entry is changed, including removals. |
+ virtual void OnEntryChanged( |
+ const base::FilePath& observed_path, |
+ ChangeType change_type, |
+ const std::vector<ChildChange>& child_changes) = 0; |
+ |
+ // Called when list of observed entries is changed. |
+ virtual void OnObservedEntriesListChanged() = 0; |
+ }; |
+ |
virtual ~ProvidedFileSystemInterface() {} |
// Requests unmounting of the file system. The callback is called when the |
@@ -170,12 +216,35 @@ class ProvidedFileSystemInterface { |
int length, |
const storage::AsyncFileUtil::StatusCallback& callback) = 0; |
+ // Requests observing a directory. |
+ virtual AbortCallback ObserveDirectory( |
+ const base::FilePath& directory_path, |
+ bool recursive, |
+ const storage::AsyncFileUtil::StatusCallback& callback) = 0; |
+ |
+ // Requests unobserving an entry. |
+ virtual AbortCallback UnobserveEntry( |
+ const base::FilePath& entry_path, |
+ const storage::AsyncFileUtil::StatusCallback& callback) = 0; |
+ |
// Returns a provided file system info for this file system. |
virtual const ProvidedFileSystemInfo& GetFileSystemInfo() const = 0; |
+ // Returns a mutable list of observed entries. |
+ virtual ObservedEntries* GetObservedEntries() = 0; |
+ |
// Returns a request manager for the file system. |
virtual RequestManager* GetRequestManager() = 0; |
+ // Adds an observer on the file system. |
+ virtual void AddObserver(Observer* observer) = 0; |
+ |
+ // Removes an observer. |
+ virtual void RemoveObserver(Observer* observer) = 0; |
+ |
+ // Gets a list of observers. |
+ virtual ObserverList<Observer>* GetObservers() = 0; |
+ |
// Returns a weak pointer to this object. |
virtual base::WeakPtr<ProvidedFileSystemInterface> GetWeakPtr() = 0; |
}; |