michael@0: #ifndef mozilla__ipdltest_TestShutdown_h michael@0: #define mozilla__ipdltest_TestShutdown_h 1 michael@0: michael@0: #include "mozilla/_ipdltest/IPDLUnitTests.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestShutdownParent.h" michael@0: #include "mozilla/_ipdltest/PTestShutdownChild.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestShutdownSubParent.h" michael@0: #include "mozilla/_ipdltest/PTestShutdownSubChild.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestShutdownSubsubParent.h" michael@0: #include "mozilla/_ipdltest/PTestShutdownSubsubChild.h" michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // Parent side michael@0: michael@0: class TestShutdownSubsubParent : michael@0: public PTestShutdownSubsubParent michael@0: { michael@0: public: michael@0: TestShutdownSubsubParent(bool expectParentDeleted) : michael@0: mExpectParentDeleted(expectParentDeleted) michael@0: { michael@0: } michael@0: michael@0: virtual ~TestShutdownSubsubParent() michael@0: { michael@0: } michael@0: michael@0: protected: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: bool mExpectParentDeleted; michael@0: }; michael@0: michael@0: michael@0: class TestShutdownSubParent : michael@0: public PTestShutdownSubParent michael@0: { michael@0: public: michael@0: TestShutdownSubParent(bool expectCrash) : michael@0: mExpectCrash(expectCrash), michael@0: mDeletedCount(0) michael@0: { michael@0: } michael@0: michael@0: virtual ~TestShutdownSubParent() michael@0: { michael@0: if (2 != mDeletedCount) michael@0: fail("managees outliving manager!"); michael@0: } michael@0: michael@0: protected: michael@0: virtual bool michael@0: AnswerStackFrame() MOZ_OVERRIDE michael@0: { michael@0: return CallStackFrame(); michael@0: } michael@0: michael@0: virtual PTestShutdownSubsubParent* michael@0: AllocPTestShutdownSubsubParent(const bool& expectParentDelete) MOZ_OVERRIDE michael@0: { michael@0: return new TestShutdownSubsubParent(expectParentDelete); michael@0: } michael@0: michael@0: virtual bool michael@0: DeallocPTestShutdownSubsubParent(PTestShutdownSubsubParent* actor) MOZ_OVERRIDE michael@0: { michael@0: delete actor; michael@0: ++mDeletedCount; michael@0: return true; michael@0: } michael@0: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: bool mExpectCrash; michael@0: int mDeletedCount; michael@0: }; michael@0: michael@0: michael@0: class TestShutdownParent : michael@0: public PTestShutdownParent michael@0: { michael@0: public: michael@0: TestShutdownParent() michael@0: { michael@0: } michael@0: virtual ~TestShutdownParent() michael@0: { michael@0: } michael@0: michael@0: static bool RunTestInProcesses() { return true; } michael@0: // FIXME/bug 703323 Could work if modified michael@0: static bool RunTestInThreads() { return false; } michael@0: michael@0: void Main(); michael@0: michael@0: protected: michael@0: virtual bool RecvSync() MOZ_OVERRIDE { return true; } michael@0: michael@0: virtual PTestShutdownSubParent* michael@0: AllocPTestShutdownSubParent(const bool& expectCrash) MOZ_OVERRIDE michael@0: { michael@0: return new TestShutdownSubParent(expectCrash); michael@0: } michael@0: michael@0: virtual bool michael@0: DeallocPTestShutdownSubParent(PTestShutdownSubParent* actor) MOZ_OVERRIDE michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // Child side michael@0: michael@0: class TestShutdownSubsubChild : michael@0: public PTestShutdownSubsubChild michael@0: { michael@0: public: michael@0: TestShutdownSubsubChild(bool expectParentDeleted) : michael@0: mExpectParentDeleted(expectParentDeleted) michael@0: { michael@0: } michael@0: virtual ~TestShutdownSubsubChild() michael@0: { michael@0: } michael@0: michael@0: protected: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: bool mExpectParentDeleted; michael@0: }; michael@0: michael@0: michael@0: class TestShutdownSubChild : michael@0: public PTestShutdownSubChild michael@0: { michael@0: public: michael@0: TestShutdownSubChild(bool expectCrash) : mExpectCrash(expectCrash) michael@0: { michael@0: } michael@0: michael@0: virtual ~TestShutdownSubChild() michael@0: { michael@0: } michael@0: michael@0: protected: michael@0: virtual bool AnswerStackFrame() MOZ_OVERRIDE; michael@0: michael@0: virtual PTestShutdownSubsubChild* michael@0: AllocPTestShutdownSubsubChild(const bool& expectParentDelete) MOZ_OVERRIDE michael@0: { michael@0: return new TestShutdownSubsubChild(expectParentDelete); michael@0: } michael@0: michael@0: virtual bool michael@0: DeallocPTestShutdownSubsubChild(PTestShutdownSubsubChild* actor) MOZ_OVERRIDE michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: bool mExpectCrash; michael@0: }; michael@0: michael@0: michael@0: class TestShutdownChild : michael@0: public PTestShutdownChild michael@0: { michael@0: public: michael@0: TestShutdownChild() michael@0: { michael@0: } michael@0: virtual ~TestShutdownChild() michael@0: { michael@0: } michael@0: michael@0: protected: michael@0: virtual bool michael@0: RecvStart(); michael@0: michael@0: virtual PTestShutdownSubChild* michael@0: AllocPTestShutdownSubChild( michael@0: const bool& expectCrash) MOZ_OVERRIDE michael@0: { michael@0: return new TestShutdownSubChild(expectCrash); michael@0: } michael@0: michael@0: virtual bool michael@0: DeallocPTestShutdownSubChild(PTestShutdownSubChild* actor) MOZ_OVERRIDE michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: virtual void michael@0: ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla michael@0: michael@0: michael@0: #endif // ifndef mozilla__ipdltest_TestShutdown_h