| 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 <map> | 5 #include <map> | 
| 6 #include <queue> | 6 #include <queue> | 
| 7 | 7 | 
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" | 
| (...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 711         } | 711         } | 
| 712       } | 712       } | 
| 713     } | 713     } | 
| 714   } | 714   } | 
| 715 } | 715 } | 
| 716 | 716 | 
| 717 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelper) { | 717 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelper) { | 
| 718   base::ScopedTempDir temp_dir; | 718   base::ScopedTempDir temp_dir; | 
| 719   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 719   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 
| 720   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 720   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 
|  | 721   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); | 
| 721   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 722   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 
| 722   base::WriteFile(source_path, kTestData, | 723   base::WriteFile(source_path, kTestData, | 
| 723                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 724                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 
| 724 | 725 | 
| 725   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); |  | 
| 726   // LocalFileWriter requires the file exists. So create an empty file here. |  | 
| 727   base::WriteFile(dest_path, "", 0); |  | 
| 728 |  | 
| 729   base::MessageLoopForIO message_loop; | 726   base::MessageLoopForIO message_loop; | 
| 730   base::Thread file_thread("file_thread"); | 727   base::Thread file_thread("file_thread"); | 
| 731   ASSERT_TRUE(file_thread.Start()); | 728   ASSERT_TRUE(file_thread.Start()); | 
| 732   ScopedThreadStopper thread_stopper(&file_thread); | 729   ScopedThreadStopper thread_stopper(&file_thread); | 
| 733   ASSERT_TRUE(thread_stopper.is_valid()); | 730   ASSERT_TRUE(thread_stopper.is_valid()); | 
| 734 | 731 | 
| 735   scoped_refptr<base::MessageLoopProxy> task_runner = | 732   scoped_refptr<base::MessageLoopProxy> task_runner = | 
| 736       file_thread.message_loop_proxy(); | 733       file_thread.message_loop_proxy(); | 
| 737 | 734 | 
| 738   scoped_ptr<webkit_blob::FileStreamReader> reader( | 735   scoped_ptr<webkit_blob::FileStreamReader> reader( | 
| 739       webkit_blob::FileStreamReader::CreateForLocalFile( | 736       webkit_blob::FileStreamReader::CreateForLocalFile( | 
| 740           task_runner.get(), source_path, 0, base::Time())); | 737           task_runner.get(), source_path, 0, base::Time())); | 
| 741 | 738 | 
| 742   scoped_ptr<FileStreamWriter> writer( | 739   scoped_ptr<FileStreamWriter> writer(FileStreamWriter::CreateForLocalFile( | 
| 743       FileStreamWriter::CreateForLocalFile(task_runner.get(), dest_path, 0)); | 740       task_runner.get(), dest_path, 0, FileStreamWriter::CREATE_NEW_FILE)); | 
| 744 | 741 | 
| 745   std::vector<int64> progress; | 742   std::vector<int64> progress; | 
| 746   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 743   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 
| 747       reader.Pass(), writer.Pass(), | 744       reader.Pass(), writer.Pass(), | 
| 748       false,  // don't need flush | 745       false,  // don't need flush | 
| 749       10,  // buffer size | 746       10,  // buffer size | 
| 750       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 747       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 
| 751       base::TimeDelta());  // For testing, we need all the progress. | 748       base::TimeDelta());  // For testing, we need all the progress. | 
| 752 | 749 | 
| 753   base::File::Error error = base::File::FILE_ERROR_FAILED; | 750   base::File::Error error = base::File::FILE_ERROR_FAILED; | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 769 } | 766 } | 
| 770 | 767 | 
| 771 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelperWithFlush) { | 768 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelperWithFlush) { | 
| 772   // Testing the same configuration as StreamCopyHelper, but with |need_flush| | 769   // Testing the same configuration as StreamCopyHelper, but with |need_flush| | 
| 773   // parameter set to true. Since it is hard to test that the flush is indeed | 770   // parameter set to true. Since it is hard to test that the flush is indeed | 
| 774   // taking place, this test just only verifies that the file is correctly | 771   // taking place, this test just only verifies that the file is correctly | 
| 775   // written with or without the flag. | 772   // written with or without the flag. | 
| 776   base::ScopedTempDir temp_dir; | 773   base::ScopedTempDir temp_dir; | 
| 777   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 774   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 
| 778   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 775   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 
|  | 776   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); | 
| 779   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 777   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 
| 780   base::WriteFile(source_path, kTestData, | 778   base::WriteFile(source_path, kTestData, | 
| 781                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 779                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 
| 782 | 780 | 
| 783   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); |  | 
| 784   // LocalFileWriter requires the file exists. So create an empty file here. |  | 
| 785   base::WriteFile(dest_path, "", 0); |  | 
| 786 | 781 | 
| 787   base::MessageLoopForIO message_loop; | 782   base::MessageLoopForIO message_loop; | 
| 788   base::Thread file_thread("file_thread"); | 783   base::Thread file_thread("file_thread"); | 
| 789   ASSERT_TRUE(file_thread.Start()); | 784   ASSERT_TRUE(file_thread.Start()); | 
| 790   ScopedThreadStopper thread_stopper(&file_thread); | 785   ScopedThreadStopper thread_stopper(&file_thread); | 
| 791   ASSERT_TRUE(thread_stopper.is_valid()); | 786   ASSERT_TRUE(thread_stopper.is_valid()); | 
| 792 | 787 | 
| 793   scoped_refptr<base::MessageLoopProxy> task_runner = | 788   scoped_refptr<base::MessageLoopProxy> task_runner = | 
| 794       file_thread.message_loop_proxy(); | 789       file_thread.message_loop_proxy(); | 
| 795 | 790 | 
| 796   scoped_ptr<webkit_blob::FileStreamReader> reader( | 791   scoped_ptr<webkit_blob::FileStreamReader> reader( | 
| 797       webkit_blob::FileStreamReader::CreateForLocalFile( | 792       webkit_blob::FileStreamReader::CreateForLocalFile( | 
| 798           task_runner.get(), source_path, 0, base::Time())); | 793           task_runner.get(), source_path, 0, base::Time())); | 
| 799 | 794 | 
| 800   scoped_ptr<FileStreamWriter> writer( | 795   scoped_ptr<FileStreamWriter> writer(FileStreamWriter::CreateForLocalFile( | 
| 801       FileStreamWriter::CreateForLocalFile(task_runner.get(), dest_path, 0)); | 796       task_runner.get(), dest_path, 0, FileStreamWriter::CREATE_NEW_FILE)); | 
| 802 | 797 | 
| 803   std::vector<int64> progress; | 798   std::vector<int64> progress; | 
| 804   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 799   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 
| 805       reader.Pass(), writer.Pass(), | 800       reader.Pass(), writer.Pass(), | 
| 806       true,  // need flush | 801       true,  // need flush | 
| 807       10,  // buffer size | 802       10,  // buffer size | 
| 808       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 803       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 
| 809       base::TimeDelta());  // For testing, we need all the progress. | 804       base::TimeDelta());  // For testing, we need all the progress. | 
| 810 | 805 | 
| 811   base::File::Error error = base::File::FILE_ERROR_FAILED; | 806   base::File::Error error = base::File::FILE_ERROR_FAILED; | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 823 | 818 | 
| 824   std::string content; | 819   std::string content; | 
| 825   ASSERT_TRUE(base::ReadFileToString(dest_path, &content)); | 820   ASSERT_TRUE(base::ReadFileToString(dest_path, &content)); | 
| 826   EXPECT_EQ(kTestData, content); | 821   EXPECT_EQ(kTestData, content); | 
| 827 } | 822 } | 
| 828 | 823 | 
| 829 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelper_Cancel) { | 824 TEST(LocalFileSystemCopyOrMoveOperationTest, StreamCopyHelper_Cancel) { | 
| 830   base::ScopedTempDir temp_dir; | 825   base::ScopedTempDir temp_dir; | 
| 831   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 826   ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 
| 832   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 827   base::FilePath source_path = temp_dir.path().AppendASCII("source"); | 
|  | 828   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); | 
| 833   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 829   const char kTestData[] = "abcdefghijklmnopqrstuvwxyz0123456789"; | 
| 834   base::WriteFile(source_path, kTestData, | 830   base::WriteFile(source_path, kTestData, | 
| 835                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 831                   arraysize(kTestData) - 1);  // Exclude trailing '\0'. | 
| 836 | 832 | 
| 837   base::FilePath dest_path = temp_dir.path().AppendASCII("dest"); |  | 
| 838   // LocalFileWriter requires the file exists. So create an empty file here. |  | 
| 839   base::WriteFile(dest_path, "", 0); |  | 
| 840 |  | 
| 841   base::MessageLoopForIO message_loop; | 833   base::MessageLoopForIO message_loop; | 
| 842   base::Thread file_thread("file_thread"); | 834   base::Thread file_thread("file_thread"); | 
| 843   ASSERT_TRUE(file_thread.Start()); | 835   ASSERT_TRUE(file_thread.Start()); | 
| 844   ScopedThreadStopper thread_stopper(&file_thread); | 836   ScopedThreadStopper thread_stopper(&file_thread); | 
| 845   ASSERT_TRUE(thread_stopper.is_valid()); | 837   ASSERT_TRUE(thread_stopper.is_valid()); | 
| 846 | 838 | 
| 847   scoped_refptr<base::MessageLoopProxy> task_runner = | 839   scoped_refptr<base::MessageLoopProxy> task_runner = | 
| 848       file_thread.message_loop_proxy(); | 840       file_thread.message_loop_proxy(); | 
| 849 | 841 | 
| 850   scoped_ptr<webkit_blob::FileStreamReader> reader( | 842   scoped_ptr<webkit_blob::FileStreamReader> reader( | 
| 851       webkit_blob::FileStreamReader::CreateForLocalFile( | 843       webkit_blob::FileStreamReader::CreateForLocalFile( | 
| 852           task_runner.get(), source_path, 0, base::Time())); | 844           task_runner.get(), source_path, 0, base::Time())); | 
| 853 | 845 | 
| 854   scoped_ptr<FileStreamWriter> writer( | 846   scoped_ptr<FileStreamWriter> writer(FileStreamWriter::CreateForLocalFile( | 
| 855       FileStreamWriter::CreateForLocalFile(task_runner.get(), dest_path, 0)); | 847       task_runner.get(), dest_path, 0, FileStreamWriter::CREATE_NEW_FILE)); | 
| 856 | 848 | 
| 857   std::vector<int64> progress; | 849   std::vector<int64> progress; | 
| 858   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 850   CopyOrMoveOperationDelegate::StreamCopyHelper helper( | 
| 859       reader.Pass(), writer.Pass(), | 851       reader.Pass(), writer.Pass(), | 
| 860       false,  // need_flush | 852       false,  // need_flush | 
| 861       10,  // buffer size | 853       10,  // buffer size | 
| 862       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 854       base::Bind(&RecordFileProgressCallback, base::Unretained(&progress)), | 
| 863       base::TimeDelta());  // For testing, we need all the progress. | 855       base::TimeDelta());  // For testing, we need all the progress. | 
| 864 | 856 | 
| 865   // Call Cancel() later. | 857   // Call Cancel() later. | 
| 866   base::MessageLoopProxy::current()->PostTask( | 858   base::MessageLoopProxy::current()->PostTask( | 
| 867       FROM_HERE, | 859       FROM_HERE, | 
| 868       base::Bind(&CopyOrMoveOperationDelegate::StreamCopyHelper::Cancel, | 860       base::Bind(&CopyOrMoveOperationDelegate::StreamCopyHelper::Cancel, | 
| 869                  base::Unretained(&helper))); | 861                  base::Unretained(&helper))); | 
| 870 | 862 | 
| 871   base::File::Error error = base::File::FILE_ERROR_FAILED; | 863   base::File::Error error = base::File::FILE_ERROR_FAILED; | 
| 872   base::RunLoop run_loop; | 864   base::RunLoop run_loop; | 
| 873   helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); | 865   helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); | 
| 874   run_loop.Run(); | 866   run_loop.Run(); | 
| 875 | 867 | 
| 876   EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); | 868   EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); | 
| 877 } | 869 } | 
| 878 | 870 | 
| 879 }  // namespace content | 871 }  // namespace content | 
| OLD | NEW | 
|---|