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