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 #ifndef mozilla_dom_nsIContentParent_h 8 #define mozilla_dom_nsIContentParent_h 9 10 #include "mozilla/Attributes.h" 11 #include "mozilla/dom/ipc/IdType.h" 12 #include "mozilla/ipc/ProtocolUtils.h" 13 14 #include "nsFrameMessageManager.h" 15 #include "nsISupports.h" 16 #include "mozilla/dom/CPOWManagerGetter.h" 17 18 #define NS_ICONTENTPARENT_IID \ 19 { 0xeeec9ebf, 0x8ecf, 0x4e38, \ 20 { 0x81, 0xda, 0xb7, 0x34, 0x13, 0x7e, 0xac, 0xf3 } } 21 22 namespace IPC { 23 class Principal; 24 } // namespace IPC 25 26 namespace mozilla { 27 28 namespace jsipc { 29 class PJavaScriptParent; 30 class CpowEntry; 31 } // namespace jsipc 32 33 namespace ipc { 34 class PFileDescriptorSetParent; 35 class PSendStreamParent; 36 } 37 38 namespace dom { 39 40 class Blob; 41 class BlobConstructorParams; 42 class BlobImpl; 43 class BlobParent; 44 class ContentParent; 45 class ContentBridgeParent; 46 class IPCTabContext; 47 class PBlobParent; 48 class PBrowserParent; 49 50 class nsIContentParent : public nsISupports 51 , public mozilla::dom::ipc::MessageManagerCallback 52 , public CPOWManagerGetter 53 , public mozilla::ipc::IShmemAllocator 54 { 55 public: 56 NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONTENTPARENT_IID) 57 58 nsIContentParent(); 59 60 BlobParent* GetOrCreateActorForBlob(Blob* aBlob); 61 BlobParent* GetOrCreateActorForBlobImpl(BlobImpl* aImpl); 62 63 virtual ContentParentId ChildID() const = 0; 64 virtual bool IsForApp() const = 0; 65 virtual bool IsForBrowser() const = 0; 66 67 MOZ_MUST_USE virtual PBlobParent* 68 SendPBlobConstructor(PBlobParent* aActor, 69 const BlobConstructorParams& aParams) = 0; 70 71 MOZ_MUST_USE virtual PBrowserParent* 72 SendPBrowserConstructor(PBrowserParent* actor, 73 const TabId& aTabId, 74 const IPCTabContext& context, 75 const uint32_t& chromeFlags, 76 const ContentParentId& aCpId, 77 const bool& aIsForApp, 78 const bool& aIsForBrowser) = 0; 79 IsContentParent()80 virtual bool IsContentParent() const { return false; } 81 82 ContentParent* AsContentParent(); 83 IsContentBridgeParent()84 virtual bool IsContentBridgeParent() const { return false; } 85 86 ContentBridgeParent* AsContentBridgeParent(); 87 GetMessageManager()88 nsFrameMessageManager* GetMessageManager() const { return mMessageManager; } 89 90 virtual int32_t Pid() const = 0; 91 92 protected: // methods 93 bool CanOpenBrowser(const IPCTabContext& aContext); 94 95 protected: // IPDL methods 96 virtual mozilla::jsipc::PJavaScriptParent* AllocPJavaScriptParent(); 97 virtual bool DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*); 98 99 virtual PBrowserParent* AllocPBrowserParent(const TabId& aTabId, 100 const IPCTabContext& aContext, 101 const uint32_t& aChromeFlags, 102 const ContentParentId& aCpId, 103 const bool& aIsForApp, 104 const bool& aIsForBrowser); 105 virtual bool DeallocPBrowserParent(PBrowserParent* frame); 106 107 virtual PBlobParent* AllocPBlobParent(const BlobConstructorParams& aParams); 108 109 virtual bool DeallocPBlobParent(PBlobParent* aActor); 110 111 virtual mozilla::ipc::PFileDescriptorSetParent* 112 AllocPFileDescriptorSetParent(const mozilla::ipc::FileDescriptor& aFD); 113 114 virtual bool 115 DeallocPFileDescriptorSetParent(mozilla::ipc::PFileDescriptorSetParent* aActor); 116 117 virtual mozilla::ipc::PSendStreamParent* AllocPSendStreamParent(); 118 119 virtual bool DeallocPSendStreamParent(mozilla::ipc::PSendStreamParent* aActor); 120 121 virtual bool RecvSyncMessage(const nsString& aMsg, 122 const ClonedMessageData& aData, 123 InfallibleTArray<jsipc::CpowEntry>&& aCpows, 124 const IPC::Principal& aPrincipal, 125 nsTArray<ipc::StructuredCloneData>* aRetvals); 126 virtual bool RecvRpcMessage(const nsString& aMsg, 127 const ClonedMessageData& aData, 128 InfallibleTArray<jsipc::CpowEntry>&& aCpows, 129 const IPC::Principal& aPrincipal, 130 nsTArray<ipc::StructuredCloneData>* aRetvals); 131 virtual bool RecvAsyncMessage(const nsString& aMsg, 132 InfallibleTArray<jsipc::CpowEntry>&& aCpows, 133 const IPC::Principal& aPrincipal, 134 const ClonedMessageData& aData); 135 136 protected: // members 137 RefPtr<nsFrameMessageManager> mMessageManager; 138 }; 139 140 NS_DEFINE_STATIC_IID_ACCESSOR(nsIContentParent, NS_ICONTENTPARENT_IID) 141 142 } // namespace dom 143 } // namespace mozilla 144 145 #endif /* mozilla_dom_nsIContentParent_h */ 146