diff options
Diffstat (limited to 'ipc/ipdl/test/cxx/TestShutdown.h')
-rw-r--r-- | ipc/ipdl/test/cxx/TestShutdown.h | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/TestShutdown.h b/ipc/ipdl/test/cxx/TestShutdown.h new file mode 100644 index 000000000..c79cbb8fc --- /dev/null +++ b/ipc/ipdl/test/cxx/TestShutdown.h @@ -0,0 +1,225 @@ +#ifndef mozilla__ipdltest_TestShutdown_h +#define mozilla__ipdltest_TestShutdown_h 1 + +#include "mozilla/_ipdltest/IPDLUnitTests.h" + +#include "mozilla/_ipdltest/PTestShutdownParent.h" +#include "mozilla/_ipdltest/PTestShutdownChild.h" + +#include "mozilla/_ipdltest/PTestShutdownSubParent.h" +#include "mozilla/_ipdltest/PTestShutdownSubChild.h" + +#include "mozilla/_ipdltest/PTestShutdownSubsubParent.h" +#include "mozilla/_ipdltest/PTestShutdownSubsubChild.h" + +namespace mozilla { +namespace _ipdltest { + +//----------------------------------------------------------------------------- +// Parent side + +class TestShutdownSubsubParent : + public PTestShutdownSubsubParent +{ +public: + explicit TestShutdownSubsubParent(bool expectParentDeleted) : + mExpectParentDeleted(expectParentDeleted) + { + } + + virtual ~TestShutdownSubsubParent() + { + } + +protected: + virtual void + ActorDestroy(ActorDestroyReason why) override; + +private: + bool mExpectParentDeleted; +}; + + +class TestShutdownSubParent : + public PTestShutdownSubParent +{ +public: + explicit TestShutdownSubParent(bool expectCrash) : + mExpectCrash(expectCrash), + mDeletedCount(0) + { + } + + virtual ~TestShutdownSubParent() + { + if (2 != mDeletedCount) + fail("managees outliving manager!"); + } + +protected: + virtual bool + AnswerStackFrame() override + { + return CallStackFrame(); + } + + virtual PTestShutdownSubsubParent* + AllocPTestShutdownSubsubParent(const bool& expectParentDelete) override + { + return new TestShutdownSubsubParent(expectParentDelete); + } + + virtual bool + DeallocPTestShutdownSubsubParent(PTestShutdownSubsubParent* actor) override + { + delete actor; + ++mDeletedCount; + return true; + } + + virtual void + ActorDestroy(ActorDestroyReason why) override; + +private: + bool mExpectCrash; + int mDeletedCount; +}; + + +class TestShutdownParent : + public PTestShutdownParent +{ +public: + TestShutdownParent() + { + } + virtual ~TestShutdownParent() + { + } + + static bool RunTestInProcesses() { return true; } + // FIXME/bug 703323 Could work if modified + static bool RunTestInThreads() { return false; } + + void Main(); + +protected: + virtual bool RecvSync() override { return true; } + + virtual PTestShutdownSubParent* + AllocPTestShutdownSubParent(const bool& expectCrash) override + { + return new TestShutdownSubParent(expectCrash); + } + + virtual bool + DeallocPTestShutdownSubParent(PTestShutdownSubParent* actor) override + { + delete actor; + return true; + } + + virtual void + ActorDestroy(ActorDestroyReason why) override; +}; + + +//----------------------------------------------------------------------------- +// Child side + +class TestShutdownSubsubChild : + public PTestShutdownSubsubChild +{ +public: + explicit TestShutdownSubsubChild(bool expectParentDeleted) : + mExpectParentDeleted(expectParentDeleted) + { + } + virtual ~TestShutdownSubsubChild() + { + } + +protected: + virtual void + ActorDestroy(ActorDestroyReason why) override; + +private: + bool mExpectParentDeleted; +}; + + +class TestShutdownSubChild : + public PTestShutdownSubChild +{ +public: + explicit TestShutdownSubChild(bool expectCrash) : mExpectCrash(expectCrash) + { + } + + virtual ~TestShutdownSubChild() + { + } + +protected: + virtual bool AnswerStackFrame() override; + + virtual PTestShutdownSubsubChild* + AllocPTestShutdownSubsubChild(const bool& expectParentDelete) override + { + return new TestShutdownSubsubChild(expectParentDelete); + } + + virtual bool + DeallocPTestShutdownSubsubChild(PTestShutdownSubsubChild* actor) override + { + delete actor; + return true; + } + + virtual void + ActorDestroy(ActorDestroyReason why) override; + +private: + bool mExpectCrash; +}; + + +class TestShutdownChild : + public PTestShutdownChild +{ +public: + TestShutdownChild() + { + } + virtual ~TestShutdownChild() + { + } + +protected: + virtual bool + RecvStart(); + + virtual PTestShutdownSubChild* + AllocPTestShutdownSubChild( + const bool& expectCrash) override + { + return new TestShutdownSubChild(expectCrash); + } + + virtual bool + DeallocPTestShutdownSubChild(PTestShutdownSubChild* actor) override + { + delete actor; + return true; + } + + virtual void + ActorDestroy(ActorDestroyReason why) override; +}; + + +} // namespace _ipdltest +} // namespace mozilla + + +#endif // ifndef mozilla__ipdltest_TestShutdown_h |