зеркало из https://github.com/mozilla/gecko-dev.git
118 строки
2.2 KiB
C++
118 строки
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
|