| Index: chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
|
| index 7644101eb3c72bf575a6503586bd681bc4e6ee5b..fa0d0b38a08b55d7d52ce69cd5dfb47d823a4635 100644
|
| --- a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
|
| @@ -3,8 +3,12 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/stl_util.h"
|
| +#include "chrome/browser/chromeos/drive/file_change.h"
|
| +#include "chrome/browser/chromeos/extensions/file_manager/event_router.h"
|
| #include "chrome/browser/chromeos/file_manager/drive_test_util.h"
|
| +#include "chrome/browser/chromeos/file_manager/file_watcher.h"
|
| #include "chrome/browser/extensions/extension_apitest.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| #include "chromeos/dbus/cros_disks_client.h"
|
| #include "chromeos/disks/mock_disk_mount_manager.h"
|
| #include "extensions/common/extension.h"
|
| @@ -108,6 +112,17 @@ TestDiskInfo kTestDisks[] = {
|
| }
|
| };
|
|
|
| +void DispatchDirectoryChangeEventImpl(
|
| + int* counter,
|
| + const base::FilePath& virtual_path,
|
| + const drive::FileChange* list,
|
| + bool got_error,
|
| + const std::vector<std::string>& extension_ids) {
|
| + ++(*counter);
|
| +}
|
| +
|
| +void AddFileWatchCallback(bool success) {}
|
| +
|
| } // namespace
|
|
|
| class FileManagerPrivateApiTest : public ExtensionApiTest {
|
| @@ -119,13 +134,30 @@ class FileManagerPrivateApiTest : public ExtensionApiTest {
|
|
|
| virtual ~FileManagerPrivateApiTest() {
|
| DCHECK(!disk_mount_manager_mock_);
|
| + DCHECK(!testing_profile_);
|
| + DCHECK(!event_router_);
|
| STLDeleteValues(&volumes_);
|
| }
|
|
|
| + virtual void SetUpOnMainThread() override {
|
| + ExtensionApiTest::SetUpOnMainThread();
|
| +
|
| + testing_profile_.reset(new TestingProfile());
|
| + event_router_.reset(new file_manager::EventRouter(testing_profile_.get()));
|
| + }
|
| +
|
| + virtual void TearDownOnMainThread() override {
|
| + event_router_->Shutdown();
|
| +
|
| + event_router_.reset();
|
| + testing_profile_.reset();
|
| +
|
| + ExtensionApiTest::TearDownOnMainThread();
|
| + }
|
| +
|
| // ExtensionApiTest override
|
| virtual void SetUpInProcessBrowserTestFixture() override {
|
| ExtensionApiTest::SetUpInProcessBrowserTestFixture();
|
| -
|
| disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager;
|
| chromeos::disks::DiskMountManager::InitializeForTesting(
|
| disk_mount_manager_mock_);
|
| @@ -241,6 +273,8 @@ class FileManagerPrivateApiTest : public ExtensionApiTest {
|
| chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_;
|
| DiskMountManager::DiskMap volumes_;
|
| DiskMountManager::MountPointMap mount_points_;
|
| + scoped_ptr<TestingProfile> testing_profile_;
|
| + scoped_ptr<file_manager::EventRouter> event_router_;
|
| };
|
|
|
| IN_PROC_BROWSER_TEST_F(FileManagerPrivateApiTest, Mount) {
|
| @@ -270,3 +304,56 @@ IN_PROC_BROWSER_TEST_F(FileManagerPrivateApiTest, Permissions) {
|
| const extensions::InstallWarning& warning = extension->install_warnings()[0];
|
| EXPECT_EQ("fileManagerPrivate", warning.key);
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(FileManagerPrivateApiTest, OnFileChanged) {
|
| + // In drive volume, deletion of a directory is notified via OnFileChanged.
|
| + // Local changes directly come to HandleFileWatchNotification from
|
| + // FileWatcher.
|
| + typedef drive::FileChange FileChange;
|
| + typedef drive::FileChange::FileType FileType;
|
| + typedef drive::FileChange::ChangeType ChangeType;
|
| +
|
| + int counter = 0;
|
| + event_router_->SetDispatchDirectoryChangeEventImplForTesting(
|
| + base::Bind(&DispatchDirectoryChangeEventImpl, &counter));
|
| +
|
| + // /a/b/c and /a/d/e are being watched.
|
| + event_router_->AddFileWatch(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/a/b/c")),
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs-virtual/root/a/b/c")),
|
| + "extension_1", base::Bind(&AddFileWatchCallback));
|
| +
|
| + event_router_->AddFileWatch(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/a/d/e")),
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs-hash/root/a/d/e")),
|
| + "extension_2", base::Bind(&AddFileWatchCallback));
|
| +
|
| + event_router_->AddFileWatch(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/aaa")),
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs-hash/root/aaa")),
|
| + "extension_3", base::Bind(&AddFileWatchCallback));
|
| +
|
| + // When /a is deleted (1 and 2 is notified).
|
| + FileChange first_change;
|
| + first_change.Update(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/a")),
|
| + FileType::FILE_TYPE_DIRECTORY, ChangeType::DELETE);
|
| + event_router_->OnFileChanged(first_change);
|
| + EXPECT_EQ(2, counter);
|
| +
|
| + // When /a/b/c is deleted (1 is notified).
|
| + FileChange second_change;
|
| + second_change.Update(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/a/b/c")),
|
| + FileType::FILE_TYPE_DIRECTORY, ChangeType::DELETE);
|
| + event_router_->OnFileChanged(second_change);
|
| + EXPECT_EQ(3, counter);
|
| +
|
| + // When /z/y is deleted (Not notified).
|
| + FileChange third_change;
|
| + third_change.Update(
|
| + base::FilePath(FILE_PATH_LITERAL("/no-existing-fs/root/z/y")),
|
| + FileType::FILE_TYPE_DIRECTORY, ChangeType::DELETE);
|
| + event_router_->OnFileChanged(third_change);
|
| + EXPECT_EQ(3, counter);
|
| +}
|
|
|