Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(506)

Side by Side Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 230373003: Fix leak in ServiceWorkerVersionTest.RepeatedlyObserveStatusChanges (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698