gecko-dev/dom/ipc/ContentBridgeParent.h
Peter Van der Beken 2310b3bd39 Bug 558184 - Part 8 - Load js plugins in a separate process. r=billm.
Every JS plugin is assigned a unique ID. When an instance of a JS plugin is created the
frame loader that we use to load the plugin's handler URI will create a special
TabContext. This TabContext causes the ContentParent to use the process for this specific
JS plugin (creating one if it hasn't already) when it creates the PBrowser actors.
This causes the iframes for all the instances of a specific JS plugin to be grouped in the
same process.

--HG--
extra : rebase_source : c39560bdf66cda1a005c7b823b3a46e4734878a4
extra : source : 9cba1db527c7eed4371c9f4caf96fd942608cab6
2017-05-29 12:38:46 +02:00

186 lines
5.6 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_ContentBridgeParent_h
#define mozilla_dom_ContentBridgeParent_h
#include "mozilla/dom/PContentBridgeParent.h"
#include "mozilla/dom/nsIContentParent.h"
#include "mozilla/dom/ipc/IdType.h"
#include "nsIObserver.h"
namespace mozilla {
namespace dom {
class ContentBridgeParent : public PContentBridgeParent
, public nsIContentParent
, public nsIObserver
{
public:
explicit ContentBridgeParent();
NS_DECL_ISUPPORTS
NS_DECL_NSIOBSERVER
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
void DeferredDestroy();
virtual bool IsContentBridgeParent() const override { return true; }
void NotifyTabDestroyed();
static ContentBridgeParent*
Create(Endpoint<PContentBridgeParent>&& aEndpoint);
virtual PBrowserParent*
SendPBrowserConstructor(PBrowserParent* aActor,
const TabId& aTabId,
const TabId& aSameTabGroupAs,
const IPCTabContext& aContext,
const uint32_t& aChromeFlags,
const ContentParentId& aCpID,
const bool& aIsForBrowser) override;
virtual PFileDescriptorSetParent*
SendPFileDescriptorSetConstructor(const FileDescriptor&) override;
FORWARD_SHMEM_ALLOCATOR_TO(PContentBridgeParent)
jsipc::CPOWManager* GetCPOWManager() override;
virtual ContentParentId ChildID() const override
{
return mChildID;
}
virtual bool IsForBrowser() const override
{
return mIsForBrowser;
}
virtual int32_t Pid() const override
{
// XXX: do we need this for ContentBridgeParent?
return -1;
}
virtual bool IsForJSPlugin() const override
{
return mIsForJSPlugin;
}
virtual mozilla::ipc::PParentToChildStreamParent*
SendPParentToChildStreamConstructor(mozilla::ipc::PParentToChildStreamParent*) override;
virtual bool SendActivate(PBrowserParent* aTab) override
{
return PContentBridgeParent::SendActivate(aTab);
}
virtual bool SendDeactivate(PBrowserParent* aTab) override
{
return PContentBridgeParent::SendDeactivate(aTab);
}
virtual bool SendParentActivated(PBrowserParent* aTab,
const bool& aActivated) override
{
return PContentBridgeParent::SendParentActivated(aTab, aActivated);
}
protected:
virtual ~ContentBridgeParent();
void SetChildID(ContentParentId aId)
{
mChildID = aId;
}
void SetIsForBrowser(bool aIsForBrowser)
{
mIsForBrowser = aIsForBrowser;
}
void SetIsForJSPlugin(bool aIsForJSPlugin)
{
mIsForJSPlugin = aIsForJSPlugin;
}
void Close()
{
// Trick NewRunnableMethod
PContentBridgeParent::Close();
}
protected:
virtual mozilla::ipc::IPCResult
RecvSyncMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<jsipc::CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<StructuredCloneData>* aRetvals) override;
virtual mozilla::ipc::IPCResult RecvAsyncMessage(const nsString& aMsg,
InfallibleTArray<jsipc::CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
const ClonedMessageData& aData) override;
virtual jsipc::PJavaScriptParent* AllocPJavaScriptParent() override;
virtual bool
DeallocPJavaScriptParent(jsipc::PJavaScriptParent*) override;
virtual PBrowserParent*
AllocPBrowserParent(const TabId& aTabId,
const TabId& aSameTabGroupAs,
const IPCTabContext &aContext,
const uint32_t& aChromeFlags,
const ContentParentId& aCpID,
const bool& aIsForBrowser) override;
virtual bool DeallocPBrowserParent(PBrowserParent*) override;
virtual PIPCBlobInputStreamParent*
SendPIPCBlobInputStreamConstructor(PIPCBlobInputStreamParent* aActor,
const nsID& aID,
const uint64_t& aSize) override;
virtual PIPCBlobInputStreamParent*
AllocPIPCBlobInputStreamParent(const nsID& aID,
const uint64_t& aSize) override;
virtual bool
DeallocPIPCBlobInputStreamParent(PIPCBlobInputStreamParent*) override;
virtual PChildToParentStreamParent* AllocPChildToParentStreamParent() override;
virtual bool
DeallocPChildToParentStreamParent(PChildToParentStreamParent* aActor) override;
virtual mozilla::ipc::PParentToChildStreamParent*
AllocPParentToChildStreamParent() override;
virtual bool
DeallocPParentToChildStreamParent(mozilla::ipc::PParentToChildStreamParent* aActor) override;
virtual PFileDescriptorSetParent*
AllocPFileDescriptorSetParent(const mozilla::ipc::FileDescriptor&) override;
virtual bool
DeallocPFileDescriptorSetParent(PFileDescriptorSetParent*) override;
DISALLOW_EVIL_CONSTRUCTORS(ContentBridgeParent);
protected: // members
RefPtr<ContentBridgeParent> mSelfRef;
ContentParentId mChildID;
bool mIsForBrowser;
bool mIsForJSPlugin;
private:
friend class ContentParent;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_ContentBridgeParent_h