OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "content/browser/service_worker/embedded_worker_registry.h" | 7 #include "content/browser/service_worker/embedded_worker_registry.h" |
8 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 8 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
9 #include "content/browser/service_worker/service_worker_context_core.h" | 9 #include "content/browser/service_worker/service_worker_context_core.h" |
10 #include "content/browser/service_worker/service_worker_registration.h" | 10 #include "content/browser/service_worker/service_worker_registration.h" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 } | 87 } |
88 | 88 |
89 void VerifyCalled(bool* called) { | 89 void VerifyCalled(bool* called) { |
90 *called = true; | 90 *called = true; |
91 } | 91 } |
92 | 92 |
93 void ObserveStatusChanges(ServiceWorkerVersion* version, | 93 void ObserveStatusChanges(ServiceWorkerVersion* version, |
94 std::vector<ServiceWorkerVersion::Status>* statuses) { | 94 std::vector<ServiceWorkerVersion::Status>* statuses) { |
95 statuses->push_back(version->status()); | 95 statuses->push_back(version->status()); |
96 version->RegisterStatusChangeCallback( | 96 version->RegisterStatusChangeCallback( |
97 base::Bind(&ObserveStatusChanges, make_scoped_refptr(version), statuses)); | 97 base::Bind(&ObserveStatusChanges, base::Unretained(version), statuses)); |
98 } | 98 } |
99 | 99 |
100 } // namespace | 100 } // namespace |
101 | 101 |
102 class ServiceWorkerVersionTest : public testing::Test { | 102 class ServiceWorkerVersionTest : public testing::Test { |
103 protected: | 103 protected: |
104 ServiceWorkerVersionTest() | 104 ServiceWorkerVersionTest() |
105 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} | 105 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} |
106 | 106 |
107 virtual void SetUp() OVERRIDE { | 107 virtual void SetUp() OVERRIDE { |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 | 293 |
294 base::RunLoop().RunUntilIdle(); | 294 base::RunLoop().RunUntilIdle(); |
295 | 295 |
296 // After successful completion, version's status must be changed to | 296 // After successful completion, version's status must be changed to |
297 // ACTIVE, and status change callback must have been fired. | 297 // ACTIVE, and status change callback must have been fired. |
298 EXPECT_EQ(SERVICE_WORKER_OK, status); | 298 EXPECT_EQ(SERVICE_WORKER_OK, status); |
299 EXPECT_TRUE(status_change_called); | 299 EXPECT_TRUE(status_change_called); |
300 EXPECT_EQ(ServiceWorkerVersion::ACTIVE, version_->status()); | 300 EXPECT_EQ(ServiceWorkerVersion::ACTIVE, version_->status()); |
301 } | 301 } |
302 | 302 |
303 TEST_F(ServiceWorkerVersionTest, DISABLED_RepeatedlyObserveStatusChanges) { | 303 TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) { |
304 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); | 304 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); |
305 | 305 |
306 // Repeatedly observe status changes (the callback re-registers itself). | 306 // Repeatedly observe status changes (the callback re-registers itself). |
307 std::vector<ServiceWorkerVersion::Status> statuses; | 307 std::vector<ServiceWorkerVersion::Status> statuses; |
308 version_->RegisterStatusChangeCallback( | 308 version_->RegisterStatusChangeCallback( |
309 base::Bind(&ObserveStatusChanges, version_, &statuses)); | 309 base::Bind(&ObserveStatusChanges, version_, &statuses)); |
310 | 310 |
311 // Dispatch some events. | 311 // Dispatch some events. |
312 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 312 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
313 version_->DispatchInstallEvent(-1, CreateReceiverOnCurrentThread(&status)); | 313 version_->DispatchInstallEvent(-1, CreateReceiverOnCurrentThread(&status)); |
314 base::RunLoop().RunUntilIdle(); | 314 base::RunLoop().RunUntilIdle(); |
315 EXPECT_EQ(SERVICE_WORKER_OK, status); | 315 EXPECT_EQ(SERVICE_WORKER_OK, status); |
316 | 316 |
317 status = SERVICE_WORKER_ERROR_FAILED; | 317 status = SERVICE_WORKER_ERROR_FAILED; |
318 version_->DispatchActivateEvent(CreateReceiverOnCurrentThread(&status)); | 318 version_->DispatchActivateEvent(CreateReceiverOnCurrentThread(&status)); |
319 base::RunLoop().RunUntilIdle(); | 319 base::RunLoop().RunUntilIdle(); |
320 EXPECT_EQ(SERVICE_WORKER_OK, status); | 320 EXPECT_EQ(SERVICE_WORKER_OK, status); |
321 | 321 |
322 // Verify that we could successfully observe repeated status changes. | 322 // Verify that we could successfully observe repeated status changes. |
323 ASSERT_EQ(4U, statuses.size()); | 323 ASSERT_EQ(4U, statuses.size()); |
324 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); | 324 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); |
325 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); | 325 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); |
326 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); | 326 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); |
327 ASSERT_EQ(ServiceWorkerVersion::ACTIVE, statuses[3]); | 327 ASSERT_EQ(ServiceWorkerVersion::ACTIVE, statuses[3]); |
328 } | 328 } |
329 | 329 |
330 } // namespace content | 330 } // namespace content |
OLD | NEW |