| 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" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 EXPECT_TRUE(registration->active_version()); | 76 EXPECT_TRUE(registration->active_version()); |
| 77 EXPECT_EQ(expect_version_id, | 77 EXPECT_EQ(expect_version_id, |
| 78 registration->active_version()->version_id()); | 78 registration->active_version()->version_id()); |
| 79 } else { | 79 } else { |
| 80 EXPECT_FALSE(registration->active_version()); | 80 EXPECT_FALSE(registration->active_version()); |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 | 83 |
| 84 class RejectInstallTestHelper : public EmbeddedWorkerTestHelper { | 84 class RejectInstallTestHelper : public EmbeddedWorkerTestHelper { |
| 85 public: | 85 public: |
| 86 RejectInstallTestHelper(ServiceWorkerContextCore* context, | 86 RejectInstallTestHelper(int mock_render_process_id) |
| 87 int mock_render_process_id) | 87 : EmbeddedWorkerTestHelper(mock_render_process_id) {} |
| 88 : EmbeddedWorkerTestHelper(context, mock_render_process_id) {} | |
| 89 | 88 |
| 90 virtual void OnInstallEvent(int embedded_worker_id, | 89 virtual void OnInstallEvent(int embedded_worker_id, |
| 91 int request_id, | 90 int request_id, |
| 92 int active_version_id) OVERRIDE { | 91 int active_version_id) OVERRIDE { |
| 93 SimulateSend( | 92 SimulateSend( |
| 94 new ServiceWorkerHostMsg_InstallEventFinished( | 93 new ServiceWorkerHostMsg_InstallEventFinished( |
| 95 embedded_worker_id, request_id, | 94 embedded_worker_id, request_id, |
| 96 blink::WebServiceWorkerEventResultRejected)); | 95 blink::WebServiceWorkerEventResultRejected)); |
| 97 } | 96 } |
| 98 }; | 97 }; |
| 99 | 98 |
| 100 class RejectActivateTestHelper : public EmbeddedWorkerTestHelper { | 99 class RejectActivateTestHelper : public EmbeddedWorkerTestHelper { |
| 101 public: | 100 public: |
| 102 RejectActivateTestHelper(ServiceWorkerContextCore* context, | 101 RejectActivateTestHelper(int mock_render_process_id) |
| 103 int mock_render_process_id) | 102 : EmbeddedWorkerTestHelper(mock_render_process_id) {} |
| 104 : EmbeddedWorkerTestHelper(context, mock_render_process_id) {} | |
| 105 | 103 |
| 106 virtual void OnActivateEvent(int embedded_worker_id, | 104 virtual void OnActivateEvent(int embedded_worker_id, |
| 107 int request_id) OVERRIDE { | 105 int request_id) OVERRIDE { |
| 108 SimulateSend( | 106 SimulateSend( |
| 109 new ServiceWorkerHostMsg_ActivateEventFinished( | 107 new ServiceWorkerHostMsg_ActivateEventFinished( |
| 110 embedded_worker_id, request_id, | 108 embedded_worker_id, request_id, |
| 111 blink::WebServiceWorkerEventResultRejected)); | 109 blink::WebServiceWorkerEventResultRejected)); |
| 112 } | 110 } |
| 113 }; | 111 }; |
| 114 | 112 |
| 115 } // namespace | 113 } // namespace |
| 116 | 114 |
| 117 class ServiceWorkerContextTest : public testing::Test { | 115 class ServiceWorkerContextTest : public testing::Test { |
| 118 public: | 116 public: |
| 119 ServiceWorkerContextTest() | 117 ServiceWorkerContextTest() |
| 120 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), | 118 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), |
| 121 render_process_id_(99) {} | 119 render_process_id_(99) {} |
| 122 | 120 |
| 123 virtual void SetUp() OVERRIDE { | 121 virtual void SetUp() OVERRIDE { |
| 124 context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL)); | 122 helper_.reset(new EmbeddedWorkerTestHelper(render_process_id_)); |
| 125 helper_.reset(new EmbeddedWorkerTestHelper( | |
| 126 context_.get(), render_process_id_)); | |
| 127 } | 123 } |
| 128 | 124 |
| 129 virtual void TearDown() OVERRIDE { | 125 virtual void TearDown() OVERRIDE { |
| 130 helper_.reset(); | 126 helper_.reset(); |
| 131 context_.reset(); | |
| 132 } | 127 } |
| 133 | 128 |
| 129 ServiceWorkerContextCore* context() { return helper_->context(); } |
| 130 |
| 134 protected: | 131 protected: |
| 135 TestBrowserThreadBundle browser_thread_bundle_; | 132 TestBrowserThreadBundle browser_thread_bundle_; |
| 136 scoped_ptr<ServiceWorkerContextCore> context_; | |
| 137 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 133 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
| 138 const int render_process_id_; | 134 const int render_process_id_; |
| 139 }; | 135 }; |
| 140 | 136 |
| 141 // Make sure basic registration is working. | 137 // Make sure basic registration is working. |
| 142 TEST_F(ServiceWorkerContextTest, Register) { | 138 TEST_F(ServiceWorkerContextTest, Register) { |
| 143 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 139 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 144 int64 version_id = kInvalidServiceWorkerVersionId; | 140 int64 version_id = kInvalidServiceWorkerVersionId; |
| 145 bool called = false; | 141 bool called = false; |
| 146 context_->RegisterServiceWorker( | 142 context()->RegisterServiceWorker( |
| 147 GURL("http://www.example.com/*"), | 143 GURL("http://www.example.com/*"), |
| 148 GURL("http://www.example.com/service_worker.js"), | 144 GURL("http://www.example.com/service_worker.js"), |
| 149 render_process_id_, | 145 render_process_id_, |
| 150 NULL, | 146 NULL, |
| 151 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 147 MakeRegisteredCallback(&called, ®istration_id, &version_id)); |
| 152 | 148 |
| 153 ASSERT_FALSE(called); | 149 ASSERT_FALSE(called); |
| 154 base::RunLoop().RunUntilIdle(); | 150 base::RunLoop().RunUntilIdle(); |
| 155 EXPECT_TRUE(called); | 151 EXPECT_TRUE(called); |
| 156 | 152 |
| 157 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); | 153 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); |
| 158 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 154 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 159 ServiceWorkerMsg_InstallEvent::ID)); | 155 ServiceWorkerMsg_InstallEvent::ID)); |
| 160 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 156 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 161 ServiceWorkerMsg_ActivateEvent::ID)); | 157 ServiceWorkerMsg_ActivateEvent::ID)); |
| 162 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 158 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 163 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | 159 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); |
| 164 | 160 |
| 165 context_->storage()->FindRegistrationForId( | 161 context()->storage()->FindRegistrationForId( |
| 166 registration_id, | 162 registration_id, |
| 167 base::Bind(&ExpectRegisteredWorkers, | 163 base::Bind(&ExpectRegisteredWorkers, |
| 168 SERVICE_WORKER_OK, | 164 SERVICE_WORKER_OK, |
| 169 version_id, | 165 version_id, |
| 170 false /* expect_pending */, | 166 false /* expect_pending */, |
| 171 true /* expect_active */)); | 167 true /* expect_active */)); |
| 172 base::RunLoop().RunUntilIdle(); | 168 base::RunLoop().RunUntilIdle(); |
| 173 } | 169 } |
| 174 | 170 |
| 175 // Test registration when the service worker rejects the install event. The | 171 // Test registration when the service worker rejects the install event. The |
| 176 // registration callback should indicate success, but there should be no pending | 172 // registration callback should indicate success, but there should be no pending |
| 177 // or active worker in the registration. | 173 // or active worker in the registration. |
| 178 TEST_F(ServiceWorkerContextTest, Register_RejectInstall) { | 174 TEST_F(ServiceWorkerContextTest, Register_RejectInstall) { |
| 179 helper_.reset( | 175 helper_.reset(); // Make sure the process lookups stay overridden. |
| 180 new RejectInstallTestHelper(context_.get(), render_process_id_)); | 176 helper_.reset(new RejectInstallTestHelper(render_process_id_)); |
| 181 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 177 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 182 int64 version_id = kInvalidServiceWorkerVersionId; | 178 int64 version_id = kInvalidServiceWorkerVersionId; |
| 183 bool called = false; | 179 bool called = false; |
| 184 context_->RegisterServiceWorker( | 180 context()->RegisterServiceWorker( |
| 185 GURL("http://www.example.com/*"), | 181 GURL("http://www.example.com/*"), |
| 186 GURL("http://www.example.com/service_worker.js"), | 182 GURL("http://www.example.com/service_worker.js"), |
| 187 render_process_id_, | 183 render_process_id_, |
| 188 NULL, | 184 NULL, |
| 189 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 185 MakeRegisteredCallback(&called, ®istration_id, &version_id)); |
| 190 | 186 |
| 191 ASSERT_FALSE(called); | 187 ASSERT_FALSE(called); |
| 192 base::RunLoop().RunUntilIdle(); | 188 base::RunLoop().RunUntilIdle(); |
| 193 EXPECT_TRUE(called); | 189 EXPECT_TRUE(called); |
| 194 | 190 |
| 195 EXPECT_EQ(2UL, helper_->ipc_sink()->message_count()); | 191 EXPECT_EQ(2UL, helper_->ipc_sink()->message_count()); |
| 196 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 192 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 197 ServiceWorkerMsg_InstallEvent::ID)); | 193 ServiceWorkerMsg_InstallEvent::ID)); |
| 198 EXPECT_FALSE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 194 EXPECT_FALSE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 199 ServiceWorkerMsg_ActivateEvent::ID)); | 195 ServiceWorkerMsg_ActivateEvent::ID)); |
| 200 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 196 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 201 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | 197 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); |
| 202 | 198 |
| 203 context_->storage()->FindRegistrationForId( | 199 context()->storage()->FindRegistrationForId( |
| 204 registration_id, | 200 registration_id, |
| 205 base::Bind(&ExpectRegisteredWorkers, | 201 base::Bind(&ExpectRegisteredWorkers, |
| 206 SERVICE_WORKER_ERROR_NOT_FOUND, | 202 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 207 kInvalidServiceWorkerVersionId, | 203 kInvalidServiceWorkerVersionId, |
| 208 false /* expect_pending */, | 204 false /* expect_pending */, |
| 209 false /* expect_active */)); | 205 false /* expect_active */)); |
| 210 base::RunLoop().RunUntilIdle(); | 206 base::RunLoop().RunUntilIdle(); |
| 211 } | 207 } |
| 212 | 208 |
| 213 // Test registration when the service worker rejects the activate event. The | 209 // Test registration when the service worker rejects the activate event. The |
| 214 // registration callback should indicate success, but there should be no pending | 210 // registration callback should indicate success, but there should be no pending |
| 215 // or active worker in the registration. | 211 // or active worker in the registration. |
| 216 TEST_F(ServiceWorkerContextTest, Register_RejectActivate) { | 212 TEST_F(ServiceWorkerContextTest, Register_RejectActivate) { |
| 217 helper_.reset( | 213 helper_.reset(); // Make sure the process lookups stay overridden. |
| 218 new RejectActivateTestHelper(context_.get(), render_process_id_)); | 214 helper_.reset(new RejectActivateTestHelper(render_process_id_)); |
| 219 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 215 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 220 int64 version_id = kInvalidServiceWorkerVersionId; | 216 int64 version_id = kInvalidServiceWorkerVersionId; |
| 221 bool called = false; | 217 bool called = false; |
| 222 context_->RegisterServiceWorker( | 218 context()->RegisterServiceWorker( |
| 223 GURL("http://www.example.com/*"), | 219 GURL("http://www.example.com/*"), |
| 224 GURL("http://www.example.com/service_worker.js"), | 220 GURL("http://www.example.com/service_worker.js"), |
| 225 render_process_id_, | 221 render_process_id_, |
| 226 NULL, | 222 NULL, |
| 227 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 223 MakeRegisteredCallback(&called, ®istration_id, &version_id)); |
| 228 | 224 |
| 229 ASSERT_FALSE(called); | 225 ASSERT_FALSE(called); |
| 230 base::RunLoop().RunUntilIdle(); | 226 base::RunLoop().RunUntilIdle(); |
| 231 EXPECT_TRUE(called); | 227 EXPECT_TRUE(called); |
| 232 | 228 |
| 233 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); | 229 EXPECT_EQ(3UL, helper_->ipc_sink()->message_count()); |
| 234 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 230 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 235 ServiceWorkerMsg_InstallEvent::ID)); | 231 ServiceWorkerMsg_InstallEvent::ID)); |
| 236 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( | 232 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( |
| 237 ServiceWorkerMsg_ActivateEvent::ID)); | 233 ServiceWorkerMsg_ActivateEvent::ID)); |
| 238 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 234 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 239 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | 235 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); |
| 240 | 236 |
| 241 context_->storage()->FindRegistrationForId( | 237 context()->storage()->FindRegistrationForId( |
| 242 registration_id, | 238 registration_id, |
| 243 base::Bind(&ExpectRegisteredWorkers, | 239 base::Bind(&ExpectRegisteredWorkers, |
| 244 SERVICE_WORKER_ERROR_NOT_FOUND, | 240 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 245 kInvalidServiceWorkerVersionId, | 241 kInvalidServiceWorkerVersionId, |
| 246 false /* expect_pending */, | 242 false /* expect_pending */, |
| 247 false /* expect_active */)); | 243 false /* expect_active */)); |
| 248 base::RunLoop().RunUntilIdle(); | 244 base::RunLoop().RunUntilIdle(); |
| 249 } | 245 } |
| 250 | 246 |
| 251 // Make sure registrations are cleaned up when they are unregistered. | 247 // Make sure registrations are cleaned up when they are unregistered. |
| 252 TEST_F(ServiceWorkerContextTest, Unregister) { | 248 TEST_F(ServiceWorkerContextTest, Unregister) { |
| 253 GURL pattern("http://www.example.com/*"); | 249 GURL pattern("http://www.example.com/*"); |
| 254 | 250 |
| 255 bool called = false; | 251 bool called = false; |
| 256 int64 registration_id = kInvalidServiceWorkerRegistrationId; | 252 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 257 int64 version_id = kInvalidServiceWorkerVersionId; | 253 int64 version_id = kInvalidServiceWorkerVersionId; |
| 258 context_->RegisterServiceWorker( | 254 context()->RegisterServiceWorker( |
| 259 pattern, | 255 pattern, |
| 260 GURL("http://www.example.com/service_worker.js"), | 256 GURL("http://www.example.com/service_worker.js"), |
| 261 render_process_id_, | 257 render_process_id_, |
| 262 NULL, | 258 NULL, |
| 263 MakeRegisteredCallback(&called, ®istration_id, &version_id)); | 259 MakeRegisteredCallback(&called, ®istration_id, &version_id)); |
| 264 | 260 |
| 265 ASSERT_FALSE(called); | 261 ASSERT_FALSE(called); |
| 266 base::RunLoop().RunUntilIdle(); | 262 base::RunLoop().RunUntilIdle(); |
| 267 ASSERT_TRUE(called); | 263 ASSERT_TRUE(called); |
| 268 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); | 264 EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
| 269 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); | 265 EXPECT_NE(kInvalidServiceWorkerVersionId, version_id); |
| 270 | 266 |
| 271 called = false; | 267 called = false; |
| 272 context_->UnregisterServiceWorker( | 268 context()->UnregisterServiceWorker( |
| 273 pattern, render_process_id_, NULL, MakeUnregisteredCallback(&called)); | 269 pattern, render_process_id_, NULL, MakeUnregisteredCallback(&called)); |
| 274 | 270 |
| 275 ASSERT_FALSE(called); | 271 ASSERT_FALSE(called); |
| 276 base::RunLoop().RunUntilIdle(); | 272 base::RunLoop().RunUntilIdle(); |
| 277 ASSERT_TRUE(called); | 273 ASSERT_TRUE(called); |
| 278 | 274 |
| 279 context_->storage()->FindRegistrationForId( | 275 context()->storage()->FindRegistrationForId( |
| 280 registration_id, | 276 registration_id, |
| 281 base::Bind(&ExpectRegisteredWorkers, | 277 base::Bind(&ExpectRegisteredWorkers, |
| 282 SERVICE_WORKER_ERROR_NOT_FOUND, | 278 SERVICE_WORKER_ERROR_NOT_FOUND, |
| 283 kInvalidServiceWorkerVersionId, | 279 kInvalidServiceWorkerVersionId, |
| 284 false /* expect_pending */, | 280 false /* expect_pending */, |
| 285 false /* expect_active */)); | 281 false /* expect_active */)); |
| 286 base::RunLoop().RunUntilIdle(); | 282 base::RunLoop().RunUntilIdle(); |
| 287 } | 283 } |
| 288 | 284 |
| 289 // Make sure that when a new registration replaces an existing | 285 // Make sure that when a new registration replaces an existing |
| 290 // registration, that the old one is cleaned up. | 286 // registration, that the old one is cleaned up. |
| 291 TEST_F(ServiceWorkerContextTest, RegisterNewScript) { | 287 TEST_F(ServiceWorkerContextTest, RegisterNewScript) { |
| 292 GURL pattern("http://www.example.com/*"); | 288 GURL pattern("http://www.example.com/*"); |
| 293 | 289 |
| 294 bool called = false; | 290 bool called = false; |
| 295 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; | 291 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; |
| 296 int64 old_version_id = kInvalidServiceWorkerVersionId; | 292 int64 old_version_id = kInvalidServiceWorkerVersionId; |
| 297 context_->RegisterServiceWorker( | 293 context()->RegisterServiceWorker( |
| 298 pattern, | 294 pattern, |
| 299 GURL("http://www.example.com/service_worker.js"), | 295 GURL("http://www.example.com/service_worker.js"), |
| 300 render_process_id_, | 296 render_process_id_, |
| 301 NULL, | 297 NULL, |
| 302 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); | 298 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); |
| 303 | 299 |
| 304 ASSERT_FALSE(called); | 300 ASSERT_FALSE(called); |
| 305 base::RunLoop().RunUntilIdle(); | 301 base::RunLoop().RunUntilIdle(); |
| 306 ASSERT_TRUE(called); | 302 ASSERT_TRUE(called); |
| 307 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); | 303 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); |
| 308 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); | 304 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); |
| 309 | 305 |
| 310 called = false; | 306 called = false; |
| 311 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; | 307 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; |
| 312 int64 new_version_id = kInvalidServiceWorkerVersionId; | 308 int64 new_version_id = kInvalidServiceWorkerVersionId; |
| 313 context_->RegisterServiceWorker( | 309 context()->RegisterServiceWorker( |
| 314 pattern, | 310 pattern, |
| 315 GURL("http://www.example.com/service_worker_new.js"), | 311 GURL("http://www.example.com/service_worker_new.js"), |
| 316 render_process_id_, | 312 render_process_id_, |
| 317 NULL, | 313 NULL, |
| 318 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); | 314 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); |
| 319 | 315 |
| 320 ASSERT_FALSE(called); | 316 ASSERT_FALSE(called); |
| 321 base::RunLoop().RunUntilIdle(); | 317 base::RunLoop().RunUntilIdle(); |
| 322 ASSERT_TRUE(called); | 318 ASSERT_TRUE(called); |
| 323 | 319 |
| 324 // Returned IDs should be valid, and should differ from the values | 320 // Returned IDs should be valid, and should differ from the values |
| 325 // returned for the previous registration. | 321 // returned for the previous registration. |
| 326 EXPECT_NE(kInvalidServiceWorkerRegistrationId, new_registration_id); | 322 EXPECT_NE(kInvalidServiceWorkerRegistrationId, new_registration_id); |
| 327 EXPECT_NE(kInvalidServiceWorkerVersionId, new_version_id); | 323 EXPECT_NE(kInvalidServiceWorkerVersionId, new_version_id); |
| 328 EXPECT_NE(old_registration_id, new_registration_id); | 324 EXPECT_NE(old_registration_id, new_registration_id); |
| 329 EXPECT_NE(old_version_id, new_version_id); | 325 EXPECT_NE(old_version_id, new_version_id); |
| 330 } | 326 } |
| 331 | 327 |
| 332 // Make sure that when registering a duplicate pattern+script_url | 328 // Make sure that when registering a duplicate pattern+script_url |
| 333 // combination, that the same registration is used. | 329 // combination, that the same registration is used. |
| 334 TEST_F(ServiceWorkerContextTest, RegisterDuplicateScript) { | 330 TEST_F(ServiceWorkerContextTest, RegisterDuplicateScript) { |
| 335 GURL pattern("http://www.example.com/*"); | 331 GURL pattern("http://www.example.com/*"); |
| 336 GURL script_url("http://www.example.com/service_worker.js"); | 332 GURL script_url("http://www.example.com/service_worker.js"); |
| 337 | 333 |
| 338 bool called = false; | 334 bool called = false; |
| 339 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; | 335 int64 old_registration_id = kInvalidServiceWorkerRegistrationId; |
| 340 int64 old_version_id = kInvalidServiceWorkerVersionId; | 336 int64 old_version_id = kInvalidServiceWorkerVersionId; |
| 341 context_->RegisterServiceWorker( | 337 context()->RegisterServiceWorker( |
| 342 pattern, | 338 pattern, |
| 343 script_url, | 339 script_url, |
| 344 render_process_id_, | 340 render_process_id_, |
| 345 NULL, | 341 NULL, |
| 346 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); | 342 MakeRegisteredCallback(&called, &old_registration_id, &old_version_id)); |
| 347 | 343 |
| 348 ASSERT_FALSE(called); | 344 ASSERT_FALSE(called); |
| 349 base::RunLoop().RunUntilIdle(); | 345 base::RunLoop().RunUntilIdle(); |
| 350 ASSERT_TRUE(called); | 346 ASSERT_TRUE(called); |
| 351 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); | 347 EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id); |
| 352 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); | 348 EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id); |
| 353 | 349 |
| 354 called = false; | 350 called = false; |
| 355 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; | 351 int64 new_registration_id = kInvalidServiceWorkerRegistrationId; |
| 356 int64 new_version_id = kInvalidServiceWorkerVersionId; | 352 int64 new_version_id = kInvalidServiceWorkerVersionId; |
| 357 context_->RegisterServiceWorker( | 353 context()->RegisterServiceWorker( |
| 358 pattern, | 354 pattern, |
| 359 script_url, | 355 script_url, |
| 360 render_process_id_, | 356 render_process_id_, |
| 361 NULL, | 357 NULL, |
| 362 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); | 358 MakeRegisteredCallback(&called, &new_registration_id, &new_version_id)); |
| 363 | 359 |
| 364 ASSERT_FALSE(called); | 360 ASSERT_FALSE(called); |
| 365 base::RunLoop().RunUntilIdle(); | 361 base::RunLoop().RunUntilIdle(); |
| 366 ASSERT_TRUE(called); | 362 ASSERT_TRUE(called); |
| 367 EXPECT_EQ(old_registration_id, new_registration_id); | 363 EXPECT_EQ(old_registration_id, new_registration_id); |
| 368 EXPECT_EQ(old_version_id, new_version_id); | 364 EXPECT_EQ(old_version_id, new_version_id); |
| 369 } | 365 } |
| 370 | 366 |
| 371 } // namespace content | 367 } // namespace content |
| OLD | NEW |