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

Side by Side Diff: webkit/browser/fileapi/file_system_context.cc

Issue 23856002: SyncFS: Support resolveLocalFileSystemURL on SyncFileSystem (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix 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 // 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"
11 #include "url/gurl.h" 11 #include "url/gurl.h"
12 #include "webkit/browser/blob/file_stream_reader.h" 12 #include "webkit/browser/blob/file_stream_reader.h"
13 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" 13 #include "webkit/browser/fileapi/copy_or_move_file_validator.h"
14 #include "webkit/browser/fileapi/external_mount_points.h" 14 #include "webkit/browser/fileapi/external_mount_points.h"
15 #include "webkit/browser/fileapi/file_permission_policy.h" 15 #include "webkit/browser/fileapi/file_permission_policy.h"
16 #include "webkit/browser/fileapi/file_stream_writer.h" 16 #include "webkit/browser/fileapi/file_stream_writer.h"
17 #include "webkit/browser/fileapi/file_system_file_util.h" 17 #include "webkit/browser/fileapi/file_system_file_util.h"
18 #include "webkit/browser/fileapi/file_system_operation.h" 18 #include "webkit/browser/fileapi/file_system_operation.h"
19 #include "webkit/browser/fileapi/file_system_operation_runner.h" 19 #include "webkit/browser/fileapi/file_system_operation_runner.h"
20 #include "webkit/browser/fileapi/file_system_options.h" 20 #include "webkit/browser/fileapi/file_system_options.h"
21 #include "webkit/browser/fileapi/file_system_quota_client.h" 21 #include "webkit/browser/fileapi/file_system_quota_client.h"
22 #include "webkit/browser/fileapi/file_system_url.h" 22 #include "webkit/browser/fileapi/file_system_url.h"
23 #include "webkit/browser/fileapi/isolated_context.h" 23 #include "webkit/browser/fileapi/isolated_context.h"
24 #include "webkit/browser/fileapi/isolated_file_system_backend.h" 24 #include "webkit/browser/fileapi/isolated_file_system_backend.h"
25 #include "webkit/browser/fileapi/mount_points.h" 25 #include "webkit/browser/fileapi/mount_points.h"
26 #include "webkit/browser/fileapi/sandbox_file_system_backend.h" 26 #include "webkit/browser/fileapi/sandbox_file_system_backend.h"
27 #include "webkit/browser/fileapi/test_file_system_backend.h" 27 #include "webkit/browser/fileapi/test_file_system_backend.h"
28 #include "webkit/browser/quota/quota_manager.h" 28 #include "webkit/browser/quota/quota_manager.h"
29 #include "webkit/browser/quota/special_storage_policy.h" 29 #include "webkit/browser/quota/special_storage_policy.h"
30 #include "webkit/common/fileapi/file_system_info.h"
30 #include "webkit/common/fileapi/file_system_util.h" 31 #include "webkit/common/fileapi/file_system_util.h"
31 32
32 using quota::QuotaClient; 33 using quota::QuotaClient;
33 34
34 namespace fileapi { 35 namespace fileapi {
35 36
36 namespace { 37 namespace {
37 38
38 QuotaClient* CreateQuotaClient( 39 QuotaClient* CreateQuotaClient(
39 FileSystemContext* context, 40 FileSystemContext* context,
40 bool is_incognito) { 41 bool is_incognito) {
41 return new FileSystemQuotaClient(context, is_incognito); 42 return new FileSystemQuotaClient(context, is_incognito);
42 } 43 }
43 44
44 void DidOpenFileSystem( 45 void DidOpenFileSystem(
45 const FileSystemContext::OpenFileSystemCallback& callback, 46 const FileSystemContext::OpenFileSystemCallback& callback,
46 const GURL& filesystem_root, 47 const GURL& filesystem_root,
47 const std::string& filesystem_name, 48 const std::string& filesystem_name,
48 base::PlatformFileError error) { 49 base::PlatformFileError error) {
49 callback.Run(error, filesystem_name, filesystem_root); 50 callback.Run(error, filesystem_name, filesystem_root);
50 } 51 }
51 52
53 void DidGetMetadataForResolveURL(
54 const base::FilePath& path,
55 const FileSystemContext::ResolveURLCallback& callback,
56 const FileSystemInfo& info,
57 base::PlatformFileError error,
58 const base::PlatformFileInfo& file_info) {
59 if (error != base::PLATFORM_FILE_OK) {
60 callback.Run(error, FileSystemInfo(), base::FilePath(), false);
61 return;
62 }
63 callback.Run(error, info, path, file_info.is_directory);
64 }
65
52 } // namespace 66 } // namespace
53 67
54 // static 68 // static
55 int FileSystemContext::GetPermissionPolicy(FileSystemType type) { 69 int FileSystemContext::GetPermissionPolicy(FileSystemType type) {
56 switch (type) { 70 switch (type) {
57 case kFileSystemTypeTemporary: 71 case kFileSystemTypeTemporary:
58 case kFileSystemTypePersistent: 72 case kFileSystemTypePersistent:
59 case kFileSystemTypeSyncable: 73 case kFileSystemTypeSyncable:
60 return FILE_PERMISSION_SANDBOX; 74 return FILE_PERMISSION_SANDBOX;
61 75
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 FileSystemBackend* backend = GetFileSystemBackend(type); 282 FileSystemBackend* backend = GetFileSystemBackend(type);
269 if (!backend) { 283 if (!backend) {
270 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, std::string(), GURL()); 284 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, std::string(), GURL());
271 return; 285 return;
272 } 286 }
273 287
274 backend->OpenFileSystem(origin_url, type, mode, 288 backend->OpenFileSystem(origin_url, type, mode,
275 base::Bind(&DidOpenFileSystem, callback)); 289 base::Bind(&DidOpenFileSystem, callback));
276 } 290 }
277 291
292 void FileSystemContext::ResolveURL(
293 const FileSystemURL& url,
294 const ResolveURLCallback& callback) {
295 DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
296 DCHECK(!callback.is_null());
297
298 FileSystemBackend* backend = GetFileSystemBackend(url.type());
299 if (!backend) {
300 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY,
301 FileSystemInfo(), base::FilePath(), false);
302 return;
303 }
304
305 backend->OpenFileSystem(
306 url.origin(), url.type(),
307 OPEN_FILE_SYSTEM_FAIL_IF_NONEXISTENT,
308 base::Bind(&FileSystemContext::DidOpenFileSystemForResolveURL,
309 this, url, callback));
310 }
311
278 void FileSystemContext::DeleteFileSystem( 312 void FileSystemContext::DeleteFileSystem(
279 const GURL& origin_url, 313 const GURL& origin_url,
280 FileSystemType type, 314 FileSystemType type,
281 const DeleteFileSystemCallback& callback) { 315 const DeleteFileSystemCallback& callback) {
282 DCHECK(origin_url == origin_url.GetOrigin()); 316 DCHECK(origin_url == origin_url.GetOrigin());
283 FileSystemBackend* backend = GetFileSystemBackend(type); 317 FileSystemBackend* backend = GetFileSystemBackend(type);
284 if (!backend) { 318 if (!backend) {
285 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); 319 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY);
286 return; 320 return;
287 } 321 }
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 if (cracked.is_valid()) 451 if (cracked.is_valid())
418 break; 452 break;
419 } 453 }
420 if (cracked == current) 454 if (cracked == current)
421 break; 455 break;
422 current = cracked; 456 current = cracked;
423 } 457 }
424 return current; 458 return current;
425 } 459 }
426 460
427 void FileSystemContext::RegisterBackend( 461 void FileSystemContext::RegisterBackend(FileSystemBackend* backend) {
428 FileSystemBackend* backend) {
429 const FileSystemType mount_types[] = { 462 const FileSystemType mount_types[] = {
430 kFileSystemTypeTemporary, 463 kFileSystemTypeTemporary,
431 kFileSystemTypePersistent, 464 kFileSystemTypePersistent,
432 kFileSystemTypeIsolated, 465 kFileSystemTypeIsolated,
433 kFileSystemTypeExternal, 466 kFileSystemTypeExternal,
434 }; 467 };
435 // Register file system backends for public mount types. 468 // Register file system backends for public mount types.
436 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(mount_types); ++j) { 469 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(mount_types); ++j) {
437 if (backend->CanHandleType(mount_types[j])) { 470 if (backend->CanHandleType(mount_types[j])) {
438 const bool inserted = backend_map_.insert( 471 const bool inserted = backend_map_.insert(
439 std::make_pair(mount_types[j], backend)).second; 472 std::make_pair(mount_types[j], backend)).second;
440 DCHECK(inserted); 473 DCHECK(inserted);
441 } 474 }
442 } 475 }
443 // Register file system backends for internal types. 476 // Register file system backends for internal types.
444 for (int t = kFileSystemInternalTypeEnumStart + 1; 477 for (int t = kFileSystemInternalTypeEnumStart + 1;
445 t < kFileSystemInternalTypeEnumEnd; ++t) { 478 t < kFileSystemInternalTypeEnumEnd; ++t) {
446 FileSystemType type = static_cast<FileSystemType>(t); 479 FileSystemType type = static_cast<FileSystemType>(t);
447 if (backend->CanHandleType(type)) { 480 if (backend->CanHandleType(type)) {
448 const bool inserted = backend_map_.insert( 481 const bool inserted = backend_map_.insert(
449 std::make_pair(type, backend)).second; 482 std::make_pair(type, backend)).second;
450 DCHECK(inserted); 483 DCHECK(inserted);
451 } 484 }
452 } 485 }
453 } 486 }
454 487
488 void FileSystemContext::DidOpenFileSystemForResolveURL(
489 const FileSystemURL& url,
490 const FileSystemContext::ResolveURLCallback& callback,
491 const GURL& filesystem_root,
492 const std::string& filesystem_name,
493 base::PlatformFileError error) {
494 DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
495
496 if (error != base::PLATFORM_FILE_OK) {
497 callback.Run(error, FileSystemInfo(), base::FilePath(), false);
498 return;
499 }
500
501 fileapi::FileSystemInfo info(
502 filesystem_name, filesystem_root, url.mount_type());
503
504 // Extract the virtual path not containing a filesystem type part from |url|.
505 base::FilePath parent =
506 base::FilePath::FromUTF8Unsafe(filesystem_root.path());
507 base::FilePath child = base::FilePath::FromUTF8Unsafe(url.ToGURL().path());
508 base::FilePath path;
509 bool result = parent.AppendRelativePath(child, &path);
510 DCHECK(result);
511
512 operation_runner()->GetMetadata(
513 url, base::Bind(&DidGetMetadataForResolveURL, path, callback, info));
514 }
515
455 } // namespace fileapi 516 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698