| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "mojo/public/cpp/bindings/associated_binding_set.h" | 10 #include "mojo/public/cpp/bindings/associated_binding_set.h" |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 PingServiceAssociatedPtr ptr; | 345 PingServiceAssociatedPtr ptr; |
| 346 master_ptr->GetPing(MakeRequest(&ptr)); | 346 master_ptr->GetPing(MakeRequest(&ptr)); |
| 347 | 347 |
| 348 ptr.ResetWithReason(2048u, "bye"); | 348 ptr.ResetWithReason(2048u, "bye"); |
| 349 | 349 |
| 350 run_loop.Run(); | 350 run_loop.Run(); |
| 351 } | 351 } |
| 352 | 352 |
| 353 class PingInstanceCounter : public PingService { | 353 class PingInstanceCounter : public PingService { |
| 354 public: | 354 public: |
| 355 PingInstanceCounter() { ++instance_count; } | 355 explicit PingInstanceCounter( |
| 356 ~PingInstanceCounter() override { --instance_count; } | 356 const base::Closure& destruction_callback = base::Closure()) |
| 357 : destruction_callback_(destruction_callback) { |
| 358 ++instance_count; |
| 359 } |
| 360 |
| 361 ~PingInstanceCounter() override { |
| 362 --instance_count; |
| 363 if (destruction_callback_) |
| 364 destruction_callback_.Run(); |
| 365 } |
| 357 | 366 |
| 358 void Ping(const PingCallback& callback) override {} | 367 void Ping(const PingCallback& callback) override {} |
| 359 | 368 |
| 369 const base::Closure destruction_callback_; |
| 370 |
| 360 static int instance_count; | 371 static int instance_count; |
| 361 }; | 372 }; |
| 362 int PingInstanceCounter::instance_count = 0; | 373 int PingInstanceCounter::instance_count = 0; |
| 363 | 374 |
| 364 TEST_F(BindingSetTest, StrongBinding_Destructor) { | 375 TEST_F(BindingSetTest, StrongBinding_Destructor) { |
| 365 PingServicePtr ping_a, ping_b; | 376 PingServicePtr ping_a, ping_b; |
| 366 auto bindings = base::MakeUnique<StrongBindingSet<PingService>>(); | 377 auto bindings = base::MakeUnique<StrongBindingSet<PingService>>(); |
| 367 | 378 |
| 368 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), | 379 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| 369 mojo::MakeRequest(&ping_a)); | 380 mojo::MakeRequest(&ping_a)); |
| 370 EXPECT_EQ(1, PingInstanceCounter::instance_count); | 381 EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| 371 | 382 |
| 372 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), | 383 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| 373 mojo::MakeRequest(&ping_b)); | 384 mojo::MakeRequest(&ping_b)); |
| 374 EXPECT_EQ(2, PingInstanceCounter::instance_count); | 385 EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| 375 | 386 |
| 376 bindings.reset(); | 387 bindings.reset(); |
| 377 EXPECT_EQ(0, PingInstanceCounter::instance_count); | 388 EXPECT_EQ(0, PingInstanceCounter::instance_count); |
| 378 } | 389 } |
| 379 | 390 |
| 380 TEST_F(BindingSetTest, StrongBinding_ConnectionError) { | 391 TEST_F(BindingSetTest, StrongBinding_ConnectionError) { |
| 392 base::RunLoop loop_a, loop_b; |
| 381 PingServicePtr ping_a, ping_b; | 393 PingServicePtr ping_a, ping_b; |
| 382 StrongBindingSet<PingService> bindings; | 394 StrongBindingSet<PingService> bindings; |
| 383 bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), | 395 bindings.AddBinding( |
| 384 mojo::MakeRequest(&ping_a)); | 396 base::MakeUnique<PingInstanceCounter>(loop_a.QuitClosure()), |
| 385 bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), | 397 mojo::MakeRequest(&ping_a)); |
| 386 mojo::MakeRequest(&ping_b)); | 398 bindings.AddBinding( |
| 399 base::MakeUnique<PingInstanceCounter>(loop_b.QuitClosure()), |
| 400 mojo::MakeRequest(&ping_b)); |
| 387 EXPECT_EQ(2, PingInstanceCounter::instance_count); | 401 EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| 388 | 402 |
| 389 ping_a.reset(); | 403 ping_a.reset(); |
| 390 base::RunLoop().RunUntilIdle(); | 404 loop_a.Run(); |
| 391 EXPECT_EQ(1, PingInstanceCounter::instance_count); | 405 EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| 392 | 406 |
| 393 ping_b.reset(); | 407 ping_b.reset(); |
| 394 base::RunLoop().RunUntilIdle(); | 408 loop_b.Run(); |
| 395 EXPECT_EQ(0, PingInstanceCounter::instance_count); | 409 EXPECT_EQ(0, PingInstanceCounter::instance_count); |
| 396 } | 410 } |
| 397 | 411 |
| 398 TEST_F(BindingSetTest, StrongBinding_RemoveBinding) { | 412 TEST_F(BindingSetTest, StrongBinding_RemoveBinding) { |
| 399 PingServicePtr ping_a, ping_b; | 413 PingServicePtr ping_a, ping_b; |
| 400 StrongBindingSet<PingService> bindings; | 414 StrongBindingSet<PingService> bindings; |
| 401 BindingId binding_id_a = bindings.AddBinding( | 415 BindingId binding_id_a = bindings.AddBinding( |
| 402 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_a)); | 416 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_a)); |
| 403 BindingId binding_id_b = bindings.AddBinding( | 417 BindingId binding_id_b = bindings.AddBinding( |
| 404 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_b)); | 418 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_b)); |
| 405 EXPECT_EQ(2, PingInstanceCounter::instance_count); | 419 EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| 406 | 420 |
| 407 EXPECT_TRUE(bindings.RemoveBinding(binding_id_a)); | 421 EXPECT_TRUE(bindings.RemoveBinding(binding_id_a)); |
| 408 EXPECT_EQ(1, PingInstanceCounter::instance_count); | 422 EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| 409 | 423 |
| 410 EXPECT_TRUE(bindings.RemoveBinding(binding_id_b)); | 424 EXPECT_TRUE(bindings.RemoveBinding(binding_id_b)); |
| 411 EXPECT_EQ(0, PingInstanceCounter::instance_count); | 425 EXPECT_EQ(0, PingInstanceCounter::instance_count); |
| 412 } | 426 } |
| 413 | 427 |
| 414 } // namespace | 428 } // namespace |
| 415 } // namespace test | 429 } // namespace test |
| 416 } // namespace mojo | 430 } // namespace mojo |
| OLD | NEW |