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 "base/file_util.h" | 5 #include "base/file_util.h" |
6 #include "base/json/json_file_value_serializer.h" | 6 #include "base/json/json_file_value_serializer.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "chrome/browser/chromeos/cros/cros_library.h" | 9 #include "chrome/browser/chromeos/cros/cros_library.h" |
10 #include "chrome/browser/chromeos/gdata/drive_webapps_registry.h" | 10 #include "chrome/browser/chromeos/gdata/drive_webapps_registry.h" |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 ToCacheEntry(resource.cache_state).IsPresent() ? | 330 ToCacheEntry(resource.cache_state).IsPresent() ? |
331 base::PLATFORM_FILE_OK : | 331 base::PLATFORM_FILE_OK : |
332 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 332 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
333 resource.expected_file_extension); | 333 resource.expected_file_extension); |
334 EXPECT_EQ(1, num_callback_invocations_); | 334 EXPECT_EQ(1, num_callback_invocations_); |
335 | 335 |
336 // Verify cache state. | 336 // Verify cache state. |
337 std::string md5; | 337 std::string md5; |
338 if (ToCacheEntry(resource.cache_state).IsPresent()) | 338 if (ToCacheEntry(resource.cache_state).IsPresent()) |
339 md5 = resource.md5; | 339 md5 = resource.md5; |
340 scoped_ptr<GDataCacheEntry> cache_entry = | 340 GDataCacheEntry cache_entry; |
341 GetCacheEntryFromOriginThread(resource.resource_id, md5); | 341 ASSERT_TRUE(GetCacheEntryFromOriginThread( |
342 ASSERT_TRUE(cache_entry.get()); | 342 resource.resource_id, md5, &cache_entry)); |
343 EXPECT_EQ(resource.cache_state, cache_entry->cache_state()); | 343 EXPECT_EQ(resource.cache_state, cache_entry.cache_state()); |
344 EXPECT_EQ(resource.expected_sub_dir_type, | 344 EXPECT_EQ(resource.expected_sub_dir_type, |
345 GDataCache::GetSubDirectoryType(*cache_entry)); | 345 GDataCache::GetSubDirectoryType(cache_entry)); |
346 } | 346 } |
347 } | 347 } |
348 | 348 |
349 void TestGetFileFromCacheByResourceIdAndMd5( | 349 void TestGetFileFromCacheByResourceIdAndMd5( |
350 const std::string& resource_id, | 350 const std::string& resource_id, |
351 const std::string& md5, | 351 const std::string& md5, |
352 base::PlatformFileError expected_error, | 352 base::PlatformFileError expected_error, |
353 const std::string& expected_file_extension) { | 353 const std::string& expected_file_extension) { |
354 expected_error_ = expected_error; | 354 expected_error_ = expected_error; |
355 expected_file_extension_ = expected_file_extension; | 355 expected_file_extension_ = expected_file_extension; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 } | 417 } |
418 | 418 |
419 void VerifyRemoveFromCache(base::PlatformFileError error, | 419 void VerifyRemoveFromCache(base::PlatformFileError error, |
420 const std::string& resource_id, | 420 const std::string& resource_id, |
421 const std::string& md5) { | 421 const std::string& md5) { |
422 ++num_callback_invocations_; | 422 ++num_callback_invocations_; |
423 | 423 |
424 EXPECT_EQ(expected_error_, error); | 424 EXPECT_EQ(expected_error_, error); |
425 | 425 |
426 // Verify cache map. | 426 // Verify cache map. |
427 scoped_ptr<GDataCacheEntry> cache_entry = | 427 GDataCacheEntry cache_entry; |
428 GetCacheEntryFromOriginThread(resource_id, md5); | 428 const bool cache_entry_found = |
429 if (cache_entry.get()) | 429 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); |
430 EXPECT_TRUE(cache_entry->IsDirty()); | 430 if (cache_entry_found) |
| 431 EXPECT_TRUE(cache_entry.IsDirty()); |
431 | 432 |
432 // If entry doesn't exist, verify that: | 433 // If entry doesn't exist, verify that: |
433 // - no files with "<resource_id>.* exists in persistent and tmp dirs | 434 // - no files with "<resource_id>.* exists in persistent and tmp dirs |
434 // - no "<resource_id>" symlink exists in pinned and outgoing dirs. | 435 // - no "<resource_id>" symlink exists in pinned and outgoing dirs. |
435 std::vector<PathToVerify> paths_to_verify; | 436 std::vector<PathToVerify> paths_to_verify; |
436 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP. | 437 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP. |
437 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", | 438 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", |
438 GDataCache::CACHE_TYPE_TMP, | 439 GDataCache::CACHE_TYPE_TMP, |
439 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); | 440 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); |
440 paths_to_verify.push_back( // Index 1: CACHE_TYPE_PERSISTENT. | 441 paths_to_verify.push_back( // Index 1: CACHE_TYPE_PERSISTENT. |
441 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", | 442 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", |
442 GDataCache::CACHE_TYPE_PERSISTENT, | 443 GDataCache::CACHE_TYPE_PERSISTENT, |
443 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); | 444 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); |
444 paths_to_verify.push_back( // Index 2: CACHE_TYPE_TMP, but STATE_PINNED. | 445 paths_to_verify.push_back( // Index 2: CACHE_TYPE_TMP, but STATE_PINNED. |
445 PathToVerify(cache_->GetCacheFilePath(resource_id, "", | 446 PathToVerify(cache_->GetCacheFilePath(resource_id, "", |
446 GDataCache::CACHE_TYPE_PINNED, | 447 GDataCache::CACHE_TYPE_PINNED, |
447 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); | 448 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); |
448 paths_to_verify.push_back( // Index 3: CACHE_TYPE_OUTGOING. | 449 paths_to_verify.push_back( // Index 3: CACHE_TYPE_OUTGOING. |
449 PathToVerify(cache_->GetCacheFilePath(resource_id, "", | 450 PathToVerify(cache_->GetCacheFilePath(resource_id, "", |
450 GDataCache::CACHE_TYPE_OUTGOING, | 451 GDataCache::CACHE_TYPE_OUTGOING, |
451 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); | 452 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); |
452 if (!cache_entry.get()) { | 453 if (!cache_entry_found) { |
453 for (size_t i = 0; i < paths_to_verify.size(); ++i) { | 454 for (size_t i = 0; i < paths_to_verify.size(); ++i) { |
454 file_util::FileEnumerator enumerator( | 455 file_util::FileEnumerator enumerator( |
455 paths_to_verify[i].path_to_scan.DirName(), false /* not recursive*/, | 456 paths_to_verify[i].path_to_scan.DirName(), false /* not recursive*/, |
456 static_cast<file_util::FileEnumerator::FileType>( | 457 static_cast<file_util::FileEnumerator::FileType>( |
457 file_util::FileEnumerator::FILES | | 458 file_util::FileEnumerator::FILES | |
458 file_util::FileEnumerator::SHOW_SYM_LINKS), | 459 file_util::FileEnumerator::SHOW_SYM_LINKS), |
459 paths_to_verify[i].path_to_scan.BaseName().value()); | 460 paths_to_verify[i].path_to_scan.BaseName().value()); |
460 EXPECT_TRUE(enumerator.Next().empty()); | 461 EXPECT_TRUE(enumerator.Next().empty()); |
461 } | 462 } |
462 } else { | 463 } else { |
(...skipping 10 matching lines...) Expand all Loading... |
473 GDataCache::CACHE_TYPE_PERSISTENT, | 474 GDataCache::CACHE_TYPE_PERSISTENT, |
474 GDataCache::CACHED_FILE_LOCALLY_MODIFIED); | 475 GDataCache::CACHED_FILE_LOCALLY_MODIFIED); |
475 | 476 |
476 // Change expected_existing_path of CACHE_TYPE_OUTGOING (index 3). | 477 // Change expected_existing_path of CACHE_TYPE_OUTGOING (index 3). |
477 paths_to_verify[3].expected_existing_path = | 478 paths_to_verify[3].expected_existing_path = |
478 GetCacheFilePath(resource_id, | 479 GetCacheFilePath(resource_id, |
479 std::string(), | 480 std::string(), |
480 GDataCache::CACHE_TYPE_OUTGOING, | 481 GDataCache::CACHE_TYPE_OUTGOING, |
481 GDataCache::CACHED_FILE_FROM_SERVER); | 482 GDataCache::CACHED_FILE_FROM_SERVER); |
482 | 483 |
483 if (cache_entry->IsPinned()) { | 484 if (cache_entry.IsPinned()) { |
484 // Change expected_existing_path of CACHE_TYPE_TMP but STATE_PINNED | 485 // Change expected_existing_path of CACHE_TYPE_TMP but STATE_PINNED |
485 // (index 2). | 486 // (index 2). |
486 paths_to_verify[2].expected_existing_path = | 487 paths_to_verify[2].expected_existing_path = |
487 GetCacheFilePath(resource_id, | 488 GetCacheFilePath(resource_id, |
488 std::string(), | 489 std::string(), |
489 GDataCache::CACHE_TYPE_PINNED, | 490 GDataCache::CACHE_TYPE_PINNED, |
490 GDataCache::CACHED_FILE_FROM_SERVER); | 491 GDataCache::CACHED_FILE_FROM_SERVER); |
491 } | 492 } |
492 | 493 |
493 for (size_t i = 0; i < paths_to_verify.size(); ++i) { | 494 for (size_t i = 0; i < paths_to_verify.size(); ++i) { |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 } | 686 } |
686 | 687 |
687 void VerifyCacheFileState(base::PlatformFileError error, | 688 void VerifyCacheFileState(base::PlatformFileError error, |
688 const std::string& resource_id, | 689 const std::string& resource_id, |
689 const std::string& md5) { | 690 const std::string& md5) { |
690 ++num_callback_invocations_; | 691 ++num_callback_invocations_; |
691 | 692 |
692 EXPECT_EQ(expected_error_, error); | 693 EXPECT_EQ(expected_error_, error); |
693 | 694 |
694 // Verify cache map. | 695 // Verify cache map. |
695 scoped_ptr<GDataCacheEntry> cache_entry = | 696 GDataCacheEntry cache_entry; |
696 GetCacheEntryFromOriginThread(resource_id, md5); | 697 const bool cache_entry_found = |
| 698 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); |
697 if (ToCacheEntry(expected_cache_state_).IsPresent() || | 699 if (ToCacheEntry(expected_cache_state_).IsPresent() || |
698 ToCacheEntry(expected_cache_state_).IsPinned()) { | 700 ToCacheEntry(expected_cache_state_).IsPinned()) { |
699 ASSERT_TRUE(cache_entry.get()); | 701 ASSERT_TRUE(cache_entry_found); |
700 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state()); | 702 EXPECT_EQ(expected_cache_state_, cache_entry.cache_state()); |
701 EXPECT_EQ(expected_sub_dir_type_, | 703 EXPECT_EQ(expected_sub_dir_type_, |
702 GDataCache::GetSubDirectoryType(*cache_entry)); | 704 GDataCache::GetSubDirectoryType(cache_entry)); |
703 } else { | 705 } else { |
704 EXPECT_FALSE(cache_entry.get()); | 706 EXPECT_FALSE(cache_entry_found); |
705 } | 707 } |
706 | 708 |
707 // Verify actual cache file. | 709 // Verify actual cache file. |
708 FilePath dest_path = cache_->GetCacheFilePath( | 710 FilePath dest_path = cache_->GetCacheFilePath( |
709 resource_id, | 711 resource_id, |
710 md5, | 712 md5, |
711 ToCacheEntry(expected_cache_state_).IsPinned() || | 713 ToCacheEntry(expected_cache_state_).IsPinned() || |
712 ToCacheEntry(expected_cache_state_).IsDirty() ? | 714 ToCacheEntry(expected_cache_state_).IsDirty() ? |
713 GDataCache::CACHE_TYPE_PERSISTENT : | 715 GDataCache::CACHE_TYPE_PERSISTENT : |
714 GDataCache::CACHE_TYPE_TMP, | 716 GDataCache::CACHE_TYPE_TMP, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 | 766 |
765 FilePath GetCacheFilePath(const std::string& resource_id, | 767 FilePath GetCacheFilePath(const std::string& resource_id, |
766 const std::string& md5, | 768 const std::string& md5, |
767 GDataCache::CacheSubDirectoryType sub_dir_type, | 769 GDataCache::CacheSubDirectoryType sub_dir_type, |
768 GDataCache::CachedFileOrigin file_origin) { | 770 GDataCache::CachedFileOrigin file_origin) { |
769 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type, | 771 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type, |
770 file_origin); | 772 file_origin); |
771 } | 773 } |
772 | 774 |
773 // Helper function to call GetCacheEntry from origin thread. | 775 // Helper function to call GetCacheEntry from origin thread. |
774 scoped_ptr<GDataCacheEntry> GetCacheEntryFromOriginThread( | 776 bool GetCacheEntryFromOriginThread(const std::string& resource_id, |
775 const std::string& resource_id, | 777 const std::string& md5, |
776 const std::string& md5) { | 778 GDataCacheEntry* cache_entry) { |
777 scoped_ptr<GDataCacheEntry> cache_entry; | 779 bool result = false; |
778 content::BrowserThread::GetBlockingPool() | 780 content::BrowserThread::GetBlockingPool() |
779 ->GetSequencedTaskRunner(sequence_token_)->PostTask( | 781 ->GetSequencedTaskRunner(sequence_token_)->PostTask( |
780 FROM_HERE, | 782 FROM_HERE, |
781 base::Bind( | 783 base::Bind( |
782 &GDataCacheTest::GetCacheEntryFromOriginThreadInternal, | 784 &GDataCacheTest::GetCacheEntryFromOriginThreadInternal, |
783 base::Unretained(this), | 785 base::Unretained(this), |
784 resource_id, | 786 resource_id, |
785 md5, | 787 md5, |
786 &cache_entry)); | 788 cache_entry, |
| 789 &result)); |
787 test_util::RunBlockingPoolTask(); | 790 test_util::RunBlockingPoolTask(); |
788 return cache_entry.Pass(); | 791 return result; |
789 } | 792 } |
790 | 793 |
791 // Used to implement GetCacheEntry. | 794 // Used to implement GetCacheEntry. |
792 void GetCacheEntryFromOriginThreadInternal( | 795 void GetCacheEntryFromOriginThreadInternal( |
793 const std::string& resource_id, | 796 const std::string& resource_id, |
794 const std::string& md5, | 797 const std::string& md5, |
795 scoped_ptr<GDataCacheEntry>* cache_entry) { | 798 GDataCacheEntry* cache_entry, |
796 cache_entry->reset(cache_->GetCacheEntry(resource_id, md5).release()); | 799 bool* result) { |
| 800 *result = cache_->GetCacheEntry(resource_id, md5, cache_entry); |
797 } | 801 } |
798 | 802 |
799 // Returns true if the cache entry exists for the given resource ID and MD5. | 803 // Returns true if the cache entry exists for the given resource ID and MD5. |
800 bool CacheEntryExists(const std::string& resource_id, | 804 bool CacheEntryExists(const std::string& resource_id, |
801 const std::string& md5) { | 805 const std::string& md5) { |
802 return GetCacheEntryFromOriginThread(resource_id, md5).get(); | 806 GDataCacheEntry cache_entry; |
| 807 return GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); |
803 } | 808 } |
804 | 809 |
805 void TestGetCacheFilePath(const std::string& resource_id, | 810 void TestGetCacheFilePath(const std::string& resource_id, |
806 const std::string& md5, | 811 const std::string& md5, |
807 const std::string& expected_filename) { | 812 const std::string& expected_filename) { |
808 FilePath actual_path = cache_->GetCacheFilePath( | 813 FilePath actual_path = cache_->GetCacheFilePath( |
809 resource_id, | 814 resource_id, |
810 md5, | 815 md5, |
811 GDataCache::CACHE_TYPE_TMP, | 816 GDataCache::CACHE_TYPE_TMP, |
812 GDataCache::CACHED_FILE_FROM_SERVER); | 817 GDataCache::CACHED_FILE_FROM_SERVER); |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1580 EXPECT_EQ(1, num_callback_invocations_); | 1585 EXPECT_EQ(1, num_callback_invocations_); |
1581 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); | 1586 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); |
1582 | 1587 |
1583 // Try to remove the file. | 1588 // Try to remove the file. |
1584 num_callback_invocations_ = 0; | 1589 num_callback_invocations_ = 0; |
1585 TestRemoveFromCache(resource_id, base::PLATFORM_FILE_OK); | 1590 TestRemoveFromCache(resource_id, base::PLATFORM_FILE_OK); |
1586 EXPECT_EQ(1, num_callback_invocations_); | 1591 EXPECT_EQ(1, num_callback_invocations_); |
1587 } | 1592 } |
1588 | 1593 |
1589 } // namespace gdata | 1594 } // namespace gdata |
OLD | NEW |