Bug 792652 - Store Manager() in IProtocol (r=dvander)

This patch stores mManager in IProtocol rather than in each individual
PFoo. It also adds a generic accessor for that field. Note that each
individual protocol still defines a Manager() function that returns
PFooParent or whatever. I tried to get rid of that but it was a lot
of work.
This commit is contained in:
Bill McCloskey 2016-10-29 10:38:31 -07:00
parent 1f23e3694d
commit ad7ac34ca4
4 changed files with 23 additions and 27 deletions

View File

@ -54,8 +54,8 @@ CacheOpParent::Execute(ManagerId* aManagerId)
MOZ_ASSERT(!mManager);
MOZ_ASSERT(!mVerifier);
RefPtr<Manager> manager;
nsresult rv = Manager::GetOrCreate(aManagerId, getter_AddRefs(manager));
RefPtr<cache::Manager> manager;
nsresult rv = cache::Manager::GetOrCreate(aManagerId, getter_AddRefs(manager));
if (NS_WARN_IF(NS_FAILED(rv))) {
ErrorResult result(rv);
Unused << Send__delete__(this, result, void_t());
@ -67,7 +67,7 @@ CacheOpParent::Execute(ManagerId* aManagerId)
}
void
CacheOpParent::Execute(Manager* aManager)
CacheOpParent::Execute(cache::Manager* aManager)
{
NS_ASSERT_OWNINGTHREAD(CacheOpParent);
MOZ_ASSERT(!mManager);

View File

@ -37,7 +37,7 @@ public:
Execute(ManagerId* aManagerId);
void
Execute(Manager* aManager);
Execute(cache::Manager* aManager);
void
WaitForVerification(PrincipalVerifier* aVerifier);
@ -67,7 +67,7 @@ private:
const CacheId mCacheId;
const Namespace mNamespace;
const CacheOpArgs mOpArgs;
RefPtr<Manager> mManager;
RefPtr<cache::Manager> mManager;
RefPtr<PrincipalVerifier> mVerifier;
NS_DECL_OWNINGTHREAD

View File

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: sw=4 ts=4 et :
*/
/* This Source Code Form is subject to the terms of the Mozilla Public
@ -152,6 +152,8 @@ public:
typedef IPC::Message Message;
typedef IPC::MessageInfo MessageInfo;
IProtocol() : mManager(nullptr) {}
virtual int32_t Register(IProtocol*) = 0;
virtual int32_t RegisterID(IProtocol*, int32_t) = 0;
virtual IProtocol* Lookup(int32_t) = 0;
@ -178,6 +180,14 @@ public:
virtual Result OnCallReceived(const Message& aMessage, Message *& aReply) = 0;
virtual int32_t GetProtocolTypeId() = 0;
IProtocol* Manager() const { return mManager; }
protected:
void SetManager(IProtocol* aManager) { mManager = aManager; }
private:
IProtocol* mManager;
};
typedef IPCMessageStart ProtocolId;

View File

@ -130,7 +130,7 @@ def _actorChannel(actor):
return ExprSelect(actor, '->', 'mChannel')
def _actorManager(actor):
return ExprSelect(actor, '->', 'mManager')
return ExprCall(ExprSelect(actor, '->', 'Manager'), args=[])
def _actorState(actor):
return ExprSelect(actor, '->', 'mState')
@ -1105,12 +1105,6 @@ class Protocol(ipdl.ast.Protocol):
return Type(_actorName(self._ipdlmgrtype().name(), side),
ptr=ptr)
def managerMethod(self, actorThis=None):
_ = self._ipdlmgrtype()
if actorThis is not None:
return ExprSelect(actorThis, '->', 'Manager')
return ExprVar('Manager');
def stateMethod(self):
return ExprVar('state');
@ -1253,9 +1247,9 @@ class Protocol(ipdl.ast.Protocol):
def managerVar(self, thisexpr=None):
assert thisexpr is not None or not self.decl.type.isToplevel()
mvar = ExprVar('mManager')
mvar = ExprCall(ExprVar('Manager'), args=[])
if thisexpr is not None:
mvar = ExprSelect(thisexpr, '->', mvar.name)
mvar = ExprCall(ExprSelect(thisexpr, '->', 'Manager'), args=[])
return mvar
def otherPidVar(self):
@ -1279,13 +1273,6 @@ class Protocol(ipdl.ast.Protocol):
return _cxxManagedContainerType(Type(_actorName(actortype.name(), side)),
const=const, ref=ref)
def managerArrayExpr(self, thisvar, side):
"""The member var my manager keeps of actors of my type."""
assert self.decl.type.isManaged()
return ExprSelect(
ExprCall(self.managerMethod(thisvar)),
'->', 'mManaged'+ _actorName(self.decl.type.name(), side))
# shmem stuff
def shmemMapType(self):
assert self.decl.type.isToplevel()
@ -3081,9 +3068,10 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
## manager() const
managertype = p.managerActorType(self.side, ptr=1)
managermeth = MethodDefn(MethodDecl(
p.managerMethod().name, ret=managertype, const=1))
'Manager', ret=managertype, const=1))
managerexp = ExprCall(ExprVar('IProtocol::Manager'), args=[])
managermeth.addstmt(StmtReturn(
ExprCast(p.managerVar(), managertype, static=1)))
ExprCast(managerexp, managertype, static=1)))
self.cls.addstmts([ managermeth, Whitespace.NL ])
@ -3597,8 +3585,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
])
elif ptype.isManaged():
self.cls.addstmts([
StmtDecl(Decl(p.managerInterfaceType(ptr=1),
p.managerVar().name)),
StmtDecl(Decl(_actorIdType(), p.idVar().name))
])
if p.decl.type.isToplevel():
@ -4813,7 +4799,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
return [
self.failIfNullActor(actorvar, errfn, msg="Error constructing actor %s" % actortype.name() + self.side.capitalize()),
StmtExpr(ExprAssn(_actorId(actorvar), idexpr)),
StmtExpr(ExprAssn(_actorManager(actorvar), ExprVar.THIS)),
StmtExpr(ExprCall(ExprSelect(actorvar, '->', 'SetManager'), args=[ExprVar.THIS])),
StmtExpr(ExprAssn(_actorChannel(actorvar),
self.protocol.channelForSubactor())),
StmtExpr(_callInsertManagedActor(