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 #include "mozilla/ipc/PChildToParentStreamParent.h" 14 #include "mozilla/ipc/PParentToChildStreamParent.h" 15 16 #include "nsFrameMessageManager.h" 17 #include "nsISupports.h" 18 #include "mozilla/dom/CPOWManagerGetter.h" 19 20 #define NS_ICONTENTPARENT_IID \ 21 { \ 22 0xeeec9ebf, 0x8ecf, 0x4e38, { \ 23 0x81, 0xda, 0xb7, 0x34, 0x13, 0x7e, 0xac, 0xf3 \ 24 } \ 25 } 26 27 namespace IPC { 28 class Principal; 29 } // namespace IPC 30 31 namespace mozilla { 32 33 namespace jsipc { 34 class PJavaScriptParent; 35 class CpowEntry; 36 } // namespace jsipc 37 38 namespace ipc { 39 class PFileDescriptorSetParent; 40 class PChildToParentStreamParent; 41 class PParentToChildStreamParent; 42 class PIPCBlobInputStreamParent; 43 } // namespace ipc 44 45 namespace dom { 46 47 class Blob; 48 class BlobConstructorParams; 49 class BlobImpl; 50 class ContentParent; 51 class ContentBridgeParent; 52 class IPCTabContext; 53 class PBrowserParent; 54 55 class nsIContentParent : public nsISupports, 56 public mozilla::dom::ipc::MessageManagerCallback, 57 public CPOWManagerGetter, 58 public mozilla::ipc::IShmemAllocator { 59 public: 60 NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONTENTPARENT_IID) 61 62 nsIContentParent(); 63 64 virtual ContentParentId ChildID() const = 0; 65 virtual bool IsForBrowser() const = 0; 66 virtual bool IsForJSPlugin() const = 0; 67 68 virtual mozilla::ipc::PIPCBlobInputStreamParent* 69 SendPIPCBlobInputStreamConstructor( 70 mozilla::ipc::PIPCBlobInputStreamParent* aActor, const nsID& aID, 71 const uint64_t& aSize) = 0; 72 73 MOZ_MUST_USE virtual PBrowserParent* SendPBrowserConstructor( 74 PBrowserParent* actor, const TabId& aTabId, const TabId& aSameTabGroupAs, 75 const IPCTabContext& context, const uint32_t& chromeFlags, 76 const ContentParentId& aCpId, const bool& aIsForBrowser) = 0; 77 78 virtual mozilla::ipc::PFileDescriptorSetParent* 79 SendPFileDescriptorSetConstructor(const mozilla::ipc::FileDescriptor&) = 0; 80 IsContentParent()81 virtual bool IsContentParent() const { return false; } 82 83 ContentParent* AsContentParent(); 84 IsContentBridgeParent()85 virtual bool IsContentBridgeParent() const { return false; } 86 87 ContentBridgeParent* AsContentBridgeParent(); 88 GetMessageManager()89 nsFrameMessageManager* GetMessageManager() const { return mMessageManager; } 90 91 virtual bool SendActivate(PBrowserParent* aTab) = 0; 92 93 virtual bool SendDeactivate(PBrowserParent* aTab) = 0; 94 95 virtual int32_t Pid() const = 0; 96 97 virtual mozilla::ipc::PParentToChildStreamParent* 98 SendPParentToChildStreamConstructor( 99 mozilla::ipc::PParentToChildStreamParent*) = 0; 100 101 protected: // methods 102 bool CanOpenBrowser(const IPCTabContext& aContext); 103 104 protected: // IPDL methods 105 virtual mozilla::jsipc::PJavaScriptParent* AllocPJavaScriptParent(); 106 virtual bool DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*); 107 108 virtual PBrowserParent* AllocPBrowserParent(const TabId& aTabId, 109 const TabId& aSameTabGroupsAs, 110 const IPCTabContext& aContext, 111 const uint32_t& aChromeFlags, 112 const ContentParentId& aCpId, 113 const bool& aIsForBrowser); 114 virtual bool DeallocPBrowserParent(PBrowserParent* frame); 115 116 virtual mozilla::ipc::IPCResult RecvPBrowserConstructor( 117 PBrowserParent* actor, const TabId& tabId, const TabId& sameTabGroupAs, 118 const IPCTabContext& context, const uint32_t& chromeFlags, 119 const ContentParentId& cpId, const bool& isForBrowser); 120 121 virtual mozilla::ipc::PIPCBlobInputStreamParent* 122 AllocPIPCBlobInputStreamParent(const nsID& aID, const uint64_t& aSize); 123 124 virtual bool DeallocPIPCBlobInputStreamParent( 125 mozilla::ipc::PIPCBlobInputStreamParent* aActor); 126 127 virtual mozilla::ipc::PFileDescriptorSetParent* AllocPFileDescriptorSetParent( 128 const mozilla::ipc::FileDescriptor& aFD); 129 130 virtual bool DeallocPFileDescriptorSetParent( 131 mozilla::ipc::PFileDescriptorSetParent* aActor); 132 133 virtual mozilla::ipc::PChildToParentStreamParent* 134 AllocPChildToParentStreamParent(); 135 136 virtual bool DeallocPChildToParentStreamParent( 137 mozilla::ipc::PChildToParentStreamParent* aActor); 138 139 virtual mozilla::ipc::PParentToChildStreamParent* 140 AllocPParentToChildStreamParent(); 141 142 virtual bool DeallocPParentToChildStreamParent( 143 mozilla::ipc::PParentToChildStreamParent* aActor); 144 145 virtual mozilla::ipc::IPCResult RecvSyncMessage( 146 const nsString& aMsg, const ClonedMessageData& aData, 147 InfallibleTArray<jsipc::CpowEntry>&& aCpows, 148 const IPC::Principal& aPrincipal, 149 nsTArray<ipc::StructuredCloneData>* aRetvals); 150 virtual mozilla::ipc::IPCResult RecvRpcMessage( 151 const nsString& aMsg, const ClonedMessageData& aData, 152 InfallibleTArray<jsipc::CpowEntry>&& aCpows, 153 const IPC::Principal& aPrincipal, 154 nsTArray<ipc::StructuredCloneData>* aRetvals); 155 virtual mozilla::ipc::IPCResult RecvAsyncMessage( 156 const nsString& aMsg, InfallibleTArray<jsipc::CpowEntry>&& aCpows, 157 const IPC::Principal& aPrincipal, const ClonedMessageData& aData); 158 159 protected: // members 160 RefPtr<nsFrameMessageManager> mMessageManager; 161 }; 162 163 NS_DEFINE_STATIC_IID_ACCESSOR(nsIContentParent, NS_ICONTENTPARENT_IID) 164 165 } // namespace dom 166 } // namespace mozilla 167 168 #endif /* mozilla_dom_nsIContentParent_h */ 169