mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
437f6053a9
--HG-- rename : ipc/ipdl/test/cxx/PTestRPCErrorCleanup.ipdl => ipc/ipdl/test/cxx/PTestInterruptErrorCleanup.ipdl rename : ipc/ipdl/test/cxx/PTestRPCRaces.ipdl => ipc/ipdl/test/cxx/PTestInterruptRaces.ipdl rename : ipc/ipdl/test/cxx/PTestRPCShutdownRace.ipdl => ipc/ipdl/test/cxx/PTestInterruptShutdownRace.ipdl rename : ipc/ipdl/test/cxx/PTestRacyRPCReplies.ipdl => ipc/ipdl/test/cxx/PTestRacyInterruptReplies.ipdl rename : ipc/ipdl/test/cxx/TestRPCErrorCleanup.cpp => ipc/ipdl/test/cxx/TestInterruptErrorCleanup.cpp rename : ipc/ipdl/test/cxx/TestRPCErrorCleanup.h => ipc/ipdl/test/cxx/TestInterruptErrorCleanup.h rename : ipc/ipdl/test/cxx/TestRPCRaces.cpp => ipc/ipdl/test/cxx/TestInterruptRaces.cpp rename : ipc/ipdl/test/cxx/TestRPCRaces.h => ipc/ipdl/test/cxx/TestInterruptRaces.h rename : ipc/ipdl/test/cxx/TestRPCShutdownRace.cpp => ipc/ipdl/test/cxx/TestInterruptShutdownRace.cpp rename : ipc/ipdl/test/cxx/TestRPCShutdownRace.h => ipc/ipdl/test/cxx/TestInterruptShutdownRace.h rename : ipc/ipdl/test/cxx/TestRacyRPCReplies.cpp => ipc/ipdl/test/cxx/TestRacyInterruptReplies.cpp rename : ipc/ipdl/test/cxx/TestRacyRPCReplies.h => ipc/ipdl/test/cxx/TestRacyInterruptReplies.h rename : ipc/ipdl/test/ipdl/error/rpcMessageCompress.ipdl => ipc/ipdl/test/ipdl/error/intrMessageCompress.ipdl rename : ipc/ipdl/test/ipdl/error/tooWeakRPCAsync.ipdl => ipc/ipdl/test/ipdl/error/tooWeakInterruptAsync.ipdl rename : ipc/ipdl/test/ipdl/ok/rpcProtocol.ipdl => ipc/ipdl/test/ipdl/ok/intrProtocol.ipdl
118 lines
2.2 KiB
C++
118 lines
2.2 KiB
C++
#include "TestRaceDeferral.h"
|
|
|
|
#include "IPDLUnitTests.h" // fail etc.
|
|
|
|
using namespace mozilla::ipc;
|
|
typedef mozilla::ipc::MessageChannel::Message Message;
|
|
|
|
namespace mozilla {
|
|
namespace _ipdltest {
|
|
|
|
static RacyInterruptPolicy
|
|
MediateRace(const Message& parent, const Message& child)
|
|
{
|
|
return (PTestRaceDeferral::Msg_Win__ID == parent.type()) ?
|
|
RIPParentWins : RIPChildWins;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// parent
|
|
|
|
TestRaceDeferralParent::TestRaceDeferralParent()
|
|
: mProcessedLose(false)
|
|
{
|
|
MOZ_COUNT_CTOR(TestRaceDeferralParent);
|
|
}
|
|
|
|
TestRaceDeferralParent::~TestRaceDeferralParent()
|
|
{
|
|
MOZ_COUNT_DTOR(TestRaceDeferralParent);
|
|
|
|
if (!mProcessedLose)
|
|
fail("never processed Lose");
|
|
}
|
|
|
|
void
|
|
TestRaceDeferralParent::Main()
|
|
{
|
|
Test1();
|
|
|
|
Close();
|
|
}
|
|
|
|
void
|
|
TestRaceDeferralParent::Test1()
|
|
{
|
|
if (!SendStartRace())
|
|
fail("sending StartRace");
|
|
|
|
if (!CallWin())
|
|
fail("calling Win");
|
|
if (mProcessedLose)
|
|
fail("Lose didn't lose");
|
|
|
|
if (!CallRpc())
|
|
fail("calling Rpc");
|
|
if (!mProcessedLose)
|
|
fail("didn't resolve Rpc vs. Lose 'race' correctly");
|
|
}
|
|
|
|
bool
|
|
TestRaceDeferralParent::AnswerLose()
|
|
{
|
|
if (mProcessedLose)
|
|
fail("processed Lose twice");
|
|
mProcessedLose = true;
|
|
return true;
|
|
}
|
|
|
|
RacyInterruptPolicy
|
|
TestRaceDeferralParent::MediateInterruptRace(const Message& parent,
|
|
const Message& child)
|
|
{
|
|
return MediateRace(parent, child);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// child
|
|
|
|
TestRaceDeferralChild::TestRaceDeferralChild()
|
|
{
|
|
MOZ_COUNT_CTOR(TestRaceDeferralChild);
|
|
}
|
|
|
|
TestRaceDeferralChild::~TestRaceDeferralChild()
|
|
{
|
|
MOZ_COUNT_DTOR(TestRaceDeferralChild);
|
|
}
|
|
|
|
bool
|
|
TestRaceDeferralChild::RecvStartRace()
|
|
{
|
|
if (!CallLose())
|
|
fail("calling Lose");
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
TestRaceDeferralChild::AnswerWin()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
TestRaceDeferralChild::AnswerRpc()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
RacyInterruptPolicy
|
|
TestRaceDeferralChild::MediateInterruptRace(const Message& parent,
|
|
const Message& child)
|
|
{
|
|
return MediateRace(parent, child);
|
|
}
|
|
|
|
} // namespace _ipdltest
|
|
} // namespace mozilla
|