| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/fileapi/file_system_context.h" | 5 #include "webkit/browser/fileapi/file_system_context.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 FileSystemContext* context, | 40 FileSystemContext* context, |
| 41 bool is_incognito) { | 41 bool is_incognito) { |
| 42 return new FileSystemQuotaClient(context, is_incognito); | 42 return new FileSystemQuotaClient(context, is_incognito); |
| 43 } | 43 } |
| 44 | 44 |
| 45 | 45 |
| 46 void DidGetMetadataForResolveURL( | 46 void DidGetMetadataForResolveURL( |
| 47 const base::FilePath& path, | 47 const base::FilePath& path, |
| 48 const FileSystemContext::ResolveURLCallback& callback, | 48 const FileSystemContext::ResolveURLCallback& callback, |
| 49 const FileSystemInfo& info, | 49 const FileSystemInfo& info, |
| 50 base::PlatformFileError error, | 50 base::File::Error error, |
| 51 const base::PlatformFileInfo& file_info) { | 51 const base::File::Info& file_info) { |
| 52 if (error != base::PLATFORM_FILE_OK) { | 52 if (error != base::File::FILE_OK) { |
| 53 callback.Run(error, FileSystemInfo(), base::FilePath(), false); | 53 callback.Run(error, FileSystemInfo(), base::FilePath(), false); |
| 54 return; | 54 return; |
| 55 } | 55 } |
| 56 callback.Run(error, info, path, file_info.is_directory); | 56 callback.Run(error, info, path, file_info.is_directory); |
| 57 } | 57 } |
| 58 | 58 |
| 59 } // namespace | 59 } // namespace |
| 60 | 60 |
| 61 // static | 61 // static |
| 62 int FileSystemContext::GetPermissionPolicy(FileSystemType type) { | 62 int FileSystemContext::GetPermissionPolicy(FileSystemType type) { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 | 177 |
| 178 bool success = true; | 178 bool success = true; |
| 179 for (FileSystemBackendMap::iterator iter = backend_map_.begin(); | 179 for (FileSystemBackendMap::iterator iter = backend_map_.begin(); |
| 180 iter != backend_map_.end(); | 180 iter != backend_map_.end(); |
| 181 ++iter) { | 181 ++iter) { |
| 182 FileSystemBackend* backend = iter->second; | 182 FileSystemBackend* backend = iter->second; |
| 183 if (!backend->GetQuotaUtil()) | 183 if (!backend->GetQuotaUtil()) |
| 184 continue; | 184 continue; |
| 185 if (backend->GetQuotaUtil()->DeleteOriginDataOnFileTaskRunner( | 185 if (backend->GetQuotaUtil()->DeleteOriginDataOnFileTaskRunner( |
| 186 this, quota_manager_proxy(), origin_url, iter->first) | 186 this, quota_manager_proxy(), origin_url, iter->first) |
| 187 != base::PLATFORM_FILE_OK) { | 187 != base::File::FILE_OK) { |
| 188 // Continue the loop, but record the failure. | 188 // Continue the loop, but record the failure. |
| 189 success = false; | 189 success = false; |
| 190 } | 190 } |
| 191 } | 191 } |
| 192 | 192 |
| 193 return success; | 193 return success; |
| 194 } | 194 } |
| 195 | 195 |
| 196 scoped_refptr<QuotaReservation> | 196 scoped_refptr<QuotaReservation> |
| 197 FileSystemContext::CreateQuotaReservationOnFileTaskRunner( | 197 FileSystemContext::CreateQuotaReservationOnFileTaskRunner( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 226 AsyncFileUtil* FileSystemContext::GetAsyncFileUtil( | 226 AsyncFileUtil* FileSystemContext::GetAsyncFileUtil( |
| 227 FileSystemType type) const { | 227 FileSystemType type) const { |
| 228 FileSystemBackend* backend = GetFileSystemBackend(type); | 228 FileSystemBackend* backend = GetFileSystemBackend(type); |
| 229 if (!backend) | 229 if (!backend) |
| 230 return NULL; | 230 return NULL; |
| 231 return backend->GetAsyncFileUtil(type); | 231 return backend->GetAsyncFileUtil(type); |
| 232 } | 232 } |
| 233 | 233 |
| 234 CopyOrMoveFileValidatorFactory* | 234 CopyOrMoveFileValidatorFactory* |
| 235 FileSystemContext::GetCopyOrMoveFileValidatorFactory( | 235 FileSystemContext::GetCopyOrMoveFileValidatorFactory( |
| 236 FileSystemType type, base::PlatformFileError* error_code) const { | 236 FileSystemType type, base::File::Error* error_code) const { |
| 237 DCHECK(error_code); | 237 DCHECK(error_code); |
| 238 *error_code = base::PLATFORM_FILE_OK; | 238 *error_code = base::File::FILE_OK; |
| 239 FileSystemBackend* backend = GetFileSystemBackend(type); | 239 FileSystemBackend* backend = GetFileSystemBackend(type); |
| 240 if (!backend) | 240 if (!backend) |
| 241 return NULL; | 241 return NULL; |
| 242 return backend->GetCopyOrMoveFileValidatorFactory( | 242 return backend->GetCopyOrMoveFileValidatorFactory( |
| 243 type, error_code); | 243 type, error_code); |
| 244 } | 244 } |
| 245 | 245 |
| 246 FileSystemBackend* FileSystemContext::GetFileSystemBackend( | 246 FileSystemBackend* FileSystemContext::GetFileSystemBackend( |
| 247 FileSystemType type) const { | 247 FileSystemType type) const { |
| 248 FileSystemBackendMap::const_iterator found = backend_map_.find(type); | 248 FileSystemBackendMap::const_iterator found = backend_map_.find(type); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 void FileSystemContext::OpenFileSystem( | 290 void FileSystemContext::OpenFileSystem( |
| 291 const GURL& origin_url, | 291 const GURL& origin_url, |
| 292 FileSystemType type, | 292 FileSystemType type, |
| 293 OpenFileSystemMode mode, | 293 OpenFileSystemMode mode, |
| 294 const OpenFileSystemCallback& callback) { | 294 const OpenFileSystemCallback& callback) { |
| 295 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 295 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 296 DCHECK(!callback.is_null()); | 296 DCHECK(!callback.is_null()); |
| 297 | 297 |
| 298 if (!FileSystemContext::IsSandboxFileSystem(type)) { | 298 if (!FileSystemContext::IsSandboxFileSystem(type)) { |
| 299 // Disallow opening a non-sandboxed filesystem. | 299 // Disallow opening a non-sandboxed filesystem. |
| 300 callback.Run(GURL(), std::string(), base::PLATFORM_FILE_ERROR_SECURITY); | 300 callback.Run(GURL(), std::string(), base::File::FILE_ERROR_SECURITY); |
| 301 return; | 301 return; |
| 302 } | 302 } |
| 303 | 303 |
| 304 FileSystemBackend* backend = GetFileSystemBackend(type); | 304 FileSystemBackend* backend = GetFileSystemBackend(type); |
| 305 if (!backend) { | 305 if (!backend) { |
| 306 callback.Run(GURL(), std::string(), base::PLATFORM_FILE_ERROR_SECURITY); | 306 callback.Run(GURL(), std::string(), base::File::FILE_ERROR_SECURITY); |
| 307 return; | 307 return; |
| 308 } | 308 } |
| 309 | 309 |
| 310 backend->OpenFileSystem(origin_url, type, mode, callback); | 310 backend->OpenFileSystem(origin_url, type, mode, callback); |
| 311 } | 311 } |
| 312 | 312 |
| 313 void FileSystemContext::ResolveURL( | 313 void FileSystemContext::ResolveURL( |
| 314 const FileSystemURL& url, | 314 const FileSystemURL& url, |
| 315 const ResolveURLCallback& callback) { | 315 const ResolveURLCallback& callback) { |
| 316 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 316 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 317 DCHECK(!callback.is_null()); | 317 DCHECK(!callback.is_null()); |
| 318 | 318 |
| 319 if (!FileSystemContext::IsSandboxFileSystem(url.type())) { | 319 if (!FileSystemContext::IsSandboxFileSystem(url.type())) { |
| 320 #ifdef OS_CHROMEOS | 320 #ifdef OS_CHROMEOS |
| 321 // Do not have to open a non-sandboxed filesystem. | 321 // Do not have to open a non-sandboxed filesystem. |
| 322 // TODO(nhiroki): For now we assume this path is called only on ChromeOS, | 322 // TODO(nhiroki): For now we assume this path is called only on ChromeOS, |
| 323 // but this assumption may be broken in the future and we should handle | 323 // but this assumption may be broken in the future and we should handle |
| 324 // more generally. http://crbug.com/304062. | 324 // more generally. http://crbug.com/304062. |
| 325 FileSystemInfo info = GetFileSystemInfoForChromeOS(url.origin()); | 325 FileSystemInfo info = GetFileSystemInfoForChromeOS(url.origin()); |
| 326 DidOpenFileSystemForResolveURL( | 326 DidOpenFileSystemForResolveURL( |
| 327 url, callback, info.root_url, info.name, base::PLATFORM_FILE_OK); | 327 url, callback, info.root_url, info.name, base::File::FILE_OK); |
| 328 return; | 328 return; |
| 329 #endif | 329 #endif |
| 330 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, | 330 callback.Run(base::File::FILE_ERROR_SECURITY, |
| 331 FileSystemInfo(), base::FilePath(), false); | 331 FileSystemInfo(), base::FilePath(), false); |
| 332 return; | 332 return; |
| 333 } | 333 } |
| 334 | 334 |
| 335 FileSystemBackend* backend = GetFileSystemBackend(url.type()); | 335 FileSystemBackend* backend = GetFileSystemBackend(url.type()); |
| 336 if (!backend) { | 336 if (!backend) { |
| 337 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, | 337 callback.Run(base::File::FILE_ERROR_SECURITY, |
| 338 FileSystemInfo(), base::FilePath(), false); | 338 FileSystemInfo(), base::FilePath(), false); |
| 339 return; | 339 return; |
| 340 } | 340 } |
| 341 | 341 |
| 342 backend->OpenFileSystem( | 342 backend->OpenFileSystem( |
| 343 url.origin(), url.type(), | 343 url.origin(), url.type(), |
| 344 OPEN_FILE_SYSTEM_FAIL_IF_NONEXISTENT, | 344 OPEN_FILE_SYSTEM_FAIL_IF_NONEXISTENT, |
| 345 base::Bind(&FileSystemContext::DidOpenFileSystemForResolveURL, | 345 base::Bind(&FileSystemContext::DidOpenFileSystemForResolveURL, |
| 346 this, url, callback)); | 346 this, url, callback)); |
| 347 } | 347 } |
| 348 | 348 |
| 349 void FileSystemContext::DeleteFileSystem( | 349 void FileSystemContext::DeleteFileSystem( |
| 350 const GURL& origin_url, | 350 const GURL& origin_url, |
| 351 FileSystemType type, | 351 FileSystemType type, |
| 352 const StatusCallback& callback) { | 352 const StatusCallback& callback) { |
| 353 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 353 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 354 DCHECK(origin_url == origin_url.GetOrigin()); | 354 DCHECK(origin_url == origin_url.GetOrigin()); |
| 355 DCHECK(!callback.is_null()); | 355 DCHECK(!callback.is_null()); |
| 356 | 356 |
| 357 FileSystemBackend* backend = GetFileSystemBackend(type); | 357 FileSystemBackend* backend = GetFileSystemBackend(type); |
| 358 if (!backend) { | 358 if (!backend) { |
| 359 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | 359 callback.Run(base::File::FILE_ERROR_SECURITY); |
| 360 return; | 360 return; |
| 361 } | 361 } |
| 362 if (!backend->GetQuotaUtil()) { | 362 if (!backend->GetQuotaUtil()) { |
| 363 callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION); | 363 callback.Run(base::File::FILE_ERROR_INVALID_OPERATION); |
| 364 return; | 364 return; |
| 365 } | 365 } |
| 366 | 366 |
| 367 base::PostTaskAndReplyWithResult( | 367 base::PostTaskAndReplyWithResult( |
| 368 default_file_task_runner(), | 368 default_file_task_runner(), |
| 369 FROM_HERE, | 369 FROM_HERE, |
| 370 // It is safe to pass Unretained(quota_util) since context owns it. | 370 // It is safe to pass Unretained(quota_util) since context owns it. |
| 371 base::Bind(&FileSystemQuotaUtil::DeleteOriginDataOnFileTaskRunner, | 371 base::Bind(&FileSystemQuotaUtil::DeleteOriginDataOnFileTaskRunner, |
| 372 base::Unretained(backend->GetQuotaUtil()), | 372 base::Unretained(backend->GetQuotaUtil()), |
| 373 make_scoped_refptr(this), | 373 make_scoped_refptr(this), |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 | 454 |
| 455 void FileSystemContext::DeleteOnCorrectThread() const { | 455 void FileSystemContext::DeleteOnCorrectThread() const { |
| 456 if (!io_task_runner_->RunsTasksOnCurrentThread() && | 456 if (!io_task_runner_->RunsTasksOnCurrentThread() && |
| 457 io_task_runner_->DeleteSoon(FROM_HERE, this)) { | 457 io_task_runner_->DeleteSoon(FROM_HERE, this)) { |
| 458 return; | 458 return; |
| 459 } | 459 } |
| 460 delete this; | 460 delete this; |
| 461 } | 461 } |
| 462 | 462 |
| 463 FileSystemOperation* FileSystemContext::CreateFileSystemOperation( | 463 FileSystemOperation* FileSystemContext::CreateFileSystemOperation( |
| 464 const FileSystemURL& url, base::PlatformFileError* error_code) { | 464 const FileSystemURL& url, base::File::Error* error_code) { |
| 465 if (!url.is_valid()) { | 465 if (!url.is_valid()) { |
| 466 if (error_code) | 466 if (error_code) |
| 467 *error_code = base::PLATFORM_FILE_ERROR_INVALID_URL; | 467 *error_code = base::File::FILE_ERROR_INVALID_URL; |
| 468 return NULL; | 468 return NULL; |
| 469 } | 469 } |
| 470 | 470 |
| 471 FileSystemBackend* backend = GetFileSystemBackend(url.type()); | 471 FileSystemBackend* backend = GetFileSystemBackend(url.type()); |
| 472 if (!backend) { | 472 if (!backend) { |
| 473 if (error_code) | 473 if (error_code) |
| 474 *error_code = base::PLATFORM_FILE_ERROR_FAILED; | 474 *error_code = base::File::FILE_ERROR_FAILED; |
| 475 return NULL; | 475 return NULL; |
| 476 } | 476 } |
| 477 | 477 |
| 478 base::PlatformFileError fs_error = base::PLATFORM_FILE_OK; | 478 base::File::Error fs_error = base::File::FILE_OK; |
| 479 FileSystemOperation* operation = | 479 FileSystemOperation* operation = |
| 480 backend->CreateFileSystemOperation(url, this, &fs_error); | 480 backend->CreateFileSystemOperation(url, this, &fs_error); |
| 481 | 481 |
| 482 if (error_code) | 482 if (error_code) |
| 483 *error_code = fs_error; | 483 *error_code = fs_error; |
| 484 return operation; | 484 return operation; |
| 485 } | 485 } |
| 486 | 486 |
| 487 FileSystemURL FileSystemContext::CrackFileSystemURL( | 487 FileSystemURL FileSystemContext::CrackFileSystemURL( |
| 488 const FileSystemURL& url) const { | 488 const FileSystemURL& url) const { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 DCHECK(inserted); | 536 DCHECK(inserted); |
| 537 } | 537 } |
| 538 } | 538 } |
| 539 } | 539 } |
| 540 | 540 |
| 541 void FileSystemContext::DidOpenFileSystemForResolveURL( | 541 void FileSystemContext::DidOpenFileSystemForResolveURL( |
| 542 const FileSystemURL& url, | 542 const FileSystemURL& url, |
| 543 const FileSystemContext::ResolveURLCallback& callback, | 543 const FileSystemContext::ResolveURLCallback& callback, |
| 544 const GURL& filesystem_root, | 544 const GURL& filesystem_root, |
| 545 const std::string& filesystem_name, | 545 const std::string& filesystem_name, |
| 546 base::PlatformFileError error) { | 546 base::File::Error error) { |
| 547 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 547 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 548 | 548 |
| 549 if (error != base::PLATFORM_FILE_OK) { | 549 if (error != base::File::FILE_OK) { |
| 550 callback.Run(error, FileSystemInfo(), base::FilePath(), false); | 550 callback.Run(error, FileSystemInfo(), base::FilePath(), false); |
| 551 return; | 551 return; |
| 552 } | 552 } |
| 553 | 553 |
| 554 fileapi::FileSystemInfo info( | 554 fileapi::FileSystemInfo info( |
| 555 filesystem_name, filesystem_root, url.mount_type()); | 555 filesystem_name, filesystem_root, url.mount_type()); |
| 556 | 556 |
| 557 // Extract the virtual path not containing a filesystem type part from |url|. | 557 // Extract the virtual path not containing a filesystem type part from |url|. |
| 558 base::FilePath parent = CrackURL(filesystem_root).virtual_path(); | 558 base::FilePath parent = CrackURL(filesystem_root).virtual_path(); |
| 559 base::FilePath child = url.virtual_path(); | 559 base::FilePath child = url.virtual_path(); |
| 560 base::FilePath path; | 560 base::FilePath path; |
| 561 | 561 |
| 562 if (parent.empty()) { | 562 if (parent.empty()) { |
| 563 path = child; | 563 path = child; |
| 564 } else if (parent != child) { | 564 } else if (parent != child) { |
| 565 bool result = parent.AppendRelativePath(child, &path); | 565 bool result = parent.AppendRelativePath(child, &path); |
| 566 DCHECK(result); | 566 DCHECK(result); |
| 567 } | 567 } |
| 568 | 568 |
| 569 operation_runner()->GetMetadata( | 569 operation_runner()->GetMetadata( |
| 570 url, base::Bind(&DidGetMetadataForResolveURL, path, callback, info)); | 570 url, base::Bind(&DidGetMetadataForResolveURL, path, callback, info)); |
| 571 } | 571 } |
| 572 | 572 |
| 573 } // namespace fileapi | 573 } // namespace fileapi |
| OLD | NEW |