diff options
Diffstat (limited to 'webkit/appcache')
-rw-r--r-- | webkit/appcache/appcache.cc | 21 | ||||
-rw-r--r-- | webkit/appcache/appcache.h | 4 | ||||
-rw-r--r-- | webkit/appcache/appcache_unittest.cc | 72 |
3 files changed, 81 insertions, 16 deletions
diff --git a/webkit/appcache/appcache.cc b/webkit/appcache/appcache.cc index e5d197d..6f4e959 100644 --- a/webkit/appcache/appcache.cc +++ b/webkit/appcache/appcache.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -152,11 +152,8 @@ void AppCache::InitializeWithDatabaseRecords( std::sort(fallback_namespaces_.begin(), fallback_namespaces_.end(), SortNamespacesByLength); - if (!online_whitelist_all_) { - for (size_t i = 0; i < whitelists.size(); ++i) { - online_whitelist_namespaces_.push_back(whitelists.at(i).namespace_url); - } - } + for (size_t i = 0; i < whitelists.size(); ++i) + online_whitelist_namespaces_.push_back(whitelists.at(i).namespace_url); } void AppCache::ToDatabaseRecords( @@ -209,13 +206,11 @@ void AppCache::ToDatabaseRecords( record.target_url = fallback_namespaces_[i].target_url; } - if (!online_whitelist_all_) { - for (size_t i = 0; i < online_whitelist_namespaces_.size(); ++i) { - whitelists->push_back(AppCacheDatabase::OnlineWhiteListRecord()); - AppCacheDatabase::OnlineWhiteListRecord& record = whitelists->back(); - record.cache_id = cache_id_; - record.namespace_url = online_whitelist_namespaces_[i]; - } + for (size_t i = 0; i < online_whitelist_namespaces_.size(); ++i) { + whitelists->push_back(AppCacheDatabase::OnlineWhiteListRecord()); + AppCacheDatabase::OnlineWhiteListRecord& record = whitelists->back(); + record.cache_id = cache_id_; + record.namespace_url = online_whitelist_namespaces_[i]; } } diff --git a/webkit/appcache/appcache.h b/webkit/appcache/appcache.h index daf9874..b4905dc 100644 --- a/webkit/appcache/appcache.h +++ b/webkit/appcache/appcache.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -176,7 +176,7 @@ class APPCACHE_EXPORT AppCache : public base::RefCounted<AppCache> { AppCacheService* service_; FRIEND_TEST_ALL_PREFIXES(AppCacheTest, InitializeWithManifest); - + FRIEND_TEST_ALL_PREFIXES(AppCacheTest, ToFromDatabaseRecords); DISALLOW_COPY_AND_ASSIGN(AppCache); }; diff --git a/webkit/appcache/appcache_unittest.cc b/webkit/appcache/appcache_unittest.cc index 2888984..a00d599 100644 --- a/webkit/appcache/appcache_unittest.cc +++ b/webkit/appcache/appcache_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -323,5 +323,75 @@ TEST(AppCacheTest, FindResponseForRequest) { EXPECT_FALSE(network_namespace); } +TEST(AppCacheTest, ToFromDatabaseRecords) { + // Setup a cache with some entries. + const int64 kCacheId = 1234; + const int64 kGroupId = 4321; + const GURL kManifestUrl("http://foo.com/manifest"); + const GURL kInterceptUrl("http://foo.com/intercept.html"); + const GURL kFallbackUrl("http://foo.com/fallback.html"); + const std::string kData( + "CACHE MANIFEST\r" + "CHROMIUM-INTERCEPT:\r" + "/intercept return /intercept.html\r" + "FALLBACK:\r" + "/ /fallback.html\r" + "NETWORK:\r" + "/whitelist\r" + "*\r"); + MockAppCacheService service; + scoped_refptr<AppCacheGroup> group = + new AppCacheGroup(&service, kManifestUrl, kGroupId); + scoped_refptr<AppCache> cache(new AppCache(&service, kCacheId)); + Manifest manifest; + EXPECT_TRUE( + ParseManifest(kManifestUrl, kData.c_str(), kData.length(), manifest)); + cache->InitializeWithManifest(&manifest); + cache->AddEntry( + kManifestUrl, + AppCacheEntry(AppCacheEntry::MANIFEST, 1, 1)); + cache->AddEntry( + kInterceptUrl, + AppCacheEntry(AppCacheEntry::INTERCEPT, 3, 3)); + cache->AddEntry( + kFallbackUrl, + AppCacheEntry(AppCacheEntry::FALLBACK, 2, 2)); + + // Get it to produce database records and verify them. + AppCacheDatabase::CacheRecord cache_record; + std::vector<AppCacheDatabase::EntryRecord> entries; + std::vector<AppCacheDatabase::NamespaceRecord> intercepts; + std::vector<AppCacheDatabase::NamespaceRecord> fallbacks; + std::vector<AppCacheDatabase::OnlineWhiteListRecord> whitelists; + cache->ToDatabaseRecords( + group, &cache_record, &entries, + &intercepts, &fallbacks, &whitelists); + EXPECT_EQ(kCacheId, cache_record.cache_id); + EXPECT_EQ(kGroupId, cache_record.group_id); + EXPECT_TRUE(cache_record.online_wildcard); + EXPECT_EQ(1 + 2 + 3, cache_record.cache_size); + EXPECT_EQ(3u, entries.size()); + EXPECT_EQ(1u, intercepts.size()); + EXPECT_EQ(1u, fallbacks.size()); + EXPECT_EQ(1u, whitelists.size()); + cache = NULL; + + // Create a new AppCache and populate it with those records and verify. + cache = new AppCache(&service, kCacheId); + cache->InitializeWithDatabaseRecords( + cache_record, entries, intercepts, + fallbacks, whitelists); + EXPECT_TRUE(cache->online_whitelist_all_); + EXPECT_EQ(3u, cache->entries().size()); + EXPECT_TRUE(cache->GetEntry(kManifestUrl)); + EXPECT_TRUE(cache->GetEntry(kInterceptUrl)); + EXPECT_TRUE(cache->GetEntry(kFallbackUrl)); + EXPECT_EQ(kInterceptUrl, + cache->GetInterceptEntryUrl(GURL("http://foo.com/intercept"))); + EXPECT_EQ(kFallbackUrl, + cache->GetFallbackEntryUrl(GURL("http://foo.com/"))); + EXPECT_EQ(1 + 2 + 3, cache->cache_size()); +} + } // namespace appacache |