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 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 96 |
97 template <typename Method, typename Params> | 97 template <typename Method, typename Params> |
98 void CallDispatcherOnMainThread( | 98 void CallDispatcherOnMainThread( |
99 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner, | 99 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner, |
100 Method method, const Params& params, | 100 Method method, const Params& params, |
101 WaitableCallbackResults* waitable_results) { | 101 WaitableCallbackResults* waitable_results) { |
102 if (!main_thread_task_runner->RunsTasksOnCurrentThread()) { | 102 if (!main_thread_task_runner->RunsTasksOnCurrentThread()) { |
103 main_thread_task_runner->PostTask( | 103 main_thread_task_runner->PostTask( |
104 FROM_HERE, | 104 FROM_HERE, |
105 base::Bind(&CallDispatcherOnMainThread<Method, Params>, | 105 base::Bind(&CallDispatcherOnMainThread<Method, Params>, |
106 main_thread_task_runner, method, params, | 106 main_thread_task_runner, method, params, nullptr)); |
107 scoped_refptr<WaitableCallbackResults>())); | |
108 if (!waitable_results) | 107 if (!waitable_results) |
109 return; | 108 return; |
110 waitable_results->WaitAndRun(); | 109 waitable_results->WaitAndRun(); |
111 } | 110 } |
112 if (!ChildThreadImpl::current() || | 111 if (!ChildThreadImpl::current() || |
113 !ChildThreadImpl::current()->file_system_dispatcher()) | 112 !ChildThreadImpl::current()->file_system_dispatcher()) |
114 return; | 113 return; |
115 | 114 |
116 DCHECK(!waitable_results); | 115 DCHECK(!waitable_results); |
117 DispatchToMethod(ChildThreadImpl::current()->file_system_dispatcher(), | 116 DispatchToMethod(ChildThreadImpl::current()->file_system_dispatcher(), |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 WebFileSystemCallbacks callbacks) { | 416 WebFileSystemCallbacks callbacks) { |
418 int callbacks_id = RegisterCallbacks(callbacks); | 417 int callbacks_id = RegisterCallbacks(callbacks); |
419 scoped_refptr<WaitableCallbackResults> waitable_results = | 418 scoped_refptr<WaitableCallbackResults> waitable_results = |
420 MaybeCreateWaitableResults(callbacks, callbacks_id); | 419 MaybeCreateWaitableResults(callbacks, callbacks_id); |
421 CallDispatcherOnMainThread( | 420 CallDispatcherOnMainThread( |
422 main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem, | 421 main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem, |
423 MakeTuple(GURL(storage_partition), | 422 MakeTuple(GURL(storage_partition), |
424 static_cast<storage::FileSystemType>(type), | 423 static_cast<storage::FileSystemType>(type), |
425 base::Bind(&OpenFileSystemCallbackAdapter, | 424 base::Bind(&OpenFileSystemCallbackAdapter, |
426 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 425 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
427 waitable_results), | 426 base::RetainedRef(waitable_results)), |
428 base::Bind(&StatusCallbackAdapter, | 427 base::Bind(&StatusCallbackAdapter, |
429 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 428 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
430 waitable_results)), | 429 base::RetainedRef(waitable_results))), |
431 waitable_results.get()); | 430 waitable_results.get()); |
432 } | 431 } |
433 | 432 |
434 void WebFileSystemImpl::resolveURL( | 433 void WebFileSystemImpl::resolveURL( |
435 const blink::WebURL& filesystem_url, | 434 const blink::WebURL& filesystem_url, |
436 WebFileSystemCallbacks callbacks) { | 435 WebFileSystemCallbacks callbacks) { |
437 int callbacks_id = RegisterCallbacks(callbacks); | 436 int callbacks_id = RegisterCallbacks(callbacks); |
438 scoped_refptr<WaitableCallbackResults> waitable_results = | 437 scoped_refptr<WaitableCallbackResults> waitable_results = |
439 MaybeCreateWaitableResults(callbacks, callbacks_id); | 438 MaybeCreateWaitableResults(callbacks, callbacks_id); |
440 CallDispatcherOnMainThread( | 439 CallDispatcherOnMainThread( |
441 main_thread_task_runner_, &FileSystemDispatcher::ResolveURL, | 440 main_thread_task_runner_, &FileSystemDispatcher::ResolveURL, |
442 MakeTuple(GURL(filesystem_url), | 441 MakeTuple(GURL(filesystem_url), |
443 base::Bind(&ResolveURLCallbackAdapter, | 442 base::Bind(&ResolveURLCallbackAdapter, |
444 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 443 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
445 waitable_results), | 444 base::RetainedRef(waitable_results)), |
446 base::Bind(&StatusCallbackAdapter, | 445 base::Bind(&StatusCallbackAdapter, |
447 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 446 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
448 waitable_results)), | 447 base::RetainedRef(waitable_results))), |
449 waitable_results.get()); | 448 waitable_results.get()); |
450 } | 449 } |
451 | 450 |
452 void WebFileSystemImpl::deleteFileSystem( | 451 void WebFileSystemImpl::deleteFileSystem( |
453 const blink::WebURL& storage_partition, | 452 const blink::WebURL& storage_partition, |
454 blink::WebFileSystemType type, | 453 blink::WebFileSystemType type, |
455 WebFileSystemCallbacks callbacks) { | 454 WebFileSystemCallbacks callbacks) { |
456 int callbacks_id = RegisterCallbacks(callbacks); | 455 int callbacks_id = RegisterCallbacks(callbacks); |
457 scoped_refptr<WaitableCallbackResults> waitable_results = | 456 scoped_refptr<WaitableCallbackResults> waitable_results = |
458 MaybeCreateWaitableResults(callbacks, callbacks_id); | 457 MaybeCreateWaitableResults(callbacks, callbacks_id); |
459 CallDispatcherOnMainThread( | 458 CallDispatcherOnMainThread( |
460 main_thread_task_runner_, &FileSystemDispatcher::DeleteFileSystem, | 459 main_thread_task_runner_, &FileSystemDispatcher::DeleteFileSystem, |
461 MakeTuple(GURL(storage_partition), | 460 MakeTuple(GURL(storage_partition), |
462 static_cast<storage::FileSystemType>(type), | 461 static_cast<storage::FileSystemType>(type), |
463 base::Bind(&StatusCallbackAdapter, | 462 base::Bind(&StatusCallbackAdapter, |
464 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 463 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
465 waitable_results)), | 464 base::RetainedRef(waitable_results))), |
466 waitable_results.get()); | 465 waitable_results.get()); |
467 } | 466 } |
468 | 467 |
469 void WebFileSystemImpl::move( | 468 void WebFileSystemImpl::move( |
470 const blink::WebURL& src_path, | 469 const blink::WebURL& src_path, |
471 const blink::WebURL& dest_path, | 470 const blink::WebURL& dest_path, |
472 WebFileSystemCallbacks callbacks) { | 471 WebFileSystemCallbacks callbacks) { |
473 int callbacks_id = RegisterCallbacks(callbacks); | 472 int callbacks_id = RegisterCallbacks(callbacks); |
474 scoped_refptr<WaitableCallbackResults> waitable_results = | 473 scoped_refptr<WaitableCallbackResults> waitable_results = |
475 MaybeCreateWaitableResults(callbacks, callbacks_id); | 474 MaybeCreateWaitableResults(callbacks, callbacks_id); |
476 CallDispatcherOnMainThread( | 475 CallDispatcherOnMainThread( |
477 main_thread_task_runner_, &FileSystemDispatcher::Move, | 476 main_thread_task_runner_, &FileSystemDispatcher::Move, |
478 MakeTuple(GURL(src_path), GURL(dest_path), | 477 MakeTuple(GURL(src_path), GURL(dest_path), |
479 base::Bind(&StatusCallbackAdapter, | 478 base::Bind(&StatusCallbackAdapter, |
480 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 479 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
481 waitable_results)), | 480 base::RetainedRef(waitable_results))), |
482 waitable_results.get()); | 481 waitable_results.get()); |
483 } | 482 } |
484 | 483 |
485 void WebFileSystemImpl::copy( | 484 void WebFileSystemImpl::copy( |
486 const blink::WebURL& src_path, | 485 const blink::WebURL& src_path, |
487 const blink::WebURL& dest_path, | 486 const blink::WebURL& dest_path, |
488 WebFileSystemCallbacks callbacks) { | 487 WebFileSystemCallbacks callbacks) { |
489 int callbacks_id = RegisterCallbacks(callbacks); | 488 int callbacks_id = RegisterCallbacks(callbacks); |
490 scoped_refptr<WaitableCallbackResults> waitable_results = | 489 scoped_refptr<WaitableCallbackResults> waitable_results = |
491 MaybeCreateWaitableResults(callbacks, callbacks_id); | 490 MaybeCreateWaitableResults(callbacks, callbacks_id); |
492 CallDispatcherOnMainThread( | 491 CallDispatcherOnMainThread( |
493 main_thread_task_runner_, &FileSystemDispatcher::Copy, | 492 main_thread_task_runner_, &FileSystemDispatcher::Copy, |
494 MakeTuple(GURL(src_path), GURL(dest_path), | 493 MakeTuple(GURL(src_path), GURL(dest_path), |
495 base::Bind(&StatusCallbackAdapter, | 494 base::Bind(&StatusCallbackAdapter, |
496 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 495 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
497 waitable_results)), | 496 base::RetainedRef(waitable_results))), |
498 waitable_results.get()); | 497 waitable_results.get()); |
499 } | 498 } |
500 | 499 |
501 void WebFileSystemImpl::remove( | 500 void WebFileSystemImpl::remove( |
502 const blink::WebURL& path, | 501 const blink::WebURL& path, |
503 WebFileSystemCallbacks callbacks) { | 502 WebFileSystemCallbacks callbacks) { |
504 int callbacks_id = RegisterCallbacks(callbacks); | 503 int callbacks_id = RegisterCallbacks(callbacks); |
505 scoped_refptr<WaitableCallbackResults> waitable_results = | 504 scoped_refptr<WaitableCallbackResults> waitable_results = |
506 MaybeCreateWaitableResults(callbacks, callbacks_id); | 505 MaybeCreateWaitableResults(callbacks, callbacks_id); |
507 CallDispatcherOnMainThread( | 506 CallDispatcherOnMainThread( |
508 main_thread_task_runner_, &FileSystemDispatcher::Remove, | 507 main_thread_task_runner_, &FileSystemDispatcher::Remove, |
509 MakeTuple(GURL(path), false /* recursive */, | 508 MakeTuple(GURL(path), false /* recursive */, |
510 base::Bind(&StatusCallbackAdapter, | 509 base::Bind(&StatusCallbackAdapter, |
511 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 510 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
512 waitable_results)), | 511 base::RetainedRef(waitable_results))), |
513 waitable_results.get()); | 512 waitable_results.get()); |
514 } | 513 } |
515 | 514 |
516 void WebFileSystemImpl::removeRecursively( | 515 void WebFileSystemImpl::removeRecursively( |
517 const blink::WebURL& path, | 516 const blink::WebURL& path, |
518 WebFileSystemCallbacks callbacks) { | 517 WebFileSystemCallbacks callbacks) { |
519 int callbacks_id = RegisterCallbacks(callbacks); | 518 int callbacks_id = RegisterCallbacks(callbacks); |
520 scoped_refptr<WaitableCallbackResults> waitable_results = | 519 scoped_refptr<WaitableCallbackResults> waitable_results = |
521 MaybeCreateWaitableResults(callbacks, callbacks_id); | 520 MaybeCreateWaitableResults(callbacks, callbacks_id); |
522 CallDispatcherOnMainThread( | 521 CallDispatcherOnMainThread( |
523 main_thread_task_runner_, &FileSystemDispatcher::Remove, | 522 main_thread_task_runner_, &FileSystemDispatcher::Remove, |
524 MakeTuple(GURL(path), true /* recursive */, | 523 MakeTuple(GURL(path), true /* recursive */, |
525 base::Bind(&StatusCallbackAdapter, | 524 base::Bind(&StatusCallbackAdapter, |
526 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 525 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
527 waitable_results)), | 526 base::RetainedRef(waitable_results))), |
528 waitable_results.get()); | 527 waitable_results.get()); |
529 } | 528 } |
530 | 529 |
531 void WebFileSystemImpl::readMetadata( | 530 void WebFileSystemImpl::readMetadata( |
532 const blink::WebURL& path, | 531 const blink::WebURL& path, |
533 WebFileSystemCallbacks callbacks) { | 532 WebFileSystemCallbacks callbacks) { |
534 int callbacks_id = RegisterCallbacks(callbacks); | 533 int callbacks_id = RegisterCallbacks(callbacks); |
535 scoped_refptr<WaitableCallbackResults> waitable_results = | 534 scoped_refptr<WaitableCallbackResults> waitable_results = |
536 MaybeCreateWaitableResults(callbacks, callbacks_id); | 535 MaybeCreateWaitableResults(callbacks, callbacks_id); |
537 CallDispatcherOnMainThread( | 536 CallDispatcherOnMainThread( |
538 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, | 537 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, |
539 MakeTuple(GURL(path), base::Bind(&ReadMetadataCallbackAdapter, | 538 MakeTuple(GURL(path), |
540 base::ThreadTaskRunnerHandle::Get(), | 539 base::Bind(&ReadMetadataCallbackAdapter, |
541 callbacks_id, waitable_results), | 540 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 541 base::RetainedRef(waitable_results)), |
542 base::Bind(&StatusCallbackAdapter, | 542 base::Bind(&StatusCallbackAdapter, |
543 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 543 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
544 waitable_results)), | 544 base::RetainedRef(waitable_results))), |
545 waitable_results.get()); | 545 waitable_results.get()); |
546 } | 546 } |
547 | 547 |
548 void WebFileSystemImpl::createFile( | 548 void WebFileSystemImpl::createFile( |
549 const blink::WebURL& path, | 549 const blink::WebURL& path, |
550 bool exclusive, | 550 bool exclusive, |
551 WebFileSystemCallbacks callbacks) { | 551 WebFileSystemCallbacks callbacks) { |
552 int callbacks_id = RegisterCallbacks(callbacks); | 552 int callbacks_id = RegisterCallbacks(callbacks); |
553 scoped_refptr<WaitableCallbackResults> waitable_results = | 553 scoped_refptr<WaitableCallbackResults> waitable_results = |
554 MaybeCreateWaitableResults(callbacks, callbacks_id); | 554 MaybeCreateWaitableResults(callbacks, callbacks_id); |
555 CallDispatcherOnMainThread( | 555 CallDispatcherOnMainThread( |
556 main_thread_task_runner_, &FileSystemDispatcher::CreateFile, | 556 main_thread_task_runner_, &FileSystemDispatcher::CreateFile, |
557 MakeTuple(GURL(path), exclusive, | 557 MakeTuple(GURL(path), exclusive, |
558 base::Bind(&StatusCallbackAdapter, | 558 base::Bind(&StatusCallbackAdapter, |
559 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 559 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
560 waitable_results)), | 560 base::RetainedRef(waitable_results))), |
561 waitable_results.get()); | 561 waitable_results.get()); |
562 } | 562 } |
563 | 563 |
564 void WebFileSystemImpl::createDirectory( | 564 void WebFileSystemImpl::createDirectory( |
565 const blink::WebURL& path, | 565 const blink::WebURL& path, |
566 bool exclusive, | 566 bool exclusive, |
567 WebFileSystemCallbacks callbacks) { | 567 WebFileSystemCallbacks callbacks) { |
568 int callbacks_id = RegisterCallbacks(callbacks); | 568 int callbacks_id = RegisterCallbacks(callbacks); |
569 scoped_refptr<WaitableCallbackResults> waitable_results = | 569 scoped_refptr<WaitableCallbackResults> waitable_results = |
570 MaybeCreateWaitableResults(callbacks, callbacks_id); | 570 MaybeCreateWaitableResults(callbacks, callbacks_id); |
571 CallDispatcherOnMainThread( | 571 CallDispatcherOnMainThread( |
572 main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory, | 572 main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory, |
573 MakeTuple(GURL(path), exclusive, false /* recursive */, | 573 MakeTuple(GURL(path), exclusive, false /* recursive */, |
574 base::Bind(&StatusCallbackAdapter, | 574 base::Bind(&StatusCallbackAdapter, |
575 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 575 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
576 waitable_results)), | 576 base::RetainedRef(waitable_results))), |
577 waitable_results.get()); | 577 waitable_results.get()); |
578 } | 578 } |
579 | 579 |
580 void WebFileSystemImpl::fileExists( | 580 void WebFileSystemImpl::fileExists( |
581 const blink::WebURL& path, | 581 const blink::WebURL& path, |
582 WebFileSystemCallbacks callbacks) { | 582 WebFileSystemCallbacks callbacks) { |
583 int callbacks_id = RegisterCallbacks(callbacks); | 583 int callbacks_id = RegisterCallbacks(callbacks); |
584 scoped_refptr<WaitableCallbackResults> waitable_results = | 584 scoped_refptr<WaitableCallbackResults> waitable_results = |
585 MaybeCreateWaitableResults(callbacks, callbacks_id); | 585 MaybeCreateWaitableResults(callbacks, callbacks_id); |
586 CallDispatcherOnMainThread( | 586 CallDispatcherOnMainThread( |
587 main_thread_task_runner_, &FileSystemDispatcher::Exists, | 587 main_thread_task_runner_, &FileSystemDispatcher::Exists, |
588 MakeTuple(GURL(path), false /* directory */, | 588 MakeTuple(GURL(path), false /* directory */, |
589 base::Bind(&StatusCallbackAdapter, | 589 base::Bind(&StatusCallbackAdapter, |
590 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 590 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
591 waitable_results)), | 591 base::RetainedRef(waitable_results))), |
592 waitable_results.get()); | 592 waitable_results.get()); |
593 } | 593 } |
594 | 594 |
595 void WebFileSystemImpl::directoryExists( | 595 void WebFileSystemImpl::directoryExists( |
596 const blink::WebURL& path, | 596 const blink::WebURL& path, |
597 WebFileSystemCallbacks callbacks) { | 597 WebFileSystemCallbacks callbacks) { |
598 int callbacks_id = RegisterCallbacks(callbacks); | 598 int callbacks_id = RegisterCallbacks(callbacks); |
599 scoped_refptr<WaitableCallbackResults> waitable_results = | 599 scoped_refptr<WaitableCallbackResults> waitable_results = |
600 MaybeCreateWaitableResults(callbacks, callbacks_id); | 600 MaybeCreateWaitableResults(callbacks, callbacks_id); |
601 CallDispatcherOnMainThread( | 601 CallDispatcherOnMainThread( |
602 main_thread_task_runner_, &FileSystemDispatcher::Exists, | 602 main_thread_task_runner_, &FileSystemDispatcher::Exists, |
603 MakeTuple(GURL(path), true /* directory */, | 603 MakeTuple(GURL(path), true /* directory */, |
604 base::Bind(&StatusCallbackAdapter, | 604 base::Bind(&StatusCallbackAdapter, |
605 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 605 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
606 waitable_results)), | 606 base::RetainedRef(waitable_results))), |
607 waitable_results.get()); | 607 waitable_results.get()); |
608 } | 608 } |
609 | 609 |
610 int WebFileSystemImpl::readDirectory( | 610 int WebFileSystemImpl::readDirectory( |
611 const blink::WebURL& path, | 611 const blink::WebURL& path, |
612 WebFileSystemCallbacks callbacks) { | 612 WebFileSystemCallbacks callbacks) { |
613 int callbacks_id = RegisterCallbacks(callbacks); | 613 int callbacks_id = RegisterCallbacks(callbacks); |
614 scoped_refptr<WaitableCallbackResults> waitable_results = | 614 scoped_refptr<WaitableCallbackResults> waitable_results = |
615 MaybeCreateWaitableResults(callbacks, callbacks_id); | 615 MaybeCreateWaitableResults(callbacks, callbacks_id); |
616 CallDispatcherOnMainThread( | 616 CallDispatcherOnMainThread( |
617 main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory, | 617 main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory, |
618 MakeTuple(GURL(path), base::Bind(&ReadDirectoryCallbackAdapter, | 618 MakeTuple(GURL(path), |
619 base::ThreadTaskRunnerHandle::Get(), | 619 base::Bind(&ReadDirectoryCallbackAdapter, |
620 callbacks_id, waitable_results), | 620 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
| 621 base::RetainedRef(waitable_results)), |
621 base::Bind(&StatusCallbackAdapter, | 622 base::Bind(&StatusCallbackAdapter, |
622 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 623 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
623 waitable_results)), | 624 base::RetainedRef(waitable_results))), |
624 waitable_results.get()); | 625 waitable_results.get()); |
625 return callbacks_id; | 626 return callbacks_id; |
626 } | 627 } |
627 | 628 |
628 void WebFileSystemImpl::createFileWriter( | 629 void WebFileSystemImpl::createFileWriter( |
629 const WebURL& path, | 630 const WebURL& path, |
630 blink::WebFileWriterClient* client, | 631 blink::WebFileWriterClient* client, |
631 WebFileSystemCallbacks callbacks) { | 632 WebFileSystemCallbacks callbacks) { |
632 int callbacks_id = RegisterCallbacks(callbacks); | 633 int callbacks_id = RegisterCallbacks(callbacks); |
633 scoped_refptr<WaitableCallbackResults> waitable_results = | 634 scoped_refptr<WaitableCallbackResults> waitable_results = |
634 MaybeCreateWaitableResults(callbacks, callbacks_id); | 635 MaybeCreateWaitableResults(callbacks, callbacks_id); |
635 CallDispatcherOnMainThread( | 636 CallDispatcherOnMainThread( |
636 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, | 637 main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata, |
637 MakeTuple(GURL(path), | 638 MakeTuple(GURL(path), |
638 base::Bind(&CreateFileWriterCallbackAdapter, | 639 base::Bind(&CreateFileWriterCallbackAdapter, |
639 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 640 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
640 waitable_results, main_thread_task_runner_, | 641 base::RetainedRef(waitable_results), |
641 GURL(path), client), | 642 main_thread_task_runner_, GURL(path), client), |
642 base::Bind(&StatusCallbackAdapter, | 643 base::Bind(&StatusCallbackAdapter, |
643 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 644 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
644 waitable_results)), | 645 base::RetainedRef(waitable_results))), |
645 waitable_results.get()); | 646 waitable_results.get()); |
646 } | 647 } |
647 | 648 |
648 void WebFileSystemImpl::createSnapshotFileAndReadMetadata( | 649 void WebFileSystemImpl::createSnapshotFileAndReadMetadata( |
649 const blink::WebURL& path, | 650 const blink::WebURL& path, |
650 WebFileSystemCallbacks callbacks) { | 651 WebFileSystemCallbacks callbacks) { |
651 int callbacks_id = RegisterCallbacks(callbacks); | 652 int callbacks_id = RegisterCallbacks(callbacks); |
652 scoped_refptr<WaitableCallbackResults> waitable_results = | 653 scoped_refptr<WaitableCallbackResults> waitable_results = |
653 MaybeCreateWaitableResults(callbacks, callbacks_id); | 654 MaybeCreateWaitableResults(callbacks, callbacks_id); |
654 CallDispatcherOnMainThread( | 655 CallDispatcherOnMainThread( |
655 main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile, | 656 main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile, |
656 MakeTuple(GURL(path), | 657 MakeTuple(GURL(path), |
657 base::Bind(&CreateSnapshotFileCallbackAdapter, | 658 base::Bind(&CreateSnapshotFileCallbackAdapter, |
658 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 659 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
659 waitable_results, main_thread_task_runner_), | 660 base::RetainedRef(waitable_results), |
| 661 main_thread_task_runner_), |
660 base::Bind(&StatusCallbackAdapter, | 662 base::Bind(&StatusCallbackAdapter, |
661 base::ThreadTaskRunnerHandle::Get(), callbacks_id, | 663 base::ThreadTaskRunnerHandle::Get(), callbacks_id, |
662 waitable_results)), | 664 base::RetainedRef(waitable_results))), |
663 waitable_results.get()); | 665 waitable_results.get()); |
664 } | 666 } |
665 | 667 |
666 bool WebFileSystemImpl::waitForAdditionalResult(int callbacksId) { | 668 bool WebFileSystemImpl::waitForAdditionalResult(int callbacksId) { |
667 WaitableCallbackResultsMap::iterator found = | 669 WaitableCallbackResultsMap::iterator found = |
668 waitable_results_.find(callbacksId); | 670 waitable_results_.find(callbacksId); |
669 if (found == waitable_results_.end()) | 671 if (found == waitable_results_.end()) |
670 return false; | 672 return false; |
671 | 673 |
672 found->second->WaitAndRun(); | 674 found->second->WaitAndRun(); |
(...skipping 27 matching lines...) Expand all Loading... |
700 WaitableCallbackResults* WebFileSystemImpl::MaybeCreateWaitableResults( | 702 WaitableCallbackResults* WebFileSystemImpl::MaybeCreateWaitableResults( |
701 const WebFileSystemCallbacks& callbacks, int callbacks_id) { | 703 const WebFileSystemCallbacks& callbacks, int callbacks_id) { |
702 if (!callbacks.shouldBlockUntilCompletion()) | 704 if (!callbacks.shouldBlockUntilCompletion()) |
703 return NULL; | 705 return NULL; |
704 WaitableCallbackResults* results = new WaitableCallbackResults(); | 706 WaitableCallbackResults* results = new WaitableCallbackResults(); |
705 waitable_results_[callbacks_id] = results; | 707 waitable_results_[callbacks_id] = results; |
706 return results; | 708 return results; |
707 } | 709 } |
708 | 710 |
709 } // namespace content | 711 } // namespace content |
OLD | NEW |