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.
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_
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/sync_file_system/sync_callbacks.h"
10 #include "chrome/browser/sync_file_system/sync_status_code.h"
11 #include "content/public/browser/notification_observer.h"
12 #include "content/public/browser/notification_registrar.h"
13 #include "webkit/browser/fileapi/file_system_backend.h"
14 #include "webkit/browser/fileapi/file_system_quota_util.h"
15 #include "webkit/browser/fileapi/sandbox_file_system_backend_delegate.h"
17 namespace sync_file_system
{
19 class LocalFileChangeTracker
;
20 class LocalFileSyncContext
;
22 class SyncFileSystemBackend
23 : public fileapi::FileSystemBackend
{
25 explicit SyncFileSystemBackend(Profile
* profile
);
26 virtual ~SyncFileSystemBackend();
28 static SyncFileSystemBackend
* CreateForTesting();
30 // FileSystemBackend overrides.
31 virtual bool CanHandleType(fileapi::FileSystemType type
) const OVERRIDE
;
32 virtual void Initialize(fileapi::FileSystemContext
* context
) OVERRIDE
;
33 virtual void OpenFileSystem(
34 const GURL
& origin_url
,
35 fileapi::FileSystemType type
,
36 fileapi::OpenFileSystemMode mode
,
37 const OpenFileSystemCallback
& callback
) OVERRIDE
;
38 virtual fileapi::AsyncFileUtil
* GetAsyncFileUtil(
39 fileapi::FileSystemType type
) OVERRIDE
;
40 virtual fileapi::CopyOrMoveFileValidatorFactory
*
41 GetCopyOrMoveFileValidatorFactory(
42 fileapi::FileSystemType type
,
43 base::PlatformFileError
* error_code
) OVERRIDE
;
44 virtual fileapi::FileSystemOperation
* CreateFileSystemOperation(
45 const fileapi::FileSystemURL
& url
,
46 fileapi::FileSystemContext
* context
,
47 base::PlatformFileError
* error_code
) const OVERRIDE
;
48 virtual scoped_ptr
<webkit_blob::FileStreamReader
> CreateFileStreamReader(
49 const fileapi::FileSystemURL
& url
,
51 const base::Time
& expected_modification_time
,
52 fileapi::FileSystemContext
* context
) const OVERRIDE
;
53 virtual scoped_ptr
<fileapi::FileStreamWriter
> CreateFileStreamWriter(
54 const fileapi::FileSystemURL
& url
,
56 fileapi::FileSystemContext
* context
) const OVERRIDE
;
57 virtual fileapi::FileSystemQuotaUtil
* GetQuotaUtil() OVERRIDE
;
59 static SyncFileSystemBackend
* GetBackend(
60 const fileapi::FileSystemContext
* context
);
62 LocalFileChangeTracker
* change_tracker() { return change_tracker_
.get(); }
63 void SetLocalFileChangeTracker(scoped_ptr
<LocalFileChangeTracker
> tracker
);
65 LocalFileSyncContext
* sync_context() { return sync_context_
.get(); }
66 void set_sync_context(LocalFileSyncContext
* sync_context
);
69 class ProfileHolder
: public content::NotificationObserver
{
71 explicit ProfileHolder(Profile
* profile
);
73 // NotificationObserver override.
74 virtual void Observe(int type
,
75 const content::NotificationSource
& source
,
76 const content::NotificationDetails
& details
) OVERRIDE
;
78 Profile
* GetProfile();
81 content::NotificationRegistrar registrar_
;
86 fileapi::FileSystemContext
* context_
;
88 scoped_ptr
<LocalFileChangeTracker
> change_tracker_
;
89 scoped_refptr
<LocalFileSyncContext
> sync_context_
;
91 // Should be accessed on the UI thread.
92 scoped_ptr
<ProfileHolder
> profile_holder_
;
94 // A flag to skip the initialization sequence of SyncFileSystemService for
96 bool skip_initialize_syncfs_service_for_testing_
;
98 fileapi::SandboxFileSystemBackendDelegate
* GetDelegate() const;
100 void InitializeSyncFileSystemService(
101 const GURL
& origin_url
,
102 const SyncStatusCallback
& callback
);
103 void DidInitializeSyncFileSystemService(
104 fileapi::FileSystemContext
* context
,
105 const GURL
& origin_url
,
106 fileapi::FileSystemType type
,
107 fileapi::OpenFileSystemMode mode
,
108 const OpenFileSystemCallback
& callback
,
109 SyncStatusCode status
);
111 DISALLOW_COPY_AND_ASSIGN(SyncFileSystemBackend
);
114 } // namespace sync_file_system
116 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNC_FILE_SYSTEM_BACKEND_H_