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

Unified Diff: content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc

Issue 549493002: Expose ServiceWorkerCache objects to ServiceWorkerCacheStorageManager clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refptr3
Patch Set: Fix after rebase Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
diff --git a/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc b/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
index b73ac8675731cb8831b906b4e39f8d4a5dead750..6adff9035efb073170aa949716a1c8cb0400cd94 100644
--- a/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
+++ b/content/browser/service_worker/service_worker_cache_storage_manager_unittest.cc
@@ -23,9 +23,9 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
ServiceWorkerCacheStorageManagerTest()
: browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
callback_bool_(false),
- callback_cache_id_(0),
callback_error_(
ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR),
+ callback_cache_error_(ServiceWorkerCache::ErrorTypeOK),
origin1_("http://example1.com"),
origin2_("http://example2.com") {}
@@ -63,9 +63,9 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
void CacheAndErrorCallback(
base::RunLoop* run_loop,
- int cache_id,
+ const scoped_refptr<ServiceWorkerCache>& cache,
ServiceWorkerCacheStorage::CacheStorageError error) {
- callback_cache_id_ = cache_id;
+ callback_cache_ = cache;
callback_error_ = error;
run_loop->Quit();
}
@@ -79,6 +79,23 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
run_loop->Quit();
}
+ void CachePutCallback(base::RunLoop* run_loop,
+ ServiceWorkerCache::ErrorType error) {
+ callback_cache_error_ = error;
+ run_loop->Quit();
+ }
+
+ void CacheMatchCallback(
+ base::RunLoop* run_loop,
+ ServiceWorkerCache::ErrorType error,
+ scoped_ptr<ServiceWorkerResponse> response,
+ scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
+ callback_cache_error_ = error;
+ callback_cache_response_ = response.Pass();
+ // Deliberately drop the data handle as only the url is being tested.
+ run_loop->Quit();
+ }
+
bool CreateCache(const GURL& origin, const std::string& cache_name) {
scoped_ptr<base::RunLoop> loop(new base::RunLoop());
cache_manager_->CreateCache(
@@ -92,9 +109,9 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
bool error = callback_error_ !=
ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR;
if (error)
- EXPECT_EQ(ServiceWorkerCacheStorage::kInvalidCacheID, callback_cache_id_);
+ EXPECT_TRUE(!callback_cache_.get());
else
- EXPECT_LE(0, callback_cache_id_);
+ EXPECT_TRUE(callback_cache_.get());
return !error;
}
@@ -111,9 +128,9 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
bool error = callback_error_ !=
ServiceWorkerCacheStorage::CACHE_STORAGE_ERROR_NO_ERROR;
if (error)
- EXPECT_EQ(ServiceWorkerCacheStorage::kInvalidCacheID, callback_cache_id_);
+ EXPECT_TRUE(!callback_cache_.get());
else
- EXPECT_LE(0, callback_cache_id_);
+ EXPECT_TRUE(callback_cache_.get());
return !error;
}
@@ -158,6 +175,43 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
return !error;
}
+ bool CachePut(const scoped_refptr<ServiceWorkerCache>& cache,
+ const std::string& url) {
+ scoped_ptr<ServiceWorkerFetchRequest> request(
+ new ServiceWorkerFetchRequest());
+ scoped_ptr<ServiceWorkerResponse> response(new ServiceWorkerResponse());
+ request->url = GURL("http://example.com/foo");
+ response->url = GURL("http://example.com/foo");
+ scoped_ptr<base::RunLoop> loop(new base::RunLoop());
+ cache->Put(
+ request.Pass(),
+ response.Pass(),
+ base::Bind(&ServiceWorkerCacheStorageManagerTest::CachePutCallback,
+ base::Unretained(this),
+ base::Unretained(loop.get())));
+ loop->Run();
+
+ bool error = callback_cache_error_ != ServiceWorkerCache::ErrorTypeOK;
+ return !error;
+ }
+
+ bool CacheMatch(const scoped_refptr<ServiceWorkerCache>& cache,
+ const std::string& url) {
+ scoped_ptr<ServiceWorkerFetchRequest> request(
+ new ServiceWorkerFetchRequest());
+ request->url = GURL("http://example.com/foo");
+ scoped_ptr<base::RunLoop> loop(new base::RunLoop());
+ cache->Match(
+ request.Pass(),
+ base::Bind(&ServiceWorkerCacheStorageManagerTest::CacheMatchCallback,
+ base::Unretained(this),
+ base::Unretained(loop.get())));
+ loop->Run();
+
+ bool error = callback_cache_error_ != ServiceWorkerCache::ErrorTypeOK;
+ return !error;
+ }
+
bool VerifyKeys(const std::vector<std::string>& expected_keys) {
if (expected_keys.size() != callback_strings_.size())
return false;
@@ -180,9 +234,11 @@ class ServiceWorkerCacheStorageManagerTest : public testing::Test {
base::ScopedTempDir temp_dir_;
scoped_ptr<ServiceWorkerCacheStorageManager> cache_manager_;
+ scoped_refptr<ServiceWorkerCache> callback_cache_;
int callback_bool_;
- ServiceWorkerCacheStorage::CacheID callback_cache_id_;
ServiceWorkerCacheStorage::CacheStorageError callback_error_;
+ ServiceWorkerCache::ErrorType callback_cache_error_;
+ scoped_ptr<ServiceWorkerResponse> callback_cache_response_;
std::vector<std::string> callback_strings_;
const GURL origin1_;
@@ -223,12 +279,11 @@ TEST_P(ServiceWorkerCacheStorageManagerTestP, CreateTwoCaches) {
EXPECT_TRUE(CreateCache(origin1_, "bar"));
}
-TEST_P(ServiceWorkerCacheStorageManagerTestP, IDsDiffer) {
+TEST_P(ServiceWorkerCacheStorageManagerTestP, CachePointersDiffer) {
EXPECT_TRUE(CreateCache(origin1_, "foo"));
- ServiceWorkerCacheStorage::CacheID id1 = callback_cache_id_;
+ scoped_refptr<ServiceWorkerCache> cache = callback_cache_;
EXPECT_TRUE(CreateCache(origin1_, "bar"));
- ServiceWorkerCacheStorage::CacheID id2 = callback_cache_id_;
- EXPECT_NE(id1, id2);
+ EXPECT_TRUE(cache.get() != callback_cache_.get());
}
TEST_P(ServiceWorkerCacheStorageManagerTestP, Create2CachesSameNameDiffSWs) {
@@ -238,9 +293,9 @@ TEST_P(ServiceWorkerCacheStorageManagerTestP, Create2CachesSameNameDiffSWs) {
TEST_P(ServiceWorkerCacheStorageManagerTestP, GetCache) {
EXPECT_TRUE(CreateCache(origin1_, "foo"));
- int cache_id = callback_cache_id_;
+ scoped_refptr<ServiceWorkerCache> cache = callback_cache_;
EXPECT_TRUE(Get(origin1_, "foo"));
- EXPECT_EQ(cache_id, callback_cache_id_);
+ EXPECT_TRUE(cache.get() == callback_cache_.get());
}
TEST_P(ServiceWorkerCacheStorageManagerTestP, GetNonExistent) {
@@ -307,9 +362,9 @@ TEST_P(ServiceWorkerCacheStorageManagerTestP, DeletedKeysGone) {
TEST_P(ServiceWorkerCacheStorageManagerTestP, Chinese) {
EXPECT_TRUE(CreateCache(origin1_, "你好"));
- int cache_id = callback_cache_id_;
+ scoped_refptr<ServiceWorkerCache> cache = callback_cache_;
EXPECT_TRUE(Get(origin1_, "你好"));
- EXPECT_EQ(cache_id, callback_cache_id_);
+ EXPECT_TRUE(cache.get() == callback_cache_.get());
EXPECT_TRUE(Keys(origin1_));
EXPECT_EQ(1u, callback_strings_.size());
EXPECT_TRUE("你好" == callback_strings_[0]);
@@ -317,9 +372,9 @@ TEST_P(ServiceWorkerCacheStorageManagerTestP, Chinese) {
TEST_F(ServiceWorkerCacheStorageManagerTest, EmptyKey) {
EXPECT_TRUE(CreateCache(origin1_, ""));
- int cache_id = callback_cache_id_;
+ scoped_refptr<ServiceWorkerCache> cache = callback_cache_;
EXPECT_TRUE(Get(origin1_, ""));
- EXPECT_EQ(cache_id, callback_cache_id_);
+ EXPECT_EQ(cache.get(), callback_cache_.get());
EXPECT_TRUE(Keys(origin1_));
EXPECT_EQ(1u, callback_strings_.size());
EXPECT_TRUE("" == callback_strings_[0]);
@@ -374,6 +429,42 @@ TEST_F(ServiceWorkerCacheStorageManagerTest, BadOriginName) {
EXPECT_STREQ("foo", callback_strings_[0].c_str());
}
+// With a persistent cache if the client drops its reference to a
+// ServiceWorkerCache
+// it should be deleted.
+TEST_F(ServiceWorkerCacheStorageManagerTest, DropReference) {
+ EXPECT_TRUE(CreateCache(origin1_, "foo"));
+ base::WeakPtr<ServiceWorkerCache> cache = callback_cache_->AsWeakPtr();
+ callback_cache_ = NULL;
+ EXPECT_TRUE(!cache);
+}
+
+// With a memory cache the cache can't be freed from memory until the client
+// calls delete.
+TEST_F(ServiceWorkerCacheStorageManagerMemoryOnlyTest,
+ MemoryLosesReferenceOnlyAfterDelete) {
+ EXPECT_TRUE(CreateCache(origin1_, "foo"));
+ base::WeakPtr<ServiceWorkerCache> cache = callback_cache_->AsWeakPtr();
+ callback_cache_ = NULL;
+ EXPECT_TRUE(cache);
+ EXPECT_TRUE(Delete(origin1_, "foo"));
+ EXPECT_FALSE(cache);
+}
+
+TEST_P(ServiceWorkerCacheStorageManagerTestP, RecreateCacheOnDemand) {
+ EXPECT_TRUE(CreateCache(origin1_, "foo"));
+ EXPECT_TRUE(CachePut(callback_cache_, "bar"));
+ callback_cache_ = NULL;
+ EXPECT_TRUE(Get(origin1_, "foo"));
+ EXPECT_TRUE(CacheMatch(callback_cache_, "bar"));
+}
+
+TEST_P(ServiceWorkerCacheStorageManagerTestP, DeleteBeforeRelease) {
+ EXPECT_TRUE(CreateCache(origin1_, "foo"));
+ EXPECT_TRUE(Delete(origin1_, "foo"));
+ EXPECT_TRUE(callback_cache_->AsWeakPtr());
+}
+
INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheStorageManagerTests,
ServiceWorkerCacheStorageManagerTestP,
::testing::Values(false, true));

Powered by Google App Engine
This is Rietveld 408576698