| Index: chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc
|
| index 570e6f3c71b0b646663778365ebe5380d4c325ca..13313e128d1666274f99cbdf867912f642ea9de7 100644
|
| --- a/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc
|
| @@ -14,12 +14,9 @@
|
| #include "base/callback.h"
|
| #include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| -#include "base/files/file_path_watcher.h"
|
| -#include "base/run_loop.h"
|
| #include "base/time.h"
|
| #include "chrome/browser/chromeos/drive/drive_integration_service.h"
|
| #include "chrome/browser/chromeos/drive/file_system_interface.h"
|
| -#include "chrome/browser/chromeos/drive/file_system_observer.h"
|
| #include "chrome/browser/chromeos/extensions/file_manager/drive_test_util.h"
|
| #include "chrome/browser/extensions/component_loader.h"
|
| #include "chrome/browser/extensions/extension_apitest.h"
|
| @@ -36,9 +33,6 @@
|
|
|
| namespace {
|
|
|
| -const char kKeyboardTestFileName[] = "world.ogv";
|
| -const char kKeyboardTestFileCopyName[] = "world (1).ogv";
|
| -
|
| // Test suffixes appended to the Javascript tests' names.
|
| const char kDownloadsVolume[] = "Downloads";
|
| const char kDriveVolume[] = "Drive";
|
| @@ -66,7 +60,7 @@ TestEntryInfo kTestEntrySetCommon[] = {
|
| { FILE, "text.txt", "hello.txt", "text/plain", NONE, "4 Sep 1998 12:34:56" },
|
| { FILE, "image.png", "My Desktop Background.png", "text/plain", NONE,
|
| "18 Jan 2038 01:02:03" },
|
| - { FILE, "video.ogv", kKeyboardTestFileName, "text/plain", NONE,
|
| + { FILE, "video.ogv", "world.ogv", "text/plain", NONE,
|
| "4 July 2012 10:35:00" },
|
| { DIRECTORY, "", "photos", NULL, NONE, "1 Jan 1980 23:59:59" },
|
| { DIRECTORY, "", ".warez", NULL, NONE, "26 Oct 1985 13:39" }
|
| @@ -79,115 +73,6 @@ TestEntryInfo kTestEntrySetDriveOnly[] = {
|
| SHARED, "20 Mar 2013 22:40:00" }
|
| };
|
|
|
| -// Monitors changes to a single file until the supplied condition callback
|
| -// returns true. Usage:
|
| -// TestFilePathWatcher watcher(path_to_file, MyConditionCallback);
|
| -// watcher.StartAndWaitUntilReady();
|
| -// ... trigger filesystem modification ...
|
| -// watcher.RunMessageLoopUntilConditionSatisfied();
|
| -class TestFilePathWatcher {
|
| - public:
|
| - typedef base::Callback<bool(const base::FilePath& file_path)>
|
| - ConditionCallback;
|
| -
|
| - // Stores the supplied |path| and |condition| for later use (no side effects).
|
| - TestFilePathWatcher(const base::FilePath& path,
|
| - const ConditionCallback& condition);
|
| -
|
| - // Waits (running a message pump) until the callback returns true or
|
| - // FilePathWatcher reports an error. Return true on success.
|
| - bool RunMessageLoopUntilConditionSatisfied();
|
| -
|
| - private:
|
| - // Starts the FilePathWatcher to watch the target file. Also check if the
|
| - // condition is already met.
|
| - void StartWatching();
|
| -
|
| - // FilePathWatcher callback (on the FILE thread). Posts Done() to the UI
|
| - // thread when the condition is satisfied or there is an error.
|
| - void FilePathWatcherCallback(const base::FilePath& path, bool error);
|
| -
|
| - const base::FilePath path_;
|
| - ConditionCallback condition_;
|
| - scoped_ptr<base::FilePathWatcher> watcher_;
|
| - base::RunLoop run_loop_;
|
| - base::Closure quit_closure_;
|
| - bool failed_;
|
| -};
|
| -
|
| -TestFilePathWatcher::TestFilePathWatcher(const base::FilePath& path,
|
| - const ConditionCallback& condition)
|
| - : path_(path),
|
| - condition_(condition),
|
| - quit_closure_(run_loop_.QuitClosure()),
|
| - failed_(false) {
|
| -}
|
| -
|
| -void TestFilePathWatcher::StartWatching() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
|
| -
|
| - watcher_.reset(new base::FilePathWatcher);
|
| - failed_ = !watcher_->Watch(
|
| - path_, false /*recursive*/,
|
| - base::Bind(&TestFilePathWatcher::FilePathWatcherCallback,
|
| - base::Unretained(this)));
|
| -
|
| - // If failed to start the watcher, then quit the message loop immediately.
|
| - // Also, if the condition was already met before FilePathWatcher was launched,
|
| - // FilePathWatcher won't be able to detect a change, so check the condition
|
| - // here.
|
| - if (failed_ || condition_.Run(path_)) {
|
| - watcher_.reset();
|
| - content::BrowserThread::PostTask(content::BrowserThread::UI,
|
| - FROM_HERE,
|
| - quit_closure_);
|
| - return;
|
| - }
|
| -}
|
| -
|
| -void TestFilePathWatcher::FilePathWatcherCallback(const base::FilePath& path,
|
| - bool failed) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
|
| - DCHECK_EQ(path_.value(), path.value());
|
| -
|
| - if (failed || condition_.Run(path)) {
|
| - failed_ = failed;
|
| - watcher_.reset();
|
| - content::BrowserThread::PostTask(content::BrowserThread::UI,
|
| - FROM_HERE,
|
| - quit_closure_);
|
| - }
|
| -}
|
| -
|
| -bool TestFilePathWatcher::RunMessageLoopUntilConditionSatisfied() {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| -
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::FILE,
|
| - FROM_HERE,
|
| - base::Bind(&TestFilePathWatcher::StartWatching,
|
| - base::Unretained(this)));
|
| -
|
| - // Wait until the condition is met.
|
| - run_loop_.Run();
|
| - return !failed_;
|
| -}
|
| -
|
| -// Returns true if a file with the given size is present at |path|.
|
| -bool FilePresentWithSize(const int64 file_size,
|
| - const base::FilePath& path) {
|
| - int64 copy_size = 0;
|
| - // If the file doesn't exist yet this will fail and we'll keep waiting.
|
| - if (!file_util::GetFileSize(path, ©_size))
|
| - return false;
|
| - return (copy_size == file_size);
|
| -}
|
| -
|
| -// Returns true if a file is not present at |path|.
|
| -bool FileNotPresent(const base::FilePath& path) {
|
| - return !file_util::PathExists(path);
|
| -};
|
| -
|
| // The base class of volumes for test.
|
| // Sub-classes of this class are used by test cases and provide operations such
|
| // as creating files for each type of test volume.
|
| @@ -198,22 +83,8 @@ class TestVolume {
|
| // Creates an entry with given information.
|
| virtual void CreateEntry(const TestEntryInfo& entry) = 0;
|
|
|
| - // Returns the path of the root directory.
|
| - virtual base::FilePath GetRootPath() const = 0;
|
| -
|
| - // Returns true if |file_path| exists.
|
| - virtual bool PathExists(const base::FilePath& file_path) const = 0;
|
| -
|
| // Returns the name of volume such as "Downloads" or "Drive".
|
| virtual std::string GetName() const = 0;
|
| -
|
| - // Waits until a file with the given size is present at |path|. Returns
|
| - // true on success.
|
| - virtual bool WaitUntilFilePresentWithSize(const base::FilePath& file_path,
|
| - int64 file_size) = 0;
|
| -
|
| - // Waits until a file is not present at |path|. Returns true on success.
|
| - virtual bool WaitUntilFileNotPresent(const base::FilePath& file_path) = 0;
|
| };
|
|
|
| // The local volume class for test.
|
| @@ -225,12 +96,6 @@ class LocalTestVolume : public TestVolume {
|
| : mount_name_(mount_name) {
|
| }
|
|
|
| - LocalTestVolume(const std::string& mount_name,
|
| - const base::FilePath& local_path)
|
| - : mount_name_(mount_name),
|
| - local_path_(local_path) {
|
| - }
|
| -
|
| // Adds this volume to the file system as a local volume. Returns true on
|
| // success.
|
| bool Mount(Profile* profile) {
|
| @@ -298,28 +163,6 @@ class LocalTestVolume : public TestVolume {
|
| return mount_name_;
|
| }
|
|
|
| - virtual base::FilePath GetRootPath() const OVERRIDE {
|
| - return local_path_;
|
| - }
|
| -
|
| - virtual bool PathExists(const base::FilePath& file_path) const OVERRIDE {
|
| - return file_util::PathExists(file_path);
|
| - }
|
| -
|
| - virtual bool WaitUntilFilePresentWithSize(
|
| - const base::FilePath& file_path,
|
| - int64 file_size) OVERRIDE {
|
| - TestFilePathWatcher watcher(file_path, base::Bind(FilePresentWithSize,
|
| - file_size));
|
| - return watcher.RunMessageLoopUntilConditionSatisfied();
|
| - }
|
| -
|
| - virtual bool WaitUntilFileNotPresent(
|
| - const base::FilePath& file_path) OVERRIDE {
|
| - TestFilePathWatcher watcher(file_path, base::Bind(FileNotPresent));
|
| - return watcher.RunMessageLoopUntilConditionSatisfied();
|
| - }
|
| -
|
| private:
|
| std::string mount_name_;
|
| base::FilePath local_path_;
|
| @@ -329,12 +172,10 @@ class LocalTestVolume : public TestVolume {
|
| // The drive volume class for test.
|
| // This class provides the operations for a test volume that simulates Google
|
| // drive.
|
| -class DriveTestVolume : public TestVolume,
|
| - public drive::FileSystemObserver {
|
| +class DriveTestVolume : public TestVolume {
|
| public:
|
| DriveTestVolume() : fake_drive_service_(NULL),
|
| - integration_service_(NULL),
|
| - waiting_for_directory_change_(false) {
|
| + integration_service_(NULL) {
|
| }
|
|
|
| // Send request to add this volume to the file system as Google drive.
|
| @@ -439,53 +280,6 @@ class DriveTestVolume : public TestVolume,
|
| CheckForUpdates();
|
| }
|
|
|
| - virtual base::FilePath GetRootPath() const OVERRIDE {
|
| - return base::FilePath(drive::util::kDriveMyDriveRootPath);
|
| - }
|
| -
|
| - virtual bool PathExists(const base::FilePath& file_path) const OVERRIDE {
|
| - DCHECK(integration_service_);
|
| - DCHECK(integration_service_->file_system());
|
| -
|
| - drive::FileError error = drive::FILE_ERROR_FAILED;
|
| - scoped_ptr<drive::ResourceEntry> entry_proto;
|
| - integration_service_->file_system()->GetResourceEntryByPath(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
|
| - google_apis::test_util::RunBlockingPoolTask();
|
| -
|
| - return error == drive::FILE_ERROR_OK;
|
| - }
|
| -
|
| - virtual bool WaitUntilFilePresentWithSize(
|
| - const base::FilePath& file_path,
|
| - int64 file_size) OVERRIDE {
|
| - while (true) {
|
| - if (FileIsPresentWithSize(file_path, file_size))
|
| - return true;
|
| - WaitUntilDirectoryChanged();
|
| - }
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -
|
| - virtual bool WaitUntilFileNotPresent(
|
| - const base::FilePath& file_path) OVERRIDE {
|
| - while (true) {
|
| - if (FileIsNotPresent(file_path))
|
| - return true;
|
| - WaitUntilDirectoryChanged();
|
| - }
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -
|
| - virtual void OnDirectoryChanged(
|
| - const base::FilePath& directory_path) OVERRIDE {
|
| - if (waiting_for_directory_change_)
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| // Notifies FileSystem that the contents in FakeDriveService are
|
| // changed, hence the new contents should be fetched.
|
| void CheckForUpdates() {
|
| @@ -494,47 +288,6 @@ class DriveTestVolume : public TestVolume,
|
| }
|
| }
|
|
|
| - // Waits until a notification for a directory change is received.
|
| - void WaitUntilDirectoryChanged() {
|
| - waiting_for_directory_change_ = true;
|
| - MessageLoop::current()->Run();
|
| - waiting_for_directory_change_ = false;
|
| - }
|
| -
|
| - // Returns true if a file of the size |file_size| is present at |file_path|.
|
| - bool FileIsPresentWithSize(
|
| - const base::FilePath& file_path,
|
| - int64 file_size) {
|
| - DCHECK(integration_service_);
|
| - DCHECK(integration_service_->file_system());
|
| -
|
| - drive::FileError error = drive::FILE_ERROR_FAILED;
|
| - scoped_ptr<drive::ResourceEntry> entry_proto;
|
| - integration_service_->file_system()->GetResourceEntryByPath(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
|
| - google_apis::test_util::RunBlockingPoolTask();
|
| -
|
| - return (error == drive::FILE_ERROR_OK &&
|
| - entry_proto->file_info().size() == file_size);
|
| - }
|
| -
|
| - // Returns true if a file is not present at |file_path|.
|
| - bool FileIsNotPresent(
|
| - const base::FilePath& file_path) {
|
| - DCHECK(integration_service_);
|
| - DCHECK(integration_service_->file_system());
|
| -
|
| - drive::FileError error = drive::FILE_ERROR_FAILED;
|
| - scoped_ptr<drive::ResourceEntry> entry_proto;
|
| - integration_service_->file_system()->GetResourceEntryByPath(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
|
| - google_apis::test_util::RunBlockingPoolTask();
|
| -
|
| - return error == drive::FILE_ERROR_NOT_FOUND;
|
| - }
|
| -
|
| drive::DriveIntegrationService* CreateDriveIntegrationService(
|
| Profile* profile) {
|
| fake_drive_service_ = new google_apis::FakeDriveService;
|
| @@ -548,7 +301,6 @@ class DriveTestVolume : public TestVolume,
|
| fake_drive_service_,
|
| test_cache_root_.path(),
|
| NULL);
|
| - integration_service_->file_system()->AddObserver(this);
|
| return integration_service_;
|
| }
|
|
|
| @@ -556,7 +308,6 @@ class DriveTestVolume : public TestVolume,
|
| base::ScopedTempDir test_cache_root_;
|
| google_apis::FakeDriveService* fake_drive_service_;
|
| drive::DriveIntegrationService* integration_service_;
|
| - bool waiting_for_directory_change_;
|
| };
|
|
|
| // The base test class. Used by FileManagerBrowserLocalTest,
|
| @@ -639,44 +390,6 @@ void FileManagerBrowserTestBase::DoTestFileDisplay(TestVolume* volume) {
|
| ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| }
|
|
|
| -void FileManagerBrowserTestBase::DoTestGalleryOpen(TestVolume* volume) {
|
| - ResultCatcher catcher;
|
| - StartTest("galleryOpen" + volume->GetName());
|
| - ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| -}
|
| -
|
| -void FileManagerBrowserTestBase::DoTestKeyboardCopy(TestVolume* volume) {
|
| - base::FilePath copy_path =
|
| - volume->GetRootPath().AppendASCII(kKeyboardTestFileCopyName);
|
| - ASSERT_FALSE(volume->PathExists(copy_path));
|
| -
|
| - ResultCatcher catcher;
|
| - ASSERT_NO_FATAL_FAILURE(StartTest("keyboardCopy" + volume->GetName()));
|
| -
|
| - const int64 kKeyboardTestFileSize = 59943;
|
| -
|
| - ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| - ASSERT_TRUE(volume->WaitUntilFilePresentWithSize(
|
| - copy_path, kKeyboardTestFileSize));
|
| -
|
| - // Check that it was a copy, not a move.
|
| - base::FilePath source_path =
|
| - volume->GetRootPath().AppendASCII(kKeyboardTestFileName);
|
| - ASSERT_TRUE(volume->PathExists(source_path));
|
| -}
|
| -
|
| -void FileManagerBrowserTestBase::DoTestKeyboardDelete(TestVolume* volume) {
|
| - base::FilePath delete_path =
|
| - volume->GetRootPath().AppendASCII(kKeyboardTestFileName);
|
| - ASSERT_TRUE(volume->PathExists(delete_path));
|
| -
|
| - ResultCatcher catcher;
|
| - ASSERT_NO_FATAL_FAILURE(StartTest("keyboardDelete" + volume->GetName()));
|
| -
|
| - ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| - ASSERT_TRUE(volume->WaitUntilFileNotPresent(delete_path));
|
| -}
|
| -
|
| // A class to test local volumes.
|
| class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase {
|
| public:
|
| @@ -773,19 +486,29 @@ IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestFileDisplay) {
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestGalleryOpen) {
|
| - DoTestGalleryOpen(&volume_);
|
| + ResultCatcher catcher;
|
| + ASSERT_NO_FATAL_FAILURE(StartTest("galleryOpenDownloads"));
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestGalleryOpen) {
|
| - DoTestGalleryOpen(&volume_);
|
| +// Disabled temporarily since fails on Linux Chromium OS ASAN Tests (2).
|
| +// TODO(mtomasz): crbug.com/243611.
|
| +IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, DISABLED_TestGalleryOpen) {
|
| + ResultCatcher catcher;
|
| + ASSERT_NO_FATAL_FAILURE(StartTest("galleryOpenDrive"));
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardCopy) {
|
| - DoTestKeyboardCopy(&volume_);
|
| + ResultCatcher catcher;
|
| + ASSERT_NO_FATAL_FAILURE(StartTest("keyboardCopyDrive"));
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardDelete) {
|
| - DoTestKeyboardDelete(&volume_);
|
| + ResultCatcher catcher;
|
| + ASSERT_NO_FATAL_FAILURE(StartTest("keyboardDeleteDrive"));
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestOpenRecent) {
|
|
|