| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/child/fileapi/webfilesystem_impl.h" | 5 #include "content/child/fileapi/webfilesystem_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <tuple> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 11 #include "base/logging.h" | 12 #include "base/logging.h" |
| 12 #include "base/macros.h" | 13 #include "base/macros.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/synchronization/waitable_event.h" | 15 #include "base/synchronization/waitable_event.h" |
| 15 #include "base/threading/thread_local.h" | 16 #include "base/threading/thread_local.h" |
| 16 #include "base/threading/thread_task_runner_handle.h" | 17 #include "base/threading/thread_task_runner_handle.h" |
| 17 #include "content/child/child_thread_impl.h" | 18 #include "content/child/child_thread_impl.h" |
| 18 #include "content/child/file_info_util.h" | 19 #include "content/child/file_info_util.h" |
| 19 #include "content/child/fileapi/file_system_dispatcher.h" | 20 #include "content/child/fileapi/file_system_dispatcher.h" |
| 20 #include "content/child/fileapi/webfilewriter_impl.h" | 21 #include "content/child/fileapi/webfilewriter_impl.h" |
| 21 #include "content/common/fileapi/file_system_messages.h" | 22 #include "content/common/fileapi/file_system_messages.h" |
| 22 #include "storage/common/fileapi/directory_entry.h" | 23 #include "storage/common/fileapi/directory_entry.h" |
| 23 #include "storage/common/fileapi/file_system_util.h" | 24 #include "storage/common/fileapi/file_system_util.h" |
| 24 #include "third_party/WebKit/public/platform/WebFileInfo.h" | 25 #include "third_party/WebKit/public/platform/WebFileInfo.h" |
| 25 #include "third_party/WebKit/public/platform/WebFileSystemCallbacks.h" | 26 #include "third_party/WebKit/public/platform/WebFileSystemCallbacks.h" |
| 26 #include "third_party/WebKit/public/platform/WebString.h" | 27 #include "third_party/WebKit/public/platform/WebString.h" |
| 27 #include "third_party/WebKit/public/platform/WebURL.h" | 28 #include "third_party/WebKit/public/platform/WebURL.h" |
| 28 #include "third_party/WebKit/public/web/WebHeap.h" | 29 #include "third_party/WebKit/public/web/WebHeap.h" |
| 29 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 30 | 31 |
| 31 using base::MakeTuple; | |
| 32 using blink::WebFileInfo; | 32 using blink::WebFileInfo; |
| 33 using blink::WebFileSystemCallbacks; | 33 using blink::WebFileSystemCallbacks; |
| 34 using blink::WebFileSystemEntry; | 34 using blink::WebFileSystemEntry; |
| 35 using blink::WebString; | 35 using blink::WebString; |
| 36 using blink::WebURL; | 36 using blink::WebURL; |
| 37 using blink::WebVector; | 37 using blink::WebVector; |
| 38 | 38 |
| 39 namespace content { | 39 namespace content { |
| 40 | 40 |
| 41 class WebFileSystemImpl::WaitableCallbackResults | 41 class WebFileSystemImpl::WaitableCallbackResults |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 | 412 |
| 413 void WebFileSystemImpl::openFileSystem( | 413 void WebFileSystemImpl::openFileSystem( |
| 414 const blink::WebURL& storage_partition, | 414 const blink::WebURL& storage_partition, |
| 415 blink::WebFileSystemType type, | 415 blink::WebFileSystemType type, |
| 416 WebFileSystemCallbacks callbacks) { | 416 WebFileSystemCallbacks callbacks) { |
| 417 int callbacks_id = RegisterCallbacks(callbacks); | 417 int callbacks_id = RegisterCallbacks(callbacks); |
| 418 scoped_refptr<WaitableCallbackResults> waitable_results = | 418 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 419 MaybeCreateWaitableResults(callbacks, callbacks_id); | 419 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 420 CallDispatcherOnMainThread( | 420 CallDispatcherOnMainThread( |
| 421 main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem, | 421 main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem, |
| 422 MakeTuple(GURL(storage_partition), | 422 std::make_tuple( |
| 423 static_cast<storage::FileSystemType>(type), | 423 GURL(storage_partition), static_cast<storage::FileSystemType>(type), |
| 424 base::Bind(&OpenFileSystemCallbackAdapter, | 424 base::Bind(&OpenFileSystemCallbackAdapter, |
| 425 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 425 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 426 base::RetainedRef(waitable_results)), | 426 base::RetainedRef(waitable_results)), |
| 427 base::Bind(&StatusCallbackAdapter, | 427 base::Bind(&StatusCallbackAdapter, |
| 428 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 428 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 429 base::RetainedRef(waitable_results))), | 429 base::RetainedRef(waitable_results))), |
| 430 waitable_results.get()); | 430 waitable_results.get()); |
| 431 } | 431 } |
| 432 | 432 |
| 433 void WebFileSystemImpl::resolveURL( | 433 void WebFileSystemImpl::resolveURL( |
| 434 const blink::WebURL& filesystem_url, | 434 const blink::WebURL& filesystem_url, |
| 435 WebFileSystemCallbacks callbacks) { | 435 WebFileSystemCallbacks callbacks) { |
| 436 int callbacks_id = RegisterCallbacks(callbacks); | 436 int callbacks_id = RegisterCallbacks(callbacks); |
| 437 scoped_refptr<WaitableCallbackResults> waitable_results = | 437 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 438 MaybeCreateWaitableResults(callbacks, callbacks_id); | 438 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 439 CallDispatcherOnMainThread( | 439 CallDispatcherOnMainThread( |
| 440 main_thread_task_runner_, &FileSystemDispatcher::ResolveURL, | 440 main_thread_task_runner_, &FileSystemDispatcher::ResolveURL, |
| 441 MakeTuple(GURL(filesystem_url), | 441 std::make_tuple( |
| 442 base::Bind(&ResolveURLCallbackAdapter, | 442 GURL(filesystem_url), |
| 443 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 443 base::Bind(&ResolveURLCallbackAdapter, |
| 444 base::RetainedRef(waitable_results)), | 444 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 445 base::Bind(&StatusCallbackAdapter, | 445 base::RetainedRef(waitable_results)), |
| 446 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 446 base::Bind(&StatusCallbackAdapter, |
| 447 base::RetainedRef(waitable_results))), | 447 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 448 base::RetainedRef(waitable_results))), |
| 448 waitable_results.get()); | 449 waitable_results.get()); |
| 449 } | 450 } |
| 450 | 451 |
| 451 void WebFileSystemImpl::deleteFileSystem( | 452 void WebFileSystemImpl::deleteFileSystem( |
| 452 const blink::WebURL& storage_partition, | 453 const blink::WebURL& storage_partition, |
| 453 blink::WebFileSystemType type, | 454 blink::WebFileSystemType type, |
| 454 WebFileSystemCallbacks callbacks) { | 455 WebFileSystemCallbacks callbacks) { |
| 455 int callbacks_id = RegisterCallbacks(callbacks); | 456 int callbacks_id = RegisterCallbacks(callbacks); |
| 456 scoped_refptr<WaitableCallbackResults> waitable_results = | 457 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 457 MaybeCreateWaitableResults(callbacks, callbacks_id); | 458 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 458 CallDispatcherOnMainThread( | 459 CallDispatcherOnMainThread( |
| 459 main_thread_task_runner_, &FileSystemDispatcher::DeleteFileSystem, | 460 main_thread_task_runner_, &FileSystemDispatcher::DeleteFileSystem, |
| 460 MakeTuple(GURL(storage_partition), | 461 std::make_tuple( |
| 461 static_cast<storage::FileSystemType>(type), | 462 GURL(storage_partition), static_cast<storage::FileSystemType>(type), |
| 462 base::Bind(&StatusCallbackAdapter, | 463 base::Bind(&StatusCallbackAdapter, |
| 463 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 464 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 464 base::RetainedRef(waitable_results))), | 465 base::RetainedRef(waitable_results))), |
| 465 waitable_results.get()); | 466 waitable_results.get()); |
| 466 } | 467 } |
| 467 | 468 |
| 468 void WebFileSystemImpl::move( | 469 void WebFileSystemImpl::move( |
| 469 const blink::WebURL& src_path, | 470 const blink::WebURL& src_path, |
| 470 const blink::WebURL& dest_path, | 471 const blink::WebURL& dest_path, |
| 471 WebFileSystemCallbacks callbacks) { | 472 WebFileSystemCallbacks callbacks) { |
| 472 int callbacks_id = RegisterCallbacks(callbacks); | 473 int callbacks_id = RegisterCallbacks(callbacks); |
| 473 scoped_refptr<WaitableCallbackResults> waitable_results = | 474 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 474 MaybeCreateWaitableResults(callbacks, callbacks_id); | 475 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 475 CallDispatcherOnMainThread( | 476 CallDispatcherOnMainThread( |
| 476 main_thread_task_runner_, &FileSystemDispatcher::Move, | 477 main_thread_task_runner_, &FileSystemDispatcher::Move, |
| 477 MakeTuple(GURL(src_path), GURL(dest_path), | 478 std::make_tuple( |
| 478 base::Bind(&StatusCallbackAdapter, | 479 GURL(src_path), GURL(dest_path), |
| 479 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 480 base::Bind(&StatusCallbackAdapter, |
| 480 base::RetainedRef(waitable_results))), | 481 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 482 base::RetainedRef(waitable_results))), |
| 481 waitable_results.get()); | 483 waitable_results.get()); |
| 482 } | 484 } |
| 483 | 485 |
| 484 void WebFileSystemImpl::copy( | 486 void WebFileSystemImpl::copy( |
| 485 const blink::WebURL& src_path, | 487 const blink::WebURL& src_path, |
| 486 const blink::WebURL& dest_path, | 488 const blink::WebURL& dest_path, |
| 487 WebFileSystemCallbacks callbacks) { | 489 WebFileSystemCallbacks callbacks) { |
| 488 int callbacks_id = RegisterCallbacks(callbacks); | 490 int callbacks_id = RegisterCallbacks(callbacks); |
| 489 scoped_refptr<WaitableCallbackResults> waitable_results = | 491 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 490 MaybeCreateWaitableResults(callbacks, callbacks_id); | 492 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 491 CallDispatcherOnMainThread( | 493 CallDispatcherOnMainThread( |
| 492 main_thread_task_runner_, &FileSystemDispatcher::Copy, | 494 main_thread_task_runner_, &FileSystemDispatcher::Copy, |
| 493 MakeTuple(GURL(src_path), GURL(dest_path), | 495 std::make_tuple( |
| 494 base::Bind(&StatusCallbackAdapter, | 496 GURL(src_path), GURL(dest_path), |
| 495 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 497 base::Bind(&StatusCallbackAdapter, |
| 496 base::RetainedRef(waitable_results))), | 498 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 499 base::RetainedRef(waitable_results))), |
| 497 waitable_results.get()); | 500 waitable_results.get()); |
| 498 } | 501 } |
| 499 | 502 |
| 500 void WebFileSystemImpl::remove( | 503 void WebFileSystemImpl::remove( |
| 501 const blink::WebURL& path, | 504 const blink::WebURL& path, |
| 502 WebFileSystemCallbacks callbacks) { | 505 WebFileSystemCallbacks callbacks) { |
| 503 int callbacks_id = RegisterCallbacks(callbacks); | 506 int callbacks_id = RegisterCallbacks(callbacks); |
| 504 scoped_refptr<WaitableCallbackResults> waitable_results = | 507 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 505 MaybeCreateWaitableResults(callbacks, callbacks_id); | 508 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 506 CallDispatcherOnMainThread( | 509 CallDispatcherOnMainThread( |
| 507 main_thread_task_runner_, &FileSystemDispatcher::Remove, | 510 main_thread_task_runner_, &FileSystemDispatcher::Remove, |
| 508 MakeTuple(GURL(path), false /* recursive */, | 511 std::make_tuple( |
| 509 base::Bind(&StatusCallbackAdapter, | 512 GURL(path), false /* recursive */, |
| 510 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 513 base::Bind(&StatusCallbackAdapter, |
| 511 base::RetainedRef(waitable_results))), | 514 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 515 base::RetainedRef(waitable_results))), |
| 512 waitable_results.get()); | 516 waitable_results.get()); |
| 513 } | 517 } |
| 514 | 518 |
| 515 void WebFileSystemImpl::removeRecursively( | 519 void WebFileSystemImpl::removeRecursively( |
| 516 const blink::WebURL& path, | 520 const blink::WebURL& path, |
| 517 WebFileSystemCallbacks callbacks) { | 521 WebFileSystemCallbacks callbacks) { |
| 518 int callbacks_id = RegisterCallbacks(callbacks); | 522 int callbacks_id = RegisterCallbacks(callbacks); |
| 519 scoped_refptr<WaitableCallbackResults> waitable_results = | 523 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 520 MaybeCreateWaitableResults(callbacks, callbacks_id); | 524 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 521 CallDispatcherOnMainThread( | 525 CallDispatcherOnMainThread( |
| 522 main_thread_task_runner_, &FileSystemDispatcher::Remove, | 526 main_thread_task_runner_, &FileSystemDispatcher::Remove, |
| 523 MakeTuple(GURL(path), true /* recursive */, | 527 std::make_tuple( |
| 524 base::Bind(&StatusCallbackAdapter, | 528 GURL(path), true /* recursive */, |
| 525 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 529 base::Bind(&StatusCallbackAdapter, |
| 526 base::RetainedRef(waitable_results))), | 530 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 531 base::RetainedRef(waitable_results))), |
| 527 waitable_results.get()); | 532 waitable_results.get()); |
| 528 } | 533 } |
| 529 | 534 |
| 530 void WebFileSystemImpl::readMetadata( | 535 void WebFileSystemImpl::readMetadata( |
| 531 const blink::WebURL& path, | 536 const blink::WebURL& path, |
| 532 WebFileSystemCallbacks callbacks) { | 537 WebFileSystemCallbacks callbacks) { |
| 533 int callbacks_id = RegisterCallbacks(callbacks); | 538 int callbacks_id = RegisterCallbacks(callbacks); |
| 534 scoped_refptr<WaitableCallbackResults> waitable_results = | 539 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 535 MaybeCreateWaitableResults(callbacks, callbacks_id); | 540 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 536 CallDispatcherOnMainThread( | 541 CallDispatcherOnMainThread( |
| 537 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, | 542 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, |
| 538 MakeTuple(GURL(path), | 543 std::make_tuple( |
| 539 base::Bind(&ReadMetadataCallbackAdapter, | 544 GURL(path), |
| 540 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 545 base::Bind(&ReadMetadataCallbackAdapter, |
| 541 base::RetainedRef(waitable_results)), | 546 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 542 base::Bind(&StatusCallbackAdapter, | 547 base::RetainedRef(waitable_results)), |
| 543 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 548 base::Bind(&StatusCallbackAdapter, |
| 544 base::RetainedRef(waitable_results))), | 549 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 550 base::RetainedRef(waitable_results))), |
| 545 waitable_results.get()); | 551 waitable_results.get()); |
| 546 } | 552 } |
| 547 | 553 |
| 548 void WebFileSystemImpl::createFile( | 554 void WebFileSystemImpl::createFile( |
| 549 const blink::WebURL& path, | 555 const blink::WebURL& path, |
| 550 bool exclusive, | 556 bool exclusive, |
| 551 WebFileSystemCallbacks callbacks) { | 557 WebFileSystemCallbacks callbacks) { |
| 552 int callbacks_id = RegisterCallbacks(callbacks); | 558 int callbacks_id = RegisterCallbacks(callbacks); |
| 553 scoped_refptr<WaitableCallbackResults> waitable_results = | 559 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 554 MaybeCreateWaitableResults(callbacks, callbacks_id); | 560 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 555 CallDispatcherOnMainThread( | 561 CallDispatcherOnMainThread( |
| 556 main_thread_task_runner_, &FileSystemDispatcher::CreateFile, | 562 main_thread_task_runner_, &FileSystemDispatcher::CreateFile, |
| 557 MakeTuple(GURL(path), exclusive, | 563 std::make_tuple( |
| 558 base::Bind(&StatusCallbackAdapter, | 564 GURL(path), exclusive, |
| 559 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 565 base::Bind(&StatusCallbackAdapter, |
| 560 base::RetainedRef(waitable_results))), | 566 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 567 base::RetainedRef(waitable_results))), |
| 561 waitable_results.get()); | 568 waitable_results.get()); |
| 562 } | 569 } |
| 563 | 570 |
| 564 void WebFileSystemImpl::createDirectory( | 571 void WebFileSystemImpl::createDirectory( |
| 565 const blink::WebURL& path, | 572 const blink::WebURL& path, |
| 566 bool exclusive, | 573 bool exclusive, |
| 567 WebFileSystemCallbacks callbacks) { | 574 WebFileSystemCallbacks callbacks) { |
| 568 int callbacks_id = RegisterCallbacks(callbacks); | 575 int callbacks_id = RegisterCallbacks(callbacks); |
| 569 scoped_refptr<WaitableCallbackResults> waitable_results = | 576 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 570 MaybeCreateWaitableResults(callbacks, callbacks_id); | 577 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 571 CallDispatcherOnMainThread( | 578 CallDispatcherOnMainThread( |
| 572 main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory, | 579 main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory, |
| 573 MakeTuple(GURL(path), exclusive, false /* recursive */, | 580 std::make_tuple( |
| 574 base::Bind(&StatusCallbackAdapter, | 581 GURL(path), exclusive, false /* recursive */, |
| 575 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 582 base::Bind(&StatusCallbackAdapter, |
| 576 base::RetainedRef(waitable_results))), | 583 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 584 base::RetainedRef(waitable_results))), |
| 577 waitable_results.get()); | 585 waitable_results.get()); |
| 578 } | 586 } |
| 579 | 587 |
| 580 void WebFileSystemImpl::fileExists( | 588 void WebFileSystemImpl::fileExists( |
| 581 const blink::WebURL& path, | 589 const blink::WebURL& path, |
| 582 WebFileSystemCallbacks callbacks) { | 590 WebFileSystemCallbacks callbacks) { |
| 583 int callbacks_id = RegisterCallbacks(callbacks); | 591 int callbacks_id = RegisterCallbacks(callbacks); |
| 584 scoped_refptr<WaitableCallbackResults> waitable_results = | 592 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 585 MaybeCreateWaitableResults(callbacks, callbacks_id); | 593 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 586 CallDispatcherOnMainThread( | 594 CallDispatcherOnMainThread( |
| 587 main_thread_task_runner_, &FileSystemDispatcher::Exists, | 595 main_thread_task_runner_, &FileSystemDispatcher::Exists, |
| 588 MakeTuple(GURL(path), false /* directory */, | 596 std::make_tuple( |
| 589 base::Bind(&StatusCallbackAdapter, | 597 GURL(path), false /* directory */, |
| 590 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 598 base::Bind(&StatusCallbackAdapter, |
| 591 base::RetainedRef(waitable_results))), | 599 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 600 base::RetainedRef(waitable_results))), |
| 592 waitable_results.get()); | 601 waitable_results.get()); |
| 593 } | 602 } |
| 594 | 603 |
| 595 void WebFileSystemImpl::directoryExists( | 604 void WebFileSystemImpl::directoryExists( |
| 596 const blink::WebURL& path, | 605 const blink::WebURL& path, |
| 597 WebFileSystemCallbacks callbacks) { | 606 WebFileSystemCallbacks callbacks) { |
| 598 int callbacks_id = RegisterCallbacks(callbacks); | 607 int callbacks_id = RegisterCallbacks(callbacks); |
| 599 scoped_refptr<WaitableCallbackResults> waitable_results = | 608 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 600 MaybeCreateWaitableResults(callbacks, callbacks_id); | 609 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 601 CallDispatcherOnMainThread( | 610 CallDispatcherOnMainThread( |
| 602 main_thread_task_runner_, &FileSystemDispatcher::Exists, | 611 main_thread_task_runner_, &FileSystemDispatcher::Exists, |
| 603 MakeTuple(GURL(path), true /* directory */, | 612 std::make_tuple( |
| 604 base::Bind(&StatusCallbackAdapter, | 613 GURL(path), true /* directory */, |
| 605 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 614 base::Bind(&StatusCallbackAdapter, |
| 606 base::RetainedRef(waitable_results))), | 615 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 616 base::RetainedRef(waitable_results))), |
| 607 waitable_results.get()); | 617 waitable_results.get()); |
| 608 } | 618 } |
| 609 | 619 |
| 610 int WebFileSystemImpl::readDirectory( | 620 int WebFileSystemImpl::readDirectory( |
| 611 const blink::WebURL& path, | 621 const blink::WebURL& path, |
| 612 WebFileSystemCallbacks callbacks) { | 622 WebFileSystemCallbacks callbacks) { |
| 613 int callbacks_id = RegisterCallbacks(callbacks); | 623 int callbacks_id = RegisterCallbacks(callbacks); |
| 614 scoped_refptr<WaitableCallbackResults> waitable_results = | 624 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 615 MaybeCreateWaitableResults(callbacks, callbacks_id); | 625 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 616 CallDispatcherOnMainThread( | 626 CallDispatcherOnMainThread( |
| 617 main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory, | 627 main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory, |
| 618 MakeTuple(GURL(path), | 628 std::make_tuple( |
| 619 base::Bind(&ReadDirectoryCallbackAdapter, | 629 GURL(path), |
| 620 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 630 base::Bind(&ReadDirectoryCallbackAdapter, |
| 621 base::RetainedRef(waitable_results)), | 631 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 622 base::Bind(&StatusCallbackAdapter, | 632 base::RetainedRef(waitable_results)), |
| 623 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 633 base::Bind(&StatusCallbackAdapter, |
| 624 base::RetainedRef(waitable_results))), | 634 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 635 base::RetainedRef(waitable_results))), |
| 625 waitable_results.get()); | 636 waitable_results.get()); |
| 626 return callbacks_id; | 637 return callbacks_id; |
| 627 } | 638 } |
| 628 | 639 |
| 629 void WebFileSystemImpl::createFileWriter( | 640 void WebFileSystemImpl::createFileWriter( |
| 630 const WebURL& path, | 641 const WebURL& path, |
| 631 blink::WebFileWriterClient* client, | 642 blink::WebFileWriterClient* client, |
| 632 WebFileSystemCallbacks callbacks) { | 643 WebFileSystemCallbacks callbacks) { |
| 633 int callbacks_id = RegisterCallbacks(callbacks); | 644 int callbacks_id = RegisterCallbacks(callbacks); |
| 634 scoped_refptr<WaitableCallbackResults> waitable_results = | 645 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 635 MaybeCreateWaitableResults(callbacks, callbacks_id); | 646 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 636 CallDispatcherOnMainThread( | 647 CallDispatcherOnMainThread( |
| 637 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, | 648 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, |
| 638 MakeTuple(GURL(path), | 649 std::make_tuple( |
| 639 base::Bind(&CreateFileWriterCallbackAdapter, | 650 GURL(path), |
| 640 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 651 base::Bind(&CreateFileWriterCallbackAdapter, |
| 641 base::RetainedRef(waitable_results), | 652 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 642 main_thread_task_runner_, GURL(path), client), | 653 base::RetainedRef(waitable_results), |
| 643 base::Bind(&StatusCallbackAdapter, | 654 main_thread_task_runner_, GURL(path), client), |
| 644 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 655 base::Bind(&StatusCallbackAdapter, |
| 645 base::RetainedRef(waitable_results))), | 656 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 657 base::RetainedRef(waitable_results))), |
| 646 waitable_results.get()); | 658 waitable_results.get()); |
| 647 } | 659 } |
| 648 | 660 |
| 649 void WebFileSystemImpl::createSnapshotFileAndReadMetadata( | 661 void WebFileSystemImpl::createSnapshotFileAndReadMetadata( |
| 650 const blink::WebURL& path, | 662 const blink::WebURL& path, |
| 651 WebFileSystemCallbacks callbacks) { | 663 WebFileSystemCallbacks callbacks) { |
| 652 int callbacks_id = RegisterCallbacks(callbacks); | 664 int callbacks_id = RegisterCallbacks(callbacks); |
| 653 scoped_refptr<WaitableCallbackResults> waitable_results = | 665 scoped_refptr<WaitableCallbackResults> waitable_results = |
| 654 MaybeCreateWaitableResults(callbacks, callbacks_id); | 666 MaybeCreateWaitableResults(callbacks, callbacks_id); |
| 655 CallDispatcherOnMainThread( | 667 CallDispatcherOnMainThread( |
| 656 main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile, | 668 main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile, |
| 657 MakeTuple(GURL(path), | 669 std::make_tuple( |
| 658 base::Bind(&CreateSnapshotFileCallbackAdapter, | 670 GURL(path), |
| 659 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 671 base::Bind(&CreateSnapshotFileCallbackAdapter, |
| 660 base::RetainedRef(waitable_results), | 672 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 661 main_thread_task_runner_), | 673 base::RetainedRef(waitable_results), |
| 662 base::Bind(&StatusCallbackAdapter, | 674 main_thread_task_runner_), |
| 663 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 675 base::Bind(&StatusCallbackAdapter, |
| 664 base::RetainedRef(waitable_results))), | 676 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 677 base::RetainedRef(waitable_results))), |
| 665 waitable_results.get()); | 678 waitable_results.get()); |
| 666 } | 679 } |
| 667 | 680 |
| 668 bool WebFileSystemImpl::waitForAdditionalResult(int callbacksId) { | 681 bool WebFileSystemImpl::waitForAdditionalResult(int callbacksId) { |
| 669 WaitableCallbackResultsMap::iterator found = | 682 WaitableCallbackResultsMap::iterator found = |
| 670 waitable_results_.find(callbacksId); | 683 waitable_results_.find(callbacksId); |
| 671 if (found == waitable_results_.end()) | 684 if (found == waitable_results_.end()) |
| 672 return false; | 685 return false; |
| 673 | 686 |
| 674 found->second->WaitAndRun(); | 687 found->second->WaitAndRun(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 702 WaitableCallbackResults* WebFileSystemImpl::MaybeCreateWaitableResults( | 715 WaitableCallbackResults* WebFileSystemImpl::MaybeCreateWaitableResults( |
| 703 const WebFileSystemCallbacks& callbacks, int callbacks_id) { | 716 const WebFileSystemCallbacks& callbacks, int callbacks_id) { |
| 704 if (!callbacks.shouldBlockUntilCompletion()) | 717 if (!callbacks.shouldBlockUntilCompletion()) |
| 705 return NULL; | 718 return NULL; |
| 706 WaitableCallbackResults* results = new WaitableCallbackResults(); | 719 WaitableCallbackResults* results = new WaitableCallbackResults(); |
| 707 waitable_results_[callbacks_id] = results; | 720 waitable_results_[callbacks_id] = results; |
| 708 return results; | 721 return results; |
| 709 } | 722 } |
| 710 | 723 |
| 711 } // namespace content | 724 } // namespace content |
| OLD | NEW |