| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" |
| 8 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 9 #include "base/pickle.h" | 10 #include "base/pickle.h" |
| 10 #include "net/base/completion_callback.h" | 11 #include "net/base/completion_callback.h" |
| 11 #include "net/base/io_buffer.h" | 12 #include "net/base/io_buffer.h" |
| 12 #include "net/http/http_response_headers.h" | 13 #include "net/http/http_response_headers.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "webkit/appcache/appcache_response.h" | 15 #include "webkit/appcache/appcache_response.h" |
| 15 #include "webkit/appcache/appcache_service.h" | 16 #include "webkit/appcache/appcache_service.h" |
| 16 #include "webkit/appcache/mock_appcache_storage.h" | 17 #include "webkit/appcache/mock_appcache_storage.h" |
| 17 | 18 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 83 |
| 83 | 84 |
| 84 class AppCacheServiceTest : public testing::Test { | 85 class AppCacheServiceTest : public testing::Test { |
| 85 public: | 86 public: |
| 86 AppCacheServiceTest() | 87 AppCacheServiceTest() |
| 87 : kOrigin("http://hello/"), | 88 : kOrigin("http://hello/"), |
| 88 kManifestUrl(kOrigin.Resolve("manifest")), | 89 kManifestUrl(kOrigin.Resolve("manifest")), |
| 89 service_(new AppCacheService(NULL)), | 90 service_(new AppCacheService(NULL)), |
| 90 delete_result_(net::OK), delete_completion_count_(0), | 91 delete_result_(net::OK), delete_completion_count_(0), |
| 91 ALLOW_THIS_IN_INITIALIZER_LIST(deletion_callback_( | 92 ALLOW_THIS_IN_INITIALIZER_LIST(deletion_callback_( |
| 92 this, &AppCacheServiceTest::OnDeleteAppCachesComplete)) { | 93 base::Bind(&AppCacheServiceTest::OnDeleteAppCachesComplete, |
| 94 base::Unretained(this)))) { |
| 93 // Setup to use mock storage. | 95 // Setup to use mock storage. |
| 94 service_->storage_.reset(new MockAppCacheStorage(service_.get())); | 96 service_->storage_.reset(new MockAppCacheStorage(service_.get())); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void OnDeleteAppCachesComplete(int result) { | 99 void OnDeleteAppCachesComplete(int result) { |
| 98 delete_result_ = result; | 100 delete_result_ = result; |
| 99 ++delete_completion_count_; | 101 ++delete_completion_count_; |
| 100 } | 102 } |
| 101 | 103 |
| 102 MockAppCacheStorage* mock_storage() { | 104 MockAppCacheStorage* mock_storage() { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 info->Persist(pickle, kSkipTransientHeaders, kTruncated); | 167 info->Persist(pickle, kSkipTransientHeaders, kTruncated); |
| 166 return pickle->size(); | 168 return pickle->size(); |
| 167 } | 169 } |
| 168 | 170 |
| 169 const GURL kOrigin; | 171 const GURL kOrigin; |
| 170 const GURL kManifestUrl; | 172 const GURL kManifestUrl; |
| 171 | 173 |
| 172 scoped_ptr<AppCacheService> service_; | 174 scoped_ptr<AppCacheService> service_; |
| 173 int delete_result_; | 175 int delete_result_; |
| 174 int delete_completion_count_; | 176 int delete_completion_count_; |
| 175 net::OldCompletionCallbackImpl<AppCacheServiceTest> deletion_callback_; | 177 net::CompletionCallback deletion_callback_; |
| 176 }; | 178 }; |
| 177 | 179 |
| 178 TEST_F(AppCacheServiceTest, DeleteAppCachesForOrigin) { | 180 TEST_F(AppCacheServiceTest, DeleteAppCachesForOrigin) { |
| 179 // Without giving mock storage simiulated info, should fail. | 181 // Without giving mock storage simiulated info, should fail. |
| 180 service_->DeleteAppCachesForOrigin(kOrigin, &deletion_callback_); | 182 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
| 181 EXPECT_EQ(0, delete_completion_count_); | 183 EXPECT_EQ(0, delete_completion_count_); |
| 182 MessageLoop::current()->RunAllPending(); | 184 MessageLoop::current()->RunAllPending(); |
| 183 EXPECT_EQ(1, delete_completion_count_); | 185 EXPECT_EQ(1, delete_completion_count_); |
| 184 EXPECT_EQ(net::ERR_FAILED, delete_result_); | 186 EXPECT_EQ(net::ERR_FAILED, delete_result_); |
| 185 delete_completion_count_ = 0; | 187 delete_completion_count_ = 0; |
| 186 | 188 |
| 187 // Should succeed given an empty info collection. | 189 // Should succeed given an empty info collection. |
| 188 mock_storage()->SimulateGetAllInfo(new AppCacheInfoCollection); | 190 mock_storage()->SimulateGetAllInfo(new AppCacheInfoCollection); |
| 189 service_->DeleteAppCachesForOrigin(kOrigin, &deletion_callback_); | 191 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
| 190 EXPECT_EQ(0, delete_completion_count_); | 192 EXPECT_EQ(0, delete_completion_count_); |
| 191 MessageLoop::current()->RunAllPending(); | 193 MessageLoop::current()->RunAllPending(); |
| 192 EXPECT_EQ(1, delete_completion_count_); | 194 EXPECT_EQ(1, delete_completion_count_); |
| 193 EXPECT_EQ(net::OK, delete_result_); | 195 EXPECT_EQ(net::OK, delete_result_); |
| 194 delete_completion_count_ = 0; | 196 delete_completion_count_ = 0; |
| 195 | 197 |
| 196 scoped_refptr<AppCacheInfoCollection> info(new AppCacheInfoCollection); | 198 scoped_refptr<AppCacheInfoCollection> info(new AppCacheInfoCollection); |
| 197 | 199 |
| 198 // Should succeed given a non-empty info collection. | 200 // Should succeed given a non-empty info collection. |
| 199 AppCacheInfo mock_manifest_1; | 201 AppCacheInfo mock_manifest_1; |
| 200 AppCacheInfo mock_manifest_2; | 202 AppCacheInfo mock_manifest_2; |
| 201 AppCacheInfo mock_manifest_3; | 203 AppCacheInfo mock_manifest_3; |
| 202 mock_manifest_1.manifest_url = kOrigin.Resolve("manifest1"); | 204 mock_manifest_1.manifest_url = kOrigin.Resolve("manifest1"); |
| 203 mock_manifest_2.manifest_url = kOrigin.Resolve("manifest2"); | 205 mock_manifest_2.manifest_url = kOrigin.Resolve("manifest2"); |
| 204 mock_manifest_3.manifest_url = kOrigin.Resolve("manifest3"); | 206 mock_manifest_3.manifest_url = kOrigin.Resolve("manifest3"); |
| 205 AppCacheInfoVector info_vector; | 207 AppCacheInfoVector info_vector; |
| 206 info_vector.push_back(mock_manifest_1); | 208 info_vector.push_back(mock_manifest_1); |
| 207 info_vector.push_back(mock_manifest_2); | 209 info_vector.push_back(mock_manifest_2); |
| 208 info_vector.push_back(mock_manifest_3); | 210 info_vector.push_back(mock_manifest_3); |
| 209 info->infos_by_origin[kOrigin] = info_vector; | 211 info->infos_by_origin[kOrigin] = info_vector; |
| 210 mock_storage()->SimulateGetAllInfo(info); | 212 mock_storage()->SimulateGetAllInfo(info); |
| 211 service_->DeleteAppCachesForOrigin(kOrigin, &deletion_callback_); | 213 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
| 212 EXPECT_EQ(0, delete_completion_count_); | 214 EXPECT_EQ(0, delete_completion_count_); |
| 213 MessageLoop::current()->RunAllPending(); | 215 MessageLoop::current()->RunAllPending(); |
| 214 EXPECT_EQ(1, delete_completion_count_); | 216 EXPECT_EQ(1, delete_completion_count_); |
| 215 EXPECT_EQ(net::OK, delete_result_); | 217 EXPECT_EQ(net::OK, delete_result_); |
| 216 delete_completion_count_ = 0; | 218 delete_completion_count_ = 0; |
| 217 | 219 |
| 218 // Should fail if storage fails to delete. | 220 // Should fail if storage fails to delete. |
| 219 info->infos_by_origin[kOrigin] = info_vector; | 221 info->infos_by_origin[kOrigin] = info_vector; |
| 220 mock_storage()->SimulateGetAllInfo(info); | 222 mock_storage()->SimulateGetAllInfo(info); |
| 221 mock_storage()->SimulateMakeGroupObsoleteFailure(); | 223 mock_storage()->SimulateMakeGroupObsoleteFailure(); |
| 222 service_->DeleteAppCachesForOrigin(kOrigin, &deletion_callback_); | 224 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
| 223 EXPECT_EQ(0, delete_completion_count_); | 225 EXPECT_EQ(0, delete_completion_count_); |
| 224 MessageLoop::current()->RunAllPending(); | 226 MessageLoop::current()->RunAllPending(); |
| 225 EXPECT_EQ(1, delete_completion_count_); | 227 EXPECT_EQ(1, delete_completion_count_); |
| 226 EXPECT_EQ(net::ERR_FAILED, delete_result_); | 228 EXPECT_EQ(net::ERR_FAILED, delete_result_); |
| 227 delete_completion_count_ = 0; | 229 delete_completion_count_ = 0; |
| 228 | 230 |
| 229 // Should complete with abort error if the service is deleted | 231 // Should complete with abort error if the service is deleted |
| 230 // prior to a delete completion. | 232 // prior to a delete completion. |
| 231 service_->DeleteAppCachesForOrigin(kOrigin, &deletion_callback_); | 233 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
| 232 EXPECT_EQ(0, delete_completion_count_); | 234 EXPECT_EQ(0, delete_completion_count_); |
| 233 service_.reset(); // kill it | 235 service_.reset(); // kill it |
| 234 EXPECT_EQ(1, delete_completion_count_); | 236 EXPECT_EQ(1, delete_completion_count_); |
| 235 EXPECT_EQ(net::ERR_ABORTED, delete_result_); | 237 EXPECT_EQ(net::ERR_ABORTED, delete_result_); |
| 236 delete_completion_count_ = 0; | 238 delete_completion_count_ = 0; |
| 237 | 239 |
| 238 // Let any tasks lingering from the sudden deletion run and verify | 240 // Let any tasks lingering from the sudden deletion run and verify |
| 239 // no other completion calls occur. | 241 // no other completion calls occur. |
| 240 MessageLoop::current()->RunAllPending(); | 242 MessageLoop::current()->RunAllPending(); |
| 241 EXPECT_EQ(0, delete_completion_count_); | 243 EXPECT_EQ(0, delete_completion_count_); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 MessageLoop::current()->RunAllPending(); | 308 MessageLoop::current()->RunAllPending(); |
| 307 EXPECT_EQ(0, CountPendingHelpers()); | 309 EXPECT_EQ(0, CountPendingHelpers()); |
| 308 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 310 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
| 309 ResetStorage(); | 311 ResetStorage(); |
| 310 | 312 |
| 311 service_.reset(); // Clean up. | 313 service_.reset(); // Clean up. |
| 312 MessageLoop::current()->RunAllPending(); | 314 MessageLoop::current()->RunAllPending(); |
| 313 } | 315 } |
| 314 | 316 |
| 315 } // namespace appcache | 317 } // namespace appcache |
| OLD | NEW |