ClientManagerParent.cpp (3714B)
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 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "ClientManagerParent.h" 8 9 #include "ClientHandleParent.h" 10 #include "ClientManagerOpParent.h" 11 #include "ClientManagerService.h" 12 #include "ClientSourceParent.h" 13 #include "ClientValidation.h" 14 #include "mozilla/dom/PClientNavigateOpParent.h" 15 #include "mozilla/ipc/BackgroundParent.h" 16 17 namespace mozilla::dom { 18 19 using mozilla::ipc::IPCResult; 20 21 IPCResult ClientManagerParent::RecvTeardown() { 22 (void)Send__delete__(this); 23 return IPC_OK(); 24 } 25 26 void ClientManagerParent::ActorDestroy(ActorDestroyReason aReason) { 27 mService->RemoveManager(this); 28 } 29 30 already_AddRefed<PClientHandleParent> 31 ClientManagerParent::AllocPClientHandleParent( 32 const IPCClientInfo& aClientInfo) { 33 return MakeAndAddRef<ClientHandleParent>(); 34 } 35 36 IPCResult ClientManagerParent::RecvPClientHandleConstructor( 37 PClientHandleParent* aActor, const IPCClientInfo& aClientInfo) { 38 ClientHandleParent* actor = static_cast<ClientHandleParent*>(aActor); 39 actor->Init(aClientInfo); 40 return IPC_OK(); 41 } 42 43 PClientManagerOpParent* ClientManagerParent::AllocPClientManagerOpParent( 44 const ClientOpConstructorArgs& aArgs) { 45 return new ClientManagerOpParent(mService); 46 } 47 48 bool ClientManagerParent::DeallocPClientManagerOpParent( 49 PClientManagerOpParent* aActor) { 50 delete aActor; 51 return true; 52 } 53 54 IPCResult ClientManagerParent::RecvPClientManagerOpConstructor( 55 PClientManagerOpParent* aActor, const ClientOpConstructorArgs& aArgs) { 56 ClientManagerOpParent* actor = static_cast<ClientManagerOpParent*>(aActor); 57 actor->Init(aArgs); 58 return IPC_OK(); 59 } 60 61 PClientNavigateOpParent* ClientManagerParent::AllocPClientNavigateOpParent( 62 const ClientNavigateOpConstructorArgs& aArgs) { 63 MOZ_ASSERT_UNREACHABLE( 64 "ClientNavigateOpParent should be explicitly constructed."); 65 return nullptr; 66 } 67 68 bool ClientManagerParent::DeallocPClientNavigateOpParent( 69 PClientNavigateOpParent* aActor) { 70 delete aActor; 71 return true; 72 } 73 74 already_AddRefed<PClientSourceParent> 75 ClientManagerParent::AllocPClientSourceParent( 76 const ClientSourceConstructorArgs& aArgs) { 77 Maybe<ContentParentId> contentParentId; 78 79 uint64_t childID = ::mozilla::ipc::BackgroundParent::GetChildID(Manager()); 80 if (childID) { 81 contentParentId = Some(ContentParentId(childID)); 82 } 83 84 return MakeAndAddRef<ClientSourceParent>(aArgs, contentParentId); 85 } 86 87 IPCResult ClientManagerParent::RecvPClientSourceConstructor( 88 PClientSourceParent* aActor, const ClientSourceConstructorArgs& aArgs) { 89 ClientSourceParent* actor = static_cast<ClientSourceParent*>(aActor); 90 91 IPCResult result = actor->Init(); 92 if (!result) { 93 return result; 94 } 95 96 return IPC_OK(); 97 } 98 99 ClientManagerParent::ClientManagerParent() 100 : mService(ClientManagerService::GetOrCreateInstance()) {} 101 102 ClientManagerParent::~ClientManagerParent() = default; 103 104 void ClientManagerParent::Init() { mService->AddManager(this); } 105 106 IPCResult ClientManagerParent::RecvExpectFutureClientSource( 107 const IPCClientInfo& aClientInfo) { 108 RefPtr<ClientManagerService> cms = 109 ClientManagerService::GetOrCreateInstance(); 110 (void)NS_WARN_IF(!cms->ExpectFutureSource(aClientInfo)); 111 return IPC_OK(); 112 } 113 114 IPCResult ClientManagerParent::RecvForgetFutureClientSource( 115 const IPCClientInfo& aClientInfo) { 116 RefPtr<ClientManagerService> cms = ClientManagerService::GetInstance(); 117 cms->ForgetFutureSource(aClientInfo); 118 return IPC_OK(); 119 } 120 121 } // namespace mozilla::dom