| 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 26 matching lines...) Expand all Loading... |
| 37 #include "modules/filesystem/DOMFilePath.h" | 37 #include "modules/filesystem/DOMFilePath.h" |
| 38 #include "modules/filesystem/DirectoryEntry.h" | 38 #include "modules/filesystem/DirectoryEntry.h" |
| 39 #include "modules/filesystem/DirectoryReaderBase.h" | 39 #include "modules/filesystem/DirectoryReaderBase.h" |
| 40 #include "modules/filesystem/EntriesCallback.h" | 40 #include "modules/filesystem/EntriesCallback.h" |
| 41 #include "modules/filesystem/Entry.h" | 41 #include "modules/filesystem/Entry.h" |
| 42 #include "modules/filesystem/EntryBase.h" | 42 #include "modules/filesystem/EntryBase.h" |
| 43 #include "modules/filesystem/EntryCallback.h" | 43 #include "modules/filesystem/EntryCallback.h" |
| 44 #include "modules/filesystem/ErrorCallback.h" | 44 #include "modules/filesystem/ErrorCallback.h" |
| 45 #include "modules/filesystem/FileSystemCallbacks.h" | 45 #include "modules/filesystem/FileSystemCallbacks.h" |
| 46 #include "modules/filesystem/MetadataCallback.h" | 46 #include "modules/filesystem/MetadataCallback.h" |
| 47 #include "public/platform/Platform.h" |
| 48 #include "public/platform/WebFileSystem.h" |
| 49 #include "public/platform/WebFileSystemCallbacks.h" |
| 47 #include "weborigin/SecurityOrigin.h" | 50 #include "weborigin/SecurityOrigin.h" |
| 48 #include "wtf/OwnPtr.h" | 51 #include "wtf/OwnPtr.h" |
| 49 #include "wtf/text/StringBuilder.h" | 52 #include "wtf/text/StringBuilder.h" |
| 50 #include "wtf/text/WTFString.h" | 53 #include "wtf/text/WTFString.h" |
| 51 | 54 |
| 52 namespace WebCore { | 55 namespace WebCore { |
| 53 | 56 |
| 54 const char DOMFileSystemBase::persistentPathPrefix[] = "persistent"; | 57 const char DOMFileSystemBase::persistentPathPrefix[] = "persistent"; |
| 55 const char DOMFileSystemBase::temporaryPathPrefix[] = "temporary"; | 58 const char DOMFileSystemBase::temporaryPathPrefix[] = "temporary"; |
| 56 const char DOMFileSystemBase::isolatedPathPrefix[] = "isolated"; | 59 const char DOMFileSystemBase::isolatedPathPrefix[] = "isolated"; |
| 57 const char DOMFileSystemBase::externalPathPrefix[] = "external"; | 60 const char DOMFileSystemBase::externalPathPrefix[] = "external"; |
| 58 | 61 |
| 59 DOMFileSystemBase::DOMFileSystemBase(ScriptExecutionContext* context, const Stri
ng& name, FileSystemType type, const KURL& rootURL, PassOwnPtr<AsyncFileSystem>
asyncFileSystem) | 62 DOMFileSystemBase::DOMFileSystemBase(ScriptExecutionContext* context, const Stri
ng& name, FileSystemType type, const KURL& rootURL) |
| 60 : m_context(context) | 63 : m_context(context) |
| 61 , m_name(name) | 64 , m_name(name) |
| 62 , m_type(type) | 65 , m_type(type) |
| 63 , m_filesystemRootURL(rootURL) | 66 , m_filesystemRootURL(rootURL) |
| 64 , m_clonable(false) | 67 , m_clonable(false) |
| 65 , m_asyncFileSystem(asyncFileSystem) | |
| 66 { | 68 { |
| 67 } | 69 } |
| 68 | 70 |
| 69 DOMFileSystemBase::~DOMFileSystemBase() | 71 DOMFileSystemBase::~DOMFileSystemBase() |
| 70 { | 72 { |
| 71 } | 73 } |
| 72 | 74 |
| 75 WebKit::WebFileSystem* DOMFileSystemBase::fileSystem() const |
| 76 { |
| 77 return WebKit::Platform::current()->fileSystem(); |
| 78 } |
| 79 |
| 73 SecurityOrigin* DOMFileSystemBase::securityOrigin() const | 80 SecurityOrigin* DOMFileSystemBase::securityOrigin() const |
| 74 { | 81 { |
| 75 return m_context->securityOrigin(); | 82 return m_context->securityOrigin(); |
| 76 } | 83 } |
| 77 | 84 |
| 78 bool DOMFileSystemBase::isValidType(FileSystemType type) | 85 bool DOMFileSystemBase::isValidType(FileSystemType type) |
| 79 { | 86 { |
| 80 return type == FileSystemTypeTemporary || type == FileSystemTypePersistent |
| type == FileSystemTypeIsolated || type == FileSystemTypeExternal; | 87 return type == FileSystemTypeTemporary || type == FileSystemTypePersistent |
| type == FileSystemTypeIsolated || type == FileSystemTypeExternal; |
| 81 } | 88 } |
| 82 | 89 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 // For regular types we can just append the entry's fullPath to the m_filesy
stemRootURL that should look like 'filesystem:<origin>/<typePrefix>'. | 140 // For regular types we can just append the entry's fullPath to the m_filesy
stemRootURL that should look like 'filesystem:<origin>/<typePrefix>'. |
| 134 ASSERT(!m_filesystemRootURL.isEmpty()); | 141 ASSERT(!m_filesystemRootURL.isEmpty()); |
| 135 KURL url = m_filesystemRootURL; | 142 KURL url = m_filesystemRootURL; |
| 136 // Remove the extra leading slash. | 143 // Remove the extra leading slash. |
| 137 url.setPath(url.path() + encodeWithURLEscapeSequences(fullPath.substring(1))
); | 144 url.setPath(url.path() + encodeWithURLEscapeSequences(fullPath.substring(1))
); |
| 138 return url; | 145 return url; |
| 139 } | 146 } |
| 140 | 147 |
| 141 bool DOMFileSystemBase::getMetadata(const EntryBase* entry, PassRefPtr<MetadataC
allback> successCallback, PassRefPtr<ErrorCallback> errorCallback, SynchronousTy
pe synchronousType) | 148 bool DOMFileSystemBase::getMetadata(const EntryBase* entry, PassRefPtr<MetadataC
allback> successCallback, PassRefPtr<ErrorCallback> errorCallback, SynchronousTy
pe synchronousType) |
| 142 { | 149 { |
| 143 OwnPtr<MetadataCallbacks> callbacks(MetadataCallbacks::create(successCallbac
k, errorCallback)); | 150 OwnPtr<AsyncFileSystemCallbacks> callbacks(MetadataCallbacks::create(success
Callback, errorCallback, this)); |
| 144 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 151 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 145 m_asyncFileSystem->readMetadata(createFileSystemURL(entry), callbacks.releas
e()); | 152 fileSystem()->readMetadata(createFileSystemURL(entry), callbacks.release()); |
| 146 return true; | 153 return true; |
| 147 } | 154 } |
| 148 | 155 |
| 149 static bool verifyAndGetDestinationPathForCopyOrMove(const EntryBase* source, En
tryBase* parent, const String& newName, String& destinationPath) | 156 static bool verifyAndGetDestinationPathForCopyOrMove(const EntryBase* source, En
tryBase* parent, const String& newName, String& destinationPath) |
| 150 { | 157 { |
| 151 ASSERT(source); | 158 ASSERT(source); |
| 152 | 159 |
| 153 if (!parent || !parent->isDirectory()) | 160 if (!parent || !parent->isDirectory()) |
| 154 return false; | 161 return false; |
| 155 | 162 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 return false; | 194 return false; |
| 188 return true; | 195 return true; |
| 189 } | 196 } |
| 190 | 197 |
| 191 bool DOMFileSystemBase::move(const EntryBase* source, EntryBase* parent, const S
tring& newName, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallb
ack> errorCallback, SynchronousType synchronousType) | 198 bool DOMFileSystemBase::move(const EntryBase* source, EntryBase* parent, const S
tring& newName, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallb
ack> errorCallback, SynchronousType synchronousType) |
| 192 { | 199 { |
| 193 String destinationPath; | 200 String destinationPath; |
| 194 if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, desti
nationPath)) | 201 if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, desti
nationPath)) |
| 195 return false; | 202 return false; |
| 196 | 203 |
| 197 OwnPtr<EntryCallbacks> callbacks(EntryCallbacks::create(successCallback, err
orCallback, parent->filesystem(), destinationPath, source->isDirectory())); | 204 OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCal
lback, errorCallback, parent->filesystem(), destinationPath, source->isDirectory
())); |
| 198 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 205 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 199 | 206 |
| 200 m_asyncFileSystem->move(createFileSystemURL(source), parent->filesystem()->c
reateFileSystemURL(destinationPath), callbacks.release()); | 207 fileSystem()->move(createFileSystemURL(source), parent->filesystem()->create
FileSystemURL(destinationPath), callbacks.release()); |
| 201 return true; | 208 return true; |
| 202 } | 209 } |
| 203 | 210 |
| 204 bool DOMFileSystemBase::copy(const EntryBase* source, EntryBase* parent, const S
tring& newName, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallb
ack> errorCallback, SynchronousType synchronousType) | 211 bool DOMFileSystemBase::copy(const EntryBase* source, EntryBase* parent, const S
tring& newName, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallb
ack> errorCallback, SynchronousType synchronousType) |
| 205 { | 212 { |
| 206 String destinationPath; | 213 String destinationPath; |
| 207 if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, desti
nationPath)) | 214 if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, desti
nationPath)) |
| 208 return false; | 215 return false; |
| 209 | 216 |
| 210 OwnPtr<EntryCallbacks> callbacks(EntryCallbacks::create(successCallback, err
orCallback, parent->filesystem(), destinationPath, source->isDirectory())); | 217 OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCal
lback, errorCallback, parent->filesystem(), destinationPath, source->isDirectory
())); |
| 211 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 218 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 212 | 219 |
| 213 m_asyncFileSystem->copy(createFileSystemURL(source), parent->filesystem()->c
reateFileSystemURL(destinationPath), callbacks.release()); | 220 fileSystem()->copy(createFileSystemURL(source), parent->filesystem()->create
FileSystemURL(destinationPath), callbacks.release()); |
| 214 return true; | 221 return true; |
| 215 } | 222 } |
| 216 | 223 |
| 217 bool DOMFileSystemBase::remove(const EntryBase* entry, PassRefPtr<VoidCallback>
successCallback, PassRefPtr<ErrorCallback> errorCallback, SynchronousType synchr
onousType) | 224 bool DOMFileSystemBase::remove(const EntryBase* entry, PassRefPtr<VoidCallback>
successCallback, PassRefPtr<ErrorCallback> errorCallback, SynchronousType synchr
onousType) |
| 218 { | 225 { |
| 219 ASSERT(entry); | 226 ASSERT(entry); |
| 220 // We don't allow calling remove() on the root directory. | 227 // We don't allow calling remove() on the root directory. |
| 221 if (entry->fullPath() == String(DOMFilePath::root)) | 228 if (entry->fullPath() == String(DOMFilePath::root)) |
| 222 return false; | 229 return false; |
| 223 | 230 |
| 224 OwnPtr<VoidCallbacks> callbacks(VoidCallbacks::create(successCallback, error
Callback)); | 231 OwnPtr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCall
back, errorCallback, this)); |
| 225 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 232 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 226 | 233 |
| 227 m_asyncFileSystem->remove(createFileSystemURL(entry), callbacks.release()); | 234 fileSystem()->remove(createFileSystemURL(entry), callbacks.release()); |
| 228 return true; | 235 return true; |
| 229 } | 236 } |
| 230 | 237 |
| 231 bool DOMFileSystemBase::removeRecursively(const EntryBase* entry, PassRefPtr<Voi
dCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, Synchronous
Type synchronousType) | 238 bool DOMFileSystemBase::removeRecursively(const EntryBase* entry, PassRefPtr<Voi
dCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, Synchronous
Type synchronousType) |
| 232 { | 239 { |
| 233 ASSERT(entry && entry->isDirectory()); | 240 ASSERT(entry && entry->isDirectory()); |
| 234 // We don't allow calling remove() on the root directory. | 241 // We don't allow calling remove() on the root directory. |
| 235 if (entry->fullPath() == String(DOMFilePath::root)) | 242 if (entry->fullPath() == String(DOMFilePath::root)) |
| 236 return false; | 243 return false; |
| 237 | 244 |
| 238 OwnPtr<VoidCallbacks> callbacks(VoidCallbacks::create(successCallback, error
Callback)); | 245 OwnPtr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCall
back, errorCallback, this)); |
| 239 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 246 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 240 | 247 |
| 241 m_asyncFileSystem->removeRecursively(createFileSystemURL(entry), callbacks.r
elease()); | 248 fileSystem()->removeRecursively(createFileSystemURL(entry), callbacks.releas
e()); |
| 242 return true; | 249 return true; |
| 243 } | 250 } |
| 244 | 251 |
| 245 bool DOMFileSystemBase::getParent(const EntryBase* entry, PassRefPtr<EntryCallba
ck> successCallback, PassRefPtr<ErrorCallback> errorCallback) | 252 bool DOMFileSystemBase::getParent(const EntryBase* entry, PassRefPtr<EntryCallba
ck> successCallback, PassRefPtr<ErrorCallback> errorCallback) |
| 246 { | 253 { |
| 247 ASSERT(entry); | 254 ASSERT(entry); |
| 248 String path = DOMFilePath::getDirectory(entry->fullPath()); | 255 String path = DOMFilePath::getDirectory(entry->fullPath()); |
| 249 | 256 |
| 250 m_asyncFileSystem->directoryExists(createFileSystemURL(path), EntryCallbacks
::create(successCallback, errorCallback, this, path, true)); | 257 fileSystem()->directoryExists(createFileSystemURL(path), EntryCallbacks::cre
ate(successCallback, errorCallback, this, path, true)); |
| 251 return true; | 258 return true; |
| 252 } | 259 } |
| 253 | 260 |
| 254 bool DOMFileSystemBase::getFile(const EntryBase* entry, const String& path, cons
t FileSystemFlags& flags, PassRefPtr<EntryCallback> successCallback, PassRefPtr<
ErrorCallback> errorCallback, SynchronousType synchronousType) | 261 bool DOMFileSystemBase::getFile(const EntryBase* entry, const String& path, cons
t FileSystemFlags& flags, PassRefPtr<EntryCallback> successCallback, PassRefPtr<
ErrorCallback> errorCallback, SynchronousType synchronousType) |
| 255 { | 262 { |
| 256 String absolutePath; | 263 String absolutePath; |
| 257 if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) | 264 if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) |
| 258 return false; | 265 return false; |
| 259 | 266 |
| 260 OwnPtr<EntryCallbacks> callbacks(EntryCallbacks::create(successCallback, err
orCallback, this, absolutePath, false)); | 267 OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCal
lback, errorCallback, this, absolutePath, false)); |
| 261 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 268 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 262 | 269 |
| 263 if (flags.create) | 270 if (flags.create) |
| 264 m_asyncFileSystem->createFile(createFileSystemURL(absolutePath), flags.e
xclusive, callbacks.release()); | 271 fileSystem()->createFile(createFileSystemURL(absolutePath), flags.exclus
ive, callbacks.release()); |
| 265 else | 272 else |
| 266 m_asyncFileSystem->fileExists(createFileSystemURL(absolutePath), callbac
ks.release()); | 273 fileSystem()->fileExists(createFileSystemURL(absolutePath), callbacks.re
lease()); |
| 267 return true; | 274 return true; |
| 268 } | 275 } |
| 269 | 276 |
| 270 bool DOMFileSystemBase::getDirectory(const EntryBase* entry, const String& path,
const FileSystemFlags& flags, PassRefPtr<EntryCallback> successCallback, PassRe
fPtr<ErrorCallback> errorCallback, SynchronousType synchronousType) | 277 bool DOMFileSystemBase::getDirectory(const EntryBase* entry, const String& path,
const FileSystemFlags& flags, PassRefPtr<EntryCallback> successCallback, PassRe
fPtr<ErrorCallback> errorCallback, SynchronousType synchronousType) |
| 271 { | 278 { |
| 272 String absolutePath; | 279 String absolutePath; |
| 273 if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) | 280 if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) |
| 274 return false; | 281 return false; |
| 275 | 282 |
| 276 OwnPtr<EntryCallbacks> callbacks(EntryCallbacks::create(successCallback, err
orCallback, this, absolutePath, true)); | 283 OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCal
lback, errorCallback, this, absolutePath, true)); |
| 277 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 284 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 278 | 285 |
| 279 if (flags.create) | 286 if (flags.create) |
| 280 m_asyncFileSystem->createDirectory(createFileSystemURL(absolutePath), fl
ags.exclusive, callbacks.release()); | 287 fileSystem()->createDirectory(createFileSystemURL(absolutePath), flags.e
xclusive, callbacks.release()); |
| 281 else | 288 else |
| 282 m_asyncFileSystem->directoryExists(createFileSystemURL(absolutePath), ca
llbacks.release()); | 289 fileSystem()->directoryExists(createFileSystemURL(absolutePath), callbac
ks.release()); |
| 283 return true; | 290 return true; |
| 284 } | 291 } |
| 285 | 292 |
| 286 bool DOMFileSystemBase::readDirectory(PassRefPtr<DirectoryReaderBase> reader, co
nst String& path, PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorC
allback> errorCallback, SynchronousType synchronousType) | 293 bool DOMFileSystemBase::readDirectory(PassRefPtr<DirectoryReaderBase> reader, co
nst String& path, PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorC
allback> errorCallback, SynchronousType synchronousType) |
| 287 { | 294 { |
| 288 ASSERT(DOMFilePath::isAbsolute(path)); | 295 ASSERT(DOMFilePath::isAbsolute(path)); |
| 289 | 296 |
| 290 OwnPtr<EntriesCallbacks> callbacks(EntriesCallbacks::create(successCallback,
errorCallback, reader, path)); | 297 OwnPtr<AsyncFileSystemCallbacks> callbacks(EntriesCallbacks::create(successC
allback, errorCallback, reader, path)); |
| 291 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); | 298 callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); |
| 292 | 299 |
| 293 m_asyncFileSystem->readDirectory(createFileSystemURL(path), callbacks.releas
e()); | 300 fileSystem()->readDirectory(createFileSystemURL(path), callbacks.release()); |
| 294 return true; | 301 return true; |
| 295 } | 302 } |
| 296 | 303 |
| 297 } // namespace WebCore | 304 } // namespace WebCore |
| OLD | NEW |