| 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" |
| 11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
| 12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 15 #include "content/public/test/async_file_test_helper.h" | 15 #include "content/public/test/async_file_test_helper.h" |
| 16 #include "content/public/test/test_file_system_backend.h" | 16 #include "content/public/test/test_file_system_backend.h" |
| 17 #include "content/public/test/test_file_system_context.h" | 17 #include "content/public/test/test_file_system_context.h" |
| 18 #include "content/test/test_file_set.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "webkit/browser/blob/file_stream_reader.h" | 20 #include "webkit/browser/blob/file_stream_reader.h" |
| 20 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" | 21 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" |
| 21 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h" | 22 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h" |
| 22 #include "webkit/browser/fileapi/file_stream_writer.h" | 23 #include "webkit/browser/fileapi/file_stream_writer.h" |
| 23 #include "webkit/browser/fileapi/file_system_backend.h" | 24 #include "webkit/browser/fileapi/file_system_backend.h" |
| 24 #include "webkit/browser/fileapi/file_system_context.h" | 25 #include "webkit/browser/fileapi/file_system_context.h" |
| 25 #include "webkit/browser/fileapi/file_system_operation.h" | 26 #include "webkit/browser/fileapi/file_system_operation.h" |
| 26 #include "webkit/browser/fileapi/file_system_url.h" | 27 #include "webkit/browser/fileapi/file_system_url.h" |
| 27 #include "webkit/browser/fileapi/test_file_set.h" | |
| 28 #include "webkit/browser/quota/mock_quota_manager.h" | 28 #include "webkit/browser/quota/mock_quota_manager.h" |
| 29 #include "webkit/browser/quota/mock_quota_manager_proxy.h" | 29 #include "webkit/browser/quota/mock_quota_manager_proxy.h" |
| 30 #include "webkit/browser/quota/quota_manager.h" | 30 #include "webkit/browser/quota/quota_manager.h" |
| 31 #include "webkit/common/fileapi/file_system_util.h" | 31 #include "webkit/common/fileapi/file_system_util.h" |
| 32 | 32 |
| 33 using content::AsyncFileTestHelper; | 33 using content::AsyncFileTestHelper; |
| 34 using fileapi::CopyOrMoveOperationDelegate; | 34 using fileapi::CopyOrMoveOperationDelegate; |
| 35 using fileapi::FileStreamWriter; | 35 using fileapi::FileStreamWriter; |
| 36 using fileapi::FileSystemOperation; | 36 using fileapi::FileSystemOperation; |
| 37 using fileapi::FileSystemType; | 37 using fileapi::FileSystemType; |
| 38 using fileapi::FileSystemURL; | 38 using fileapi::FileSystemURL; |
| 39 using fileapi::test::TestCaseRecord; | |
| 40 | 39 |
| 41 namespace content { | 40 namespace content { |
| 42 | 41 |
| 43 typedef fileapi::FileSystemOperation::FileEntryList FileEntryList; | 42 typedef fileapi::FileSystemOperation::FileEntryList FileEntryList; |
| 44 | 43 |
| 45 namespace { | 44 namespace { |
| 46 | 45 |
| 47 void ExpectOk(const GURL& origin_url, | 46 void ExpectOk(const GURL& origin_url, |
| 48 const std::string& name, | 47 const std::string& name, |
| 49 base::File::Error error) { | 48 base::File::Error error) { |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 file_system_context_.get(), src, dest, progress_callback); | 274 file_system_context_.get(), src, dest, progress_callback); |
| 276 } | 275 } |
| 277 | 276 |
| 278 base::File::Error Move(const FileSystemURL& src, | 277 base::File::Error Move(const FileSystemURL& src, |
| 279 const FileSystemURL& dest) { | 278 const FileSystemURL& dest) { |
| 280 return AsyncFileTestHelper::Move(file_system_context_.get(), src, dest); | 279 return AsyncFileTestHelper::Move(file_system_context_.get(), src, dest); |
| 281 } | 280 } |
| 282 | 281 |
| 283 base::File::Error SetUpTestCaseFiles( | 282 base::File::Error SetUpTestCaseFiles( |
| 284 const FileSystemURL& root, | 283 const FileSystemURL& root, |
| 285 const TestCaseRecord* const test_cases, | 284 const FileSystemTestCaseRecord* const test_cases, |
| 286 size_t test_case_size) { | 285 size_t test_case_size) { |
| 287 base::File::Error result = base::File::FILE_ERROR_FAILED; | 286 base::File::Error result = base::File::FILE_ERROR_FAILED; |
| 288 for (size_t i = 0; i < test_case_size; ++i) { | 287 for (size_t i = 0; i < test_case_size; ++i) { |
| 289 const TestCaseRecord& test_case = test_cases[i]; | 288 const FileSystemTestCaseRecord& test_case = test_cases[i]; |
| 290 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( | 289 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( |
| 291 root.origin(), | 290 root.origin(), |
| 292 root.mount_type(), | 291 root.mount_type(), |
| 293 root.virtual_path().Append(test_case.path)); | 292 root.virtual_path().Append(test_case.path)); |
| 294 if (test_case.is_directory) | 293 if (test_case.is_directory) |
| 295 result = CreateDirectory(url); | 294 result = CreateDirectory(url); |
| 296 else | 295 else |
| 297 result = CreateFile(url, test_case.data_file_size); | 296 result = CreateFile(url, test_case.data_file_size); |
| 298 EXPECT_EQ(base::File::FILE_OK, result) << url.DebugString(); | 297 EXPECT_EQ(base::File::FILE_OK, result) << url.DebugString(); |
| 299 if (result != base::File::FILE_OK) | 298 if (result != base::File::FILE_OK) |
| 300 return result; | 299 return result; |
| 301 } | 300 } |
| 302 return result; | 301 return result; |
| 303 } | 302 } |
| 304 | 303 |
| 305 void VerifyTestCaseFiles( | 304 void VerifyTestCaseFiles( |
| 306 const FileSystemURL& root, | 305 const FileSystemURL& root, |
| 307 const TestCaseRecord* const test_cases, | 306 const FileSystemTestCaseRecord* const test_cases, |
| 308 size_t test_case_size) { | 307 size_t test_case_size) { |
| 309 std::map<base::FilePath, const TestCaseRecord*> test_case_map; | 308 std::map<base::FilePath, const FileSystemTestCaseRecord*> test_case_map; |
| 310 for (size_t i = 0; i < test_case_size; ++i) { | 309 for (size_t i = 0; i < test_case_size; ++i) { |
| 311 test_case_map[ | 310 test_case_map[ |
| 312 base::FilePath(test_cases[i].path).NormalizePathSeparators()] = | 311 base::FilePath(test_cases[i].path).NormalizePathSeparators()] = |
| 313 &test_cases[i]; | 312 &test_cases[i]; |
| 314 } | 313 } |
| 315 | 314 |
| 316 std::queue<FileSystemURL> directories; | 315 std::queue<FileSystemURL> directories; |
| 317 FileEntryList entries; | 316 FileEntryList entries; |
| 318 directories.push(root); | 317 directories.push(root); |
| 319 while (!directories.empty()) { | 318 while (!directories.empty()) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 333 EXPECT_TRUE(test_case_map[relative]->is_directory); | 332 EXPECT_TRUE(test_case_map[relative]->is_directory); |
| 334 directories.push(url); | 333 directories.push(url); |
| 335 } else { | 334 } else { |
| 336 EXPECT_FALSE(test_case_map[relative]->is_directory); | 335 EXPECT_FALSE(test_case_map[relative]->is_directory); |
| 337 EXPECT_TRUE(FileExists(url, test_case_map[relative]->data_file_size)); | 336 EXPECT_TRUE(FileExists(url, test_case_map[relative]->data_file_size)); |
| 338 } | 337 } |
| 339 test_case_map.erase(relative); | 338 test_case_map.erase(relative); |
| 340 } | 339 } |
| 341 } | 340 } |
| 342 EXPECT_TRUE(test_case_map.empty()); | 341 EXPECT_TRUE(test_case_map.empty()); |
| 343 std::map<base::FilePath, const TestCaseRecord*>::const_iterator it; | 342 std::map<base::FilePath, |
| 343 const FileSystemTestCaseRecord*>::const_iterator it; |
| 344 for (it = test_case_map.begin(); it != test_case_map.end(); ++it) { | 344 for (it = test_case_map.begin(); it != test_case_map.end(); ++it) { |
| 345 LOG(ERROR) << "Extra entry: " << it->first.LossyDisplayName(); | 345 LOG(ERROR) << "Extra entry: " << it->first.LossyDisplayName(); |
| 346 } | 346 } |
| 347 } | 347 } |
| 348 | 348 |
| 349 base::File::Error ReadDirectory(const FileSystemURL& url, | 349 base::File::Error ReadDirectory(const FileSystemURL& url, |
| 350 FileEntryList* entries) { | 350 FileEntryList* entries) { |
| 351 return AsyncFileTestHelper::ReadDirectory( | 351 return AsyncFileTestHelper::ReadDirectory( |
| 352 file_system_context_.get(), url, entries); | 352 file_system_context_.get(), url, entries); |
| 353 } | 353 } |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 | 522 |
| 523 FileSystemURL src = helper.SourceURL("a"); | 523 FileSystemURL src = helper.SourceURL("a"); |
| 524 FileSystemURL dest = helper.DestURL("b"); | 524 FileSystemURL dest = helper.DestURL("b"); |
| 525 int64 src_initial_usage = helper.GetSourceUsage(); | 525 int64 src_initial_usage = helper.GetSourceUsage(); |
| 526 int64 dest_initial_usage = helper.GetDestUsage(); | 526 int64 dest_initial_usage = helper.GetDestUsage(); |
| 527 | 527 |
| 528 // Set up a source directory. | 528 // Set up a source directory. |
| 529 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 529 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
| 530 ASSERT_EQ(base::File::FILE_OK, | 530 ASSERT_EQ(base::File::FILE_OK, |
| 531 helper.SetUpTestCaseFiles(src, | 531 helper.SetUpTestCaseFiles(src, |
| 532 fileapi::test::kRegularTestCases, | 532 kRegularFileSystemTestCases, |
| 533 fileapi::test::kRegularTestCaseSize)); | 533 kRegularFileSystemTestCaseSize)); |
| 534 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; | 534 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; |
| 535 | 535 |
| 536 // Copy it. | 536 // Copy it. |
| 537 ASSERT_EQ(base::File::FILE_OK, | 537 ASSERT_EQ(base::File::FILE_OK, |
| 538 helper.CopyWithProgress( | 538 helper.CopyWithProgress( |
| 539 src, dest, | 539 src, dest, |
| 540 AsyncFileTestHelper::CopyProgressCallback())); | 540 AsyncFileTestHelper::CopyProgressCallback())); |
| 541 | 541 |
| 542 // Verify. | 542 // Verify. |
| 543 ASSERT_TRUE(helper.DirectoryExists(src)); | 543 ASSERT_TRUE(helper.DirectoryExists(src)); |
| 544 ASSERT_TRUE(helper.DirectoryExists(dest)); | 544 ASSERT_TRUE(helper.DirectoryExists(dest)); |
| 545 | 545 |
| 546 helper.VerifyTestCaseFiles(dest, | 546 helper.VerifyTestCaseFiles(dest, |
| 547 fileapi::test::kRegularTestCases, | 547 kRegularFileSystemTestCases, |
| 548 fileapi::test::kRegularTestCaseSize); | 548 kRegularFileSystemTestCaseSize); |
| 549 | 549 |
| 550 int64 src_new_usage = helper.GetSourceUsage(); | 550 int64 src_new_usage = helper.GetSourceUsage(); |
| 551 ASSERT_EQ(src_initial_usage + src_increase, src_new_usage); | 551 ASSERT_EQ(src_initial_usage + src_increase, src_new_usage); |
| 552 | 552 |
| 553 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; | 553 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; |
| 554 ASSERT_EQ(src_increase, dest_increase); | 554 ASSERT_EQ(src_increase, dest_increase); |
| 555 } | 555 } |
| 556 | 556 |
| 557 TEST(LocalFileSystemCopyOrMoveOperationTest, MoveDirectory) { | 557 TEST(LocalFileSystemCopyOrMoveOperationTest, MoveDirectory) { |
| 558 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), | 558 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), |
| 559 fileapi::kFileSystemTypeTemporary, | 559 fileapi::kFileSystemTypeTemporary, |
| 560 fileapi::kFileSystemTypePersistent); | 560 fileapi::kFileSystemTypePersistent); |
| 561 helper.SetUp(); | 561 helper.SetUp(); |
| 562 | 562 |
| 563 FileSystemURL src = helper.SourceURL("a"); | 563 FileSystemURL src = helper.SourceURL("a"); |
| 564 FileSystemURL dest = helper.DestURL("b"); | 564 FileSystemURL dest = helper.DestURL("b"); |
| 565 int64 src_initial_usage = helper.GetSourceUsage(); | 565 int64 src_initial_usage = helper.GetSourceUsage(); |
| 566 int64 dest_initial_usage = helper.GetDestUsage(); | 566 int64 dest_initial_usage = helper.GetDestUsage(); |
| 567 | 567 |
| 568 // Set up a source directory. | 568 // Set up a source directory. |
| 569 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 569 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
| 570 ASSERT_EQ(base::File::FILE_OK, | 570 ASSERT_EQ(base::File::FILE_OK, |
| 571 helper.SetUpTestCaseFiles(src, | 571 helper.SetUpTestCaseFiles(src, |
| 572 fileapi::test::kRegularTestCases, | 572 kRegularFileSystemTestCases, |
| 573 fileapi::test::kRegularTestCaseSize)); | 573 kRegularFileSystemTestCaseSize)); |
| 574 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; | 574 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; |
| 575 | 575 |
| 576 // Move it. | 576 // Move it. |
| 577 ASSERT_EQ(base::File::FILE_OK, helper.Move(src, dest)); | 577 ASSERT_EQ(base::File::FILE_OK, helper.Move(src, dest)); |
| 578 | 578 |
| 579 // Verify. | 579 // Verify. |
| 580 ASSERT_FALSE(helper.DirectoryExists(src)); | 580 ASSERT_FALSE(helper.DirectoryExists(src)); |
| 581 ASSERT_TRUE(helper.DirectoryExists(dest)); | 581 ASSERT_TRUE(helper.DirectoryExists(dest)); |
| 582 | 582 |
| 583 helper.VerifyTestCaseFiles(dest, | 583 helper.VerifyTestCaseFiles(dest, |
| 584 fileapi::test::kRegularTestCases, | 584 kRegularFileSystemTestCases, |
| 585 fileapi::test::kRegularTestCaseSize); | 585 kRegularFileSystemTestCaseSize); |
| 586 | 586 |
| 587 int64 src_new_usage = helper.GetSourceUsage(); | 587 int64 src_new_usage = helper.GetSourceUsage(); |
| 588 ASSERT_EQ(src_initial_usage, src_new_usage); | 588 ASSERT_EQ(src_initial_usage, src_new_usage); |
| 589 | 589 |
| 590 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; | 590 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; |
| 591 ASSERT_EQ(src_increase, dest_increase); | 591 ASSERT_EQ(src_increase, dest_increase); |
| 592 } | 592 } |
| 593 | 593 |
| 594 TEST(LocalFileSystemCopyOrMoveOperationTest, | 594 TEST(LocalFileSystemCopyOrMoveOperationTest, |
| 595 MoveDirectoryFailPostWriteValidation) { | 595 MoveDirectoryFailPostWriteValidation) { |
| 596 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), | 596 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), |
| 597 fileapi::kFileSystemTypeTemporary, | 597 fileapi::kFileSystemTypeTemporary, |
| 598 fileapi::kFileSystemTypeTest); | 598 fileapi::kFileSystemTypeTest); |
| 599 helper.SetUp(); | 599 helper.SetUp(); |
| 600 | 600 |
| 601 FileSystemURL src = helper.SourceURL("a"); | 601 FileSystemURL src = helper.SourceURL("a"); |
| 602 FileSystemURL dest = helper.DestURL("b"); | 602 FileSystemURL dest = helper.DestURL("b"); |
| 603 | 603 |
| 604 // Set up a source directory. | 604 // Set up a source directory. |
| 605 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 605 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
| 606 ASSERT_EQ(base::File::FILE_OK, | 606 ASSERT_EQ(base::File::FILE_OK, |
| 607 helper.SetUpTestCaseFiles(src, | 607 helper.SetUpTestCaseFiles(src, |
| 608 fileapi::test::kRegularTestCases, | 608 kRegularFileSystemTestCases, |
| 609 fileapi::test::kRegularTestCaseSize)); | 609 kRegularFileSystemTestCaseSize)); |
| 610 | 610 |
| 611 // Move it. | 611 // Move it. |
| 612 helper.Move(src, dest); | 612 helper.Move(src, dest); |
| 613 | 613 |
| 614 // Verify. | 614 // Verify. |
| 615 ASSERT_TRUE(helper.DirectoryExists(src)); | 615 ASSERT_TRUE(helper.DirectoryExists(src)); |
| 616 ASSERT_TRUE(helper.DirectoryExists(dest)); | 616 ASSERT_TRUE(helper.DirectoryExists(dest)); |
| 617 | 617 |
| 618 TestCaseRecord kMoveDirResultCases[] = { | 618 FileSystemTestCaseRecord kMoveDirResultCases[] = { |
| 619 {false, FILE_PATH_LITERAL("file 0"), 38}, | 619 {false, FILE_PATH_LITERAL("file 0"), 38}, |
| 620 {false, FILE_PATH_LITERAL("file 3"), 0}, | 620 {false, FILE_PATH_LITERAL("file 3"), 0}, |
| 621 }; | 621 }; |
| 622 | 622 |
| 623 helper.VerifyTestCaseFiles(dest, | 623 helper.VerifyTestCaseFiles(dest, |
| 624 kMoveDirResultCases, | 624 kMoveDirResultCases, |
| 625 arraysize(kMoveDirResultCases)); | 625 arraysize(kMoveDirResultCases)); |
| 626 } | 626 } |
| 627 | 627 |
| 628 TEST(LocalFileSystemCopyOrMoveOperationTest, CopySingleFileNoValidator) { | 628 TEST(LocalFileSystemCopyOrMoveOperationTest, CopySingleFileNoValidator) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 649 fileapi::kFileSystemTypePersistent); | 649 fileapi::kFileSystemTypePersistent); |
| 650 helper.SetUp(); | 650 helper.SetUp(); |
| 651 | 651 |
| 652 FileSystemURL src = helper.SourceURL("a"); | 652 FileSystemURL src = helper.SourceURL("a"); |
| 653 FileSystemURL dest = helper.DestURL("b"); | 653 FileSystemURL dest = helper.DestURL("b"); |
| 654 | 654 |
| 655 // Set up a source directory. | 655 // Set up a source directory. |
| 656 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 656 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
| 657 ASSERT_EQ(base::File::FILE_OK, | 657 ASSERT_EQ(base::File::FILE_OK, |
| 658 helper.SetUpTestCaseFiles(src, | 658 helper.SetUpTestCaseFiles(src, |
| 659 fileapi::test::kRegularTestCases, | 659 kRegularFileSystemTestCases, |
| 660 fileapi::test::kRegularTestCaseSize)); | 660 kRegularFileSystemTestCaseSize)); |
| 661 | 661 |
| 662 std::vector<ProgressRecord> records; | 662 std::vector<ProgressRecord> records; |
| 663 ASSERT_EQ(base::File::FILE_OK, | 663 ASSERT_EQ(base::File::FILE_OK, |
| 664 helper.CopyWithProgress(src, dest, | 664 helper.CopyWithProgress(src, dest, |
| 665 base::Bind(&RecordProgressCallback, | 665 base::Bind(&RecordProgressCallback, |
| 666 base::Unretained(&records)))); | 666 base::Unretained(&records)))); |
| 667 | 667 |
| 668 // Verify progress callback. | 668 // Verify progress callback. |
| 669 for (size_t i = 0; i < fileapi::test::kRegularTestCaseSize; ++i) { | 669 for (size_t i = 0; i < kRegularFileSystemTestCaseSize; ++i) { |
| 670 const TestCaseRecord& test_case = fileapi::test::kRegularTestCases[i]; | 670 const FileSystemTestCaseRecord& test_case = kRegularFileSystemTestCases[i]; |
| 671 | 671 |
| 672 FileSystemURL src_url = helper.SourceURL( | 672 FileSystemURL src_url = helper.SourceURL( |
| 673 std::string("a/") + base::FilePath(test_case.path).AsUTF8Unsafe()); | 673 std::string("a/") + base::FilePath(test_case.path).AsUTF8Unsafe()); |
| 674 FileSystemURL dest_url = helper.DestURL( | 674 FileSystemURL dest_url = helper.DestURL( |
| 675 std::string("b/") + base::FilePath(test_case.path).AsUTF8Unsafe()); | 675 std::string("b/") + base::FilePath(test_case.path).AsUTF8Unsafe()); |
| 676 | 676 |
| 677 // Find the first and last progress record. | 677 // Find the first and last progress record. |
| 678 size_t begin_index = records.size(); | 678 size_t begin_index = records.size(); |
| 679 size_t end_index = records.size(); | 679 size_t end_index = records.size(); |
| 680 for (size_t j = 0; j < records.size(); ++j) { | 680 for (size_t j = 0; j < records.size(); ++j) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 870 | 870 |
| 871 base::File::Error error = base::File::FILE_ERROR_FAILED; | 871 base::File::Error error = base::File::FILE_ERROR_FAILED; |
| 872 base::RunLoop run_loop; | 872 base::RunLoop run_loop; |
| 873 helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); | 873 helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); |
| 874 run_loop.Run(); | 874 run_loop.Run(); |
| 875 | 875 |
| 876 EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); | 876 EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); |
| 877 } | 877 } |
| 878 | 878 |
| 879 } // namespace content | 879 } // namespace content |
| OLD | NEW |