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 "chrome/browser/chromeos/drive/file_system.h" | 5 #include "chrome/browser/chromeos/drive/file_system.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 } | 289 } |
290 | 290 |
291 // Returns true if the cache entry exists for the given resource ID and MD5. | 291 // Returns true if the cache entry exists for the given resource ID and MD5. |
292 bool CacheEntryExists(const std::string& resource_id, | 292 bool CacheEntryExists(const std::string& resource_id, |
293 const std::string& md5) { | 293 const std::string& md5) { |
294 FileCacheEntry cache_entry; | 294 FileCacheEntry cache_entry; |
295 return GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); | 295 return GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); |
296 } | 296 } |
297 | 297 |
298 // Flag for specifying the timestamp of the test filesystem cache. | 298 // Flag for specifying the timestamp of the test filesystem cache. |
299 enum SaveTestFileSystemParam { | 299 enum SetUpTestFileSystemParam { |
300 USE_OLD_TIMESTAMP, | 300 USE_OLD_TIMESTAMP, |
301 USE_SERVER_TIMESTAMP, | 301 USE_SERVER_TIMESTAMP, |
302 }; | 302 }; |
303 | 303 |
304 // Saves a file representing a filesystem with directories: | 304 // Sets up a filesystem with directories: drive/root, drive/root/Dir1, |
305 // drive/root, drive/root/Dir1, drive/root/Dir1/SubDir2 | 305 // drive/root/Dir1/SubDir2 and files drive/root/File1, drive/root/Dir1/File2, |
306 // and files | 306 // drive/root/Dir1/SubDir2/File3. If |use_up_to_date_timestamp| is true, sets |
307 // drive/root/File1, drive/root/Dir1/File2, drive/root/Dir1/SubDir2/File3. | 307 // the changestamp to 654321, equal to that of "account_metadata.json" test |
308 // If |use_up_to_date_timestamp| is true, sets the changestamp to 654321, | 308 // data, indicating the cache is holding the latest file system info. |
309 // equal to that of "account_metadata.json" test data, indicating the cache is | 309 bool SetUpTestFileSystem(SetUpTestFileSystemParam param) { |
310 // holding the latest file system info. | |
311 bool SaveTestFileSystem(SaveTestFileSystemParam param) { | |
312 // Destroy the existing resource metadata to close DB. | 310 // Destroy the existing resource metadata to close DB. |
313 resource_metadata_.reset(); | 311 resource_metadata_.reset(); |
314 | 312 |
315 const std::string root_resource_id = | 313 const std::string root_resource_id = |
316 fake_drive_service_->GetRootResourceId(); | 314 fake_drive_service_->GetRootResourceId(); |
317 scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests> | 315 scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests> |
318 resource_metadata(new internal::ResourceMetadata( | 316 resource_metadata(new internal::ResourceMetadata( |
319 cache_->GetCacheDirectoryPath(internal::FileCache::CACHE_TYPE_META), | 317 cache_->GetCacheDirectoryPath(internal::FileCache::CACHE_TYPE_META), |
320 blocking_task_runner_)); | 318 blocking_task_runner_)); |
321 | 319 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests> | 452 scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests> |
455 resource_metadata_; | 453 resource_metadata_; |
456 scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; | 454 scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; |
457 scoped_ptr<StrictMock<MockCacheObserver> > mock_cache_observer_; | 455 scoped_ptr<StrictMock<MockCacheObserver> > mock_cache_observer_; |
458 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; | 456 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; |
459 | 457 |
460 int root_feed_changestamp_; | 458 int root_feed_changestamp_; |
461 }; | 459 }; |
462 | 460 |
463 TEST_F(DriveFileSystemTest, DuplicatedAsyncInitialization) { | 461 TEST_F(DriveFileSystemTest, DuplicatedAsyncInitialization) { |
| 462 // "Fast fetch" will fire an OnirectoryChanged event. |
| 463 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
| 464 Eq(base::FilePath(FILE_PATH_LITERAL("drive"))))).Times(1); |
| 465 |
464 int counter = 0; | 466 int counter = 0; |
465 const GetEntryInfoCallback& callback = base::Bind( | 467 const GetEntryInfoCallback& callback = base::Bind( |
466 &AsyncInitializationCallback, &counter, 2, &message_loop_); | 468 &AsyncInitializationCallback, &counter, 2, &message_loop_); |
467 | 469 |
468 file_system_->GetEntryInfoByPath( | 470 file_system_->GetEntryInfoByPath( |
469 base::FilePath(FILE_PATH_LITERAL("drive/root")), callback); | 471 base::FilePath(FILE_PATH_LITERAL("drive/root")), callback); |
470 file_system_->GetEntryInfoByPath( | 472 file_system_->GetEntryInfoByPath( |
471 base::FilePath(FILE_PATH_LITERAL("drive/root")), callback); | 473 base::FilePath(FILE_PATH_LITERAL("drive/root")), callback); |
472 message_loop_.Run(); // Wait to get our result | 474 message_loop_.Run(); // Wait to get our result |
473 EXPECT_EQ(2, counter); | 475 EXPECT_EQ(2, counter); |
474 | 476 |
475 // Although GetEntryInfoByPath() was called twice, the account metadata | 477 // Although GetEntryInfoByPath() was called twice, the account metadata |
476 // should only be loaded once. In the past, there was a bug that caused | 478 // should only be loaded once. In the past, there was a bug that caused |
477 // it to be loaded twice. | 479 // it to be loaded twice. |
478 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | |
479 EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); | 480 EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); |
| 481 // See the comment in GetMyDriveRoot test case why this is 2. |
| 482 EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); |
480 } | 483 } |
481 | 484 |
482 TEST_F(DriveFileSystemTest, GetGrandRootEntry) { | 485 TEST_F(DriveFileSystemTest, GetGrandRootEntry) { |
483 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive")); | 486 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive")); |
484 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); | 487 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); |
485 ASSERT_TRUE(entry); | 488 ASSERT_TRUE(entry); |
486 EXPECT_EQ(util::kDriveGrandRootSpecialResourceId, entry->resource_id()); | 489 EXPECT_EQ(util::kDriveGrandRootSpecialResourceId, entry->resource_id()); |
487 | 490 |
488 // Getting the grand root entry should not cause the resource load to happen. | 491 // Getting the grand root entry should not cause the resource load to happen. |
489 EXPECT_EQ(0, fake_drive_service_->about_resource_load_count()); | 492 EXPECT_EQ(0, fake_drive_service_->about_resource_load_count()); |
490 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); | 493 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); |
491 } | 494 } |
492 | 495 |
493 TEST_F(DriveFileSystemTest, GetOtherDirEntry) { | 496 TEST_F(DriveFileSystemTest, GetOtherDirEntry) { |
494 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/other")); | 497 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/other")); |
495 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); | 498 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); |
496 ASSERT_TRUE(entry); | 499 ASSERT_TRUE(entry); |
497 EXPECT_EQ(util::kDriveOtherDirSpecialResourceId, entry->resource_id()); | 500 EXPECT_EQ(util::kDriveOtherDirSpecialResourceId, entry->resource_id()); |
498 | 501 |
499 // Getting the "other" directory entry should not cause the resource load to | 502 // Getting the "other" directory entry should not cause the resource load to |
500 // happen. | 503 // happen. |
501 EXPECT_EQ(0, fake_drive_service_->about_resource_load_count()); | 504 EXPECT_EQ(0, fake_drive_service_->about_resource_load_count()); |
502 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); | 505 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); |
503 } | 506 } |
504 | 507 |
505 TEST_F(DriveFileSystemTest, GetMyDriveRoot) { | 508 TEST_F(DriveFileSystemTest, GetMyDriveRoot) { |
| 509 // "Fast fetch" will fire an OnirectoryChanged event. |
| 510 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
| 511 Eq(base::FilePath(FILE_PATH_LITERAL("drive"))))).Times(1); |
| 512 |
506 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root")); | 513 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root")); |
507 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); | 514 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); |
508 ASSERT_TRUE(entry); | 515 ASSERT_TRUE(entry); |
509 EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id()); | 516 EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id()); |
510 | 517 |
511 // The changestamp should be propagated to the root directory. | 518 // Absence of "drive/root" in the local metadata triggers the "fast fetch" |
512 EXPECT_EQ(fake_drive_service_->largest_changestamp(), | 519 // of "drive" directory. Fetch of "drive" grand root directory has a special |
513 entry->directory_specific_info().changestamp()); | 520 // implementation. Instead of normal GetResourceListInDirectory(), it is |
| 521 // emulated by calling GetAboutResource() so that the resource_id of |
| 522 // "drive/root" is listed. |
| 523 // Together with the normal GetAboutResource() call to retrieve the largest |
| 524 // changestamp, the method is called twice. |
| 525 EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); |
514 | 526 |
515 // The resource load should happen because "My Drive"'s root is not the grand | 527 // After "fast fetch" is done, full resource list is fetched. |
516 // root entry and hence does not present until the initial loading. | |
517 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | |
518 EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); | 528 EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); |
519 } | 529 } |
520 | 530 |
521 TEST_F(DriveFileSystemTest, GetExistingFile) { | 531 TEST_F(DriveFileSystemTest, GetExistingFile) { |
522 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 532 const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
523 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); | 533 scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); |
524 ASSERT_TRUE(entry); | 534 ASSERT_TRUE(entry); |
525 EXPECT_EQ("file:2_file_resource_id", entry->resource_id()); | 535 EXPECT_EQ("file:2_file_resource_id", entry->resource_id()); |
526 | 536 |
527 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | 537 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 | 837 |
828 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 838 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
829 "drive/root/Directory 1")))); | 839 "drive/root/Directory 1")))); |
830 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 840 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
831 "drive/root/Directory 1/SubDirectory File 1.txt")))); | 841 "drive/root/Directory 1/SubDirectory File 1.txt")))); |
832 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 842 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
833 "drive/root/Directory 1/New SubDirectory File 1.txt")))); | 843 "drive/root/Directory 1/New SubDirectory File 1.txt")))); |
834 } | 844 } |
835 | 845 |
836 TEST_F(DriveFileSystemTest, CachedFeedLoadingThenServerFeedLoading) { | 846 TEST_F(DriveFileSystemTest, CachedFeedLoadingThenServerFeedLoading) { |
837 ASSERT_TRUE(SaveTestFileSystem(USE_SERVER_TIMESTAMP)); | 847 ASSERT_TRUE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP)); |
838 | 848 |
839 // Kicks loading of cached file system and query for server update. | 849 // Kicks loading of cached file system and query for server update. |
840 EXPECT_TRUE(ReadDirectoryByPathSync(util::GetDriveMyDriveRootPath())); | 850 EXPECT_TRUE(ReadDirectoryByPathSync(util::GetDriveMyDriveRootPath())); |
841 | 851 |
842 // SaveTestFileSystem and "account_metadata.json" have the same changestamp, | 852 // SetUpTestFileSystem and "account_metadata.json" have the same changestamp, |
843 // so no request for new feeds (i.e., call to GetResourceList) should happen. | 853 // so no request for new feeds (i.e., call to GetResourceList) should happen. |
844 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | 854 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
845 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); | 855 EXPECT_EQ(0, fake_drive_service_->resource_list_load_count()); |
846 | 856 |
847 // Since the file system has verified that it holds the latest snapshot, | 857 // Since the file system has verified that it holds the latest snapshot, |
848 // it should change its state to "loaded", which admits periodic refresh. | 858 // it should change its state to "loaded", which admits periodic refresh. |
849 // To test it, call CheckForUpdates and verify it does try to check updates. | 859 // To test it, call CheckForUpdates and verify it does try to check updates. |
850 file_system_->CheckForUpdates(); | 860 file_system_->CheckForUpdates(); |
851 google_apis::test_util::RunBlockingPoolTask(); | 861 google_apis::test_util::RunBlockingPoolTask(); |
852 EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); | 862 EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); |
853 } | 863 } |
854 | 864 |
855 TEST_F(DriveFileSystemTest, OfflineCachedFeedLoading) { | 865 TEST_F(DriveFileSystemTest, OfflineCachedFeedLoading) { |
856 ASSERT_TRUE(SaveTestFileSystem(USE_OLD_TIMESTAMP)); | 866 ASSERT_TRUE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
857 | 867 |
858 // Make GetResourceList fail for simulating offline situation. This will leave | 868 // Make GetResourceList fail for simulating offline situation. This will leave |
859 // the file system "loaded from cache, but not synced with server" state. | 869 // the file system "loaded from cache, but not synced with server" state. |
860 fake_drive_service_->set_offline(true); | 870 fake_drive_service_->set_offline(true); |
861 | 871 |
862 // Kicks loading of cached file system and query for server update. | 872 // Kicks loading of cached file system and query for server update. |
863 EXPECT_TRUE(ReadDirectoryByPathSync(util::GetDriveMyDriveRootPath())); | 873 EXPECT_TRUE(ReadDirectoryByPathSync(util::GetDriveMyDriveRootPath())); |
864 // Loading of account metadata should not happen as it's offline. | 874 // Loading of account metadata should not happen as it's offline. |
865 EXPECT_EQ(0, fake_drive_service_->account_metadata_load_count()); | 875 EXPECT_EQ(0, fake_drive_service_->account_metadata_load_count()); |
866 | 876 |
(...skipping 17 matching lines...) Expand all Loading... |
884 | 894 |
885 file_system_->CheckForUpdates(); | 895 file_system_->CheckForUpdates(); |
886 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) | 896 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) |
887 .Times(AtLeast(1)); | 897 .Times(AtLeast(1)); |
888 | 898 |
889 google_apis::test_util::RunBlockingPoolTask(); | 899 google_apis::test_util::RunBlockingPoolTask(); |
890 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | 900 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
891 EXPECT_EQ(1, fake_drive_service_->change_list_load_count()); | 901 EXPECT_EQ(1, fake_drive_service_->change_list_load_count()); |
892 } | 902 } |
893 | 903 |
| 904 TEST_F(DriveFileSystemTest, ReadDirectoryWhileRefreshing) { |
| 905 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) |
| 906 .Times(AtLeast(1)); |
| 907 |
| 908 // Enter the "refreshing" state so the fast fetch will be performed. |
| 909 ASSERT_TRUE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
| 910 file_system_->CheckForUpdates(); |
| 911 |
| 912 // The list of resources in "drive/root/Dir1" should be fetched. |
| 913 EXPECT_TRUE(ReadDirectoryByPathSync(base::FilePath( |
| 914 FILE_PATH_LITERAL("drive/root/Dir1")))); |
| 915 EXPECT_EQ(1, fake_drive_service_->directory_load_count()); |
| 916 } |
| 917 |
| 918 TEST_F(DriveFileSystemTest, GetEntryInfoExistingWhileRefreshing) { |
| 919 // Enter the "refreshing" state. |
| 920 ASSERT_TRUE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
| 921 file_system_->CheckForUpdates(); |
| 922 |
| 923 // If an entry is already found in local metadata, no directory fetch happens. |
| 924 EXPECT_TRUE(GetEntryInfoByPathSync(base::FilePath( |
| 925 FILE_PATH_LITERAL("drive/root/Dir1/File2")))); |
| 926 EXPECT_EQ(0, fake_drive_service_->directory_load_count()); |
| 927 } |
| 928 |
| 929 TEST_F(DriveFileSystemTest, GetEntryInfoNonExistentWhileRefreshing) { |
| 930 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) |
| 931 .Times(AtLeast(1)); |
| 932 |
| 933 // Enter the "refreshing" state so the fast fetch will be performed. |
| 934 ASSERT_TRUE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
| 935 file_system_->CheckForUpdates(); |
| 936 |
| 937 // If an entry is not found, parent directory's resource list is fetched. |
| 938 EXPECT_FALSE(GetEntryInfoByPathSync(base::FilePath( |
| 939 FILE_PATH_LITERAL("drive/root/Dir1/NonExistentFile")))); |
| 940 EXPECT_EQ(1, fake_drive_service_->directory_load_count()); |
| 941 } |
| 942 |
894 TEST_F(DriveFileSystemTest, TransferFileFromLocalToRemote_RegularFile) { | 943 TEST_F(DriveFileSystemTest, TransferFileFromLocalToRemote_RegularFile) { |
895 fake_free_disk_space_getter_->set_fake_free_disk_space(kLotsOfSpace); | 944 fake_free_disk_space_getter_->set_fake_free_disk_space(kLotsOfSpace); |
896 | 945 |
897 ASSERT_TRUE(LoadRootFeedDocument()); | 946 ASSERT_TRUE(LoadRootFeedDocument()); |
898 | 947 |
899 // We'll add a file to the Drive root directory. | 948 // We'll add a file to the Drive root directory. |
900 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 949 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
901 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); | 950 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); |
902 | 951 |
903 // Prepare a local file. | 952 // Prepare a local file. |
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2167 google_apis::test_util::CreateCopyResultCallback(&error)); | 2216 google_apis::test_util::CreateCopyResultCallback(&error)); |
2168 google_apis::test_util::RunBlockingPoolTask(); | 2217 google_apis::test_util::RunBlockingPoolTask(); |
2169 | 2218 |
2170 // It must fail. | 2219 // It must fail. |
2171 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); | 2220 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); |
2172 } | 2221 } |
2173 | 2222 |
2174 // TODO(satorux): Testing if WebAppsRegistry is loaded here is awkward. We | 2223 // TODO(satorux): Testing if WebAppsRegistry is loaded here is awkward. We |
2175 // should move this to change_list_loader_unittest.cc. crbug.com/161703 | 2224 // should move this to change_list_loader_unittest.cc. crbug.com/161703 |
2176 TEST_F(DriveFileSystemTest, WebAppsRegistryIsLoaded) { | 2225 TEST_F(DriveFileSystemTest, WebAppsRegistryIsLoaded) { |
2177 ASSERT_TRUE(SaveTestFileSystem(USE_SERVER_TIMESTAMP)); | 2226 ASSERT_TRUE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP)); |
2178 | 2227 |
2179 // No apps should be found as the webapps registry is empty. | 2228 // No apps should be found as the webapps registry is empty. |
2180 ScopedVector<DriveWebAppInfo> apps; | 2229 ScopedVector<DriveWebAppInfo> apps; |
2181 drive_webapps_registry_->GetWebAppsForFile( | 2230 drive_webapps_registry_->GetWebAppsForFile( |
2182 base::FilePath::FromUTF8Unsafe("foo.exe"), | 2231 base::FilePath::FromUTF8Unsafe("foo.exe"), |
2183 "" /* mime_type */, | 2232 "" /* mime_type */, |
2184 &apps); | 2233 &apps); |
2185 EXPECT_TRUE(apps.empty()); | 2234 EXPECT_TRUE(apps.empty()); |
2186 | 2235 |
2187 // Kicks loading of cached file system and query for server update. This | 2236 // Kicks loading of cached file system and query for server update. This |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2308 | 2357 |
2309 // Create fails if the parent directory does not exist. | 2358 // Create fails if the parent directory does not exist. |
2310 file_system_->CreateFile( | 2359 file_system_->CreateFile( |
2311 kFileInNonExistingDirectory, false, | 2360 kFileInNonExistingDirectory, false, |
2312 google_apis::test_util::CreateCopyResultCallback(&error)); | 2361 google_apis::test_util::CreateCopyResultCallback(&error)); |
2313 google_apis::test_util::RunBlockingPoolTask(); | 2362 google_apis::test_util::RunBlockingPoolTask(); |
2314 EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error); | 2363 EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error); |
2315 } | 2364 } |
2316 | 2365 |
2317 } // namespace drive | 2366 } // namespace drive |
OLD | NEW |