| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/files/file_path_watcher.h" | 5 #include "base/files/file_path_watcher.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <aclapi.h> | 9 #include <aclapi.h> |
| 10 #elif defined(OS_POSIX) | 10 #elif defined(OS_POSIX) |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 } | 267 } |
| 268 | 268 |
| 269 TEST_F(FilePathWatcherTest, DeletedFile) { | 269 TEST_F(FilePathWatcherTest, DeletedFile) { |
| 270 ASSERT_TRUE(WriteFile(test_file(), "content")); | 270 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 271 | 271 |
| 272 FilePathWatcher watcher; | 272 FilePathWatcher watcher; |
| 273 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 273 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 274 ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false)); | 274 ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false)); |
| 275 | 275 |
| 276 // Now make sure we get notified if the file is deleted. | 276 // Now make sure we get notified if the file is deleted. |
| 277 base::Delete(test_file(), false); | 277 base::DeleteFile(test_file(), false); |
| 278 ASSERT_TRUE(WaitForEvents()); | 278 ASSERT_TRUE(WaitForEvents()); |
| 279 DeleteDelegateOnFileThread(delegate.release()); | 279 DeleteDelegateOnFileThread(delegate.release()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 // Used by the DeleteDuringNotify test below. | 282 // Used by the DeleteDuringNotify test below. |
| 283 // Deletes the FilePathWatcher when it's notified. | 283 // Deletes the FilePathWatcher when it's notified. |
| 284 class Deleter : public TestDelegateBase { | 284 class Deleter : public TestDelegateBase { |
| 285 public: | 285 public: |
| 286 Deleter(FilePathWatcher* watcher, MessageLoop* loop) | 286 Deleter(FilePathWatcher* watcher, MessageLoop* loop) |
| 287 : watcher_(watcher), | 287 : watcher_(watcher), |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 | 356 |
| 357 ASSERT_TRUE(WriteFile(file, "content")); | 357 ASSERT_TRUE(WriteFile(file, "content")); |
| 358 | 358 |
| 359 VLOG(1) << "Waiting for file creation"; | 359 VLOG(1) << "Waiting for file creation"; |
| 360 ASSERT_TRUE(WaitForEvents()); | 360 ASSERT_TRUE(WaitForEvents()); |
| 361 | 361 |
| 362 ASSERT_TRUE(WriteFile(file, "content v2")); | 362 ASSERT_TRUE(WriteFile(file, "content v2")); |
| 363 VLOG(1) << "Waiting for file change"; | 363 VLOG(1) << "Waiting for file change"; |
| 364 ASSERT_TRUE(WaitForEvents()); | 364 ASSERT_TRUE(WaitForEvents()); |
| 365 | 365 |
| 366 ASSERT_TRUE(base::Delete(file, false)); | 366 ASSERT_TRUE(base::DeleteFile(file, false)); |
| 367 VLOG(1) << "Waiting for file deletion"; | 367 VLOG(1) << "Waiting for file deletion"; |
| 368 ASSERT_TRUE(WaitForEvents()); | 368 ASSERT_TRUE(WaitForEvents()); |
| 369 DeleteDelegateOnFileThread(delegate.release()); | 369 DeleteDelegateOnFileThread(delegate.release()); |
| 370 } | 370 } |
| 371 | 371 |
| 372 // Exercises watch reconfiguration for the case that directories on the path | 372 // Exercises watch reconfiguration for the case that directories on the path |
| 373 // are rapidly created. | 373 // are rapidly created. |
| 374 TEST_F(FilePathWatcherTest, DirectoryChain) { | 374 TEST_F(FilePathWatcherTest, DirectoryChain) { |
| 375 FilePath path(temp_dir_.path()); | 375 FilePath path(temp_dir_.path()); |
| 376 std::vector<std::string> dir_names; | 376 std::vector<std::string> dir_names; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 #endif | 408 #endif |
| 409 TEST_F(FilePathWatcherTest, DisappearingDirectory) { | 409 TEST_F(FilePathWatcherTest, DisappearingDirectory) { |
| 410 FilePathWatcher watcher; | 410 FilePathWatcher watcher; |
| 411 FilePath dir(temp_dir_.path().AppendASCII("dir")); | 411 FilePath dir(temp_dir_.path().AppendASCII("dir")); |
| 412 FilePath file(dir.AppendASCII("file")); | 412 FilePath file(dir.AppendASCII("file")); |
| 413 ASSERT_TRUE(file_util::CreateDirectory(dir)); | 413 ASSERT_TRUE(file_util::CreateDirectory(dir)); |
| 414 ASSERT_TRUE(WriteFile(file, "content")); | 414 ASSERT_TRUE(WriteFile(file, "content")); |
| 415 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 415 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 416 ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false)); | 416 ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false)); |
| 417 | 417 |
| 418 ASSERT_TRUE(base::Delete(dir, true)); | 418 ASSERT_TRUE(base::DeleteFile(dir, true)); |
| 419 ASSERT_TRUE(WaitForEvents()); | 419 ASSERT_TRUE(WaitForEvents()); |
| 420 DeleteDelegateOnFileThread(delegate.release()); | 420 DeleteDelegateOnFileThread(delegate.release()); |
| 421 } | 421 } |
| 422 | 422 |
| 423 // Tests that a file that is deleted and reappears is tracked correctly. | 423 // Tests that a file that is deleted and reappears is tracked correctly. |
| 424 TEST_F(FilePathWatcherTest, DeleteAndRecreate) { | 424 TEST_F(FilePathWatcherTest, DeleteAndRecreate) { |
| 425 ASSERT_TRUE(WriteFile(test_file(), "content")); | 425 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 426 FilePathWatcher watcher; | 426 FilePathWatcher watcher; |
| 427 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 427 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 428 ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false)); | 428 ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false)); |
| 429 | 429 |
| 430 ASSERT_TRUE(base::Delete(test_file(), false)); | 430 ASSERT_TRUE(base::DeleteFile(test_file(), false)); |
| 431 VLOG(1) << "Waiting for file deletion"; | 431 VLOG(1) << "Waiting for file deletion"; |
| 432 ASSERT_TRUE(WaitForEvents()); | 432 ASSERT_TRUE(WaitForEvents()); |
| 433 | 433 |
| 434 ASSERT_TRUE(WriteFile(test_file(), "content")); | 434 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 435 VLOG(1) << "Waiting for file creation"; | 435 VLOG(1) << "Waiting for file creation"; |
| 436 ASSERT_TRUE(WaitForEvents()); | 436 ASSERT_TRUE(WaitForEvents()); |
| 437 DeleteDelegateOnFileThread(delegate.release()); | 437 DeleteDelegateOnFileThread(delegate.release()); |
| 438 } | 438 } |
| 439 | 439 |
| 440 TEST_F(FilePathWatcherTest, WatchDirectory) { | 440 TEST_F(FilePathWatcherTest, WatchDirectory) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 453 VLOG(1) << "Waiting for file1 creation"; | 453 VLOG(1) << "Waiting for file1 creation"; |
| 454 ASSERT_TRUE(WaitForEvents()); | 454 ASSERT_TRUE(WaitForEvents()); |
| 455 | 455 |
| 456 #if !defined(OS_MACOSX) | 456 #if !defined(OS_MACOSX) |
| 457 // Mac implementation does not detect files modified in a directory. | 457 // Mac implementation does not detect files modified in a directory. |
| 458 ASSERT_TRUE(WriteFile(file1, "content v2")); | 458 ASSERT_TRUE(WriteFile(file1, "content v2")); |
| 459 VLOG(1) << "Waiting for file1 modification"; | 459 VLOG(1) << "Waiting for file1 modification"; |
| 460 ASSERT_TRUE(WaitForEvents()); | 460 ASSERT_TRUE(WaitForEvents()); |
| 461 #endif // !OS_MACOSX | 461 #endif // !OS_MACOSX |
| 462 | 462 |
| 463 ASSERT_TRUE(base::Delete(file1, false)); | 463 ASSERT_TRUE(base::DeleteFile(file1, false)); |
| 464 VLOG(1) << "Waiting for file1 deletion"; | 464 VLOG(1) << "Waiting for file1 deletion"; |
| 465 ASSERT_TRUE(WaitForEvents()); | 465 ASSERT_TRUE(WaitForEvents()); |
| 466 | 466 |
| 467 ASSERT_TRUE(WriteFile(file2, "content")); | 467 ASSERT_TRUE(WriteFile(file2, "content")); |
| 468 VLOG(1) << "Waiting for file2 creation"; | 468 VLOG(1) << "Waiting for file2 creation"; |
| 469 ASSERT_TRUE(WaitForEvents()); | 469 ASSERT_TRUE(WaitForEvents()); |
| 470 DeleteDelegateOnFileThread(delegate.release()); | 470 DeleteDelegateOnFileThread(delegate.release()); |
| 471 } | 471 } |
| 472 | 472 |
| 473 TEST_F(FilePathWatcherTest, MoveParent) { | 473 TEST_F(FilePathWatcherTest, MoveParent) { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 535 |
| 536 // Write into "$dir/subdir/subdir_child_dir/child_dir_file1". | 536 // Write into "$dir/subdir/subdir_child_dir/child_dir_file1". |
| 537 ASSERT_TRUE(WriteFile(child_dir_file1, "content")); | 537 ASSERT_TRUE(WriteFile(child_dir_file1, "content")); |
| 538 ASSERT_TRUE(WaitForEvents()); | 538 ASSERT_TRUE(WaitForEvents()); |
| 539 | 539 |
| 540 // Modify "$dir/subdir/subdir_child_dir/child_dir_file1" attributes. | 540 // Modify "$dir/subdir/subdir_child_dir/child_dir_file1" attributes. |
| 541 ASSERT_TRUE(file_util::MakeFileUnreadable(child_dir_file1)); | 541 ASSERT_TRUE(file_util::MakeFileUnreadable(child_dir_file1)); |
| 542 ASSERT_TRUE(WaitForEvents()); | 542 ASSERT_TRUE(WaitForEvents()); |
| 543 | 543 |
| 544 // Delete "$dir/subdir/subdir_file1". | 544 // Delete "$dir/subdir/subdir_file1". |
| 545 ASSERT_TRUE(base::Delete(subdir_file1, false)); | 545 ASSERT_TRUE(base::DeleteFile(subdir_file1, false)); |
| 546 ASSERT_TRUE(WaitForEvents()); | 546 ASSERT_TRUE(WaitForEvents()); |
| 547 | 547 |
| 548 // Delete "$dir/subdir/subdir_child_dir/child_dir_file1". | 548 // Delete "$dir/subdir/subdir_child_dir/child_dir_file1". |
| 549 ASSERT_TRUE(base::Delete(child_dir_file1, false)); | 549 ASSERT_TRUE(base::DeleteFile(child_dir_file1, false)); |
| 550 ASSERT_TRUE(WaitForEvents()); | 550 ASSERT_TRUE(WaitForEvents()); |
| 551 DeleteDelegateOnFileThread(delegate.release()); | 551 DeleteDelegateOnFileThread(delegate.release()); |
| 552 } | 552 } |
| 553 #else | 553 #else |
| 554 TEST_F(FilePathWatcherTest, RecursiveWatch) { | 554 TEST_F(FilePathWatcherTest, RecursiveWatch) { |
| 555 FilePathWatcher watcher; | 555 FilePathWatcher watcher; |
| 556 FilePath dir(temp_dir_.path().AppendASCII("dir")); | 556 FilePath dir(temp_dir_.path().AppendASCII("dir")); |
| 557 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 557 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 558 // Non-Windows implementaion does not support recursive watching. | 558 // Non-Windows implementaion does not support recursive watching. |
| 559 ASSERT_FALSE(SetupWatch(dir, &watcher, delegate.get(), true)); | 559 ASSERT_FALSE(SetupWatch(dir, &watcher, delegate.get(), true)); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 TEST_F(FilePathWatcherTest, DeleteLink) { | 627 TEST_F(FilePathWatcherTest, DeleteLink) { |
| 628 // Unfortunately this test case only works if the link target exists. | 628 // Unfortunately this test case only works if the link target exists. |
| 629 // TODO(craig) fix this as part of crbug.com/91561. | 629 // TODO(craig) fix this as part of crbug.com/91561. |
| 630 ASSERT_TRUE(WriteFile(test_file(), "content")); | 630 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 631 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); | 631 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); |
| 632 FilePathWatcher watcher; | 632 FilePathWatcher watcher; |
| 633 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 633 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 634 ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false)); | 634 ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false)); |
| 635 | 635 |
| 636 // Now make sure we get notified if the link is deleted. | 636 // Now make sure we get notified if the link is deleted. |
| 637 ASSERT_TRUE(base::Delete(test_link(), false)); | 637 ASSERT_TRUE(base::DeleteFile(test_link(), false)); |
| 638 ASSERT_TRUE(WaitForEvents()); | 638 ASSERT_TRUE(WaitForEvents()); |
| 639 DeleteDelegateOnFileThread(delegate.release()); | 639 DeleteDelegateOnFileThread(delegate.release()); |
| 640 } | 640 } |
| 641 | 641 |
| 642 // Verify that modifying a target file that a link is pointing to | 642 // Verify that modifying a target file that a link is pointing to |
| 643 // when we are watching the link is caught. | 643 // when we are watching the link is caught. |
| 644 TEST_F(FilePathWatcherTest, ModifiedLinkedFile) { | 644 TEST_F(FilePathWatcherTest, ModifiedLinkedFile) { |
| 645 ASSERT_TRUE(WriteFile(test_file(), "content")); | 645 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 646 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); | 646 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); |
| 647 FilePathWatcher watcher; | 647 FilePathWatcher watcher; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 674 // when we are watching the link is caught. | 674 // when we are watching the link is caught. |
| 675 TEST_F(FilePathWatcherTest, DeleteTargetLinkedFile) { | 675 TEST_F(FilePathWatcherTest, DeleteTargetLinkedFile) { |
| 676 ASSERT_TRUE(WriteFile(test_file(), "content")); | 676 ASSERT_TRUE(WriteFile(test_file(), "content")); |
| 677 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); | 677 ASSERT_TRUE(file_util::CreateSymbolicLink(test_file(), test_link())); |
| 678 FilePathWatcher watcher; | 678 FilePathWatcher watcher; |
| 679 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 679 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 680 // Note that we are watching the symlink. | 680 // Note that we are watching the symlink. |
| 681 ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false)); | 681 ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false)); |
| 682 | 682 |
| 683 // Now make sure we get notified if the target file is deleted. | 683 // Now make sure we get notified if the target file is deleted. |
| 684 ASSERT_TRUE(base::Delete(test_file(), false)); | 684 ASSERT_TRUE(base::DeleteFile(test_file(), false)); |
| 685 ASSERT_TRUE(WaitForEvents()); | 685 ASSERT_TRUE(WaitForEvents()); |
| 686 DeleteDelegateOnFileThread(delegate.release()); | 686 DeleteDelegateOnFileThread(delegate.release()); |
| 687 } | 687 } |
| 688 | 688 |
| 689 // Verify that watching a file whose parent directory is a link that | 689 // Verify that watching a file whose parent directory is a link that |
| 690 // doesn't exist yet works if the symlink is created eventually. | 690 // doesn't exist yet works if the symlink is created eventually. |
| 691 TEST_F(FilePathWatcherTest, LinkedDirectoryPart1) { | 691 TEST_F(FilePathWatcherTest, LinkedDirectoryPart1) { |
| 692 FilePathWatcher watcher; | 692 FilePathWatcher watcher; |
| 693 FilePath dir(temp_dir_.path().AppendASCII("dir")); | 693 FilePath dir(temp_dir_.path().AppendASCII("dir")); |
| 694 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); | 694 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); |
| 695 FilePath file(dir.AppendASCII("file")); | 695 FilePath file(dir.AppendASCII("file")); |
| 696 FilePath linkfile(link_dir.AppendASCII("file")); | 696 FilePath linkfile(link_dir.AppendASCII("file")); |
| 697 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 697 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 698 // dir/file should exist. | 698 // dir/file should exist. |
| 699 ASSERT_TRUE(file_util::CreateDirectory(dir)); | 699 ASSERT_TRUE(file_util::CreateDirectory(dir)); |
| 700 ASSERT_TRUE(WriteFile(file, "content")); | 700 ASSERT_TRUE(WriteFile(file, "content")); |
| 701 // Note that we are watching dir.lnk/file which doesn't exist yet. | 701 // Note that we are watching dir.lnk/file which doesn't exist yet. |
| 702 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); | 702 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); |
| 703 | 703 |
| 704 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); | 704 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); |
| 705 VLOG(1) << "Waiting for link creation"; | 705 VLOG(1) << "Waiting for link creation"; |
| 706 ASSERT_TRUE(WaitForEvents()); | 706 ASSERT_TRUE(WaitForEvents()); |
| 707 | 707 |
| 708 ASSERT_TRUE(WriteFile(file, "content v2")); | 708 ASSERT_TRUE(WriteFile(file, "content v2")); |
| 709 VLOG(1) << "Waiting for file change"; | 709 VLOG(1) << "Waiting for file change"; |
| 710 ASSERT_TRUE(WaitForEvents()); | 710 ASSERT_TRUE(WaitForEvents()); |
| 711 | 711 |
| 712 ASSERT_TRUE(base::Delete(file, false)); | 712 ASSERT_TRUE(base::DeleteFile(file, false)); |
| 713 VLOG(1) << "Waiting for file deletion"; | 713 VLOG(1) << "Waiting for file deletion"; |
| 714 ASSERT_TRUE(WaitForEvents()); | 714 ASSERT_TRUE(WaitForEvents()); |
| 715 DeleteDelegateOnFileThread(delegate.release()); | 715 DeleteDelegateOnFileThread(delegate.release()); |
| 716 } | 716 } |
| 717 | 717 |
| 718 // Verify that watching a file whose parent directory is a | 718 // Verify that watching a file whose parent directory is a |
| 719 // dangling symlink works if the directory is created eventually. | 719 // dangling symlink works if the directory is created eventually. |
| 720 TEST_F(FilePathWatcherTest, LinkedDirectoryPart2) { | 720 TEST_F(FilePathWatcherTest, LinkedDirectoryPart2) { |
| 721 FilePathWatcher watcher; | 721 FilePathWatcher watcher; |
| 722 FilePath dir(temp_dir_.path().AppendASCII("dir")); | 722 FilePath dir(temp_dir_.path().AppendASCII("dir")); |
| 723 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); | 723 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); |
| 724 FilePath file(dir.AppendASCII("file")); | 724 FilePath file(dir.AppendASCII("file")); |
| 725 FilePath linkfile(link_dir.AppendASCII("file")); | 725 FilePath linkfile(link_dir.AppendASCII("file")); |
| 726 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 726 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 727 // Now create the link from dir.lnk pointing to dir but | 727 // Now create the link from dir.lnk pointing to dir but |
| 728 // neither dir nor dir/file exist yet. | 728 // neither dir nor dir/file exist yet. |
| 729 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); | 729 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); |
| 730 // Note that we are watching dir.lnk/file. | 730 // Note that we are watching dir.lnk/file. |
| 731 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); | 731 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); |
| 732 | 732 |
| 733 ASSERT_TRUE(file_util::CreateDirectory(dir)); | 733 ASSERT_TRUE(file_util::CreateDirectory(dir)); |
| 734 ASSERT_TRUE(WriteFile(file, "content")); | 734 ASSERT_TRUE(WriteFile(file, "content")); |
| 735 VLOG(1) << "Waiting for dir/file creation"; | 735 VLOG(1) << "Waiting for dir/file creation"; |
| 736 ASSERT_TRUE(WaitForEvents()); | 736 ASSERT_TRUE(WaitForEvents()); |
| 737 | 737 |
| 738 ASSERT_TRUE(WriteFile(file, "content v2")); | 738 ASSERT_TRUE(WriteFile(file, "content v2")); |
| 739 VLOG(1) << "Waiting for file change"; | 739 VLOG(1) << "Waiting for file change"; |
| 740 ASSERT_TRUE(WaitForEvents()); | 740 ASSERT_TRUE(WaitForEvents()); |
| 741 | 741 |
| 742 ASSERT_TRUE(base::Delete(file, false)); | 742 ASSERT_TRUE(base::DeleteFile(file, false)); |
| 743 VLOG(1) << "Waiting for file deletion"; | 743 VLOG(1) << "Waiting for file deletion"; |
| 744 ASSERT_TRUE(WaitForEvents()); | 744 ASSERT_TRUE(WaitForEvents()); |
| 745 DeleteDelegateOnFileThread(delegate.release()); | 745 DeleteDelegateOnFileThread(delegate.release()); |
| 746 } | 746 } |
| 747 | 747 |
| 748 // Verify that watching a file with a symlink on the path | 748 // Verify that watching a file with a symlink on the path |
| 749 // to the file works. | 749 // to the file works. |
| 750 TEST_F(FilePathWatcherTest, LinkedDirectoryPart3) { | 750 TEST_F(FilePathWatcherTest, LinkedDirectoryPart3) { |
| 751 FilePathWatcher watcher; | 751 FilePathWatcher watcher; |
| 752 FilePath dir(temp_dir_.path().AppendASCII("dir")); | 752 FilePath dir(temp_dir_.path().AppendASCII("dir")); |
| 753 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); | 753 FilePath link_dir(temp_dir_.path().AppendASCII("dir.lnk")); |
| 754 FilePath file(dir.AppendASCII("file")); | 754 FilePath file(dir.AppendASCII("file")); |
| 755 FilePath linkfile(link_dir.AppendASCII("file")); | 755 FilePath linkfile(link_dir.AppendASCII("file")); |
| 756 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); | 756 scoped_ptr<TestDelegate> delegate(new TestDelegate(collector())); |
| 757 ASSERT_TRUE(file_util::CreateDirectory(dir)); | 757 ASSERT_TRUE(file_util::CreateDirectory(dir)); |
| 758 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); | 758 ASSERT_TRUE(file_util::CreateSymbolicLink(dir, link_dir)); |
| 759 // Note that we are watching dir.lnk/file but the file doesn't exist yet. | 759 // Note that we are watching dir.lnk/file but the file doesn't exist yet. |
| 760 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); | 760 ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false)); |
| 761 | 761 |
| 762 ASSERT_TRUE(WriteFile(file, "content")); | 762 ASSERT_TRUE(WriteFile(file, "content")); |
| 763 VLOG(1) << "Waiting for file creation"; | 763 VLOG(1) << "Waiting for file creation"; |
| 764 ASSERT_TRUE(WaitForEvents()); | 764 ASSERT_TRUE(WaitForEvents()); |
| 765 | 765 |
| 766 ASSERT_TRUE(WriteFile(file, "content v2")); | 766 ASSERT_TRUE(WriteFile(file, "content v2")); |
| 767 VLOG(1) << "Waiting for file change"; | 767 VLOG(1) << "Waiting for file change"; |
| 768 ASSERT_TRUE(WaitForEvents()); | 768 ASSERT_TRUE(WaitForEvents()); |
| 769 | 769 |
| 770 ASSERT_TRUE(base::Delete(file, false)); | 770 ASSERT_TRUE(base::DeleteFile(file, false)); |
| 771 VLOG(1) << "Waiting for file deletion"; | 771 VLOG(1) << "Waiting for file deletion"; |
| 772 ASSERT_TRUE(WaitForEvents()); | 772 ASSERT_TRUE(WaitForEvents()); |
| 773 DeleteDelegateOnFileThread(delegate.release()); | 773 DeleteDelegateOnFileThread(delegate.release()); |
| 774 } | 774 } |
| 775 | 775 |
| 776 #endif // OS_LINUX | 776 #endif // OS_LINUX |
| 777 | 777 |
| 778 enum Permission { | 778 enum Permission { |
| 779 Read, | 779 Read, |
| 780 Write, | 780 Write, |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, false)); | 900 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, false)); |
| 901 ASSERT_TRUE(WaitForEvents()); | 901 ASSERT_TRUE(WaitForEvents()); |
| 902 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, true)); | 902 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, true)); |
| 903 DeleteDelegateOnFileThread(delegate.release()); | 903 DeleteDelegateOnFileThread(delegate.release()); |
| 904 } | 904 } |
| 905 | 905 |
| 906 #endif // OS_MACOSX | 906 #endif // OS_MACOSX |
| 907 } // namespace | 907 } // namespace |
| 908 | 908 |
| 909 } // namespace base | 909 } // namespace base |
| OLD | NEW |