Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <stack> | 5 #include <stack> |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/thread.h" | 8 #include "base/thread.h" |
| 9 #include "base/waitable_event.h" | 9 #include "base/waitable_event.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 | 24 |
| 25 const base::Time kZeroTime; | 25 const base::Time kZeroTime; |
| 26 const GURL kManifestUrl("http://blah/manifest"); | 26 const GURL kManifestUrl("http://blah/manifest"); |
| 27 const GURL kManifestUrl2("http://blah/manifest2"); | 27 const GURL kManifestUrl2("http://blah/manifest2"); |
| 28 const GURL kEntryUrl("http://blah/entry"); | 28 const GURL kEntryUrl("http://blah/entry"); |
| 29 const GURL kEntryUrl2("http://blah/entry2"); | 29 const GURL kEntryUrl2("http://blah/entry2"); |
| 30 const GURL kFallbackNamespace("http://blah/fallback_namespace/"); | 30 const GURL kFallbackNamespace("http://blah/fallback_namespace/"); |
| 31 const GURL kFallbackNamespace2("http://blah/fallback_namespace/longer"); | 31 const GURL kFallbackNamespace2("http://blah/fallback_namespace/longer"); |
| 32 const GURL kFallbackTestUrl("http://blah/fallback_namespace/longer/test"); | 32 const GURL kFallbackTestUrl("http://blah/fallback_namespace/longer/test"); |
| 33 const GURL kOnlineNamespace("http://blah/online_namespace"); | 33 const GURL kOnlineNamespace("http://blah/online_namespace"); |
| 34 const GURL kOnlineNamespaceWithinFallback( | |
| 35 "http://blah/fallback_namespace/online/"); | |
| 34 | 36 |
| 35 // For the duration of this test case, we hijack the AppCacheThread API | 37 // For the duration of this test case, we hijack the AppCacheThread API |
| 36 // calls and implement them in terms of the io and db threads created here. | 38 // calls and implement them in terms of the io and db threads created here. |
| 37 | 39 |
| 38 scoped_ptr<base::Thread> io_thread; | 40 scoped_ptr<base::Thread> io_thread; |
| 39 scoped_ptr<base::Thread> db_thread; | 41 scoped_ptr<base::Thread> db_thread; |
| 40 | 42 |
| 41 class TestThreadProvider : public SimpleAppCacheSystem::ThreadProvider { | 43 class TestThreadProvider : public SimpleAppCacheSystem::ThreadProvider { |
| 42 public: | 44 public: |
| 43 virtual bool PostTask( | 45 virtual bool PostTask( |
| (...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 919 void FindMainResponseExclusionsInDatabase() { | 921 void FindMainResponseExclusionsInDatabase() { |
| 920 FindMainResponseExclusions(true); | 922 FindMainResponseExclusions(true); |
| 921 } | 923 } |
| 922 | 924 |
| 923 void FindMainResponseExclusionsInWorkingSet() { | 925 void FindMainResponseExclusionsInWorkingSet() { |
| 924 FindMainResponseExclusions(false); | 926 FindMainResponseExclusions(false); |
| 925 } | 927 } |
| 926 | 928 |
| 927 void FindMainResponseExclusions(bool drop_from_working_set) { | 929 void FindMainResponseExclusions(bool drop_from_working_set) { |
| 928 // Setup some preconditions. Create a complete cache with a | 930 // Setup some preconditions. Create a complete cache with a |
| 929 // foreign entry and an online namespace. | 931 // foreign entry, an online namespace, and a second online |
| 932 // namespace nested within a fallback namespace. | |
| 930 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 933 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 931 cache_->AddEntry(kEntryUrl, | 934 cache_->AddEntry(kEntryUrl, |
| 932 AppCacheEntry(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, 1)); | 935 AppCacheEntry(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, 1)); |
| 933 cache_->online_whitelist_namespaces_.push_back(kOnlineNamespace); | 936 cache_->online_whitelist_namespaces_.push_back(kOnlineNamespace); |
| 937 cache_->AddEntry(kEntryUrl2, AppCacheEntry(AppCacheEntry::FALLBACK, 2)); | |
| 938 cache_->fallback_namespaces_.push_back( | |
| 939 FallbackNamespace(kFallbackNamespace, kEntryUrl2)); | |
| 940 cache_->online_whitelist_namespaces_.push_back(kOnlineNamespace); | |
| 941 cache_->online_whitelist_namespaces_.push_back( | |
| 942 kOnlineNamespaceWithinFallback); | |
| 943 | |
| 934 AppCacheDatabase::EntryRecord entry_record; | 944 AppCacheDatabase::EntryRecord entry_record; |
| 935 entry_record.cache_id = 1; | 945 entry_record.cache_id = 1; |
| 936 entry_record.url = kEntryUrl; | 946 entry_record.url = kEntryUrl; |
| 937 entry_record.flags = AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN; | 947 entry_record.flags = AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN; |
| 938 entry_record.response_id = 1; | 948 entry_record.response_id = 1; |
| 939 EXPECT_TRUE(database()->InsertEntry(&entry_record)); | 949 EXPECT_TRUE(database()->InsertEntry(&entry_record)); |
| 940 AppCacheDatabase::OnlineWhiteListRecord whitelist_record; | 950 AppCacheDatabase::OnlineWhiteListRecord whitelist_record; |
| 941 whitelist_record.cache_id = 1; | 951 whitelist_record.cache_id = 1; |
| 942 whitelist_record.namespace_url = kOnlineNamespace; | 952 whitelist_record.namespace_url = kOnlineNamespace; |
| 943 EXPECT_TRUE(database()->InsertOnlineWhiteList(&whitelist_record)); | 953 EXPECT_TRUE(database()->InsertOnlineWhiteList(&whitelist_record)); |
| 954 AppCacheDatabase::FallbackNameSpaceRecord fallback_namespace_record; | |
| 955 fallback_namespace_record.cache_id = 1; | |
| 956 fallback_namespace_record.fallback_entry_url = kEntryUrl2; | |
| 957 fallback_namespace_record.namespace_url = kFallbackNamespace; | |
| 958 fallback_namespace_record.origin = kManifestUrl.GetOrigin(); | |
| 959 EXPECT_TRUE( | |
| 960 database()->InsertFallbackNameSpace(&fallback_namespace_record)); | |
| 961 whitelist_record.cache_id = 1; | |
| 962 whitelist_record.namespace_url = kOnlineNamespaceWithinFallback; | |
| 963 EXPECT_TRUE(database()->InsertOnlineWhiteList(&whitelist_record)); | |
| 944 if (drop_from_working_set) { | 964 if (drop_from_working_set) { |
| 945 cache_ = NULL; | 965 cache_ = NULL; |
| 946 group_ = NULL; | 966 group_ = NULL; |
| 947 } | 967 } |
| 948 | 968 |
| 949 // We should not find anything for the foreign entry. | 969 // We should not find anything for the foreign entry. |
| 950 PushNextTask(NewRunnableMethod( | 970 PushNextTask(NewRunnableMethod( |
| 951 this, &AppCacheStorageImplTest::Verify_NotFound, kEntryUrl, false)); | 971 this, &AppCacheStorageImplTest::Verify_ExclusionNotFound, |
| 972 kEntryUrl, 1)); | |
| 952 storage()->FindResponseForMainRequest(kEntryUrl, delegate()); | 973 storage()->FindResponseForMainRequest(kEntryUrl, delegate()); |
| 953 } | 974 } |
| 954 | 975 |
| 955 void Verify_NotFound(GURL expected_url, bool test_finished) { | 976 void Verify_ExclusionNotFound(GURL expected_url, int phase) { |
| 956 EXPECT_EQ(expected_url, delegate()->found_url_); | 977 EXPECT_EQ(expected_url, delegate()->found_url_); |
| 957 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); | 978 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); |
| 958 EXPECT_FALSE(delegate()->found_blocked_by_policy_); | 979 EXPECT_FALSE(delegate()->found_blocked_by_policy_); |
| 959 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); | 980 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); |
| 960 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); | 981 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); |
| 961 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); | 982 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); |
| 962 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); | 983 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); |
| 963 EXPECT_EQ(0, delegate()->found_entry_.types()); | 984 EXPECT_EQ(0, delegate()->found_entry_.types()); |
| 964 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); | 985 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); |
| 965 | 986 |
| 966 if (!test_finished) { | 987 if (phase == 1) { |
| 967 // We should not find anything for the online namespace. | 988 // We should not find anything for the online namespace. |
| 968 PushNextTask(NewRunnableMethod(this, | 989 PushNextTask(NewRunnableMethod(this, |
| 969 &AppCacheStorageImplTest::Verify_NotFound, kOnlineNamespace, true)); | 990 &AppCacheStorageImplTest::Verify_ExclusionNotFound, |
| 991 kOnlineNamespace, 2)); | |
| 970 storage()->FindResponseForMainRequest(kOnlineNamespace, delegate()); | 992 storage()->FindResponseForMainRequest(kOnlineNamespace, delegate()); |
| 971 return; | 993 return; |
| 972 } | 994 } |
| 995 if (phase == 2) { | |
| 996 // We should not find anything for the online namespace nested in the | |
| 997 // in the fallback namespace. | |
|
kinuko
2010/11/19 00:28:51
nit: 'in the' is duplicated?
| |
| 998 PushNextTask(NewRunnableMethod(this, | |
| 999 &AppCacheStorageImplTest::Verify_ExclusionNotFound, | |
| 1000 kOnlineNamespaceWithinFallback, 3)); | |
| 1001 storage()->FindResponseForMainRequest( | |
| 1002 kOnlineNamespaceWithinFallback, delegate()); | |
| 1003 return; | |
| 1004 } | |
| 973 | 1005 |
| 974 TestFinished(); | 1006 TestFinished(); |
| 975 } | 1007 } |
| 976 | 1008 |
| 977 // Test case helpers -------------------------------------------------- | 1009 // Test case helpers -------------------------------------------------- |
| 978 | 1010 |
| 979 AppCacheService* service() { | 1011 AppCacheService* service() { |
| 980 return service_.get(); | 1012 return service_.get(); |
| 981 } | 1013 } |
| 982 | 1014 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1121 &AppCacheStorageImplTest::FindMainResponseExclusionsInWorkingSet); | 1153 &AppCacheStorageImplTest::FindMainResponseExclusionsInWorkingSet); |
| 1122 } | 1154 } |
| 1123 | 1155 |
| 1124 // That's all folks! | 1156 // That's all folks! |
| 1125 | 1157 |
| 1126 } // namespace appcache | 1158 } // namespace appcache |
| 1127 | 1159 |
| 1128 // AppCacheStorageImplTest is expected to always live longer than the | 1160 // AppCacheStorageImplTest is expected to always live longer than the |
| 1129 // runnable methods. This lets us call NewRunnableMethod on its instances. | 1161 // runnable methods. This lets us call NewRunnableMethod on its instances. |
| 1130 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheStorageImplTest); | 1162 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheStorageImplTest); |
| OLD | NEW |