| 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 |