OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ | 5 #ifndef WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ |
6 #define WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ | 6 #define WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ |
7 | 7 |
8 #include "webkit/fileapi/media/mtp_device_file_system_config.h" | 8 #include "base/supports_user_data.h" |
9 #include "webkit/fileapi/task_runner_bound_observer_list.h" | 9 #include "webkit/fileapi/task_runner_bound_observer_list.h" |
10 #include "webkit/storage/webkit_storage_export.h" | 10 #include "webkit/storage/webkit_storage_export.h" |
11 | 11 |
12 namespace base { | 12 namespace base { |
13 class SequencedTaskRunner; | 13 class SequencedTaskRunner; |
14 } | 14 } |
15 | 15 |
16 namespace fileapi { | 16 namespace fileapi { |
17 | 17 |
18 class FileSystemContext; | 18 class FileSystemContext; |
19 class MediaPathFilter; | |
20 | 19 |
21 // A context class which is carried around by FileSystemOperation and | 20 // A context class which is carried around by FileSystemOperation and |
22 // its delegated tasks. It is valid to reuse one context instance across | 21 // its delegated tasks. It is valid to reuse one context instance across |
23 // multiple operations as far as those operations are supposed to share | 22 // multiple operations as far as those operations are supposed to share |
24 // the same context (e.g. use the same task runner, share the quota etc). | 23 // the same context (e.g. use the same task runner, share the quota etc). |
25 // Note that the remaining quota bytes (allowed_bytes_growth) may be | 24 // Note that the remaining quota bytes (allowed_bytes_growth) may be |
26 // updated during the execution of write operations. | 25 // updated during the execution of write operations. |
27 class WEBKIT_STORAGE_EXPORT_PRIVATE FileSystemOperationContext { | 26 class WEBKIT_STORAGE_EXPORT_PRIVATE FileSystemOperationContext |
| 27 : public base::SupportsUserData { |
28 public: | 28 public: |
29 explicit FileSystemOperationContext(FileSystemContext* context); | 29 explicit FileSystemOperationContext(FileSystemContext* context); |
30 ~FileSystemOperationContext(); | 30 |
| 31 // Specifies |task_runner| which the operation is performed on. |
| 32 FileSystemOperationContext(FileSystemContext* context, |
| 33 base::SequencedTaskRunner* task_runner); |
| 34 |
| 35 virtual ~FileSystemOperationContext(); |
31 | 36 |
32 FileSystemContext* file_system_context() const { | 37 FileSystemContext* file_system_context() const { |
33 return file_system_context_; | 38 return file_system_context_; |
34 } | 39 } |
35 | 40 |
36 // Updates the current remaining quota. | 41 // Updates the current remaining quota. |
37 void set_allowed_bytes_growth(const int64& allowed_bytes_growth) { | 42 void set_allowed_bytes_growth(const int64& allowed_bytes_growth) { |
38 allowed_bytes_growth_ = allowed_bytes_growth; | 43 allowed_bytes_growth_ = allowed_bytes_growth; |
39 } | 44 } |
40 | 45 |
41 // Returns the current remaining quota. | 46 // Returns the current remaining quota. |
42 int64 allowed_bytes_growth() const { return allowed_bytes_growth_; } | 47 int64 allowed_bytes_growth() const { return allowed_bytes_growth_; } |
43 | 48 |
44 #if defined(SUPPORT_MTP_DEVICE_FILESYSTEM) | |
45 // Reads |mtp_device_delegate_url_| on |task_runner_|. | |
46 const std::string& mtp_device_delegate_url() const { | |
47 return mtp_device_delegate_url_; | |
48 } | |
49 #endif | |
50 | |
51 // Returns TaskRunner which the operation is performed on. | 49 // Returns TaskRunner which the operation is performed on. |
52 base::SequencedTaskRunner* task_runner() const { | 50 base::SequencedTaskRunner* task_runner() const { |
53 return task_runner_.get(); | 51 return task_runner_.get(); |
54 } | 52 } |
55 | 53 |
56 MediaPathFilter* media_path_filter() { return media_path_filter_; } | |
57 ChangeObserverList* change_observers() { return &change_observers_; } | 54 ChangeObserverList* change_observers() { return &change_observers_; } |
58 AccessObserverList* access_observers() { return &access_observers_; } | 55 AccessObserverList* access_observers() { return &access_observers_; } |
59 UpdateObserverList* update_observers() { return &update_observers_; } | 56 UpdateObserverList* update_observers() { return &update_observers_; } |
60 | 57 |
| 58 // Gets and sets value-type (or not-owned) variable as UserData. |
| 59 template <typename T> T GetUserValue(const char* key) const { |
| 60 ValueAdapter<T>* v = static_cast<ValueAdapter<T>*>(GetUserData(key)); |
| 61 return v ? v->value() : T(); |
| 62 } |
| 63 template <typename T> void SetUserValue(const char* key, const T& value) { |
| 64 SetUserData(key, new ValueAdapter<T>(value)); |
| 65 } |
| 66 |
61 private: | 67 private: |
62 // Only MountPointProviders can access these setters. | 68 // An adapter for setting a value-type (or not owned) data as UserData. |
63 friend class CrosMountPointProvider; | 69 template <typename T> class ValueAdapter |
| 70 : public base::SupportsUserData::Data { |
| 71 public: |
| 72 ValueAdapter(const T& value) : value_(value) {} |
| 73 const T& value() const { return value_; } |
| 74 private: |
| 75 T value_; |
| 76 DISALLOW_COPY_AND_ASSIGN(ValueAdapter); |
| 77 }; |
| 78 |
| 79 // Only regular (and test) MountPointProviders can access following setters. |
64 friend class IsolatedMountPointProvider; | 80 friend class IsolatedMountPointProvider; |
65 friend class SandboxMountPointProvider; | 81 friend class SandboxMountPointProvider; |
66 friend class TestMountPointProvider; | 82 friend class TestMountPointProvider; |
67 | 83 |
68 // Tests also need access to some setters. | 84 // Tests also need access to some setters. |
69 friend class FileSystemQuotaClientTest; | 85 friend class FileSystemQuotaClientTest; |
70 friend class LocalFileSystemOperationTest; | 86 friend class LocalFileSystemOperationTest; |
71 friend class LocalFileSystemOperationWriteTest; | 87 friend class LocalFileSystemOperationWriteTest; |
72 friend class LocalFileSystemTestOriginHelper; | 88 friend class LocalFileSystemTestOriginHelper; |
73 friend class ObfuscatedFileUtilTest; | 89 friend class ObfuscatedFileUtilTest; |
74 | 90 |
75 // Overrides TaskRunner which the operation is performed on. | |
76 // file_system_context_->task_runners()->file_task_runner() is used otherwise. | |
77 void set_task_runner(base::SequencedTaskRunner* task_runner); | |
78 | |
79 void set_media_path_filter(MediaPathFilter* media_path_filter) { | |
80 media_path_filter_ = media_path_filter; | |
81 } | |
82 void set_change_observers(const ChangeObserverList& list) { | 91 void set_change_observers(const ChangeObserverList& list) { |
83 change_observers_ = list; | 92 change_observers_ = list; |
84 } | 93 } |
85 void set_access_observers(const AccessObserverList& list) { | 94 void set_access_observers(const AccessObserverList& list) { |
86 access_observers_ = list; | 95 access_observers_ = list; |
87 } | 96 } |
88 void set_update_observers(const UpdateObserverList& list) { | 97 void set_update_observers(const UpdateObserverList& list) { |
89 update_observers_ = list; | 98 update_observers_ = list; |
90 } | 99 } |
91 #if defined(SUPPORT_MTP_DEVICE_FILESYSTEM) | |
92 // Initializes |mtp_device_delegate_url_| on the IO thread. | |
93 void set_mtp_device_delegate_url(const std::string& delegate_url) { | |
94 mtp_device_delegate_url_ = delegate_url; | |
95 } | |
96 #endif | |
97 | 100 |
98 FileSystemContext* file_system_context_; | 101 FileSystemContext* file_system_context_; |
99 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 102 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
100 | 103 |
101 int64 allowed_bytes_growth_; | 104 int64 allowed_bytes_growth_; |
102 MediaPathFilter* media_path_filter_; | |
103 | 105 |
104 AccessObserverList access_observers_; | 106 AccessObserverList access_observers_; |
105 ChangeObserverList change_observers_; | 107 ChangeObserverList change_observers_; |
106 UpdateObserverList update_observers_; | 108 UpdateObserverList update_observers_; |
107 | 109 |
108 #if defined(SUPPORT_MTP_DEVICE_FILESYSTEM) | |
109 // URL for the media transfer protocol (MTP) device delegate. | |
110 // Initialized on IO thread and used on |task_runner_|. | |
111 std::string mtp_device_delegate_url_; | |
112 #endif | |
113 | |
114 DISALLOW_COPY_AND_ASSIGN(FileSystemOperationContext); | 110 DISALLOW_COPY_AND_ASSIGN(FileSystemOperationContext); |
115 }; | 111 }; |
116 | 112 |
117 } // namespace fileapi | 113 } // namespace fileapi |
118 | 114 |
119 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ | 115 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_OPERATION_CONTEXT_H_ |
OLD | NEW |