TestSelfManage.cpp (3271B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 /* 8 * Test that actors can manage other actors of the same type. 9 */ 10 11 #include "gtest/gtest.h" 12 13 #include "mozilla/_ipdltest/IPDLUnitTest.h" 14 #include "mozilla/_ipdltest/PTestSelfManageChild.h" 15 #include "mozilla/_ipdltest/PTestSelfManageParent.h" 16 #include "mozilla/_ipdltest/PTestSelfManageRootChild.h" 17 #include "mozilla/_ipdltest/PTestSelfManageRootParent.h" 18 19 using namespace mozilla::ipc; 20 21 namespace mozilla::_ipdltest { 22 23 class TestSelfManageParent : public PTestSelfManageParent { 24 NS_INLINE_DECL_REFCOUNTING(TestSelfManageParent, override) 25 public: 26 ActorDestroyReason mWhy = ActorDestroyReason(-1); 27 28 private: 29 void ActorDestroy(ActorDestroyReason why) final override { mWhy = why; } 30 31 ~TestSelfManageParent() = default; 32 }; 33 34 class TestSelfManageChild : public PTestSelfManageChild { 35 NS_INLINE_DECL_REFCOUNTING(TestSelfManageChild, override) 36 private: 37 already_AddRefed<PTestSelfManageChild> AllocPTestSelfManageChild() 38 final override { 39 return MakeAndAddRef<TestSelfManageChild>(); 40 } 41 42 ~TestSelfManageChild() = default; 43 }; 44 45 class TestSelfManageRootParent : public PTestSelfManageRootParent { 46 NS_INLINE_DECL_REFCOUNTING(TestSelfManageRootParent, override) 47 private: 48 ~TestSelfManageRootParent() = default; 49 }; 50 51 class TestSelfManageRootChild : public PTestSelfManageRootChild { 52 NS_INLINE_DECL_REFCOUNTING(TestSelfManageRootChild, override) 53 private: 54 already_AddRefed<PTestSelfManageChild> AllocPTestSelfManageChild() 55 final override { 56 return MakeAndAddRef<TestSelfManageChild>(); 57 } 58 59 ~TestSelfManageRootChild() = default; 60 }; 61 62 IPDL_TEST(TestSelfManageRoot) { 63 auto child = MakeRefPtr<TestSelfManageParent>(); 64 EXPECT_TRUE(mActor->SendPTestSelfManageConstructor(child)); 65 66 EXPECT_EQ(mActor->ManagedPTestSelfManageParent().Count(), 1u); 67 68 { 69 auto childsChild = MakeRefPtr<TestSelfManageParent>(); 70 EXPECT_TRUE(child->SendPTestSelfManageConstructor(childsChild)); 71 72 EXPECT_EQ(mActor->ManagedPTestSelfManageParent().Count(), 1u); 73 EXPECT_EQ(child->ManagedPTestSelfManageParent().Count(), 1u); 74 75 EXPECT_TRUE(PTestSelfManageParent::Send__delete__(childsChild)); 76 77 EXPECT_EQ(childsChild->mWhy, IProtocol::Deletion); 78 EXPECT_EQ(mActor->ManagedPTestSelfManageParent().Count(), 1u); 79 EXPECT_EQ(child->ManagedPTestSelfManageParent().Count(), 0u); 80 } 81 82 { 83 auto childsChild = MakeRefPtr<TestSelfManageParent>(); 84 EXPECT_TRUE(child->SendPTestSelfManageConstructor(childsChild)); 85 86 EXPECT_EQ(mActor->ManagedPTestSelfManageParent().Count(), 1u); 87 EXPECT_EQ(child->ManagedPTestSelfManageParent().Count(), 1u); 88 89 EXPECT_TRUE(PTestSelfManageParent::Send__delete__(child)); 90 91 EXPECT_EQ(child->mWhy, IProtocol::Deletion); 92 EXPECT_EQ(childsChild->mWhy, IProtocol::AncestorDeletion); 93 EXPECT_EQ(mActor->ManagedPTestSelfManageParent().Count(), 0u); 94 EXPECT_EQ(child->ManagedPTestSelfManageParent().Count(), 0u); 95 } 96 97 mActor->Close(); 98 } 99 100 } // namespace mozilla::_ipdltest