michael@0: #include "TestActorPunning.h" michael@0: michael@0: #include "IPDLUnitTests.h" // fail etc. michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // parent michael@0: michael@0: void michael@0: TestActorPunningParent::Main() michael@0: { michael@0: if (!SendStart()) michael@0: fail("sending Start"); michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningParent::RecvPun(PTestActorPunningSubParent* a, const Bad& bad) michael@0: { michael@0: if (a->SendBad()) michael@0: fail("bad!"); michael@0: fail("shouldn't have received this message in the first place"); michael@0: return true; michael@0: } michael@0: michael@0: PTestActorPunningPunnedParent* michael@0: TestActorPunningParent::AllocPTestActorPunningPunnedParent() michael@0: { michael@0: return new TestActorPunningPunnedParent(); michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningParent::DeallocPTestActorPunningPunnedParent(PTestActorPunningPunnedParent* a) michael@0: { michael@0: delete a; michael@0: return true; michael@0: } michael@0: michael@0: PTestActorPunningSubParent* michael@0: TestActorPunningParent::AllocPTestActorPunningSubParent() michael@0: { michael@0: return new TestActorPunningSubParent(); michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningParent::DeallocPTestActorPunningSubParent(PTestActorPunningSubParent* a) michael@0: { michael@0: delete a; michael@0: return true; michael@0: } michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // child michael@0: michael@0: PTestActorPunningPunnedChild* michael@0: TestActorPunningChild::AllocPTestActorPunningPunnedChild() michael@0: { michael@0: return new TestActorPunningPunnedChild(); michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningChild::DeallocPTestActorPunningPunnedChild(PTestActorPunningPunnedChild*) michael@0: { michael@0: fail("should have died by now"); michael@0: return true; michael@0: } michael@0: michael@0: PTestActorPunningSubChild* michael@0: TestActorPunningChild::AllocPTestActorPunningSubChild() michael@0: { michael@0: return new TestActorPunningSubChild(); michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningChild::DeallocPTestActorPunningSubChild(PTestActorPunningSubChild*) michael@0: { michael@0: fail("should have died by now"); michael@0: return true; michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningChild::RecvStart() michael@0: { michael@0: SendPTestActorPunningSubConstructor(); michael@0: SendPTestActorPunningPunnedConstructor(); michael@0: PTestActorPunningSubChild* a = SendPTestActorPunningSubConstructor(); michael@0: // We can't assert whether this succeeds or fails, due to race michael@0: // conditions. michael@0: SendPun(a, Bad()); michael@0: return true; michael@0: } michael@0: michael@0: bool michael@0: TestActorPunningSubChild::RecvBad() michael@0: { michael@0: fail("things are going really badly right now"); michael@0: return true; michael@0: } michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla michael@0: michael@0: namespace IPC { michael@0: using namespace mozilla::_ipdltest; michael@0: using namespace mozilla::ipc; michael@0: michael@0: /*static*/ void michael@0: ParamTraits::Write(Message* aMsg, const paramType& aParam) michael@0: { michael@0: char* ptr = aMsg->BeginWriteData(4); michael@0: ptr -= intptr_t(sizeof(int)); michael@0: ptr -= intptr_t(sizeof(ActorHandle)); michael@0: ActorHandle* ah = reinterpret_cast(ptr); michael@0: if (ah->mId != -3) michael@0: fail("guessed wrong offset (value is %d, should be -3)", ah->mId); michael@0: ah->mId = -2; michael@0: } michael@0: michael@0: /*static*/ bool michael@0: ParamTraits::Read(const Message* aMsg, void** aIter, paramType* aResult) michael@0: { michael@0: const char* ptr; michael@0: int len; michael@0: aMsg->ReadData(aIter, &ptr, &len); michael@0: return true; michael@0: } michael@0: michael@0: } // namespace IPC michael@0: