tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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