Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(949)

Side by Side Diff: Source/modules/filesystem/FileSystemCallbacks.cpp

Issue 23704004: Make WebFileSystemCallbacks not self-destruct, deprecate AsyncFileSystem (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 16 matching lines...) Expand all
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "modules/filesystem/FileSystemCallbacks.h" 32 #include "modules/filesystem/FileSystemCallbacks.h"
33 33
34 #include "core/dom/ScriptExecutionContext.h" 34 #include "core/dom/ScriptExecutionContext.h"
35 #include "core/fileapi/FileError.h" 35 #include "core/fileapi/FileError.h"
36 #include "core/html/VoidCallback.h" 36 #include "core/html/VoidCallback.h"
37 #include "core/platform/AsyncFileSystem.h"
38 #include "core/platform/FileMetadata.h" 37 #include "core/platform/FileMetadata.h"
39 #include "modules/filesystem/DOMFilePath.h" 38 #include "modules/filesystem/DOMFilePath.h"
40 #include "modules/filesystem/DOMFileSystemBase.h" 39 #include "modules/filesystem/DOMFileSystemBase.h"
41 #include "modules/filesystem/DirectoryEntry.h" 40 #include "modules/filesystem/DirectoryEntry.h"
42 #include "modules/filesystem/DirectoryReader.h" 41 #include "modules/filesystem/DirectoryReader.h"
43 #include "modules/filesystem/EntriesCallback.h" 42 #include "modules/filesystem/EntriesCallback.h"
44 #include "modules/filesystem/Entry.h" 43 #include "modules/filesystem/Entry.h"
45 #include "modules/filesystem/EntryCallback.h" 44 #include "modules/filesystem/EntryCallback.h"
46 #include "modules/filesystem/ErrorCallback.h" 45 #include "modules/filesystem/ErrorCallback.h"
47 #include "modules/filesystem/FileEntry.h" 46 #include "modules/filesystem/FileEntry.h"
48 #include "modules/filesystem/FileSystemCallback.h" 47 #include "modules/filesystem/FileSystemCallback.h"
49 #include "modules/filesystem/FileWriterBase.h" 48 #include "modules/filesystem/FileWriterBase.h"
50 #include "modules/filesystem/FileWriterBaseCallback.h" 49 #include "modules/filesystem/FileWriterBaseCallback.h"
51 #include "modules/filesystem/Metadata.h" 50 #include "modules/filesystem/Metadata.h"
52 #include "modules/filesystem/MetadataCallback.h" 51 #include "modules/filesystem/MetadataCallback.h"
53 #include "public/platform/WebFileWriter.h" 52 #include "public/platform/WebFileWriter.h"
54 53
55 namespace WebCore { 54 namespace WebCore {
56 55
57 FileSystemCallbacksBase::FileSystemCallbacksBase(PassRefPtr<ErrorCallback> error Callback) 56 FileSystemCallbacksBase::FileSystemCallbacksBase(PassRefPtr<ErrorCallback> error Callback, DOMFileSystemBase* fileSystem)
58 : m_errorCallback(errorCallback) 57 : m_errorCallback(errorCallback)
59 , m_blockUntilCompletion(false) 58 , m_fileSystem(fileSystem)
60 { 59 {
60 if (m_fileSystem)
61 m_fileSystem->addPendingCallbacks();
61 } 62 }
62 63
63 FileSystemCallbacksBase::~FileSystemCallbacksBase() 64 FileSystemCallbacksBase::~FileSystemCallbacksBase()
64 { 65 {
66 if (m_fileSystem)
67 m_fileSystem->removePendingCallbacks();
65 } 68 }
66 69
67 void FileSystemCallbacksBase::didFail(int code) 70 void FileSystemCallbacksBase::didFail(int code)
68 { 71 {
69 if (m_errorCallback) { 72 if (m_errorCallback) {
70 m_errorCallback->handleEvent(FileError::create(static_cast<FileError::Er rorCode>(code)).get()); 73 m_errorCallback->handleEvent(FileError::create(static_cast<FileError::Er rorCode>(code)).get());
71 m_errorCallback.clear(); 74 m_errorCallback.clear();
72 } 75 }
73 } 76 }
74 77
75 // EntryCallbacks ------------------------------------------------------------- 78 // EntryCallbacks -------------------------------------------------------------
76 79
77 PassOwnPtr<EntryCallbacks> EntryCallbacks::create(PassRefPtr<EntryCallback> succ essCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBa se> fileSystem, const String& expectedPath, bool isDirectory) 80 PassOwnPtr<AsyncFileSystemCallbacks> EntryCallbacks::create(PassRefPtr<EntryCall back> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFi leSystemBase> fileSystem, const String& expectedPath, bool isDirectory)
78 { 81 {
79 return adoptPtr(new EntryCallbacks(successCallback, errorCallback, fileSyste m, expectedPath, isDirectory)); 82 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new EntryCallbacks(su ccessCallback, errorCallback, fileSystem, expectedPath, isDirectory)));
80 } 83 }
81 84
82 EntryCallbacks::EntryCallbacks(PassRefPtr<EntryCallback> successCallback, PassRe fPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, con st String& expectedPath, bool isDirectory) 85 EntryCallbacks::EntryCallbacks(PassRefPtr<EntryCallback> successCallback, PassRe fPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, con st String& expectedPath, bool isDirectory)
83 : FileSystemCallbacksBase(errorCallback) 86 : FileSystemCallbacksBase(errorCallback, fileSystem.get())
84 , m_successCallback(successCallback) 87 , m_successCallback(successCallback)
85 , m_fileSystem(fileSystem)
86 , m_expectedPath(expectedPath) 88 , m_expectedPath(expectedPath)
87 , m_isDirectory(isDirectory) 89 , m_isDirectory(isDirectory)
88 { 90 {
89 } 91 }
90 92
91 void EntryCallbacks::didSucceed() 93 void EntryCallbacks::didSucceed()
92 { 94 {
93 if (m_successCallback) { 95 if (m_successCallback) {
94 if (m_isDirectory) 96 if (m_isDirectory)
95 m_successCallback->handleEvent(DirectoryEntry::create(m_fileSystem, m_expectedPath).get()); 97 m_successCallback->handleEvent(DirectoryEntry::create(m_fileSystem, m_expectedPath).get());
96 else 98 else
97 m_successCallback->handleEvent(FileEntry::create(m_fileSystem, m_exp ectedPath).get()); 99 m_successCallback->handleEvent(FileEntry::create(m_fileSystem, m_exp ectedPath).get());
98 } 100 }
99 m_successCallback.clear(); 101 m_successCallback.clear();
100 } 102 }
101 103
102 // EntriesCallbacks ----------------------------------------------------------- 104 // EntriesCallbacks -----------------------------------------------------------
103 105
104 PassOwnPtr<EntriesCallbacks> EntriesCallbacks::create(PassRefPtr<EntriesCallback > successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<Directory ReaderBase> directoryReader, const String& basePath) 106 PassOwnPtr<AsyncFileSystemCallbacks> EntriesCallbacks::create(PassRefPtr<Entries Callback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<D irectoryReaderBase> directoryReader, const String& basePath)
105 { 107 {
106 return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, directo ryReader, basePath)); 108 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new EntriesCallbacks( successCallback, errorCallback, directoryReader, basePath)));
107 } 109 }
108 110
109 EntriesCallbacks::EntriesCallbacks(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directo ryReader, const String& basePath) 111 EntriesCallbacks::EntriesCallbacks(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directo ryReader, const String& basePath)
110 : FileSystemCallbacksBase(errorCallback) 112 : FileSystemCallbacksBase(errorCallback, directoryReader->filesystem())
111 , m_successCallback(successCallback) 113 , m_successCallback(successCallback)
112 , m_directoryReader(directoryReader) 114 , m_directoryReader(directoryReader)
113 , m_basePath(basePath) 115 , m_basePath(basePath)
114 { 116 {
115 ASSERT(m_directoryReader); 117 ASSERT(m_directoryReader);
116 } 118 }
117 119
118 void EntriesCallbacks::didReadDirectoryEntry(const String& name, bool isDirector y) 120 void EntriesCallbacks::didReadDirectoryEntry(const String& name, bool isDirector y)
119 { 121 {
120 if (isDirectory) 122 if (isDirectory)
121 m_entries.append(DirectoryEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 123 m_entries.append(DirectoryEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name)));
122 else 124 else
123 m_entries.append(FileEntry::create(m_directoryReader->filesystem(), DOMF ilePath::append(m_basePath, name))); 125 m_entries.append(FileEntry::create(m_directoryReader->filesystem(), DOMF ilePath::append(m_basePath, name)));
124 } 126 }
125 127
126 void EntriesCallbacks::didReadDirectoryEntries(bool hasMore) 128 void EntriesCallbacks::didReadDirectoryEntries(bool hasMore)
127 { 129 {
128 m_directoryReader->setHasMoreEntries(hasMore); 130 m_directoryReader->setHasMoreEntries(hasMore);
129 if (m_successCallback) 131 if (m_successCallback)
130 m_successCallback->handleEvent(m_entries); 132 m_successCallback->handleEvent(m_entries);
131 } 133 }
132 134
133 // FileSystemCallbacks -------------------------------------------------------- 135 // FileSystemCallbacks --------------------------------------------------------
134 136
135 PassOwnPtr<FileSystemCallbacks> FileSystemCallbacks::create(PassRefPtr<FileSyste mCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecu tionContext* scriptExecutionContext, FileSystemType type) 137 PassOwnPtr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(PassRefPtr<File SystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, Script ExecutionContext* scriptExecutionContext, FileSystemType type)
136 { 138 {
137 return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, scri ptExecutionContext, type)); 139 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new FileSystemCallbac ks(successCallback, errorCallback, scriptExecutionContext, type)));
138 } 140 }
139 141
140 FileSystemCallbacks::FileSystemCallbacks(PassRefPtr<FileSystemCallback> successC allback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* contex t, FileSystemType type) 142 FileSystemCallbacks::FileSystemCallbacks(PassRefPtr<FileSystemCallback> successC allback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* contex t, FileSystemType type)
141 : FileSystemCallbacksBase(errorCallback) 143 : FileSystemCallbacksBase(errorCallback, 0)
142 , m_successCallback(successCallback) 144 , m_successCallback(successCallback)
143 , m_scriptExecutionContext(context) 145 , m_scriptExecutionContext(context)
144 , m_type(type) 146 , m_type(type)
145 { 147 {
146 } 148 }
147 149
148 void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& root URL, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 150 void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& root URL)
149 { 151 {
150 if (m_successCallback) { 152 if (m_successCallback) {
151 ASSERT(asyncFileSystem); 153 RefPtr<DOMFileSystem> fileSystem = DOMFileSystem::create(m_scriptExecuti onContext.get(), name, m_type, rootURL);
152 RefPtr<DOMFileSystem> fileSystem = DOMFileSystem::create(m_scriptExecuti onContext.get(), name, m_type, rootURL, asyncFileSystem);
153 m_successCallback->handleEvent(fileSystem.get()); 154 m_successCallback->handleEvent(fileSystem.get());
154 m_scriptExecutionContext.clear(); 155 m_scriptExecutionContext.clear();
155 } 156 }
156 m_successCallback.clear(); 157 m_successCallback.clear();
157 } 158 }
158 159
159 // ResolveURICallbacks -------------------------------------------------------- 160 // ResolveURICallbacks --------------------------------------------------------
160 161
161 namespace { 162 namespace {
162 163
(...skipping 25 matching lines...) Expand all
188 } 189 }
189 190
190 RefPtr<EntryCallback> m_successCallback; 191 RefPtr<EntryCallback> m_successCallback;
191 RefPtr<ErrorCallback> m_errorCallback; 192 RefPtr<ErrorCallback> m_errorCallback;
192 RefPtr<DirectoryEntry> m_root; 193 RefPtr<DirectoryEntry> m_root;
193 String m_filePath; 194 String m_filePath;
194 }; 195 };
195 196
196 } // namespace 197 } // namespace
197 198
198 PassOwnPtr<ResolveURICallbacks> ResolveURICallbacks::create(PassRefPtr<EntryCall back> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionC ontext* scriptExecutionContext, FileSystemType type, const String& filePath) 199 PassOwnPtr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(PassRefPtr<Entr yCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecu tionContext* scriptExecutionContext, FileSystemType type, const String& filePath )
199 { 200 {
200 return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, scri ptExecutionContext, type, filePath)); 201 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new ResolveURICallbac ks(successCallback, errorCallback, scriptExecutionContext, type, filePath)));
201 } 202 }
202 203
203 ResolveURICallbacks::ResolveURICallbacks(PassRefPtr<EntryCallback> successCallba ck, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, Fi leSystemType type, const String& filePath) 204 ResolveURICallbacks::ResolveURICallbacks(PassRefPtr<EntryCallback> successCallba ck, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, Fi leSystemType type, const String& filePath)
204 : FileSystemCallbacksBase(errorCallback) 205 : FileSystemCallbacksBase(errorCallback, 0)
205 , m_successCallback(successCallback) 206 , m_successCallback(successCallback)
206 , m_scriptExecutionContext(context) 207 , m_scriptExecutionContext(context)
207 , m_type(type) 208 , m_type(type)
208 , m_filePath(filePath) 209 , m_filePath(filePath)
209 { 210 {
210 } 211 }
211 212
212 void ResolveURICallbacks::didOpenFileSystem(const String& name, const KURL& root URL, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 213 void ResolveURICallbacks::didOpenFileSystem(const String& name, const KURL& root URL)
213 { 214 {
214 ASSERT(asyncFileSystem); 215 RefPtr<DirectoryEntry> root = DOMFileSystem::create(m_scriptExecutionContext .get(), name, m_type, rootURL)->root();
215 RefPtr<DirectoryEntry> root = DOMFileSystem::create(m_scriptExecutionContext .get(), name, m_type, rootURL, asyncFileSystem)->root();
216 root->getDirectory(m_filePath, Dictionary(), m_successCallback, ErrorCallbac kWrapper::create(m_successCallback, m_errorCallback, root, m_filePath)); 216 root->getDirectory(m_filePath, Dictionary(), m_successCallback, ErrorCallbac kWrapper::create(m_successCallback, m_errorCallback, root, m_filePath));
217 } 217 }
218 218
219 // MetadataCallbacks ---------------------------------------------------------- 219 // MetadataCallbacks ----------------------------------------------------------
220 220
221 PassOwnPtr<MetadataCallbacks> MetadataCallbacks::create(PassRefPtr<MetadataCallb ack> successCallback, PassRefPtr<ErrorCallback> errorCallback) 221 PassOwnPtr<AsyncFileSystemCallbacks> MetadataCallbacks::create(PassRefPtr<Metada taCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, DOMFileSys temBase* fileSystem)
222 { 222 {
223 return adoptPtr(new MetadataCallbacks(successCallback, errorCallback)); 223 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new MetadataCallbacks (successCallback, errorCallback, fileSystem)));
224 } 224 }
225 225
226 MetadataCallbacks::MetadataCallbacks(PassRefPtr<MetadataCallback> successCallbac k, PassRefPtr<ErrorCallback> errorCallback) 226 MetadataCallbacks::MetadataCallbacks(PassRefPtr<MetadataCallback> successCallbac k, PassRefPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem)
227 : FileSystemCallbacksBase(errorCallback) 227 : FileSystemCallbacksBase(errorCallback, fileSystem)
228 , m_successCallback(successCallback) 228 , m_successCallback(successCallback)
229 { 229 {
230 } 230 }
231 231
232 void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) 232 void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata)
233 { 233 {
234 if (m_successCallback) 234 if (m_successCallback)
235 m_successCallback->handleEvent(Metadata::create(metadata).get()); 235 m_successCallback->handleEvent(Metadata::create(metadata).get());
236 m_successCallback.clear(); 236 m_successCallback.clear();
237 } 237 }
238 238
239 // FileWriterBaseCallbacks ----------------------------------------------------- ----- 239 // FileWriterBaseCallbacks ----------------------------------------------------- -----
240 240
241 PassOwnPtr<FileWriterBaseCallbacks> FileWriterBaseCallbacks::create(PassRefPtr<F ileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, P assRefPtr<ErrorCallback> errorCallback) 241 PassOwnPtr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(PassRefPtr< FileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback)
242 { 242 {
243 return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, err orCallback)); 243 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new FileWriterBaseCal lbacks(fileWriter, successCallback, errorCallback)));
244 } 244 }
245 245
246 FileWriterBaseCallbacks::FileWriterBaseCallbacks(PassRefPtr<FileWriterBase> file Writer, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCall back> errorCallback) 246 FileWriterBaseCallbacks::FileWriterBaseCallbacks(PassRefPtr<FileWriterBase> file Writer, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCall back> errorCallback)
247 : FileSystemCallbacksBase(errorCallback) 247 : FileSystemCallbacksBase(errorCallback, 0)
248 , m_fileWriter(fileWriter) 248 , m_fileWriter(fileWriter)
249 , m_successCallback(successCallback) 249 , m_successCallback(successCallback)
250 { 250 {
251 } 251 }
252 252
253 void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<WebKit::WebFileWrit er> fileWriter, long long length) 253 void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<WebKit::WebFileWrit er> fileWriter, long long length)
254 { 254 {
255 m_fileWriter->initialize(fileWriter, length); 255 m_fileWriter->initialize(fileWriter, length);
256 if (m_successCallback) 256 if (m_successCallback)
257 m_successCallback->handleEvent(m_fileWriter.release().get()); 257 m_successCallback->handleEvent(m_fileWriter.release().get());
258 m_successCallback.clear(); 258 m_successCallback.clear();
259 } 259 }
260 260
261 // VoidCallbacks -------------------------------------------------------------- 261 // VoidCallbacks --------------------------------------------------------------
262 262
263 PassOwnPtr<VoidCallbacks> VoidCallbacks::create(PassRefPtr<VoidCallback> success Callback, PassRefPtr<ErrorCallback> errorCallback) 263 PassOwnPtr<AsyncFileSystemCallbacks> VoidCallbacks::create(PassRefPtr<VoidCallba ck> successCallback, PassRefPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem)
264 { 264 {
265 return adoptPtr(new VoidCallbacks(successCallback, errorCallback)); 265 return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new VoidCallbacks(suc cessCallback, errorCallback, fileSystem)));
266 } 266 }
267 267
268 VoidCallbacks::VoidCallbacks(PassRefPtr<VoidCallback> successCallback, PassRefPt r<ErrorCallback> errorCallback) 268 VoidCallbacks::VoidCallbacks(PassRefPtr<VoidCallback> successCallback, PassRefPt r<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem)
269 : FileSystemCallbacksBase(errorCallback) 269 : FileSystemCallbacksBase(errorCallback, fileSystem)
270 , m_successCallback(successCallback) 270 , m_successCallback(successCallback)
271 { 271 {
272 } 272 }
273 273
274 void VoidCallbacks::didSucceed() 274 void VoidCallbacks::didSucceed()
275 { 275 {
276 if (m_successCallback) 276 if (m_successCallback)
277 m_successCallback->handleEvent(); 277 m_successCallback->handleEvent();
278 m_successCallback.clear(); 278 m_successCallback.clear();
279 } 279 }
280 280
281 } // namespace 281 } // namespace
OLDNEW
« no previous file with comments | « Source/modules/filesystem/FileSystemCallbacks.h ('k') | Source/modules/filesystem/SyncCallbackHelper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698