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