| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/public/browser/service_worker_context.h" | 5 #include "content/public/browser/service_worker_context.h" |
| 6 | 6 |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
| 11 #include "content/browser/service_worker/embedded_worker_registry.h" | 11 #include "content/browser/service_worker/embedded_worker_registry.h" |
| 12 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 12 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
| 13 #include "content/browser/service_worker/service_worker_context_core.h" | 13 #include "content/browser/service_worker/service_worker_context_core.h" |
| 14 #include "content/browser/service_worker/service_worker_registration.h" | 14 #include "content/browser/service_worker/service_worker_registration.h" |
| 15 #include "content/browser/service_worker/service_worker_storage.h" | 15 #include "content/browser/service_worker/service_worker_storage.h" |
| 16 #include "content/common/service_worker/embedded_worker_messages.h" | 16 #include "content/common/service_worker/embedded_worker_messages.h" |
| 17 #include "content/common/service_worker/service_worker_messages.h" | 17 #include "content/common/service_worker/service_worker_messages.h" |
| 18 #include "content/public/test/test_browser_thread_bundle.h" | 18 #include "content/public/test/test_browser_thread_bundle.h" |
| 19 #include "content/public/test/test_utils.h" | 19 #include "content/public/test/test_utils.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 | 21 |
| 22 namespace content { | 22 namespace content { |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 | 25 |
| 26 void SaveResponseCallback(bool* called, | 26 void SaveResponseCallback(bool* called, |
| 27 int64* store_registration_id, | 27 int64* store_registration_id, |
| 28 int64* store_version_id, | |
| 29 ServiceWorkerStatusCode status, | 28 ServiceWorkerStatusCode status, |
| 30 int64 registration_id, | 29 int64 registration_id) { |
| 31 int64 version_id) { | |
| 32 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status); | 30 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status); |
| 33 *called = true; | 31 *called = true; |
| 34 *store_registration_id = registration_id; | 32 *store_registration_id = registration_id; |
| 35 *store_version_id = version_id; | |
| 36 } | 33 } |
| 37 | 34 |
| 38 ServiceWorkerContextCore::RegistrationCallback MakeRegisteredCallback( | 35 ServiceWorkerContextCore::RegistrationCallback MakeRegisteredCallback( |
| 39 bool* called, | 36 bool* called, |
| 40 int64* store_registration_id, | 37 int64* store_registration_id) { |
| 41 int64* store_version_id) { | 38 return base::Bind(&SaveResponseCallback, called, store_registration_id); |
| 42 return base::Bind(&SaveResponseCallback, called, | |
| 43 store_registration_id, | |
| 44 store_version_id); | |
| 45 } | 39 } |
| 46 | 40 |
| 47 void CallCompletedCallback(bool* called, ServiceWorkerStatusCode) { | 41 void CallCompletedCallback(bool* called, ServiceWorkerStatusCode) { |
| 48 *called = true; | 42 *called = true; |
| 49 } | 43 } |
| 50 | 44 |
| 51 ServiceWorkerContextCore::UnregistrationCallback MakeUnregisteredCallback( | 45 ServiceWorkerContextCore::UnregistrationCallback MakeUnregisteredCallback( |
| 52 bool* called) { | 46 bool* called) { |
| 53 return base::Bind(&CallCompletedCallback, called); | 47 return base::Bind(&CallCompletedCallback, called); |
| 54 } | 48 } |
| 55 | 49 |
| 56 void ExpectRegisteredWorkers( | 50 void ExpectRegisteredWorkers( |
| 57 ServiceWorkerStatusCode expect_status, | 51 ServiceWorkerStatusCode expect_status, |
| 58 int64 expect_version_id, | |
| 59 bool expect_waiting, | 52 bool expect_waiting, |
| 60 bool expect_active, | 53 bool expect_active, |
| 61 ServiceWorkerStatusCode status, | 54 ServiceWorkerStatusCode status, |
| 62 const scoped_refptr<ServiceWorkerRegistration>& registration) { | 55 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| 63 ASSERT_EQ(expect_status, status); | 56 ASSERT_EQ(expect_status, status); |
| 64 if (status != SERVICE_WORKER_OK) { | 57 if (status != SERVICE_WORKER_OK) { |
| 65 EXPECT_FALSE(registration.get()); | 58 EXPECT_FALSE(registration.get()); |
| 66 return; | 59 return; |
| 67 } | 60 } |
| 68 | 61 |
| 69 if (expect_waiting) { | 62 if (expect_waiting) { |
| 70 EXPECT_TRUE(registration->waiting_version()); | 63 EXPECT_TRUE(registration->waiting_version()); |
| 71 EXPECT_EQ(expect_version_id, | |
| 72 registration->waiting_version()->version_id()); | |
| 73 } else { | 64 } else { |
| 74 EXPECT_FALSE(registration->waiting_version()); | 65 EXPECT_FALSE(registration->waiting_version()); |
| 75 } | 66 } |
| 76 | 67 |
| 77 if (expect_active) { | 68 if (expect_active) { |
| 78 EXPECT_TRUE(registration->active_version()); | 69 EXPECT_TRUE(registration->active_version()); |
| 79 EXPECT_EQ(expect_version_id, | |
| 80 registration->active_version()->version_id()); | |
| 81 } else { | 70 } else { |
| 82 EXPECT_FALSE(registration->active_version()); | 71 EXPECT_FALSE(registration->active_version()); |
| 83 } | 72 } |
| 84 } | 73 } |
| 85 | 74 |
| 86 class RejectInstallTestHelper : public EmbeddedWorkerTestHelper { | 75 class RejectInstallTestHelper : public EmbeddedWorkerTestHelper { |
| 87 public: | 76 public: |
| 88 explicit RejectInstallTestHelper(int mock_render_process_id) | 77 explicit RejectInstallTestHelper(int mock_render_process_id) |
| 89 : EmbeddedWorkerTestHelper(mock_render_process_id) {} | 78 : EmbeddedWorkerTestHelper(mock_render_process_id) {} |
| 90 | 79 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 121 |
| 133 protected: | 122 protected: |
| 134 TestBrowserThreadBundle browser_thread_bundle_; | 123 TestBrowserThreadBundle browser_thread_bundle_; |
| 135 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 124 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
| 136 const int render_process_id_; | 125 const int render_process_id_; |
| 137 }; | 126 }; |
| 138 | 127 |
| 139 // Make sure basic registration is working. | 128 // Make sure basic registration is working. |
| 140 TEST_F(ServiceWorkerContextTest, Register) { | 129 TEST_F(ServiceWorkerContextTest, Register) { |
| 141 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 130 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 142 int64 version_id = kInvalidServiceWorkerVersionId; | |
| 143 bool called = false; | 131 bool called = false; |
| 144 context()->RegisterServiceWorker( | 132 context()->RegisterServiceWorker( |
| 145 GURL("http://www.example.com/"), | 133 GURL("http://www.example.com/"), |
| 146 GURL("http://www.example.com/service_worker.js"), | 134 GURL("http://www.example.com/service_worker.js"), |
| 147 NULL, | 135 NULL, |
| 148 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 136 MakeRegisteredCallback(&called, ®istration_id)); |
| 149 | 137 |
| 150 ASSERT_FALSE(called); | 138 ASSERT_FALSE(called); |
| 151 base::RunLoop().RunUntilIdle(); | 139 base::RunLoop().RunUntilIdle(); |
| 152 EXPECT_TRUE(called); | 140 EXPECT_TRUE(called); |
| 153 | 141 |
| 154 EXPECT_EQ(4UL, helper_->ipc_sink()->message_count()); | 142 EXPECT_EQ(4UL, helper_->ipc_sink()->message_count()); |
| 155 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 143 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 156 EmbeddedWorkerMsg_StartWorker::ID)); | 144 EmbeddedWorkerMsg_StartWorker::ID)); |
| 157 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 145 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 158 ServiceWorkerMsg_InstallEvent::ID)); | 146 ServiceWorkerMsg_InstallEvent::ID)); |
| 159 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 147 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 160 ServiceWorkerMsg_ActivateEvent::ID)); | 148 ServiceWorkerMsg_ActivateEvent::ID)); |
| 161 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 149 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 162 EmbeddedWorkerMsg_StopWorker::ID)); | 150 EmbeddedWorkerMsg_StopWorker::ID)); |
| 163 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 151 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 164 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | |
| 165 | 152 |
| 166 context()->storage()->FindRegistrationForId( | 153 context()->storage()->FindRegistrationForId( |
| 167 registration_id, | 154 registration_id, |
| 168 GURL("http://www.example.com"), | 155 GURL("http://www.example.com"), |
| 169 base::Bind(&ExpectRegisteredWorkers, | 156 base::Bind(&ExpectRegisteredWorkers, |
| 170 SERVICE_WORKER_OK, | 157 SERVICE_WORKER_OK, |
| 171 version_id, | |
| 172 false /* expect_waiting */, | 158 false /* expect_waiting */, |
| 173 true /* expect_active */)); | 159 true /* expect_active */)); |
| 174 base::RunLoop().RunUntilIdle(); | 160 base::RunLoop().RunUntilIdle(); |
| 175 } | 161 } |
| 176 | 162 |
| 177 // Test registration when the service worker rejects the install event. The | 163 // Test registration when the service worker rejects the install event. The |
| 178 // registration callback should indicate success, but there should be no waiting | 164 // registration callback should indicate success, but there should be no waiting |
| 179 // or active worker in the registration. | 165 // or active worker in the registration. |
| 180 TEST_F(ServiceWorkerContextTest, Register_RejectInstall) { | 166 TEST_F(ServiceWorkerContextTest, Register_RejectInstall) { |
| 181 helper_.reset(); // Make sure the process lookups stay overridden. | 167 helper_.reset(); // Make sure the process lookups stay overridden. |
| 182 helper_.reset(new RejectInstallTestHelper(render_process_id_)); | 168 helper_.reset(new RejectInstallTestHelper(render_process_id_)); |
| 183 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 169 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 184 int64 version_id = kInvalidServiceWorkerVersionId; | |
| 185 bool called = false; | 170 bool called = false; |
| 186 context()->RegisterServiceWorker( | 171 context()->RegisterServiceWorker( |
| 187 GURL("http://www.example.com/"), | 172 GURL("http://www.example.com/"), |
| 188 GURL("http://www.example.com/service_worker.js"), | 173 GURL("http://www.example.com/service_worker.js"), |
| 189 NULL, | 174 NULL, |
| 190 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 175 MakeRegisteredCallback(&called, ®istration_id)); |
| 191 | 176 |
| 192 ASSERT_FALSE(called); | 177 ASSERT_FALSE(called); |
| 193 base::RunLoop().RunUntilIdle(); | 178 base::RunLoop().RunUntilIdle(); |
| 194 EXPECT_TRUE(called); | 179 EXPECT_TRUE(called); |
| 195 | 180 |
| 196 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); | 181 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); |
| 197 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 182 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 198 EmbeddedWorkerMsg_StartWorker::ID)); | 183 EmbeddedWorkerMsg_StartWorker::ID)); |
| 199 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 184 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 200 ServiceWorkerMsg_InstallEvent::ID)); | 185 ServiceWorkerMsg_InstallEvent::ID)); |
| 201 EXPECT_FALSE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 186 EXPECT_FALSE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 202 ServiceWorkerMsg_ActivateEvent::ID)); | 187 ServiceWorkerMsg_ActivateEvent::ID)); |
| 203 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 188 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 204 EmbeddedWorkerMsg_StopWorker::ID)); | 189 EmbeddedWorkerMsg_StopWorker::ID)); |
| 205 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 190 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 206 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | |
| 207 | 191 |
| 208 context()->storage()->FindRegistrationForId( | 192 context()->storage()->FindRegistrationForId( |
| 209 registration_id, | 193 registration_id, |
| 210 GURL("http://www.example.com"), | 194 GURL("http://www.example.com"), |
| 211 base::Bind(&ExpectRegisteredWorkers, | 195 base::Bind(&ExpectRegisteredWorkers, |
| 212 SERVICE_WORKER_ERROR_NOT_FOUND, | 196 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 213 kInvalidServiceWorkerVersionId, | |
| 214 false /* expect_waiting */, | 197 false /* expect_waiting */, |
| 215 false /* expect_active */)); | 198 false /* expect_active */)); |
| 216 base::RunLoop().RunUntilIdle(); | 199 base::RunLoop().RunUntilIdle(); |
| 217 } | 200 } |
| 218 | 201 |
| 219 // Test registration when the service worker rejects the activate event. The | 202 // Test registration when the service worker rejects the activate event. The |
| 220 // registration callback should indicate success, but there should be no waiting | 203 // registration callback should indicate success, but there should be no waiting |
| 221 // or active worker in the registration. | 204 // or active worker in the registration. |
| 222 TEST_F(ServiceWorkerContextTest, Register_RejectActivate) { | 205 TEST_F(ServiceWorkerContextTest, Register_RejectActivate) { |
| 223 helper_.reset(); // Make sure the process lookups stay overridden. | 206 helper_.reset(); // Make sure the process lookups stay overridden. |
| 224 helper_.reset(new RejectActivateTestHelper(render_process_id_)); | 207 helper_.reset(new RejectActivateTestHelper(render_process_id_)); |
| 225 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 208 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 226 int64 version_id = kInvalidServiceWorkerVersionId; | |
| 227 bool called = false; | 209 bool called = false; |
| 228 context()->RegisterServiceWorker( | 210 context()->RegisterServiceWorker( |
| 229 GURL("http://www.example.com/"), | 211 GURL("http://www.example.com/"), |
| 230 GURL("http://www.example.com/service_worker.js"), | 212 GURL("http://www.example.com/service_worker.js"), |
| 231 NULL, | 213 NULL, |
| 232 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 214 MakeRegisteredCallback(&called, ®istration_id)); |
| 233 | 215 |
| 234 ASSERT_FALSE(called); | 216 ASSERT_FALSE(called); |
| 235 base::RunLoop().RunUntilIdle(); | 217 base::RunLoop().RunUntilIdle(); |
| 236 EXPECT_TRUE(called); | 218 EXPECT_TRUE(called); |
| 237 | 219 |
| 238 EXPECT_EQ(4UL, helper_->ipc_sink()->message_count()); | 220 EXPECT_EQ(4UL, helper_->ipc_sink()->message_count()); |
| 239 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 221 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 240 EmbeddedWorkerMsg_StartWorker::ID)); | 222 EmbeddedWorkerMsg_StartWorker::ID)); |
| 241 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 223 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 242 ServiceWorkerMsg_InstallEvent::ID)); | 224 ServiceWorkerMsg_InstallEvent::ID)); |
| 243 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 225 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 244 ServiceWorkerMsg_ActivateEvent::ID)); | 226 ServiceWorkerMsg_ActivateEvent::ID)); |
| 245 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( | 227 EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching( |
| 246 EmbeddedWorkerMsg_StopWorker::ID)); | 228 EmbeddedWorkerMsg_StopWorker::ID)); |
| 247 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 229 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 248 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | |
| 249 | 230 |
| 250 context()->storage()->FindRegistrationForId( | 231 context()->storage()->FindRegistrationForId( |
| 251 registration_id, | 232 registration_id, |
| 252 GURL("http://www.example.com"), | 233 GURL("http://www.example.com"), |
| 253 base::Bind(&ExpectRegisteredWorkers, | 234 base::Bind(&ExpectRegisteredWorkers, |
| 254 SERVICE_WORKER_ERROR_NOT_FOUND, | 235 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 255 kInvalidServiceWorkerVersionId, | |
| 256 false /* expect_waiting */, | 236 false /* expect_waiting */, |
| 257 false /* expect_active */)); | 237 false /* expect_active */)); |
| 258 base::RunLoop().RunUntilIdle(); | 238 base::RunLoop().RunUntilIdle(); |
| 259 } | 239 } |
| 260 | 240 |
| 261 // Make sure registrations are cleaned up when they are unregistered. | 241 // Make sure registrations are cleaned up when they are unregistered. |
| 262 TEST_F(ServiceWorkerContextTest, Unregister) { | 242 TEST_F(ServiceWorkerContextTest, Unregister) { |
| 263 GURL pattern("http://www.example.com/"); | 243 GURL pattern("http://www.example.com/"); |
| 264 | 244 |
| 265 bool called = false; | 245 bool called = false; |
| 266 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 246 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 267 int64 version_id = kInvalidServiceWorkerVersionId; | |
| 268 context()->RegisterServiceWorker( | 247 context()->RegisterServiceWorker( |
| 269 pattern, | 248 pattern, |
| 270 GURL("http://www.example.com/service_worker.js"), | 249 GURL("http://www.example.com/service_worker.js"), |
| 271 NULL, | 250 NULL, |
| 272 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 251 MakeRegisteredCallback(&called, ®istration_id)); |
| 273 | 252 |
| 274 ASSERT_FALSE(called); | 253 ASSERT_FALSE(called); |
| 275 base::RunLoop().RunUntilIdle(); | 254 base::RunLoop().RunUntilIdle(); |
| 276 ASSERT_TRUE(called); | 255 ASSERT_TRUE(called); |
| 277 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 256 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 278 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | |
| 279 | 257 |
| 280 called = false; | 258 called = false; |
| 281 context()->UnregisterServiceWorker(pattern, | 259 context()->UnregisterServiceWorker(pattern, |
| 282 MakeUnregisteredCallback(&called)); | 260 MakeUnregisteredCallback(&called)); |
| 283 | 261 |
| 284 ASSERT_FALSE(called); | 262 ASSERT_FALSE(called); |
| 285 base::RunLoop().RunUntilIdle(); | 263 base::RunLoop().RunUntilIdle(); |
| 286 ASSERT_TRUE(called); | 264 ASSERT_TRUE(called); |
| 287 | 265 |
| 288 context()->storage()->FindRegistrationForId( | 266 context()->storage()->FindRegistrationForId( |
| 289 registration_id, | 267 registration_id, |
| 290 pattern.GetOrigin(), | 268 pattern.GetOrigin(), |
| 291 base::Bind(&ExpectRegisteredWorkers, | 269 base::Bind(&ExpectRegisteredWorkers, |
| 292 SERVICE_WORKER_ERROR_NOT_FOUND, | 270 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 293 kInvalidServiceWorkerVersionId, | |
| 294 false /* expect_waiting */, | 271 false /* expect_waiting */, |
| 295 false /* expect_active */)); | 272 false /* expect_active */)); |
| 296 base::RunLoop().RunUntilIdle(); | 273 base::RunLoop().RunUntilIdle(); |
| 297 } | 274 } |
| 298 | 275 |
| 299 // Make sure registering a new script creates a new version and shares an | 276 // Make sure registering a new script shares an existing registration. |
| 300 // existing registration. | |
| 301 TEST_F(ServiceWorkerContextTest, RegisterNewScript) { | 277 TEST_F(ServiceWorkerContextTest, RegisterNewScript) { |
| 302 GURL pattern("http://www.example.com/"); | 278 GURL pattern("http://www.example.com/"); |
| 303 | 279 |
| 304 bool called = false; | 280 bool called = false; |
| 305 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; | 281 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; |
| 306 int64 old_version_id = kInvalidServiceWorkerVersionId; | |
| 307 context()->RegisterServiceWorker( | 282 context()->RegisterServiceWorker( |
| 308 pattern, | 283 pattern, |
| 309 GURL("http://www.example.com/service_worker.js"), | 284 GURL("http://www.example.com/service_worker.js"), |
| 310 NULL, | 285 NULL, |
| 311 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); | 286 MakeRegisteredCallback(&called, &old_registration_id)); |
| 312 | 287 |
| 313 ASSERT_FALSE(called); | 288 ASSERT_FALSE(called); |
| 314 base::RunLoop().RunUntilIdle(); | 289 base::RunLoop().RunUntilIdle(); |
| 315 ASSERT_TRUE(called); | 290 ASSERT_TRUE(called); |
| 316 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); | 291 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); |
| 317 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); | |
| 318 | 292 |
| 319 called = false; | 293 called = false; |
| 320 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; | 294 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; |
| 321 int64 new_version_id = kInvalidServiceWorkerVersionId; | |
| 322 context()->RegisterServiceWorker( | 295 context()->RegisterServiceWorker( |
| 323 pattern, | 296 pattern, |
| 324 GURL("http://www.example.com/service_worker_new.js"), | 297 GURL("http://www.example.com/service_worker_new.js"), |
| 325 NULL, | 298 NULL, |
| 326 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); | 299 MakeRegisteredCallback(&called, &new_registration_id)); |
| 327 | 300 |
| 328 ASSERT_FALSE(called); | 301 ASSERT_FALSE(called); |
| 329 base::RunLoop().RunUntilIdle(); | 302 base::RunLoop().RunUntilIdle(); |
| 330 ASSERT_TRUE(called); | 303 ASSERT_TRUE(called); |
| 331 | 304 |
| 332 EXPECT_NE(kInvalidServiceWorkerRegistrationId, new_registration_id); | 305 EXPECT_NE(kInvalidServiceWorkerRegistrationId, new_registration_id); |
| 333 EXPECT_NE(kInvalidServiceWorkerVersionId, new_version_id); | |
| 334 EXPECT_EQ(old_registration_id, new_registration_id); | 306 EXPECT_EQ(old_registration_id, new_registration_id); |
| 335 EXPECT_NE(old_version_id, new_version_id); | |
| 336 } | 307 } |
| 337 | 308 |
| 338 // Make sure that when registering a duplicate pattern+script_url | 309 // Make sure that when registering a duplicate pattern+script_url |
| 339 // combination, that the same registration is used. | 310 // combination, that the same registration is used. |
| 340 TEST_F(ServiceWorkerContextTest, RegisterDuplicateScript) { | 311 TEST_F(ServiceWorkerContextTest, RegisterDuplicateScript) { |
| 341 GURL pattern("http://www.example.com/"); | 312 GURL pattern("http://www.example.com/"); |
| 342 GURL script_url("http://www.example.com/service_worker.js"); | 313 GURL script_url("http://www.example.com/service_worker.js"); |
| 343 | 314 |
| 344 bool called = false; | 315 bool called = false; |
| 345 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; | 316 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; |
| 346 int64 old_version_id = kInvalidServiceWorkerVersionId; | |
| 347 context()->RegisterServiceWorker( | 317 context()->RegisterServiceWorker( |
| 348 pattern, | 318 pattern, |
| 349 script_url, | 319 script_url, |
| 350 NULL, | 320 NULL, |
| 351 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); | 321 MakeRegisteredCallback(&called, &old_registration_id)); |
| 352 | 322 |
| 353 ASSERT_FALSE(called); | 323 ASSERT_FALSE(called); |
| 354 base::RunLoop().RunUntilIdle(); | 324 base::RunLoop().RunUntilIdle(); |
| 355 ASSERT_TRUE(called); | 325 ASSERT_TRUE(called); |
| 356 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); | 326 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); |
| 357 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); | |
| 358 | 327 |
| 359 called = false; | 328 called = false; |
| 360 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; | 329 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; |
| 361 int64 new_version_id = kInvalidServiceWorkerVersionId; | |
| 362 context()->RegisterServiceWorker( | 330 context()->RegisterServiceWorker( |
| 363 pattern, | 331 pattern, |
| 364 script_url, | 332 script_url, |
| 365 NULL, | 333 NULL, |
| 366 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); | 334 MakeRegisteredCallback(&called, &new_registration_id)); |
| 367 | 335 |
| 368 ASSERT_FALSE(called); | 336 ASSERT_FALSE(called); |
| 369 base::RunLoop().RunUntilIdle(); | 337 base::RunLoop().RunUntilIdle(); |
| 370 ASSERT_TRUE(called); | 338 ASSERT_TRUE(called); |
| 371 EXPECT_EQ(old_registration_id, new_registration_id); | 339 EXPECT_EQ(old_registration_id, new_registration_id); |
| 372 EXPECT_EQ(old_version_id, new_version_id); | |
| 373 } | 340 } |
| 374 | 341 |
| 375 // TODO(nhiroki): Test this for on-disk storage. | 342 // TODO(nhiroki): Test this for on-disk storage. |
| 376 TEST_F(ServiceWorkerContextTest, DeleteAndStartOver) { | 343 TEST_F(ServiceWorkerContextTest, DeleteAndStartOver) { |
| 377 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 344 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 378 int64 version_id = kInvalidServiceWorkerVersionId; | |
| 379 bool called = false; | 345 bool called = false; |
| 380 context()->RegisterServiceWorker( | 346 context()->RegisterServiceWorker( |
| 381 GURL("http://www.example.com/"), | 347 GURL("http://www.example.com/"), |
| 382 GURL("http://www.example.com/service_worker.js"), | 348 GURL("http://www.example.com/service_worker.js"), |
| 383 NULL, | 349 NULL, |
| 384 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 350 MakeRegisteredCallback(&called, ®istration_id)); |
| 385 | 351 |
| 386 ASSERT_FALSE(called); | 352 ASSERT_FALSE(called); |
| 387 base::RunLoop().RunUntilIdle(); | 353 base::RunLoop().RunUntilIdle(); |
| 388 EXPECT_TRUE(called); | 354 EXPECT_TRUE(called); |
| 389 | 355 |
| 390 context()->storage()->FindRegistrationForId( | 356 context()->storage()->FindRegistrationForId( |
| 391 registration_id, | 357 registration_id, |
| 392 GURL("http://www.example.com"), | 358 GURL("http://www.example.com"), |
| 393 base::Bind(&ExpectRegisteredWorkers, | 359 base::Bind(&ExpectRegisteredWorkers, |
| 394 SERVICE_WORKER_OK, | 360 SERVICE_WORKER_OK, |
| 395 version_id, | |
| 396 false /* expect_waiting */, | 361 false /* expect_waiting */, |
| 397 true /* expect_active */)); | 362 true /* expect_active */)); |
| 398 base::RunLoop().RunUntilIdle(); | 363 base::RunLoop().RunUntilIdle(); |
| 399 | 364 |
| 400 context()->ScheduleDeleteAndStartOver(); | 365 context()->ScheduleDeleteAndStartOver(); |
| 401 | 366 |
| 402 // The storage is disabled while the recovery process is running, so the | 367 // The storage is disabled while the recovery process is running, so the |
| 403 // operation should be failed. | 368 // operation should be failed. |
| 404 context()->storage()->FindRegistrationForId( | 369 context()->storage()->FindRegistrationForId( |
| 405 registration_id, | 370 registration_id, |
| 406 GURL("http://www.example.com"), | 371 GURL("http://www.example.com"), |
| 407 base::Bind(&ExpectRegisteredWorkers, | 372 base::Bind(&ExpectRegisteredWorkers, |
| 408 SERVICE_WORKER_ERROR_FAILED, | 373 SERVICE_WORKER_ERROR_FAILED, |
| 409 version_id, | |
| 410 false /* expect_waiting */, | 374 false /* expect_waiting */, |
| 411 true /* expect_active */)); | 375 true /* expect_active */)); |
| 412 base::RunLoop().RunUntilIdle(); | 376 base::RunLoop().RunUntilIdle(); |
| 413 | 377 |
| 414 // The context started over and the storage was re-initialized, so the | 378 // The context started over and the storage was re-initialized, so the |
| 415 // registration should not be found. | 379 // registration should not be found. |
| 416 context()->storage()->FindRegistrationForId( | 380 context()->storage()->FindRegistrationForId( |
| 417 registration_id, | 381 registration_id, |
| 418 GURL("http://www.example.com"), | 382 GURL("http://www.example.com"), |
| 419 base::Bind(&ExpectRegisteredWorkers, | 383 base::Bind(&ExpectRegisteredWorkers, |
| 420 SERVICE_WORKER_ERROR_NOT_FOUND, | 384 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 421 version_id, | |
| 422 false /* expect_waiting */, | 385 false /* expect_waiting */, |
| 423 true /* expect_active */)); | 386 true /* expect_active */)); |
| 424 base::RunLoop().RunUntilIdle(); | 387 base::RunLoop().RunUntilIdle(); |
| 425 | 388 |
| 426 called = false; | 389 called = false; |
| 427 context()->RegisterServiceWorker( | 390 context()->RegisterServiceWorker( |
| 428 GURL("http://www.example.com/"), | 391 GURL("http://www.example.com/"), |
| 429 GURL("http://www.example.com/service_worker.js"), | 392 GURL("http://www.example.com/service_worker.js"), |
| 430 NULL, | 393 NULL, |
| 431 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 394 MakeRegisteredCallback(&called, ®istration_id)); |
| 432 | 395 |
| 433 ASSERT_FALSE(called); | 396 ASSERT_FALSE(called); |
| 434 base::RunLoop().RunUntilIdle(); | 397 base::RunLoop().RunUntilIdle(); |
| 435 EXPECT_TRUE(called); | 398 EXPECT_TRUE(called); |
| 436 | 399 |
| 437 context()->storage()->FindRegistrationForId( | 400 context()->storage()->FindRegistrationForId( |
| 438 registration_id, | 401 registration_id, |
| 439 GURL("http://www.example.com"), | 402 GURL("http://www.example.com"), |
| 440 base::Bind(&ExpectRegisteredWorkers, | 403 base::Bind(&ExpectRegisteredWorkers, |
| 441 SERVICE_WORKER_OK, | 404 SERVICE_WORKER_OK, |
| 442 version_id, | |
| 443 false /* expect_waiting */, | 405 false /* expect_waiting */, |
| 444 true /* expect_active */)); | 406 true /* expect_active */)); |
| 445 base::RunLoop().RunUntilIdle(); | 407 base::RunLoop().RunUntilIdle(); |
| 446 } | 408 } |
| 447 | 409 |
| 448 } // namespace content | 410 } // namespace content |
| OLD | NEW |