summaryrefslogtreecommitdiffstats
path: root/ipc/ipdl/test/cxx/TestRacyUndefer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/ipdl/test/cxx/TestRacyUndefer.cpp')
-rw-r--r--ipc/ipdl/test/cxx/TestRacyUndefer.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/TestRacyUndefer.cpp b/ipc/ipdl/test/cxx/TestRacyUndefer.cpp
new file mode 100644
index 0000000000..a46db5618e
--- /dev/null
+++ b/ipc/ipdl/test/cxx/TestRacyUndefer.cpp
@@ -0,0 +1,83 @@
+#include "base/basictypes.h"
+
+#include "TestRacyUndefer.h"
+
+#include "IPDLUnitTests.h" // fail etc.
+
+namespace mozilla {
+namespace _ipdltest {
+
+//-----------------------------------------------------------------------------
+// parent
+
+TestRacyUndeferParent::TestRacyUndeferParent() {
+ MOZ_COUNT_CTOR(TestRacyUndeferParent);
+}
+
+TestRacyUndeferParent::~TestRacyUndeferParent() {
+ MOZ_COUNT_DTOR(TestRacyUndeferParent);
+}
+
+void TestRacyUndeferParent::Main() {
+ if (!SendStart()) fail("sending Start");
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferParent::AnswerSpam() {
+ static bool spammed = false;
+ static bool raced = false;
+ if (!spammed) {
+ spammed = true;
+
+ if (!SendAwakenSpam()) fail("sending AwakenSpam");
+ } else if (!raced) {
+ raced = true;
+
+ if (!SendAwakenRaceWinTwice()) fail("sending WinRaceTwice");
+
+ if (!CallRace()) fail("calling Race1");
+ }
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferParent::AnswerRaceWinTwice() {
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferParent::RecvDone() {
+ Close();
+ return IPC_OK();
+}
+
+//-----------------------------------------------------------------------------
+// child
+
+TestRacyUndeferChild::TestRacyUndeferChild() {
+ MOZ_COUNT_CTOR(TestRacyUndeferChild);
+}
+
+TestRacyUndeferChild::~TestRacyUndeferChild() {
+ MOZ_COUNT_DTOR(TestRacyUndeferChild);
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferChild::RecvStart() {
+ if (!CallSpam()) fail("calling Spam");
+
+ if (!SendDone()) fail("sending Done");
+
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferChild::RecvAwakenSpam() {
+ if (!CallSpam()) fail("calling Spam");
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferChild::RecvAwakenRaceWinTwice() {
+ if (!CallRaceWinTwice()) fail("calling RaceWinTwice");
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult TestRacyUndeferChild::AnswerRace() { return IPC_OK(); }
+
+} // namespace _ipdltest
+} // namespace mozilla