sync_file_system_backend.h revision 2385ea399aae016c0806a4f9ef3c9cfe3d2a39df
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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNC_FILE_SYSTEM_BACKEND_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNC_FILE_SYSTEM_BACKEND_H_
7
8#include "webkit/browser/fileapi/file_system_backend.h"
9#include "webkit/browser/fileapi/file_system_quota_util.h"
10#include "webkit/browser/fileapi/sandbox_context.h"
11
12namespace sync_file_system {
13
14class LocalFileChangeTracker;
15class LocalFileSyncContext;
16
17class SyncFileSystemBackend
18    : public fileapi::FileSystemBackend,
19      public fileapi::FileSystemQuotaUtil {
20 public:
21  SyncFileSystemBackend();
22  virtual ~SyncFileSystemBackend();
23
24  // FileSystemBackend overrides.
25  virtual bool CanHandleType(fileapi::FileSystemType type) const OVERRIDE;
26  virtual void Initialize(fileapi::FileSystemContext* context) OVERRIDE;
27  virtual void OpenFileSystem(
28      const GURL& origin_url,
29      fileapi::FileSystemType type,
30      fileapi::OpenFileSystemMode mode,
31      const OpenFileSystemCallback& callback) OVERRIDE;
32  virtual fileapi::FileSystemFileUtil* GetFileUtil(
33      fileapi::FileSystemType type) OVERRIDE;
34  virtual fileapi::AsyncFileUtil* GetAsyncFileUtil(
35      fileapi::FileSystemType type) OVERRIDE;
36  virtual fileapi::CopyOrMoveFileValidatorFactory*
37      GetCopyOrMoveFileValidatorFactory(
38          fileapi::FileSystemType type,
39          base::PlatformFileError* error_code) OVERRIDE;
40  virtual fileapi::FileSystemOperation* CreateFileSystemOperation(
41      const fileapi::FileSystemURL& url,
42      fileapi::FileSystemContext* context,
43      base::PlatformFileError* error_code) const OVERRIDE;
44  virtual scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader(
45      const fileapi::FileSystemURL& url,
46      int64 offset,
47      const base::Time& expected_modification_time,
48      fileapi::FileSystemContext* context) const OVERRIDE;
49  virtual scoped_ptr<fileapi::FileStreamWriter> CreateFileStreamWriter(
50      const fileapi::FileSystemURL& url,
51      int64 offset,
52      fileapi::FileSystemContext* context) const OVERRIDE;
53  virtual fileapi::FileSystemQuotaUtil* GetQuotaUtil() OVERRIDE;
54
55  // FileSystemQuotaUtil overrides.
56  virtual base::PlatformFileError DeleteOriginDataOnFileThread(
57      fileapi::FileSystemContext* context,
58      quota::QuotaManagerProxy* proxy,
59      const GURL& origin_url,
60      fileapi::FileSystemType type) OVERRIDE;
61  virtual void GetOriginsForTypeOnFileThread(
62      fileapi::FileSystemType type,
63      std::set<GURL>* origins) OVERRIDE;
64  virtual void GetOriginsForHostOnFileThread(
65      fileapi::FileSystemType type,
66      const std::string& host,
67      std::set<GURL>* origins) OVERRIDE;
68  virtual int64 GetOriginUsageOnFileThread(
69      fileapi::FileSystemContext* context,
70      const GURL& origin_url,
71      fileapi::FileSystemType type) OVERRIDE;
72  virtual void InvalidateUsageCache(
73      const GURL& origin_url,
74      fileapi::FileSystemType type) OVERRIDE;
75  virtual void StickyInvalidateUsageCache(
76      const GURL& origin_url,
77      fileapi::FileSystemType type) OVERRIDE;
78  virtual void AddFileUpdateObserver(
79      fileapi::FileSystemType type,
80      fileapi::FileUpdateObserver* observer,
81      base::SequencedTaskRunner* task_runner) OVERRIDE;
82  virtual void AddFileChangeObserver(
83      fileapi::FileSystemType type,
84      fileapi::FileChangeObserver* observer,
85      base::SequencedTaskRunner* task_runner) OVERRIDE;
86  virtual void AddFileAccessObserver(
87      fileapi::FileSystemType type,
88      fileapi::FileAccessObserver* observer,
89      base::SequencedTaskRunner* task_runner) OVERRIDE;
90  virtual const fileapi::UpdateObserverList* GetUpdateObservers(
91      fileapi::FileSystemType type) const OVERRIDE;
92  virtual const fileapi::ChangeObserverList* GetChangeObservers(
93      fileapi::FileSystemType type) const OVERRIDE;
94  virtual const fileapi::AccessObserverList* GetAccessObservers(
95      fileapi::FileSystemType type) const OVERRIDE;
96
97  static SyncFileSystemBackend* GetBackend(
98      const fileapi::FileSystemContext* context);
99
100  sync_file_system::LocalFileChangeTracker* change_tracker() {
101    return change_tracker_.get();
102  }
103  void SetLocalFileChangeTracker(
104      scoped_ptr<sync_file_system::LocalFileChangeTracker> tracker);
105
106  sync_file_system::LocalFileSyncContext* sync_context() {
107    return sync_context_.get();
108  }
109  void set_sync_context(sync_file_system::LocalFileSyncContext* sync_context);
110
111 private:
112  // Observers for internal sync.
113  fileapi::UpdateObserverList update_observers_;
114  fileapi::ChangeObserverList change_observers_;
115
116  fileapi::UpdateObserverList syncable_update_observers_;
117  fileapi::ChangeObserverList syncable_change_observers_;
118
119  // Owned by FileSystemContext.
120  fileapi::SandboxContext* sandbox_context_;
121
122  scoped_ptr<sync_file_system::LocalFileChangeTracker> change_tracker_;
123  scoped_refptr<sync_file_system::LocalFileSyncContext> sync_context_;
124
125  DISALLOW_COPY_AND_ASSIGN(SyncFileSystemBackend);
126};
127
128}  // namespace sync_file_system
129
130#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNC_FILE_SYSTEM_BACKEND_H_
131