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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 #include "modules/filesystem/EntryCallback.h" | 44 #include "modules/filesystem/EntryCallback.h" |
45 #include "modules/filesystem/ErrorCallback.h" | 45 #include "modules/filesystem/ErrorCallback.h" |
46 #include "modules/filesystem/FileEntry.h" | 46 #include "modules/filesystem/FileEntry.h" |
47 #include "modules/filesystem/FileSystemCallback.h" | 47 #include "modules/filesystem/FileSystemCallback.h" |
48 #include "modules/filesystem/FileWriterBase.h" | 48 #include "modules/filesystem/FileWriterBase.h" |
49 #include "modules/filesystem/FileWriterBaseCallback.h" | 49 #include "modules/filesystem/FileWriterBaseCallback.h" |
50 #include "modules/filesystem/Metadata.h" | 50 #include "modules/filesystem/Metadata.h" |
51 #include "modules/filesystem/MetadataCallback.h" | 51 #include "modules/filesystem/MetadataCallback.h" |
52 #include "platform/FileMetadata.h" | 52 #include "platform/FileMetadata.h" |
53 #include "public/platform/WebFileWriter.h" | 53 #include "public/platform/WebFileWriter.h" |
54 #include "wtf/PtrUtil.h" | |
55 #include <memory> | |
56 | 54 |
57 namespace blink { | 55 namespace blink { |
58 | 56 |
59 FileSystemCallbacksBase::FileSystemCallbacksBase(ErrorCallback* errorCallback, D
OMFileSystemBase* fileSystem, ExecutionContext* context) | 57 FileSystemCallbacksBase::FileSystemCallbacksBase(ErrorCallback* errorCallback, D
OMFileSystemBase* fileSystem, ExecutionContext* context) |
60 : m_errorCallback(errorCallback) | 58 : m_errorCallback(errorCallback) |
61 , m_fileSystem(fileSystem) | 59 , m_fileSystem(fileSystem) |
62 , m_executionContext(context) | 60 , m_executionContext(context) |
63 { | 61 { |
64 if (m_fileSystem) | 62 if (m_fileSystem) |
65 m_fileSystem->addPendingCallbacks(); | 63 m_fileSystem->addPendingCallbacks(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 ASSERT(callback); | 97 ASSERT(callback); |
100 if (shouldScheduleCallback()) | 98 if (shouldScheduleCallback()) |
101 DOMFileSystem::scheduleCallback(m_executionContext.get(), callback); | 99 DOMFileSystem::scheduleCallback(m_executionContext.get(), callback); |
102 else if (callback) | 100 else if (callback) |
103 callback->handleEvent(); | 101 callback->handleEvent(); |
104 m_executionContext.clear(); | 102 m_executionContext.clear(); |
105 } | 103 } |
106 | 104 |
107 // EntryCallbacks ------------------------------------------------------------- | 105 // EntryCallbacks ------------------------------------------------------------- |
108 | 106 |
109 std::unique_ptr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback*
successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFil
eSystemBase* fileSystem, const String& expectedPath, bool isDirectory) | 107 PassOwnPtr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback* succe
ssCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSyst
emBase* fileSystem, const String& expectedPath, bool isDirectory) |
110 { | 108 { |
111 return wrapUnique(new EntryCallbacks(successCallback, errorCallback, context
, fileSystem, expectedPath, isDirectory)); | 109 return adoptPtr(new EntryCallbacks(successCallback, errorCallback, context,
fileSystem, expectedPath, isDirectory)); |
112 } | 110 } |
113 | 111 |
114 EntryCallbacks::EntryCallbacks(EntryCallback* successCallback, ErrorCallback* er
rorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const Str
ing& expectedPath, bool isDirectory) | 112 EntryCallbacks::EntryCallbacks(EntryCallback* successCallback, ErrorCallback* er
rorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const Str
ing& expectedPath, bool isDirectory) |
115 : FileSystemCallbacksBase(errorCallback, fileSystem, context) | 113 : FileSystemCallbacksBase(errorCallback, fileSystem, context) |
116 , m_successCallback(successCallback) | 114 , m_successCallback(successCallback) |
117 , m_expectedPath(expectedPath) | 115 , m_expectedPath(expectedPath) |
118 , m_isDirectory(isDirectory) | 116 , m_isDirectory(isDirectory) |
119 { | 117 { |
120 } | 118 } |
121 | 119 |
122 void EntryCallbacks::didSucceed() | 120 void EntryCallbacks::didSucceed() |
123 { | 121 { |
124 if (m_successCallback) { | 122 if (m_successCallback) { |
125 if (m_isDirectory) | 123 if (m_isDirectory) |
126 handleEventOrScheduleCallback(m_successCallback.release(), Directory
Entry::create(m_fileSystem, m_expectedPath)); | 124 handleEventOrScheduleCallback(m_successCallback.release(), Directory
Entry::create(m_fileSystem, m_expectedPath)); |
127 else | 125 else |
128 handleEventOrScheduleCallback(m_successCallback.release(), FileEntry
::create(m_fileSystem, m_expectedPath)); | 126 handleEventOrScheduleCallback(m_successCallback.release(), FileEntry
::create(m_fileSystem, m_expectedPath)); |
129 } | 127 } |
130 } | 128 } |
131 | 129 |
132 // EntriesCallbacks ----------------------------------------------------------- | 130 // EntriesCallbacks ----------------------------------------------------------- |
133 | 131 |
134 std::unique_ptr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallba
ck* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, Di
rectoryReaderBase* directoryReader, const String& basePath) | 132 PassOwnPtr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallback* s
uccessCallback, ErrorCallback* errorCallback, ExecutionContext* context, Directo
ryReaderBase* directoryReader, const String& basePath) |
135 { | 133 { |
136 return wrapUnique(new EntriesCallbacks(successCallback, errorCallback, conte
xt, directoryReader, basePath)); | 134 return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, context
, directoryReader, basePath)); |
137 } | 135 } |
138 | 136 |
139 EntriesCallbacks::EntriesCallbacks(EntriesCallback* successCallback, ErrorCallba
ck* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryRead
er, const String& basePath) | 137 EntriesCallbacks::EntriesCallbacks(EntriesCallback* successCallback, ErrorCallba
ck* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryRead
er, const String& basePath) |
140 : FileSystemCallbacksBase(errorCallback, directoryReader->filesystem(), cont
ext) | 138 : FileSystemCallbacksBase(errorCallback, directoryReader->filesystem(), cont
ext) |
141 , m_successCallback(successCallback) | 139 , m_successCallback(successCallback) |
142 , m_directoryReader(directoryReader) | 140 , m_directoryReader(directoryReader) |
143 , m_basePath(basePath) | 141 , m_basePath(basePath) |
144 { | 142 { |
145 ASSERT(m_directoryReader); | 143 ASSERT(m_directoryReader); |
146 } | 144 } |
(...skipping 11 matching lines...) Expand all Loading... |
158 m_directoryReader->setHasMoreEntries(hasMore); | 156 m_directoryReader->setHasMoreEntries(hasMore); |
159 EntryHeapVector entries; | 157 EntryHeapVector entries; |
160 entries.swap(m_entries); | 158 entries.swap(m_entries); |
161 // FIXME: delay the callback iff shouldScheduleCallback() is true. | 159 // FIXME: delay the callback iff shouldScheduleCallback() is true. |
162 if (m_successCallback) | 160 if (m_successCallback) |
163 m_successCallback->handleEvent(entries); | 161 m_successCallback->handleEvent(entries); |
164 } | 162 } |
165 | 163 |
166 // FileSystemCallbacks -------------------------------------------------------- | 164 // FileSystemCallbacks -------------------------------------------------------- |
167 | 165 |
168 std::unique_ptr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystem
Callback* successCallback, ErrorCallback* errorCallback, ExecutionContext* conte
xt, FileSystemType type) | 166 PassOwnPtr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystemCallb
ack* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, F
ileSystemType type) |
169 { | 167 { |
170 return wrapUnique(new FileSystemCallbacks(successCallback, errorCallback, co
ntext, type)); | 168 return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, cont
ext, type)); |
171 } | 169 } |
172 | 170 |
173 FileSystemCallbacks::FileSystemCallbacks(FileSystemCallback* successCallback, Er
rorCallback* errorCallback, ExecutionContext* context, FileSystemType type) | 171 FileSystemCallbacks::FileSystemCallbacks(FileSystemCallback* successCallback, Er
rorCallback* errorCallback, ExecutionContext* context, FileSystemType type) |
174 : FileSystemCallbacksBase(errorCallback, nullptr, context) | 172 : FileSystemCallbacksBase(errorCallback, nullptr, context) |
175 , m_successCallback(successCallback) | 173 , m_successCallback(successCallback) |
176 , m_type(type) | 174 , m_type(type) |
177 { | 175 { |
178 } | 176 } |
179 | 177 |
180 void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& root
URL) | 178 void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& root
URL) |
181 { | 179 { |
182 if (m_successCallback) | 180 if (m_successCallback) |
183 handleEventOrScheduleCallback(m_successCallback.release(), DOMFileSystem
::create(m_executionContext.get(), name, m_type, rootURL)); | 181 handleEventOrScheduleCallback(m_successCallback.release(), DOMFileSystem
::create(m_executionContext.get(), name, m_type, rootURL)); |
184 } | 182 } |
185 | 183 |
186 // ResolveURICallbacks -------------------------------------------------------- | 184 // ResolveURICallbacks -------------------------------------------------------- |
187 | 185 |
188 std::unique_ptr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallb
ack* successCallback, ErrorCallback* errorCallback, ExecutionContext* context) | 186 PassOwnPtr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallback*
successCallback, ErrorCallback* errorCallback, ExecutionContext* context) |
189 { | 187 { |
190 return wrapUnique(new ResolveURICallbacks(successCallback, errorCallback, co
ntext)); | 188 return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, cont
ext)); |
191 } | 189 } |
192 | 190 |
193 ResolveURICallbacks::ResolveURICallbacks(EntryCallback* successCallback, ErrorCa
llback* errorCallback, ExecutionContext* context) | 191 ResolveURICallbacks::ResolveURICallbacks(EntryCallback* successCallback, ErrorCa
llback* errorCallback, ExecutionContext* context) |
194 : FileSystemCallbacksBase(errorCallback, nullptr, context) | 192 : FileSystemCallbacksBase(errorCallback, nullptr, context) |
195 , m_successCallback(successCallback) | 193 , m_successCallback(successCallback) |
196 { | 194 { |
197 } | 195 } |
198 | 196 |
199 void ResolveURICallbacks::didResolveURL(const String& name, const KURL& rootURL,
FileSystemType type, const String& filePath, bool isDirectory) | 197 void ResolveURICallbacks::didResolveURL(const String& name, const KURL& rootURL,
FileSystemType type, const String& filePath, bool isDirectory) |
200 { | 198 { |
201 DOMFileSystem* filesystem = DOMFileSystem::create(m_executionContext.get(),
name, type, rootURL); | 199 DOMFileSystem* filesystem = DOMFileSystem::create(m_executionContext.get(),
name, type, rootURL); |
202 DirectoryEntry* root = filesystem->root(); | 200 DirectoryEntry* root = filesystem->root(); |
203 | 201 |
204 String absolutePath; | 202 String absolutePath; |
205 if (!DOMFileSystemBase::pathToAbsolutePath(type, root, filePath, absolutePat
h)) { | 203 if (!DOMFileSystemBase::pathToAbsolutePath(type, root, filePath, absolutePat
h)) { |
206 handleEventOrScheduleCallback(m_errorCallback.release(), FileError::crea
te(FileError::INVALID_MODIFICATION_ERR)); | 204 handleEventOrScheduleCallback(m_errorCallback.release(), FileError::crea
te(FileError::INVALID_MODIFICATION_ERR)); |
207 return; | 205 return; |
208 } | 206 } |
209 | 207 |
210 if (isDirectory) | 208 if (isDirectory) |
211 handleEventOrScheduleCallback(m_successCallback.release(), DirectoryEntr
y::create(filesystem, absolutePath)); | 209 handleEventOrScheduleCallback(m_successCallback.release(), DirectoryEntr
y::create(filesystem, absolutePath)); |
212 else | 210 else |
213 handleEventOrScheduleCallback(m_successCallback.release(), FileEntry::cr
eate(filesystem, absolutePath)); | 211 handleEventOrScheduleCallback(m_successCallback.release(), FileEntry::cr
eate(filesystem, absolutePath)); |
214 } | 212 } |
215 | 213 |
216 // MetadataCallbacks ---------------------------------------------------------- | 214 // MetadataCallbacks ---------------------------------------------------------- |
217 | 215 |
218 std::unique_ptr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCall
back* successCallback, ErrorCallback* errorCallback, ExecutionContext* context,
DOMFileSystemBase* fileSystem) | 216 PassOwnPtr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCallback*
successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFi
leSystemBase* fileSystem) |
219 { | 217 { |
220 return wrapUnique(new MetadataCallbacks(successCallback, errorCallback, cont
ext, fileSystem)); | 218 return adoptPtr(new MetadataCallbacks(successCallback, errorCallback, contex
t, fileSystem)); |
221 } | 219 } |
222 | 220 |
223 MetadataCallbacks::MetadataCallbacks(MetadataCallback* successCallback, ErrorCal
lback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem) | 221 MetadataCallbacks::MetadataCallbacks(MetadataCallback* successCallback, ErrorCal
lback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem) |
224 : FileSystemCallbacksBase(errorCallback, fileSystem, context) | 222 : FileSystemCallbacksBase(errorCallback, fileSystem, context) |
225 , m_successCallback(successCallback) | 223 , m_successCallback(successCallback) |
226 { | 224 { |
227 } | 225 } |
228 | 226 |
229 void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) | 227 void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) |
230 { | 228 { |
231 if (m_successCallback) | 229 if (m_successCallback) |
232 handleEventOrScheduleCallback(m_successCallback.release(), Metadata::cre
ate(metadata)); | 230 handleEventOrScheduleCallback(m_successCallback.release(), Metadata::cre
ate(metadata)); |
233 } | 231 } |
234 | 232 |
235 // FileWriterBaseCallbacks ---------------------------------------------------- | 233 // FileWriterBaseCallbacks ---------------------------------------------------- |
236 | 234 |
237 std::unique_ptr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWr
iterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* er
rorCallback, ExecutionContext* context) | 235 PassOwnPtr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWriterB
ase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCa
llback, ExecutionContext* context) |
238 { | 236 { |
239 return wrapUnique(new FileWriterBaseCallbacks(fileWriter, successCallback, e
rrorCallback, context)); | 237 return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, err
orCallback, context)); |
240 } | 238 } |
241 | 239 |
242 FileWriterBaseCallbacks::FileWriterBaseCallbacks(FileWriterBase* fileWriter, Fil
eWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionCon
text* context) | 240 FileWriterBaseCallbacks::FileWriterBaseCallbacks(FileWriterBase* fileWriter, Fil
eWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionCon
text* context) |
243 : FileSystemCallbacksBase(errorCallback, nullptr, context) | 241 : FileSystemCallbacksBase(errorCallback, nullptr, context) |
244 , m_fileWriter(fileWriter) | 242 , m_fileWriter(fileWriter) |
245 , m_successCallback(successCallback) | 243 , m_successCallback(successCallback) |
246 { | 244 { |
247 } | 245 } |
248 | 246 |
249 void FileWriterBaseCallbacks::didCreateFileWriter(std::unique_ptr<WebFileWriter>
fileWriter, long long length) | 247 void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<WebFileWriter> file
Writer, long long length) |
250 { | 248 { |
251 m_fileWriter->initialize(std::move(fileWriter), length); | 249 m_fileWriter->initialize(std::move(fileWriter), length); |
252 if (m_successCallback) | 250 if (m_successCallback) |
253 handleEventOrScheduleCallback(m_successCallback.release(), m_fileWriter.
release()); | 251 handleEventOrScheduleCallback(m_successCallback.release(), m_fileWriter.
release()); |
254 } | 252 } |
255 | 253 |
256 // SnapshotFileCallback ------------------------------------------------------- | 254 // SnapshotFileCallback ------------------------------------------------------- |
257 | 255 |
258 std::unique_ptr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSy
stemBase* filesystem, const String& name, const KURL& url, BlobCallback* success
Callback, ErrorCallback* errorCallback, ExecutionContext* context) | 256 PassOwnPtr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemB
ase* filesystem, const String& name, const KURL& url, BlobCallback* successCallb
ack, ErrorCallback* errorCallback, ExecutionContext* context) |
259 { | 257 { |
260 return wrapUnique(new SnapshotFileCallback(filesystem, name, url, successCal
lback, errorCallback, context)); | 258 return adoptPtr(new SnapshotFileCallback(filesystem, name, url, successCallb
ack, errorCallback, context)); |
261 } | 259 } |
262 | 260 |
263 SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const
String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* err
orCallback, ExecutionContext* context) | 261 SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const
String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* err
orCallback, ExecutionContext* context) |
264 : FileSystemCallbacksBase(errorCallback, filesystem, context) | 262 : FileSystemCallbacksBase(errorCallback, filesystem, context) |
265 , m_name(name) | 263 , m_name(name) |
266 , m_url(url) | 264 , m_url(url) |
267 , m_successCallback(successCallback) | 265 , m_successCallback(successCallback) |
268 { | 266 { |
269 } | 267 } |
270 | 268 |
271 void SnapshotFileCallback::didCreateSnapshotFile(const FileMetadata& metadata, P
assRefPtr<BlobDataHandle> snapshot) | 269 void SnapshotFileCallback::didCreateSnapshotFile(const FileMetadata& metadata, P
assRefPtr<BlobDataHandle> snapshot) |
272 { | 270 { |
273 if (!m_successCallback) | 271 if (!m_successCallback) |
274 return; | 272 return; |
275 | 273 |
276 // We can't directly use the snapshot blob data handle because the content t
ype on it hasn't been set. | 274 // We can't directly use the snapshot blob data handle because the content t
ype on it hasn't been set. |
277 // The |snapshot| param is here to provide a a chain of custody thru thread
bridging that is held onto until | 275 // The |snapshot| param is here to provide a a chain of custody thru thread
bridging that is held onto until |
278 // *after* we've coined a File with a new handle that has the correct type s
et on it. This allows the | 276 // *after* we've coined a File with a new handle that has the correct type s
et on it. This allows the |
279 // blob storage system to track when a temp file can and can't be safely del
eted. | 277 // blob storage system to track when a temp file can and can't be safely del
eted. |
280 | 278 |
281 handleEventOrScheduleCallback(m_successCallback.release(), DOMFileSystemBase
::createFile(metadata, m_url, m_fileSystem->type(), m_name)); | 279 handleEventOrScheduleCallback(m_successCallback.release(), DOMFileSystemBase
::createFile(metadata, m_url, m_fileSystem->type(), m_name)); |
282 } | 280 } |
283 | 281 |
284 // VoidCallbacks -------------------------------------------------------------- | 282 // VoidCallbacks -------------------------------------------------------------- |
285 | 283 |
286 std::unique_ptr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* su
ccessCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileS
ystemBase* fileSystem) | 284 PassOwnPtr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* success
Callback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystem
Base* fileSystem) |
287 { | 285 { |
288 return wrapUnique(new VoidCallbacks(successCallback, errorCallback, context,
fileSystem)); | 286 return adoptPtr(new VoidCallbacks(successCallback, errorCallback, context, f
ileSystem)); |
289 } | 287 } |
290 | 288 |
291 VoidCallbacks::VoidCallbacks(VoidCallback* successCallback, ErrorCallback* error
Callback, ExecutionContext* context, DOMFileSystemBase* fileSystem) | 289 VoidCallbacks::VoidCallbacks(VoidCallback* successCallback, ErrorCallback* error
Callback, ExecutionContext* context, DOMFileSystemBase* fileSystem) |
292 : FileSystemCallbacksBase(errorCallback, fileSystem, context) | 290 : FileSystemCallbacksBase(errorCallback, fileSystem, context) |
293 , m_successCallback(successCallback) | 291 , m_successCallback(successCallback) |
294 { | 292 { |
295 } | 293 } |
296 | 294 |
297 void VoidCallbacks::didSucceed() | 295 void VoidCallbacks::didSucceed() |
298 { | 296 { |
299 if (m_successCallback) | 297 if (m_successCallback) |
300 handleEventOrScheduleCallback(m_successCallback.release()); | 298 handleEventOrScheduleCallback(m_successCallback.release()); |
301 } | 299 } |
302 | 300 |
303 } // namespace blink | 301 } // namespace blink |
OLD | NEW |