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

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc

Issue 16097003: drive: Stop using FilePathWatcher from FileManagerBrowserTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment fix Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/test/data/extensions/api_test/file_manager_browsertest/test_cases.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 // Browser test for basic Chrome OS file manager functionality: 5 // Browser test for basic Chrome OS file manager functionality:
6 // - The file list is updated when a file is added externally to the Downloads 6 // - The file list is updated when a file is added externally to the Downloads
7 // folder. 7 // folder.
8 // - Selecting a file and copy-pasting it with the keyboard copies the file. 8 // - Selecting a file and copy-pasting it with the keyboard copies the file.
9 // - Selecting a file and pressing delete deletes it. 9 // - Selecting a file and pressing delete deletes it.
10 10
11 #include <string> 11 #include <string>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/file_util.h" 15 #include "base/file_util.h"
16 #include "base/files/file_path.h" 16 #include "base/files/file_path.h"
17 #include "base/files/file_path_watcher.h"
18 #include "base/run_loop.h"
19 #include "base/time.h" 17 #include "base/time.h"
20 #include "chrome/browser/chromeos/drive/drive_integration_service.h" 18 #include "chrome/browser/chromeos/drive/drive_integration_service.h"
21 #include "chrome/browser/chromeos/drive/file_system_interface.h" 19 #include "chrome/browser/chromeos/drive/file_system_interface.h"
22 #include "chrome/browser/chromeos/drive/file_system_observer.h"
23 #include "chrome/browser/chromeos/extensions/file_manager/drive_test_util.h" 20 #include "chrome/browser/chromeos/extensions/file_manager/drive_test_util.h"
24 #include "chrome/browser/extensions/component_loader.h" 21 #include "chrome/browser/extensions/component_loader.h"
25 #include "chrome/browser/extensions/extension_apitest.h" 22 #include "chrome/browser/extensions/extension_apitest.h"
26 #include "chrome/browser/extensions/extension_test_message_listener.h" 23 #include "chrome/browser/extensions/extension_test_message_listener.h"
27 #include "chrome/browser/google_apis/fake_drive_service.h" 24 #include "chrome/browser/google_apis/fake_drive_service.h"
28 #include "chrome/browser/google_apis/gdata_wapi_parser.h" 25 #include "chrome/browser/google_apis/gdata_wapi_parser.h"
29 #include "chrome/browser/google_apis/test_util.h" 26 #include "chrome/browser/google_apis/test_util.h"
30 #include "chrome/browser/profiles/profile.h" 27 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/common/chrome_switches.h" 28 #include "chrome/common/chrome_switches.h"
32 #include "chrome/common/extensions/extension.h" 29 #include "chrome/common/extensions/extension.h"
33 #include "chromeos/chromeos_switches.h" 30 #include "chromeos/chromeos_switches.h"
34 #include "content/public/browser/browser_context.h" 31 #include "content/public/browser/browser_context.h"
35 #include "webkit/browser/fileapi/external_mount_points.h" 32 #include "webkit/browser/fileapi/external_mount_points.h"
36 33
37 namespace { 34 namespace {
38 35
39 const char kKeyboardTestFileName[] = "world.ogv";
40 const char kKeyboardTestFileCopyName[] = "world (1).ogv";
41
42 // Test suffixes appended to the Javascript tests' names. 36 // Test suffixes appended to the Javascript tests' names.
43 const char kDownloadsVolume[] = "Downloads"; 37 const char kDownloadsVolume[] = "Downloads";
44 const char kDriveVolume[] = "Drive"; 38 const char kDriveVolume[] = "Drive";
45 39
46 enum EntryType { 40 enum EntryType {
47 FILE, 41 FILE,
48 DIRECTORY, 42 DIRECTORY,
49 }; 43 };
50 44
51 enum SharedOption { 45 enum SharedOption {
52 NONE, 46 NONE,
53 SHARED, 47 SHARED,
54 }; 48 };
55 49
56 struct TestEntryInfo { 50 struct TestEntryInfo {
57 EntryType type; 51 EntryType type;
58 const char* source_file_name; // Source file name to be used as a prototype. 52 const char* source_file_name; // Source file name to be used as a prototype.
59 const char* target_name; // Target file or directory name. 53 const char* target_name; // Target file or directory name.
60 const char* mime_type; 54 const char* mime_type;
61 SharedOption shared_option; 55 SharedOption shared_option;
62 const char* last_modified_time_as_string; 56 const char* last_modified_time_as_string;
63 }; 57 };
64 58
65 TestEntryInfo kTestEntrySetCommon[] = { 59 TestEntryInfo kTestEntrySetCommon[] = {
66 { FILE, "text.txt", "hello.txt", "text/plain", NONE, "4 Sep 1998 12:34:56" }, 60 { FILE, "text.txt", "hello.txt", "text/plain", NONE, "4 Sep 1998 12:34:56" },
67 { FILE, "image.png", "My Desktop Background.png", "text/plain", NONE, 61 { FILE, "image.png", "My Desktop Background.png", "text/plain", NONE,
68 "18 Jan 2038 01:02:03" }, 62 "18 Jan 2038 01:02:03" },
69 { FILE, "video.ogv", kKeyboardTestFileName, "text/plain", NONE, 63 { FILE, "video.ogv", "world.ogv", "text/plain", NONE,
70 "4 July 2012 10:35:00" }, 64 "4 July 2012 10:35:00" },
71 { DIRECTORY, "", "photos", NULL, NONE, "1 Jan 1980 23:59:59" }, 65 { DIRECTORY, "", "photos", NULL, NONE, "1 Jan 1980 23:59:59" },
72 { DIRECTORY, "", ".warez", NULL, NONE, "26 Oct 1985 13:39" } 66 { DIRECTORY, "", ".warez", NULL, NONE, "26 Oct 1985 13:39" }
73 }; 67 };
74 68
75 TestEntryInfo kTestEntrySetDriveOnly[] = { 69 TestEntryInfo kTestEntrySetDriveOnly[] = {
76 { FILE, "", "Test Document", "application/vnd.google-apps.document", NONE, 70 { FILE, "", "Test Document", "application/vnd.google-apps.document", NONE,
77 "10 Apr 2013 16:20:00" }, 71 "10 Apr 2013 16:20:00" },
78 { FILE, "", "Test Shared Document", "application/vnd.google-apps.document", 72 { FILE, "", "Test Shared Document", "application/vnd.google-apps.document",
79 SHARED, "20 Mar 2013 22:40:00" } 73 SHARED, "20 Mar 2013 22:40:00" }
80 }; 74 };
81 75
82 // Monitors changes to a single file until the supplied condition callback
83 // returns true. Usage:
84 // TestFilePathWatcher watcher(path_to_file, MyConditionCallback);
85 // watcher.StartAndWaitUntilReady();
86 // ... trigger filesystem modification ...
87 // watcher.RunMessageLoopUntilConditionSatisfied();
88 class TestFilePathWatcher {
89 public:
90 typedef base::Callback<bool(const base::FilePath& file_path)>
91 ConditionCallback;
92
93 // Stores the supplied |path| and |condition| for later use (no side effects).
94 TestFilePathWatcher(const base::FilePath& path,
95 const ConditionCallback& condition);
96
97 // Waits (running a message pump) until the callback returns true or
98 // FilePathWatcher reports an error. Return true on success.
99 bool RunMessageLoopUntilConditionSatisfied();
100
101 private:
102 // Starts the FilePathWatcher to watch the target file. Also check if the
103 // condition is already met.
104 void StartWatching();
105
106 // FilePathWatcher callback (on the FILE thread). Posts Done() to the UI
107 // thread when the condition is satisfied or there is an error.
108 void FilePathWatcherCallback(const base::FilePath& path, bool error);
109
110 const base::FilePath path_;
111 ConditionCallback condition_;
112 scoped_ptr<base::FilePathWatcher> watcher_;
113 base::RunLoop run_loop_;
114 base::Closure quit_closure_;
115 bool failed_;
116 };
117
118 TestFilePathWatcher::TestFilePathWatcher(const base::FilePath& path,
119 const ConditionCallback& condition)
120 : path_(path),
121 condition_(condition),
122 quit_closure_(run_loop_.QuitClosure()),
123 failed_(false) {
124 }
125
126 void TestFilePathWatcher::StartWatching() {
127 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
128
129 watcher_.reset(new base::FilePathWatcher);
130 failed_ = !watcher_->Watch(
131 path_, false /*recursive*/,
132 base::Bind(&TestFilePathWatcher::FilePathWatcherCallback,
133 base::Unretained(this)));
134
135 // If failed to start the watcher, then quit the message loop immediately.
136 // Also, if the condition was already met before FilePathWatcher was launched,
137 // FilePathWatcher won't be able to detect a change, so check the condition
138 // here.
139 if (failed_ || condition_.Run(path_)) {
140 watcher_.reset();
141 content::BrowserThread::PostTask(content::BrowserThread::UI,
142 FROM_HERE,
143 quit_closure_);
144 return;
145 }
146 }
147
148 void TestFilePathWatcher::FilePathWatcherCallback(const base::FilePath& path,
149 bool failed) {
150 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
151 DCHECK_EQ(path_.value(), path.value());
152
153 if (failed || condition_.Run(path)) {
154 failed_ = failed;
155 watcher_.reset();
156 content::BrowserThread::PostTask(content::BrowserThread::UI,
157 FROM_HERE,
158 quit_closure_);
159 }
160 }
161
162 bool TestFilePathWatcher::RunMessageLoopUntilConditionSatisfied() {
163 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
164
165 content::BrowserThread::PostTask(
166 content::BrowserThread::FILE,
167 FROM_HERE,
168 base::Bind(&TestFilePathWatcher::StartWatching,
169 base::Unretained(this)));
170
171 // Wait until the condition is met.
172 run_loop_.Run();
173 return !failed_;
174 }
175
176 // Returns true if a file with the given size is present at |path|.
177 bool FilePresentWithSize(const int64 file_size,
178 const base::FilePath& path) {
179 int64 copy_size = 0;
180 // If the file doesn't exist yet this will fail and we'll keep waiting.
181 if (!file_util::GetFileSize(path, &copy_size))
182 return false;
183 return (copy_size == file_size);
184 }
185
186 // Returns true if a file is not present at |path|.
187 bool FileNotPresent(const base::FilePath& path) {
188 return !file_util::PathExists(path);
189 };
190
191 // The base class of volumes for test. 76 // The base class of volumes for test.
192 // Sub-classes of this class are used by test cases and provide operations such 77 // Sub-classes of this class are used by test cases and provide operations such
193 // as creating files for each type of test volume. 78 // as creating files for each type of test volume.
194 class TestVolume { 79 class TestVolume {
195 public: 80 public:
196 virtual ~TestVolume() {} 81 virtual ~TestVolume() {}
197 82
198 // Creates an entry with given information. 83 // Creates an entry with given information.
199 virtual void CreateEntry(const TestEntryInfo& entry) = 0; 84 virtual void CreateEntry(const TestEntryInfo& entry) = 0;
200 85
201 // Returns the path of the root directory.
202 virtual base::FilePath GetRootPath() const = 0;
203
204 // Returns true if |file_path| exists.
205 virtual bool PathExists(const base::FilePath& file_path) const = 0;
206
207 // Returns the name of volume such as "Downloads" or "Drive". 86 // Returns the name of volume such as "Downloads" or "Drive".
208 virtual std::string GetName() const = 0; 87 virtual std::string GetName() const = 0;
209
210 // Waits until a file with the given size is present at |path|. Returns
211 // true on success.
212 virtual bool WaitUntilFilePresentWithSize(const base::FilePath& file_path,
213 int64 file_size) = 0;
214
215 // Waits until a file is not present at |path|. Returns true on success.
216 virtual bool WaitUntilFileNotPresent(const base::FilePath& file_path) = 0;
217 }; 88 };
218 89
219 // The local volume class for test. 90 // The local volume class for test.
220 // This class provides the operations for a test volume that simulates local 91 // This class provides the operations for a test volume that simulates local
221 // drive. 92 // drive.
222 class LocalTestVolume : public TestVolume { 93 class LocalTestVolume : public TestVolume {
223 public: 94 public:
224 explicit LocalTestVolume(const std::string& mount_name) 95 explicit LocalTestVolume(const std::string& mount_name)
225 : mount_name_(mount_name) { 96 : mount_name_(mount_name) {
226 } 97 }
227 98
228 LocalTestVolume(const std::string& mount_name,
229 const base::FilePath& local_path)
230 : mount_name_(mount_name),
231 local_path_(local_path) {
232 }
233
234 // Adds this volume to the file system as a local volume. Returns true on 99 // Adds this volume to the file system as a local volume. Returns true on
235 // success. 100 // success.
236 bool Mount(Profile* profile) { 101 bool Mount(Profile* profile) {
237 if (local_path_.empty()) { 102 if (local_path_.empty()) {
238 if (!tmp_dir_.CreateUniqueTempDir()) 103 if (!tmp_dir_.CreateUniqueTempDir())
239 return false; 104 return false;
240 local_path_ = tmp_dir_.path().Append(mount_name_); 105 local_path_ = tmp_dir_.path().Append(mount_name_);
241 } 106 }
242 fileapi::ExternalMountPoints* const mount_points = 107 fileapi::ExternalMountPoints* const mount_points =
243 content::BrowserContext::GetMountPoints(profile); 108 content::BrowserContext::GetMountPoints(profile);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 "Failed to create a directory: " << target_name; 156 "Failed to create a directory: " << target_name;
292 base::Time time; 157 base::Time time;
293 ASSERT_TRUE(base::Time::FromString(modification_time.c_str(), &time)); 158 ASSERT_TRUE(base::Time::FromString(modification_time.c_str(), &time));
294 ASSERT_TRUE(file_util::SetLastModifiedTime(path, time)); 159 ASSERT_TRUE(file_util::SetLastModifiedTime(path, time));
295 } 160 }
296 161
297 virtual std::string GetName() const OVERRIDE { 162 virtual std::string GetName() const OVERRIDE {
298 return mount_name_; 163 return mount_name_;
299 } 164 }
300 165
301 virtual base::FilePath GetRootPath() const OVERRIDE {
302 return local_path_;
303 }
304
305 virtual bool PathExists(const base::FilePath& file_path) const OVERRIDE {
306 return file_util::PathExists(file_path);
307 }
308
309 virtual bool WaitUntilFilePresentWithSize(
310 const base::FilePath& file_path,
311 int64 file_size) OVERRIDE {
312 TestFilePathWatcher watcher(file_path, base::Bind(FilePresentWithSize,
313 file_size));
314 return watcher.RunMessageLoopUntilConditionSatisfied();
315 }
316
317 virtual bool WaitUntilFileNotPresent(
318 const base::FilePath& file_path) OVERRIDE {
319 TestFilePathWatcher watcher(file_path, base::Bind(FileNotPresent));
320 return watcher.RunMessageLoopUntilConditionSatisfied();
321 }
322
323 private: 166 private:
324 std::string mount_name_; 167 std::string mount_name_;
325 base::FilePath local_path_; 168 base::FilePath local_path_;
326 base::ScopedTempDir tmp_dir_; 169 base::ScopedTempDir tmp_dir_;
327 }; 170 };
328 171
329 // The drive volume class for test. 172 // The drive volume class for test.
330 // This class provides the operations for a test volume that simulates Google 173 // This class provides the operations for a test volume that simulates Google
331 // drive. 174 // drive.
332 class DriveTestVolume : public TestVolume, 175 class DriveTestVolume : public TestVolume {
333 public drive::FileSystemObserver {
334 public: 176 public:
335 DriveTestVolume() : fake_drive_service_(NULL), 177 DriveTestVolume() : fake_drive_service_(NULL),
336 integration_service_(NULL), 178 integration_service_(NULL) {
337 waiting_for_directory_change_(false) {
338 } 179 }
339 180
340 // Send request to add this volume to the file system as Google drive. 181 // Send request to add this volume to the file system as Google drive.
341 // This method must be calld at SetUp method of FileManagerBrowserTestBase. 182 // This method must be calld at SetUp method of FileManagerBrowserTestBase.
342 // Returns true on success. 183 // Returns true on success.
343 bool SetUp() { 184 bool SetUp() {
344 if (!test_cache_root_.CreateUniqueTempDir()) 185 if (!test_cache_root_.CreateUniqueTempDir())
345 return false; 186 return false;
346 drive::DriveIntegrationServiceFactory::SetFactoryForTest( 187 drive::DriveIntegrationServiceFactory::SetFactoryForTest(
347 base::Bind(&DriveTestVolume::CreateDriveIntegrationService, 188 base::Bind(&DriveTestVolume::CreateDriveIntegrationService,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 time, 273 time,
433 google_apis::test_util::CreateCopyResultCallback(&error, 274 google_apis::test_util::CreateCopyResultCallback(&error,
434 &resource_entry)); 275 &resource_entry));
435 MessageLoop::current()->RunUntilIdle(); 276 MessageLoop::current()->RunUntilIdle();
436 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); 277 ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
437 ASSERT_TRUE(resource_entry); 278 ASSERT_TRUE(resource_entry);
438 279
439 CheckForUpdates(); 280 CheckForUpdates();
440 } 281 }
441 282
442 virtual base::FilePath GetRootPath() const OVERRIDE {
443 return base::FilePath(drive::util::kDriveMyDriveRootPath);
444 }
445
446 virtual bool PathExists(const base::FilePath& file_path) const OVERRIDE {
447 DCHECK(integration_service_);
448 DCHECK(integration_service_->file_system());
449
450 drive::FileError error = drive::FILE_ERROR_FAILED;
451 scoped_ptr<drive::ResourceEntry> entry_proto;
452 integration_service_->file_system()->GetResourceEntryByPath(
453 file_path,
454 google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
455 google_apis::test_util::RunBlockingPoolTask();
456
457 return error == drive::FILE_ERROR_OK;
458 }
459
460 virtual bool WaitUntilFilePresentWithSize(
461 const base::FilePath& file_path,
462 int64 file_size) OVERRIDE {
463 while (true) {
464 if (FileIsPresentWithSize(file_path, file_size))
465 return true;
466 WaitUntilDirectoryChanged();
467 }
468 NOTREACHED();
469 return false;
470 }
471
472 virtual bool WaitUntilFileNotPresent(
473 const base::FilePath& file_path) OVERRIDE {
474 while (true) {
475 if (FileIsNotPresent(file_path))
476 return true;
477 WaitUntilDirectoryChanged();
478 }
479 NOTREACHED();
480 return false;
481 }
482
483 virtual void OnDirectoryChanged(
484 const base::FilePath& directory_path) OVERRIDE {
485 if (waiting_for_directory_change_)
486 MessageLoop::current()->Quit();
487 }
488
489 // Notifies FileSystem that the contents in FakeDriveService are 283 // Notifies FileSystem that the contents in FakeDriveService are
490 // changed, hence the new contents should be fetched. 284 // changed, hence the new contents should be fetched.
491 void CheckForUpdates() { 285 void CheckForUpdates() {
492 if (integration_service_ && integration_service_->file_system()) { 286 if (integration_service_ && integration_service_->file_system()) {
493 integration_service_->file_system()->CheckForUpdates(); 287 integration_service_->file_system()->CheckForUpdates();
494 } 288 }
495 } 289 }
496 290
497 // Waits until a notification for a directory change is received.
498 void WaitUntilDirectoryChanged() {
499 waiting_for_directory_change_ = true;
500 MessageLoop::current()->Run();
501 waiting_for_directory_change_ = false;
502 }
503
504 // Returns true if a file of the size |file_size| is present at |file_path|.
505 bool FileIsPresentWithSize(
506 const base::FilePath& file_path,
507 int64 file_size) {
508 DCHECK(integration_service_);
509 DCHECK(integration_service_->file_system());
510
511 drive::FileError error = drive::FILE_ERROR_FAILED;
512 scoped_ptr<drive::ResourceEntry> entry_proto;
513 integration_service_->file_system()->GetResourceEntryByPath(
514 file_path,
515 google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
516 google_apis::test_util::RunBlockingPoolTask();
517
518 return (error == drive::FILE_ERROR_OK &&
519 entry_proto->file_info().size() == file_size);
520 }
521
522 // Returns true if a file is not present at |file_path|.
523 bool FileIsNotPresent(
524 const base::FilePath& file_path) {
525 DCHECK(integration_service_);
526 DCHECK(integration_service_->file_system());
527
528 drive::FileError error = drive::FILE_ERROR_FAILED;
529 scoped_ptr<drive::ResourceEntry> entry_proto;
530 integration_service_->file_system()->GetResourceEntryByPath(
531 file_path,
532 google_apis::test_util::CreateCopyResultCallback(&error, &entry_proto));
533 google_apis::test_util::RunBlockingPoolTask();
534
535 return error == drive::FILE_ERROR_NOT_FOUND;
536 }
537
538 drive::DriveIntegrationService* CreateDriveIntegrationService( 291 drive::DriveIntegrationService* CreateDriveIntegrationService(
539 Profile* profile) { 292 Profile* profile) {
540 fake_drive_service_ = new google_apis::FakeDriveService; 293 fake_drive_service_ = new google_apis::FakeDriveService;
541 fake_drive_service_->LoadResourceListForWapi( 294 fake_drive_service_->LoadResourceListForWapi(
542 "chromeos/gdata/empty_feed.json"); 295 "chromeos/gdata/empty_feed.json");
543 fake_drive_service_->LoadAccountMetadataForWapi( 296 fake_drive_service_->LoadAccountMetadataForWapi(
544 "chromeos/gdata/account_metadata.json"); 297 "chromeos/gdata/account_metadata.json");
545 fake_drive_service_->LoadAppListForDriveApi("chromeos/drive/applist.json"); 298 fake_drive_service_->LoadAppListForDriveApi("chromeos/drive/applist.json");
546 integration_service_ = new drive::DriveIntegrationService( 299 integration_service_ = new drive::DriveIntegrationService(
547 profile, 300 profile,
548 fake_drive_service_, 301 fake_drive_service_,
549 test_cache_root_.path(), 302 test_cache_root_.path(),
550 NULL); 303 NULL);
551 integration_service_->file_system()->AddObserver(this);
552 return integration_service_; 304 return integration_service_;
553 } 305 }
554 306
555 private: 307 private:
556 base::ScopedTempDir test_cache_root_; 308 base::ScopedTempDir test_cache_root_;
557 google_apis::FakeDriveService* fake_drive_service_; 309 google_apis::FakeDriveService* fake_drive_service_;
558 drive::DriveIntegrationService* integration_service_; 310 drive::DriveIntegrationService* integration_service_;
559 bool waiting_for_directory_change_;
560 }; 311 };
561 312
562 // The base test class. Used by FileManagerBrowserLocalTest, 313 // The base test class. Used by FileManagerBrowserLocalTest,
563 // FileManagerBrowserDriveTest, and FileManagerBrowserTransferTest. 314 // FileManagerBrowserDriveTest, and FileManagerBrowserTransferTest.
564 // The boolean parameter, retrieved by GetParam(), is true if testing in the 315 // The boolean parameter, retrieved by GetParam(), is true if testing in the
565 // guest mode. See SetUpCommandLine() below for details. 316 // guest mode. See SetUpCommandLine() below for details.
566 class FileManagerBrowserTestBase : public ExtensionApiTest, 317 class FileManagerBrowserTestBase : public ExtensionApiTest,
567 public ::testing::WithParamInterface<bool> { 318 public ::testing::WithParamInterface<bool> {
568 protected: 319 protected:
569 // Adds an incognito and guest-mode flags for tests in the guest mode. 320 // Adds an incognito and guest-mode flags for tests in the guest mode.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 "audio/ogg", 383 "audio/ogg",
633 NONE, 384 NONE,
634 "4 Sep 1998 00:00:00" 385 "4 Sep 1998 00:00:00"
635 }; 386 };
636 volume->CreateEntry(entry); 387 volume->CreateEntry(entry);
637 listener.Reply("file added"); 388 listener.Reply("file added");
638 389
639 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 390 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
640 } 391 }
641 392
642 void FileManagerBrowserTestBase::DoTestGalleryOpen(TestVolume* volume) {
643 ResultCatcher catcher;
644 StartTest("galleryOpen" + volume->GetName());
645 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
646 }
647
648 void FileManagerBrowserTestBase::DoTestKeyboardCopy(TestVolume* volume) {
649 base::FilePath copy_path =
650 volume->GetRootPath().AppendASCII(kKeyboardTestFileCopyName);
651 ASSERT_FALSE(volume->PathExists(copy_path));
652
653 ResultCatcher catcher;
654 ASSERT_NO_FATAL_FAILURE(StartTest("keyboardCopy" + volume->GetName()));
655
656 const int64 kKeyboardTestFileSize = 59943;
657
658 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
659 ASSERT_TRUE(volume->WaitUntilFilePresentWithSize(
660 copy_path, kKeyboardTestFileSize));
661
662 // Check that it was a copy, not a move.
663 base::FilePath source_path =
664 volume->GetRootPath().AppendASCII(kKeyboardTestFileName);
665 ASSERT_TRUE(volume->PathExists(source_path));
666 }
667
668 void FileManagerBrowserTestBase::DoTestKeyboardDelete(TestVolume* volume) {
669 base::FilePath delete_path =
670 volume->GetRootPath().AppendASCII(kKeyboardTestFileName);
671 ASSERT_TRUE(volume->PathExists(delete_path));
672
673 ResultCatcher catcher;
674 ASSERT_NO_FATAL_FAILURE(StartTest("keyboardDelete" + volume->GetName()));
675
676 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
677 ASSERT_TRUE(volume->WaitUntilFileNotPresent(delete_path));
678 }
679
680 // A class to test local volumes. 393 // A class to test local volumes.
681 class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase { 394 class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase {
682 public: 395 public:
683 FileManagerBrowserLocalTest() : volume_("Downloads") {} 396 FileManagerBrowserLocalTest() : volume_("Downloads") {}
684 397
685 protected: 398 protected:
686 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 399 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
687 FileManagerBrowserTestBase::SetUpInProcessBrowserTestFixture(); 400 FileManagerBrowserTestBase::SetUpInProcessBrowserTestFixture();
688 extensions::ComponentLoader::EnableBackgroundExtensionsForTesting(); 401 extensions::ComponentLoader::EnableBackgroundExtensionsForTesting();
689 } 402 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 // the guest mode. 479 // the guest mode.
767 INSTANTIATE_TEST_CASE_P(InNonGuestMode, 480 INSTANTIATE_TEST_CASE_P(InNonGuestMode,
768 FileManagerBrowserTransferTest, 481 FileManagerBrowserTransferTest,
769 ::testing::Values(false)); 482 ::testing::Values(false));
770 483
771 IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestFileDisplay) { 484 IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestFileDisplay) {
772 DoTestFileDisplay(&volume_); 485 DoTestFileDisplay(&volume_);
773 } 486 }
774 487
775 IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestGalleryOpen) { 488 IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestGalleryOpen) {
776 DoTestGalleryOpen(&volume_); 489 ResultCatcher catcher;
490 ASSERT_NO_FATAL_FAILURE(StartTest("galleryOpenDownloads"));
491 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
777 } 492 }
778 493
779 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestGalleryOpen) { 494 // Disabled temporarily since fails on Linux Chromium OS ASAN Tests (2).
780 DoTestGalleryOpen(&volume_); 495 // TODO(mtomasz): crbug.com/243611.
496 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, DISABLED_TestGalleryOpen) {
497 ResultCatcher catcher;
498 ASSERT_NO_FATAL_FAILURE(StartTest("galleryOpenDrive"));
499 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
781 } 500 }
782 501
783 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardCopy) { 502 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardCopy) {
784 DoTestKeyboardCopy(&volume_); 503 ResultCatcher catcher;
504 ASSERT_NO_FATAL_FAILURE(StartTest("keyboardCopyDrive"));
505 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
785 } 506 }
786 507
787 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardDelete) { 508 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestKeyboardDelete) {
788 DoTestKeyboardDelete(&volume_); 509 ResultCatcher catcher;
510 ASSERT_NO_FATAL_FAILURE(StartTest("keyboardDeleteDrive"));
511 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
789 } 512 }
790 513
791 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestOpenRecent) { 514 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestOpenRecent) {
792 ResultCatcher catcher; 515 ResultCatcher catcher;
793 ASSERT_NO_FATAL_FAILURE(StartTest("openSidebarRecent")); 516 ASSERT_NO_FATAL_FAILURE(StartTest("openSidebarRecent"));
794 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 517 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
795 } 518 }
796 519
797 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestOpenOffline) { 520 IN_PROC_BROWSER_TEST_P(FileManagerBrowserDriveTest, TestOpenOffline) {
798 ResultCatcher catcher; 521 ResultCatcher catcher;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 } 585 }
863 586
864 IN_PROC_BROWSER_TEST_P(FileManagerBrowserTransferTest, 587 IN_PROC_BROWSER_TEST_P(FileManagerBrowserTransferTest,
865 TransferFromOfflineToDrive) { 588 TransferFromOfflineToDrive) {
866 ResultCatcher catcher; 589 ResultCatcher catcher;
867 ASSERT_NO_FATAL_FAILURE(StartTest("transferFromOfflineToDrive")); 590 ASSERT_NO_FATAL_FAILURE(StartTest("transferFromOfflineToDrive"));
868 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 591 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
869 } 592 }
870 593
871 } // namespace 594 } // namespace
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/extensions/api_test/file_manager_browsertest/test_cases.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698