OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 static DOMFileSystem* create(ExecutionContext*, const String& name, FileSyst
emType, const KURL& rootURL); | 53 static DOMFileSystem* create(ExecutionContext*, const String& name, FileSyst
emType, const KURL& rootURL); |
54 | 54 |
55 // Creates a new isolated file system for the given filesystemId. | 55 // Creates a new isolated file system for the given filesystemId. |
56 static DOMFileSystem* createIsolatedFileSystem(ExecutionContext*, const Stri
ng& filesystemId); | 56 static DOMFileSystem* createIsolatedFileSystem(ExecutionContext*, const Stri
ng& filesystemId); |
57 | 57 |
58 DirectoryEntry* root(); | 58 DirectoryEntry* root(); |
59 | 59 |
60 // DOMFileSystemBase overrides. | 60 // DOMFileSystemBase overrides. |
61 virtual void addPendingCallbacks() OVERRIDE; | 61 virtual void addPendingCallbacks() OVERRIDE; |
62 virtual void removePendingCallbacks() OVERRIDE; | 62 virtual void removePendingCallbacks() OVERRIDE; |
63 virtual void reportError(PassOwnPtrWillBeRawPtr<ErrorCallback>, PassRefPtrWi
llBeRawPtr<FileError>) OVERRIDE; | 63 virtual void reportError(ErrorCallback*, PassRefPtrWillBeRawPtr<FileError>)
OVERRIDE; |
64 | 64 |
65 // ActiveDOMObject overrides. | 65 // ActiveDOMObject overrides. |
66 virtual bool hasPendingActivity() const OVERRIDE; | 66 virtual bool hasPendingActivity() const OVERRIDE; |
67 | 67 |
68 void createWriter(const FileEntry*, PassOwnPtrWillBeRawPtr<FileWriterCallbac
k>, PassOwnPtrWillBeRawPtr<ErrorCallback>); | 68 void createWriter(const FileEntry*, FileWriterCallback*, ErrorCallback*); |
69 void createFile(const FileEntry*, PassOwnPtrWillBeRawPtr<FileCallback>, Pass
OwnPtrWillBeRawPtr<ErrorCallback>); | 69 void createFile(const FileEntry*, FileCallback*, ErrorCallback*); |
70 | 70 |
71 // Schedule a callback. This should not cross threads (should be called on t
he same context thread). | 71 // Schedule a callback. This should not cross threads (should be called on t
he same context thread). |
72 // FIXME: move this to a more generic place. | 72 // FIXME: move this to a more generic place. |
73 template <typename CB, typename CBArg> | 73 template <typename CB, typename CBArg> |
74 static void scheduleCallback(ExecutionContext*, PassOwnPtrWillBeRawPtr<CB>,
PassRefPtrWillBeRawPtr<CBArg>); | 74 static void scheduleCallback(ExecutionContext*, CB*, PassRefPtrWillBeRawPtr<
CBArg>); |
75 | 75 |
76 template <typename CB, typename CBArg> | 76 template <typename CB, typename CBArg> |
77 static void scheduleCallback(ExecutionContext*, PassOwnPtrWillBeRawPtr<CB>,
CBArg*); | 77 static void scheduleCallback(ExecutionContext*, CB*, CBArg*); |
78 | 78 |
79 template <typename CB, typename CBArg> | 79 template <typename CB, typename CBArg> |
80 static void scheduleCallback(ExecutionContext*, PassOwnPtrWillBeRawPtr<CB>,
const HeapVector<CBArg>&); | 80 static void scheduleCallback(ExecutionContext*, CB*, const HeapVector<CBArg>
&); |
81 | 81 |
82 template <typename CB, typename CBArg> | 82 template <typename CB, typename CBArg> |
83 static void scheduleCallback(ExecutionContext*, PassOwnPtrWillBeRawPtr<CB>,
const CBArg&); | 83 static void scheduleCallback(ExecutionContext*, CB*, const CBArg&); |
84 | 84 |
85 template <typename CB> | 85 template <typename CB> |
86 static void scheduleCallback(ExecutionContext*, PassOwnPtrWillBeRawPtr<CB>); | 86 static void scheduleCallback(ExecutionContext*, CB*); |
87 | 87 |
88 template <typename CB, typename CBArg> | 88 template <typename CB, typename CBArg> |
89 void scheduleCallback(PassOwnPtrWillBeRawPtr<CB> callback, PassRefPtrWillBeR
awPtr<CBArg> callbackArg) | 89 void scheduleCallback(CB* callback, PassRefPtrWillBeRawPtr<CBArg> callbackAr
g) |
90 { | 90 { |
91 scheduleCallback(executionContext(), callback, callbackArg); | 91 scheduleCallback(executionContext(), callback, callbackArg); |
92 } | 92 } |
93 | 93 |
94 template <typename CB, typename CBArg> | 94 template <typename CB, typename CBArg> |
95 void scheduleCallback(PassOwnPtrWillBeRawPtr<CB> callback, CBArg* callbackAr
g) | 95 void scheduleCallback(CB* callback, CBArg* callbackArg) |
96 { | 96 { |
97 scheduleCallback(executionContext(), callback, callbackArg); | 97 scheduleCallback(executionContext(), callback, callbackArg); |
98 } | 98 } |
99 | 99 |
100 template <typename CB, typename CBArg> | 100 template <typename CB, typename CBArg> |
101 void scheduleCallback(PassOwnPtrWillBeRawPtr<CB> callback, const CBArg& call
backArg) | 101 void scheduleCallback(CB* callback, const CBArg& callbackArg) |
102 { | 102 { |
103 scheduleCallback(executionContext(), callback, callbackArg); | 103 scheduleCallback(executionContext(), callback, callbackArg); |
104 } | 104 } |
105 | 105 |
106 private: | 106 private: |
107 DOMFileSystem(ExecutionContext*, const String& name, FileSystemType, const K
URL& rootURL); | 107 DOMFileSystem(ExecutionContext*, const String& name, FileSystemType, const K
URL& rootURL); |
108 | 108 |
109 class DispatchCallbackTaskBase : public ExecutionContextTask { | 109 class DispatchCallbackTaskBase : public ExecutionContextTask { |
110 public: | 110 public: |
111 DispatchCallbackTaskBase() | 111 DispatchCallbackTaskBase() |
112 : m_taskName("FileSystem") | 112 : m_taskName("FileSystem") |
113 { | 113 { |
114 } | 114 } |
115 | 115 |
116 virtual const String& taskNameForInstrumentation() const OVERRIDE | 116 virtual const String& taskNameForInstrumentation() const OVERRIDE |
117 { | 117 { |
118 return m_taskName; | 118 return m_taskName; |
119 } | 119 } |
120 | 120 |
121 private: | 121 private: |
122 const String m_taskName; | 122 const String m_taskName; |
123 }; | 123 }; |
124 | 124 |
125 // A helper template to schedule a callback task. | 125 // A helper template to schedule a callback task. |
126 template <typename CB, typename CBArg> | 126 template <typename CB, typename CBArg> |
127 class DispatchCallbackRefPtrArgTask FINAL : public DispatchCallbackTaskBase
{ | 127 class DispatchCallbackRefPtrArgTask FINAL : public DispatchCallbackTaskBase
{ |
128 public: | 128 public: |
129 DispatchCallbackRefPtrArgTask(PassOwnPtrWillBeRawPtr<CB> callback, PassR
efPtrWillBeRawPtr<CBArg> arg) | 129 DispatchCallbackRefPtrArgTask(CB* callback, PassRefPtrWillBeRawPtr<CBArg
> arg) |
130 : m_callback(callback) | 130 : m_callback(callback) |
131 , m_callbackArg(arg) | 131 , m_callbackArg(arg) |
132 { | 132 { |
133 } | 133 } |
134 | 134 |
135 virtual void performTask(ExecutionContext*) OVERRIDE | 135 virtual void performTask(ExecutionContext*) OVERRIDE |
136 { | 136 { |
137 m_callback->handleEvent(m_callbackArg.get()); | 137 m_callback->handleEvent(m_callbackArg.get()); |
138 } | 138 } |
139 | 139 |
140 private: | 140 private: |
141 OwnPtrWillBePersistent<CB> m_callback; | 141 Persistent<CB> m_callback; |
142 RefPtrWillBePersistent<CBArg> m_callbackArg; | 142 RefPtrWillBePersistent<CBArg> m_callbackArg; |
143 }; | 143 }; |
144 | 144 |
145 template <typename CB, typename CBArg> | 145 template <typename CB, typename CBArg> |
146 class DispatchCallbackPtrArgTask FINAL : public DispatchCallbackTaskBase { | 146 class DispatchCallbackPtrArgTask FINAL : public DispatchCallbackTaskBase { |
147 public: | 147 public: |
148 DispatchCallbackPtrArgTask(PassOwnPtrWillBeRawPtr<CB> callback, CBArg* a
rg) | 148 DispatchCallbackPtrArgTask(CB* callback, CBArg* arg) |
149 : m_callback(callback) | 149 : m_callback(callback) |
150 , m_callbackArg(arg) | 150 , m_callbackArg(arg) |
151 { | 151 { |
152 } | 152 } |
153 | 153 |
154 virtual void performTask(ExecutionContext*) OVERRIDE | 154 virtual void performTask(ExecutionContext*) OVERRIDE |
155 { | 155 { |
156 m_callback->handleEvent(m_callbackArg.get()); | 156 m_callback->handleEvent(m_callbackArg.get()); |
157 } | 157 } |
158 | 158 |
159 private: | 159 private: |
160 OwnPtrWillBePersistent<CB> m_callback; | 160 Persistent<CB> m_callback; |
161 Persistent<CBArg> m_callbackArg; | 161 Persistent<CBArg> m_callbackArg; |
162 }; | 162 }; |
163 | 163 |
164 template <typename CB, typename CBArg> | 164 template <typename CB, typename CBArg> |
165 class DispatchCallbackNonPtrArgTask FINAL : public DispatchCallbackTaskBase
{ | 165 class DispatchCallbackNonPtrArgTask FINAL : public DispatchCallbackTaskBase
{ |
166 public: | 166 public: |
167 DispatchCallbackNonPtrArgTask(PassOwnPtrWillBeRawPtr<CB> callback, const
CBArg& arg) | 167 DispatchCallbackNonPtrArgTask(CB* callback, const CBArg& arg) |
168 : m_callback(callback) | 168 : m_callback(callback) |
169 , m_callbackArg(arg) | 169 , m_callbackArg(arg) |
170 { | 170 { |
171 } | 171 } |
172 | 172 |
173 virtual void performTask(ExecutionContext*) OVERRIDE | 173 virtual void performTask(ExecutionContext*) OVERRIDE |
174 { | 174 { |
175 m_callback->handleEvent(m_callbackArg); | 175 m_callback->handleEvent(m_callbackArg); |
176 } | 176 } |
177 | 177 |
178 private: | 178 private: |
179 OwnPtrWillBePersistent<CB> m_callback; | 179 Persistent<CB> m_callback; |
180 CBArg m_callbackArg; | 180 CBArg m_callbackArg; |
181 }; | 181 }; |
182 | 182 |
183 template <typename CB> | 183 template <typename CB> |
184 class DispatchCallbackNoArgTask FINAL : public DispatchCallbackTaskBase { | 184 class DispatchCallbackNoArgTask FINAL : public DispatchCallbackTaskBase { |
185 public: | 185 public: |
186 DispatchCallbackNoArgTask(PassOwnPtrWillBeRawPtr<CB> callback) | 186 DispatchCallbackNoArgTask(CB* callback) |
187 : m_callback(callback) | 187 : m_callback(callback) |
188 { | 188 { |
189 } | 189 } |
190 | 190 |
191 virtual void performTask(ExecutionContext*) OVERRIDE | 191 virtual void performTask(ExecutionContext*) OVERRIDE |
192 { | 192 { |
193 m_callback->handleEvent(); | 193 m_callback->handleEvent(); |
194 } | 194 } |
195 | 195 |
196 private: | 196 private: |
197 OwnPtrWillBePersistent<CB> m_callback; | 197 Persistent<CB> m_callback; |
198 }; | 198 }; |
199 | 199 |
200 int m_numberOfPendingCallbacks; | 200 int m_numberOfPendingCallbacks; |
201 }; | 201 }; |
202 | 202 |
203 template <typename CB, typename CBArg> | 203 template <typename CB, typename CBArg> |
204 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, PassOwn
PtrWillBeRawPtr<CB> callback, PassRefPtrWillBeRawPtr<CBArg> arg) | 204 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* cal
lback, PassRefPtrWillBeRawPtr<CBArg> arg) |
205 { | 205 { |
206 ASSERT(executionContext->isContextThread()); | 206 ASSERT(executionContext->isContextThread()); |
207 if (callback) | 207 if (callback) |
208 executionContext->postTask(adoptPtr(new DispatchCallbackRefPtrArgTask<CB
, CBArg>(callback, arg))); | 208 executionContext->postTask(adoptPtr(new DispatchCallbackRefPtrArgTask<CB
, CBArg>(callback, arg))); |
209 } | 209 } |
210 | 210 |
211 template <typename CB, typename CBArg> | 211 template <typename CB, typename CBArg> |
212 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, PassOwn
PtrWillBeRawPtr<CB> callback, CBArg* arg) | 212 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* cal
lback, CBArg* arg) |
213 { | 213 { |
214 ASSERT(executionContext->isContextThread()); | 214 ASSERT(executionContext->isContextThread()); |
215 if (callback) | 215 if (callback) |
216 executionContext->postTask(adoptPtr(new DispatchCallbackPtrArgTask<CB, C
BArg>(callback, arg))); | 216 executionContext->postTask(adoptPtr(new DispatchCallbackPtrArgTask<CB, C
BArg>(callback, arg))); |
217 } | 217 } |
218 | 218 |
219 template <typename CB, typename CBArg> | 219 template <typename CB, typename CBArg> |
220 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, PassOwn
PtrWillBeRawPtr<CB> callback, const HeapVector<CBArg>& arg) | 220 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* cal
lback, const HeapVector<CBArg>& arg) |
221 { | 221 { |
222 ASSERT(executionContext->isContextThread()); | 222 ASSERT(executionContext->isContextThread()); |
223 if (callback) | 223 if (callback) |
224 executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB
, PersistentHeapVector<CBArg> >(callback, arg))); | 224 executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB
, PersistentHeapVector<CBArg> >(callback, arg))); |
225 } | 225 } |
226 | 226 |
227 template <typename CB, typename CBArg> | 227 template <typename CB, typename CBArg> |
228 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, PassOwn
PtrWillBeRawPtr<CB> callback, const CBArg& arg) | 228 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* cal
lback, const CBArg& arg) |
229 { | 229 { |
230 ASSERT(executionContext->isContextThread()); | 230 ASSERT(executionContext->isContextThread()); |
231 if (callback) | 231 if (callback) |
232 executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB
, CBArg>(callback, arg))); | 232 executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB
, CBArg>(callback, arg))); |
233 } | 233 } |
234 | 234 |
235 template <typename CB> | 235 template <typename CB> |
236 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, PassOwn
PtrWillBeRawPtr<CB> callback) | 236 void DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* cal
lback) |
237 { | 237 { |
238 ASSERT(executionContext->isContextThread()); | 238 ASSERT(executionContext->isContextThread()); |
239 if (callback) | 239 if (callback) |
240 executionContext->postTask(adoptPtr(new DispatchCallbackNoArgTask<CB>(ca
llback))); | 240 executionContext->postTask(adoptPtr(new DispatchCallbackNoArgTask<CB>(ca
llback))); |
241 } | 241 } |
242 | 242 |
243 } // namespace blink | 243 } // namespace blink |
244 | 244 |
245 #endif // DOMFileSystem_h | 245 #endif // DOMFileSystem_h |
OLD | NEW |