mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
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:
parent
1f23e3694d
commit
ad7ac34ca4
6
dom/cache/CacheOpParent.cpp
vendored
6
dom/cache/CacheOpParent.cpp
vendored
@ -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);
|
||||
|
4
dom/cache/CacheOpParent.h
vendored
4
dom/cache/CacheOpParent.h
vendored
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user