Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4496)

Unified Diff: chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc

Issue 658013002: Changed api to notify when watched directory is deleted. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formatted arguments. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/extensions/file_manager/event_router.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+}
« no previous file with comments | « chrome/browser/chromeos/extensions/file_manager/event_router.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698