Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/fileapi/file_system_path_manager.h" | 5 #include "webkit/fileapi/file_system_path_manager.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 117 DispatchCallbackOnCallerThread(FilePath()); | 117 DispatchCallbackOnCallerThread(FilePath()); |
| 118 return; | 118 return; |
| 119 } | 119 } |
| 120 | 120 |
| 121 // Creates the root directory. | 121 // Creates the root directory. |
| 122 root = base_path.Append(CreateUniqueDirectoryName(origin_url)); | 122 root = base_path.Append(CreateUniqueDirectoryName(origin_url)); |
| 123 if (!file_util::CreateDirectory(root)) { | 123 if (!file_util::CreateDirectory(root)) { |
| 124 DispatchCallbackOnCallerThread(FilePath()); | 124 DispatchCallbackOnCallerThread(FilePath()); |
| 125 return; | 125 return; |
| 126 } | 126 } |
| 127 | |
| 127 DispatchCallbackOnCallerThread(root); | 128 DispatchCallbackOnCallerThread(root); |
| 128 } | 129 } |
| 129 | 130 |
| 130 bool ReadOriginDirectory(const FilePath& base_path, | 131 bool ReadOriginDirectory(const FilePath& base_path, |
| 131 const GURL& origin_url, | 132 const GURL& origin_url, |
| 132 FilePath* unique) { | 133 FilePath* unique) { |
| 133 file_util::FileEnumerator file_enum( | 134 file_util::FileEnumerator file_enum( |
| 134 base_path, false /* recursive */, | 135 base_path, false /* recursive */, |
| 135 file_util::FileEnumerator::DIRECTORIES, | 136 file_util::FileEnumerator::DIRECTORIES, |
| 136 FilePath::StringType(kFileSystemUniqueNamePrefix) + | 137 FilePath::StringType(kFileSystemUniqueNamePrefix) + |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 163 callback_->Run(!root_path.empty(), root_path, name_); | 164 callback_->Run(!root_path.empty(), root_path, name_); |
| 164 callback_.reset(); | 165 callback_.reset(); |
| 165 } | 166 } |
| 166 | 167 |
| 167 scoped_refptr<base::MessageLoopProxy> file_message_loop_; | 168 scoped_refptr<base::MessageLoopProxy> file_message_loop_; |
| 168 scoped_refptr<base::MessageLoopProxy> origin_message_loop_proxy_; | 169 scoped_refptr<base::MessageLoopProxy> origin_message_loop_proxy_; |
| 169 std::string name_; | 170 std::string name_; |
| 170 scoped_ptr<FileSystemPathManager::GetRootPathCallback> callback_; | 171 scoped_ptr<FileSystemPathManager::GetRootPathCallback> callback_; |
| 171 }; | 172 }; |
| 172 | 173 |
| 174 FilePath FileSystemPathManager::GetFileSystemCommonRootDirectory( | |
| 175 const FilePath& root_path) { | |
| 176 #if defined(OS_WIN) | |
| 177 // To specify an extended-length path, "\\?\" prefix is used. Else path names | |
| 178 // are limited to 260 characters. | |
| 179 FilePath::StringType extended_length_str(L"\\\\?\\"); | |
| 180 extended_length_str.append(root_path.value()); | |
| 181 return FilePath(extended_length_str).Append(kFileSystemDirectory); | |
| 182 #endif | |
| 183 return root_path.Append(kFileSystemDirectory); | |
| 184 } | |
| 185 | |
| 173 FileSystemPathManager::FileSystemPathManager( | 186 FileSystemPathManager::FileSystemPathManager( |
| 174 scoped_refptr<base::MessageLoopProxy> file_message_loop, | 187 scoped_refptr<base::MessageLoopProxy> file_message_loop, |
| 175 const FilePath& profile_path, | 188 const FilePath& profile_path, |
| 176 bool is_incognito, | 189 bool is_incognito, |
| 177 bool allow_file_access_from_files) | 190 bool allow_file_access_from_files) |
| 178 : file_message_loop_(file_message_loop), | 191 : file_message_loop_(file_message_loop), |
| 179 base_path_(profile_path.Append(kFileSystemDirectory)), | 192 base_path_(profile_path), |
|
kinuko (google)
2010/11/25 03:36:47
Please remove this line and use profile_path below
Kavita Kanetkar
2010/11/25 03:42:05
Done.
| |
| 180 is_incognito_(is_incognito), | 193 is_incognito_(is_incognito), |
| 181 allow_file_access_from_files_(allow_file_access_from_files) { | 194 allow_file_access_from_files_(allow_file_access_from_files) { |
| 195 base_path_ = GetFileSystemCommonRootDirectory(base_path_); | |
| 182 } | 196 } |
| 183 | 197 |
| 184 FileSystemPathManager::~FileSystemPathManager() {} | 198 FileSystemPathManager::~FileSystemPathManager() {} |
| 185 | 199 |
| 186 void FileSystemPathManager::GetFileSystemRootPath( | 200 void FileSystemPathManager::GetFileSystemRootPath( |
| 187 const GURL& origin_url, fileapi::FileSystemType type, | 201 const GURL& origin_url, fileapi::FileSystemType type, |
| 188 bool create, GetRootPathCallback* callback_ptr) { | 202 bool create, GetRootPathCallback* callback_ptr) { |
| 189 scoped_ptr<GetRootPathCallback> callback(callback_ptr); | 203 scoped_ptr<GetRootPathCallback> callback(callback_ptr); |
| 190 if (is_incognito_) { | 204 if (is_incognito_) { |
| 191 // TODO(kinuko): return an isolated temporary directory. | 205 // TODO(kinuko): return an isolated temporary directory. |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 208 std::string storage_identifier = GetStorageIdentifierFromURL(origin_url); | 222 std::string storage_identifier = GetStorageIdentifierFromURL(origin_url); |
| 209 | 223 |
| 210 std::string type_string; | 224 std::string type_string; |
| 211 if (type == fileapi::kFileSystemTypeTemporary) | 225 if (type == fileapi::kFileSystemTypeTemporary) |
| 212 type_string = kTemporaryName; | 226 type_string = kTemporaryName; |
| 213 else if (type == fileapi::kFileSystemTypePersistent) | 227 else if (type == fileapi::kFileSystemTypePersistent) |
| 214 type_string = kPersistentName; | 228 type_string = kPersistentName; |
| 215 DCHECK(!type_string.empty()); | 229 DCHECK(!type_string.empty()); |
| 216 | 230 |
| 217 FilePath origin_base_path = base_path_.AppendASCII(storage_identifier) | 231 FilePath origin_base_path = base_path_.AppendASCII(storage_identifier) |
| 218 .AppendASCII(type_string); | 232 .AppendASCII(type_string); |
| 233 | |
| 219 std::string name = storage_identifier + ":" + type_string; | 234 std::string name = storage_identifier + ":" + type_string; |
| 220 | 235 |
| 221 scoped_refptr<GetFileSystemRootPathTask> task( | 236 scoped_refptr<GetFileSystemRootPathTask> task( |
| 222 new GetFileSystemRootPathTask(file_message_loop_, | 237 new GetFileSystemRootPathTask(file_message_loop_, |
| 223 name, callback.release())); | 238 name, callback.release())); |
| 224 task->Start(origin_url, origin_base_path, create); | 239 task->Start(origin_url, origin_base_path, create); |
| 225 } | 240 } |
| 226 | 241 |
| 227 bool FileSystemPathManager::CrackFileSystemPath( | 242 bool FileSystemPathManager::CrackFileSystemPath( |
| 228 const FilePath& path, GURL* origin_url, FileSystemType* type, | 243 const FilePath& path, GURL* origin_url, FileSystemType* type, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 WebKit::WebSecurityOrigin::createFromString(UTF8ToUTF16(url.spec())); | 347 WebKit::WebSecurityOrigin::createFromString(UTF8ToUTF16(url.spec())); |
| 333 return web_security_origin.databaseIdentifier().utf8(); | 348 return web_security_origin.databaseIdentifier().utf8(); |
| 334 } | 349 } |
| 335 | 350 |
| 336 } // namespace fileapi | 351 } // namespace fileapi |
| 337 | 352 |
| 338 COMPILE_ASSERT(int(WebFileSystem::TypeTemporary) == \ | 353 COMPILE_ASSERT(int(WebFileSystem::TypeTemporary) == \ |
| 339 int(fileapi::kFileSystemTypeTemporary), mismatching_enums); | 354 int(fileapi::kFileSystemTypeTemporary), mismatching_enums); |
| 340 COMPILE_ASSERT(int(WebFileSystem::TypePersistent) == \ | 355 COMPILE_ASSERT(int(WebFileSystem::TypePersistent) == \ |
| 341 int(fileapi::kFileSystemTypePersistent), mismatching_enums); | 356 int(fileapi::kFileSystemTypePersistent), mismatching_enums); |
| OLD | NEW |