mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
2310b3bd39
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
186 lines
5.6 KiB
C++
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
|