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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 } | 112 } |
113 | 113 |
114 KURL DOMFileSystemBase::createFileSystemURL(const EntryBase* entry) const { | 114 KURL DOMFileSystemBase::createFileSystemURL(const EntryBase* entry) const { |
115 return createFileSystemURL(entry->fullPath()); | 115 return createFileSystemURL(entry->fullPath()); |
116 } | 116 } |
117 | 117 |
118 KURL DOMFileSystemBase::createFileSystemURL(const String& fullPath) const { | 118 KURL DOMFileSystemBase::createFileSystemURL(const String& fullPath) const { |
119 ASSERT(DOMFilePath::isAbsolute(fullPath)); | 119 ASSERT(DOMFilePath::isAbsolute(fullPath)); |
120 | 120 |
121 if (type() == FileSystemTypeExternal) { | 121 if (type() == FileSystemTypeExternal) { |
122 // For external filesystem originString could be different from what we have
in m_filesystemRootURL. | 122 // For external filesystem originString could be different from what we have |
| 123 // in m_filesystemRootURL. |
123 StringBuilder result; | 124 StringBuilder result; |
124 result.append("filesystem:"); | 125 result.append("filesystem:"); |
125 result.append(getSecurityOrigin()->toString()); | 126 result.append(getSecurityOrigin()->toString()); |
126 result.append('/'); | 127 result.append('/'); |
127 result.append(externalPathPrefix); | 128 result.append(externalPathPrefix); |
128 result.append(m_filesystemRootURL.path()); | 129 result.append(m_filesystemRootURL.path()); |
129 // Remove the extra leading slash. | 130 // Remove the extra leading slash. |
130 result.append(encodeWithURLEscapeSequences(fullPath.substring(1))); | 131 result.append(encodeWithURLEscapeSequences(fullPath.substring(1))); |
131 return KURL(ParsedURLString, result.toString()); | 132 return KURL(ParsedURLString, result.toString()); |
132 } | 133 } |
133 | 134 |
134 // For regular types we can just append the entry's fullPath to the m_filesyst
emRootURL that should look like 'filesystem:<origin>/<typePrefix>'. | 135 // For regular types we can just append the entry's fullPath to the |
| 136 // m_filesystemRootURL that should look like |
| 137 // 'filesystem:<origin>/<typePrefix>'. |
135 ASSERT(!m_filesystemRootURL.isEmpty()); | 138 ASSERT(!m_filesystemRootURL.isEmpty()); |
136 KURL url = m_filesystemRootURL; | 139 KURL url = m_filesystemRootURL; |
137 // Remove the extra leading slash. | 140 // Remove the extra leading slash. |
138 url.setPath(url.path() + encodeWithURLEscapeSequences(fullPath.substring(1))); | 141 url.setPath(url.path() + encodeWithURLEscapeSequences(fullPath.substring(1))); |
139 return url; | 142 return url; |
140 } | 143 } |
141 | 144 |
142 bool DOMFileSystemBase::pathToAbsolutePath(FileSystemType type, | 145 bool DOMFileSystemBase::pathToAbsolutePath(FileSystemType type, |
143 const EntryBase* base, | 146 const EntryBase* base, |
144 String path, | 147 String path, |
(...skipping 26 matching lines...) Expand all Loading... |
171 return true; | 174 return true; |
172 } | 175 } |
173 | 176 |
174 return false; | 177 return false; |
175 } | 178 } |
176 | 179 |
177 File* DOMFileSystemBase::createFile(const FileMetadata& metadata, | 180 File* DOMFileSystemBase::createFile(const FileMetadata& metadata, |
178 const KURL& fileSystemURL, | 181 const KURL& fileSystemURL, |
179 FileSystemType type, | 182 FileSystemType type, |
180 const String name) { | 183 const String name) { |
181 // For regular filesystem types (temporary or persistent), we should not cache
file metadata as it could change File semantics. | 184 // For regular filesystem types (temporary or persistent), we should not cache |
182 // For other filesystem types (which could be platform-specific ones), there's
a chance that the files are on remote filesystem. | 185 // file metadata as it could change File semantics. For other filesystem |
183 // If the port has returned metadata just pass it to File constructor (so we m
ay cache the metadata). | 186 // types (which could be platform-specific ones), there's a chance that the |
| 187 // files are on remote filesystem. If the port has returned metadata just |
| 188 // pass it to File constructor (so we may cache the metadata). |
184 // FIXME: We should use the snapshot metadata for all files. | 189 // FIXME: We should use the snapshot metadata for all files. |
185 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17746 | 190 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17746 |
186 if (type == FileSystemTypeTemporary || type == FileSystemTypePersistent) | 191 if (type == FileSystemTypeTemporary || type == FileSystemTypePersistent) |
187 return File::createForFileSystemFile(metadata.platformPath, name); | 192 return File::createForFileSystemFile(metadata.platformPath, name); |
188 | 193 |
189 const File::UserVisibility userVisibility = (type == FileSystemTypeExternal) | 194 const File::UserVisibility userVisibility = (type == FileSystemTypeExternal) |
190 ? File::IsUserVisible | 195 ? File::IsUserVisible |
191 : File::IsNotUserVisible; | 196 : File::IsNotUserVisible; |
192 | 197 |
193 if (!metadata.platformPath.isEmpty()) { | 198 if (!metadata.platformPath.isEmpty()) { |
194 // If the platformPath in the returned metadata is given, we create a File o
bject for the snapshot path. | 199 // If the platformPath in the returned metadata is given, we create a File |
| 200 // object for the snapshot path. |
195 return File::createForFileSystemFile(name, metadata, userVisibility); | 201 return File::createForFileSystemFile(name, metadata, userVisibility); |
196 } else { | 202 } else { |
197 // Otherwise we create a File object for the fileSystemURL. | 203 // Otherwise we create a File object for the fileSystemURL. |
198 return File::createForFileSystemFile(fileSystemURL, metadata, | 204 return File::createForFileSystemFile(fileSystemURL, metadata, |
199 userVisibility); | 205 userVisibility); |
200 } | 206 } |
201 } | 207 } |
202 | 208 |
203 void DOMFileSystemBase::getMetadata(const EntryBase* entry, | 209 void DOMFileSystemBase::getMetadata(const EntryBase* entry, |
204 MetadataCallback* successCallback, | 210 MetadataCallback* successCallback, |
(...skipping 18 matching lines...) Expand all Loading... |
223 | 229 |
224 if (!parent || !parent->isDirectory()) | 230 if (!parent || !parent->isDirectory()) |
225 return false; | 231 return false; |
226 | 232 |
227 if (!newName.isEmpty() && !DOMFilePath::isValidName(newName)) | 233 if (!newName.isEmpty() && !DOMFilePath::isValidName(newName)) |
228 return false; | 234 return false; |
229 | 235 |
230 const bool isSameFileSystem = | 236 const bool isSameFileSystem = |
231 (*source->filesystem() == *parent->filesystem()); | 237 (*source->filesystem() == *parent->filesystem()); |
232 | 238 |
233 // It is an error to try to copy or move an entry inside itself at any depth i
f it is a directory. | 239 // It is an error to try to copy or move an entry inside itself at any depth |
| 240 // if it is a directory. |
234 if (source->isDirectory() && isSameFileSystem && | 241 if (source->isDirectory() && isSameFileSystem && |
235 DOMFilePath::isParentOf(source->fullPath(), parent->fullPath())) | 242 DOMFilePath::isParentOf(source->fullPath(), parent->fullPath())) |
236 return false; | 243 return false; |
237 | 244 |
238 // It is an error to copy or move an entry into its parent if a name different
from its current one isn't provided. | 245 // It is an error to copy or move an entry into its parent if a name different |
| 246 // from its current one isn't provided. |
239 if (isSameFileSystem && (newName.isEmpty() || source->name() == newName) && | 247 if (isSameFileSystem && (newName.isEmpty() || source->name() == newName) && |
240 DOMFilePath::getDirectory(source->fullPath()) == parent->fullPath()) | 248 DOMFilePath::getDirectory(source->fullPath()) == parent->fullPath()) |
241 return false; | 249 return false; |
242 | 250 |
243 destinationPath = parent->fullPath(); | 251 destinationPath = parent->fullPath(); |
244 if (!newName.isEmpty()) | 252 if (!newName.isEmpty()) |
245 destinationPath = DOMFilePath::append(destinationPath, newName); | 253 destinationPath = DOMFilePath::append(destinationPath, newName); |
246 else | 254 else |
247 destinationPath = DOMFilePath::append(destinationPath, source->name()); | 255 destinationPath = DOMFilePath::append(destinationPath, source->name()); |
248 | 256 |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 std::move(callbacks)); | 455 std::move(callbacks)); |
448 } | 456 } |
449 | 457 |
450 bool DOMFileSystemBase::waitForAdditionalResult(int callbacksId) { | 458 bool DOMFileSystemBase::waitForAdditionalResult(int callbacksId) { |
451 if (!fileSystem()) | 459 if (!fileSystem()) |
452 return false; | 460 return false; |
453 return fileSystem()->waitForAdditionalResult(callbacksId); | 461 return fileSystem()->waitForAdditionalResult(callbacksId); |
454 } | 462 } |
455 | 463 |
456 } // namespace blink | 464 } // namespace blink |
OLD | NEW |