Bug 792652 - Move over toplevel process ID field (r=dvander)

Moves some state to IToplevelProtocol.
This commit is contained in:
Bill McCloskey 2016-11-01 17:02:48 -07:00
parent 5f4e75da9e
commit 21ae8ace50
3 changed files with 32 additions and 43 deletions

View File

@ -53,20 +53,6 @@ MOZ_TYPE_SPECIFIC_SCOPED_POINTER_TEMPLATE(ScopedPSecurityDescriptor, \
namespace ipc {
IToplevelProtocol::IToplevelProtocol(ProtocolId aProtoId, Side aSide)
: IProtocol(aSide),
mProtocolId(aProtoId)
{
}
IToplevelProtocol::~IToplevelProtocol()
{
if (mTrans) {
RefPtr<DeleteTask<Transport>> task = new DeleteTask<Transport>(mTrans.release());
XRE_GetIOMessageLoop()->PostTask(task.forget());
}
}
class ChannelOpened : public IPC::Message
{
public:
@ -521,6 +507,33 @@ IProtocol::DeallocShmem(Shmem& aMem)
return ok;
}
IToplevelProtocol::IToplevelProtocol(ProtocolId aProtoId, Side aSide)
: IProtocol(aSide),
mProtocolId(aProtoId),
mOtherPid(mozilla::ipc::kInvalidProcessId)
{
}
IToplevelProtocol::~IToplevelProtocol()
{
if (mTrans) {
RefPtr<DeleteTask<Transport>> task = new DeleteTask<Transport>(mTrans.release());
XRE_GetIOMessageLoop()->PostTask(task.forget());
}
}
base::ProcessId
IToplevelProtocol::OtherPid() const
{
return mOtherPid;
}
void
IToplevelProtocol::SetOtherProcessId(base::ProcessId aOtherPid)
{
mOtherPid = aOtherPid;
}
bool
IToplevelProtocol::IsOnCxxStack() const
{

View File

@ -231,6 +231,9 @@ public:
ProtocolId GetProtocolId() const { return mProtocolId; }
base::ProcessId OtherPid() const;
void SetOtherProcessId(base::ProcessId aOtherPid);
virtual void OnChannelClose() = 0;
virtual void OnChannelError() = 0;
virtual void ProcessingError(Result aError, const char* aMsgName) {}
@ -302,6 +305,7 @@ public:
private:
ProtocolId mProtocolId;
UniquePtr<Transport> mTrans;
base::ProcessId mOtherPid;
};
class IShmemAllocator

View File

@ -1224,10 +1224,6 @@ class Protocol(ipdl.ast.Protocol):
mvar = ExprCall(ExprSelect(thisexpr, '->', 'Manager'), args=[])
return mvar
def otherPidVar(self):
assert self.decl.type.isToplevel()
return ExprVar('mOtherPid')
def managedCxxType(self, actortype, side):
assert self.decl.type.isManagerOf(actortype)
return Type(_actorName(actortype.name(), side), ptr=1)
@ -2936,8 +2932,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
[ ExprVar.THIS ]) ]),
ExprMemberInit(p.lastActorIdVar(),
[ p.actorIdInit(self.side) ]),
ExprMemberInit(p.otherPidVar(),
[ ExprVar('mozilla::ipc::kInvalidProcessId') ]),
ExprMemberInit(p.lastShmemIdVar(),
[ p.shmemIdInit(self.side) ]),
ExprMemberInit(p.stateVar(),
@ -3268,18 +3262,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
self.cls.addstmts([ processnative, Whitespace.NL ])
if ptype.isToplevel() and self.side is 'parent':
## void SetOtherProcessId(ProcessId aOtherPid)
otherpidvar = ExprVar('aOtherPid')
setotherprocessid = MethodDefn(MethodDecl(
'SetOtherProcessId',
params=[ Decl(Type('base::ProcessId'), otherpidvar.name)]))
setotherprocessid.addstmts([
StmtExpr(ExprAssn(p.otherPidVar(), otherpidvar)),
])
self.cls.addstmts([
setotherprocessid,
Whitespace.NL])
## bool GetMinidump(nsIFile** dump)
self.cls.addstmt(Label.PROTECTED)
@ -3455,9 +3437,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
self.cls.addstmts([
StmtDecl(Decl(Type('IDMap', T=Type('ProtocolBase')),
p.actorMapVar().name)),
StmtDecl(Decl(_actorIdType(), p.lastActorIdVar().name)),
StmtDecl(Decl(Type('base::ProcessId'),
p.otherPidVar().name))
StmtDecl(Decl(_actorIdType(), p.lastActorIdVar().name))
])
elif ptype.isManaged():
self.cls.addstmts([
@ -3538,11 +3518,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
params=[ Decl(_rawShmemType(ptr=1), rawvar.name) ],
virtual=1))
otherpid = MethodDefn(MethodDecl(
p.otherPidMethod().name,
ret=Type('base::ProcessId'),
const=1,
virtual=1))
getchannel = MethodDefn(MethodDecl(
p.getChannelMethod().name,
ret=Type('MessageChannel', ptr=1),
@ -3563,7 +3538,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
lookupshmem,
istracking,
destroyshmem,
otherpid,
getchannel,
getchannelconst ]
@ -3722,8 +3696,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
self.asyncSwitch.addcase(
CaseLabel('SHMEM_DESTROYED_MESSAGE_TYPE'), abort)
otherpid.addstmt(StmtReturn(p.otherPidVar()))
othervar = ExprVar('other')
managertype = Type(_actorName(p.name, self.side), ptr=1)