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 "webkit/browser/fileapi/file_system_operation_impl.h" | 5 #include "webkit/browser/fileapi/file_system_operation_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 270 |
271 void AddQuota(int64 quota_delta) { | 271 void AddQuota(int64 quota_delta) { |
272 int64 quota; | 272 int64 quota; |
273 GetUsageAndQuota(NULL, "a); | 273 GetUsageAndQuota(NULL, "a); |
274 quota_manager()->SetQuota(sandbox_file_system_.origin(), | 274 quota_manager()->SetQuota(sandbox_file_system_.origin(), |
275 sandbox_file_system_.storage_type(), | 275 sandbox_file_system_.storage_type(), |
276 quota + quota_delta); | 276 quota + quota_delta); |
277 } | 277 } |
278 | 278 |
279 private: | 279 private: |
280 base::MessageLoopForIO message_loop_; | 280 base::MessageLoop message_loop_; |
281 scoped_refptr<QuotaManager> quota_manager_; | 281 scoped_refptr<QuotaManager> quota_manager_; |
282 scoped_refptr<QuotaManagerProxy> quota_manager_proxy_; | 282 scoped_refptr<QuotaManagerProxy> quota_manager_proxy_; |
283 | 283 |
284 // Common temp base for nondestructive uses. | 284 // Common temp base for nondestructive uses. |
285 base::ScopedTempDir base_; | 285 base::ScopedTempDir base_; |
286 | 286 |
287 SandboxFileSystemTestHelper sandbox_file_system_; | 287 SandboxFileSystemTestHelper sandbox_file_system_; |
288 | 288 |
289 // For post-operation status. | 289 // For post-operation status. |
290 int status_; | 290 int status_; |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 TEST_F(FileSystemOperationImplTest, TestCopyFailureSrcFileExistsDestDir) { | 546 TEST_F(FileSystemOperationImplTest, TestCopyFailureSrcFileExistsDestDir) { |
547 // Src exists and is a file. Dest is a directory. | 547 // Src exists and is a file. Dest is a directory. |
548 FileSystemURL src_file(CreateFile("src")); | 548 FileSystemURL src_file(CreateFile("src")); |
549 FileSystemURL dest_dir(CreateDirectory("dest")); | 549 FileSystemURL dest_dir(CreateDirectory("dest")); |
550 | 550 |
551 operation_runner()->Copy(src_file, dest_dir, | 551 operation_runner()->Copy(src_file, dest_dir, |
552 FileSystemOperation::OPTION_NONE, | 552 FileSystemOperation::OPTION_NONE, |
553 FileSystemOperationRunner::CopyProgressCallback(), | 553 FileSystemOperationRunner::CopyProgressCallback(), |
554 RecordStatusCallback()); | 554 RecordStatusCallback()); |
555 base::RunLoop().RunUntilIdle(); | 555 base::RunLoop().RunUntilIdle(); |
556 EXPECT_EQ(3, quota_manager_proxy()->notify_storage_accessed_count()); | 556 EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, status()); |
557 | |
558 EXPECT_EQ(1, change_observer()->get_and_reset_create_directory_count()); | |
559 EXPECT_EQ(1, change_observer()->get_and_reset_remove_directory_count()); | |
560 EXPECT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, status()); | |
561 EXPECT_TRUE(change_observer()->HasNoChange()); | 557 EXPECT_TRUE(change_observer()->HasNoChange()); |
562 } | 558 } |
563 | 559 |
564 TEST_F(FileSystemOperationImplTest, TestCopyFailureDestParentDoesntExist) { | 560 TEST_F(FileSystemOperationImplTest, TestCopyFailureDestParentDoesntExist) { |
565 // Dest. parent path does not exist. | 561 // Dest. parent path does not exist. |
566 FileSystemURL src_dir(CreateDirectory("src")); | 562 FileSystemURL src_dir(CreateDirectory("src")); |
567 | 563 |
568 operation_runner()->Copy(src_dir, URLForPath("nonexistent/dest"), | 564 operation_runner()->Copy(src_dir, URLForPath("nonexistent/dest"), |
569 FileSystemOperation::OPTION_NONE, | 565 FileSystemOperation::OPTION_NONE, |
570 FileSystemOperationRunner::CopyProgressCallback(), | 566 FileSystemOperationRunner::CopyProgressCallback(), |
(...skipping 30 matching lines...) Expand all Loading... |
601 FileSystemURL src_file(CreateFile("src")); | 597 FileSystemURL src_file(CreateFile("src")); |
602 FileSystemURL dest_file(CreateFile("dest")); | 598 FileSystemURL dest_file(CreateFile("dest")); |
603 | 599 |
604 operation_runner()->Copy(src_file, dest_file, | 600 operation_runner()->Copy(src_file, dest_file, |
605 FileSystemOperation::OPTION_NONE, | 601 FileSystemOperation::OPTION_NONE, |
606 FileSystemOperationRunner::CopyProgressCallback(), | 602 FileSystemOperationRunner::CopyProgressCallback(), |
607 RecordStatusCallback()); | 603 RecordStatusCallback()); |
608 base::RunLoop().RunUntilIdle(); | 604 base::RunLoop().RunUntilIdle(); |
609 EXPECT_EQ(base::File::FILE_OK, status()); | 605 EXPECT_EQ(base::File::FILE_OK, status()); |
610 EXPECT_TRUE(FileExists("dest")); | 606 EXPECT_TRUE(FileExists("dest")); |
611 EXPECT_EQ(4, quota_manager_proxy()->notify_storage_accessed_count()); | 607 EXPECT_EQ(2, quota_manager_proxy()->notify_storage_accessed_count()); |
612 | 608 |
| 609 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); |
613 EXPECT_TRUE(change_observer()->HasNoChange()); | 610 EXPECT_TRUE(change_observer()->HasNoChange()); |
614 } | 611 } |
615 | 612 |
616 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcFileAndNew) { | 613 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcFileAndNew) { |
617 FileSystemURL src_file(CreateFile("src")); | 614 FileSystemURL src_file(CreateFile("src")); |
618 | 615 |
619 operation_runner()->Copy(src_file, URLForPath("new"), | 616 operation_runner()->Copy(src_file, URLForPath("new"), |
620 FileSystemOperation::OPTION_NONE, | 617 FileSystemOperation::OPTION_NONE, |
621 FileSystemOperationRunner::CopyProgressCallback(), | 618 FileSystemOperationRunner::CopyProgressCallback(), |
622 RecordStatusCallback()); | 619 RecordStatusCallback()); |
623 base::RunLoop().RunUntilIdle(); | 620 base::RunLoop().RunUntilIdle(); |
624 EXPECT_EQ(base::File::FILE_OK, status()); | 621 EXPECT_EQ(base::File::FILE_OK, status()); |
625 EXPECT_TRUE(FileExists("new")); | 622 EXPECT_TRUE(FileExists("new")); |
626 EXPECT_EQ(4, quota_manager_proxy()->notify_storage_accessed_count()); | 623 EXPECT_EQ(2, quota_manager_proxy()->notify_storage_accessed_count()); |
627 | 624 |
628 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); | 625 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_from_count()); |
629 EXPECT_TRUE(change_observer()->HasNoChange()); | 626 EXPECT_TRUE(change_observer()->HasNoChange()); |
630 } | 627 } |
631 | 628 |
632 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcDirAndOverwrite) { | 629 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcDirAndOverwrite) { |
633 FileSystemURL src_dir(CreateDirectory("src")); | 630 FileSystemURL src_dir(CreateDirectory("src")); |
634 FileSystemURL dest_dir(CreateDirectory("dest")); | 631 FileSystemURL dest_dir(CreateDirectory("dest")); |
635 | 632 |
636 operation_runner()->Copy(src_dir, dest_dir, | 633 operation_runner()->Copy(src_dir, dest_dir, |
637 FileSystemOperation::OPTION_NONE, | 634 FileSystemOperation::OPTION_NONE, |
638 FileSystemOperationRunner::CopyProgressCallback(), | 635 FileSystemOperationRunner::CopyProgressCallback(), |
639 RecordStatusCallback()); | 636 RecordStatusCallback()); |
640 base::RunLoop().RunUntilIdle(); | 637 base::RunLoop().RunUntilIdle(); |
641 EXPECT_EQ(base::File::FILE_OK, status()); | 638 EXPECT_EQ(base::File::FILE_OK, status()); |
642 | 639 |
643 // Make sure we've overwritten but not copied the source under the |dest_dir|. | 640 // Make sure we've overwritten but not copied the source under the |dest_dir|. |
644 EXPECT_TRUE(DirectoryExists("dest")); | 641 EXPECT_TRUE(DirectoryExists("dest")); |
645 EXPECT_FALSE(DirectoryExists("dest/src")); | 642 EXPECT_FALSE(DirectoryExists("dest/src")); |
646 EXPECT_GE(quota_manager_proxy()->notify_storage_accessed_count(), 3); | 643 EXPECT_GE(quota_manager_proxy()->notify_storage_accessed_count(), 3); |
647 | 644 |
| 645 EXPECT_EQ(1, change_observer()->get_and_reset_remove_directory_count()); |
648 EXPECT_EQ(1, change_observer()->get_and_reset_create_directory_count()); | 646 EXPECT_EQ(1, change_observer()->get_and_reset_create_directory_count()); |
649 EXPECT_EQ(1, change_observer()->get_and_reset_remove_directory_count()); | |
650 EXPECT_TRUE(change_observer()->HasNoChange()); | 647 EXPECT_TRUE(change_observer()->HasNoChange()); |
651 } | 648 } |
652 | 649 |
653 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcDirAndNew) { | 650 TEST_F(FileSystemOperationImplTest, TestCopySuccessSrcDirAndNew) { |
654 FileSystemURL src_dir(CreateDirectory("src")); | 651 FileSystemURL src_dir(CreateDirectory("src")); |
655 FileSystemURL dest_dir_new(URLForPath("dest")); | 652 FileSystemURL dest_dir_new(URLForPath("dest")); |
656 | 653 |
657 operation_runner()->Copy(src_dir, dest_dir_new, | 654 operation_runner()->Copy(src_dir, dest_dir_new, |
658 FileSystemOperation::OPTION_NONE, | 655 FileSystemOperation::OPTION_NONE, |
659 FileSystemOperationRunner::CopyProgressCallback(), | 656 FileSystemOperationRunner::CopyProgressCallback(), |
(...skipping 20 matching lines...) Expand all Loading... |
680 RecordStatusCallback()); | 677 RecordStatusCallback()); |
681 base::RunLoop().RunUntilIdle(); | 678 base::RunLoop().RunUntilIdle(); |
682 | 679 |
683 EXPECT_EQ(base::File::FILE_OK, status()); | 680 EXPECT_EQ(base::File::FILE_OK, status()); |
684 EXPECT_TRUE(DirectoryExists("dest/dir")); | 681 EXPECT_TRUE(DirectoryExists("dest/dir")); |
685 EXPECT_TRUE(FileExists("dest/dir/sub")); | 682 EXPECT_TRUE(FileExists("dest/dir/sub")); |
686 | 683 |
687 // For recursive copy we may record multiple read access. | 684 // For recursive copy we may record multiple read access. |
688 EXPECT_GE(quota_manager_proxy()->notify_storage_accessed_count(), 1); | 685 EXPECT_GE(quota_manager_proxy()->notify_storage_accessed_count(), 1); |
689 | 686 |
690 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); | |
691 EXPECT_EQ(2, change_observer()->get_and_reset_create_directory_count()); | 687 EXPECT_EQ(2, change_observer()->get_and_reset_create_directory_count()); |
692 EXPECT_EQ(1, change_observer()->get_and_reset_remove_directory_count()); | 688 EXPECT_EQ(1, change_observer()->get_and_reset_remove_directory_count()); |
| 689 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_from_count()); |
693 EXPECT_TRUE(change_observer()->HasNoChange()); | 690 EXPECT_TRUE(change_observer()->HasNoChange()); |
694 } | 691 } |
695 | 692 |
696 TEST_F(FileSystemOperationImplTest, TestCopySuccessSamePath) { | 693 TEST_F(FileSystemOperationImplTest, TestCopySuccessSamePath) { |
697 FileSystemURL src_dir(CreateDirectory("src")); | 694 FileSystemURL src_dir(CreateDirectory("src")); |
698 CreateDirectory("src/dir"); | 695 CreateDirectory("src/dir"); |
699 CreateFile("src/dir/sub"); | 696 CreateFile("src/dir/sub"); |
700 | 697 |
701 operation_runner()->Copy(src_dir, src_dir, | 698 operation_runner()->Copy(src_dir, src_dir, |
702 FileSystemOperation::OPTION_NONE, | 699 FileSystemOperation::OPTION_NONE, |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1284 base::RunLoop().RunUntilIdle(); | 1281 base::RunLoop().RunUntilIdle(); |
1285 | 1282 |
1286 expected_usage += grandchild_file_size + grandchild_path_cost; | 1283 expected_usage += grandchild_file_size + grandchild_path_cost; |
1287 usage = GetUsage(); | 1284 usage = GetUsage(); |
1288 EXPECT_EQ(2 * child_file_size + 3 * grandchild_file_size, | 1285 EXPECT_EQ(2 * child_file_size + 3 * grandchild_file_size, |
1289 GetDataSizeOnDisk()); | 1286 GetDataSizeOnDisk()); |
1290 EXPECT_EQ(expected_usage, usage); | 1287 EXPECT_EQ(expected_usage, usage); |
1291 } | 1288 } |
1292 | 1289 |
1293 } // namespace content | 1290 } // namespace content |
OLD | NEW |