michael@0: #ifndef mozilla__ipdltest_TestHangs_h michael@0: #define mozilla__ipdltest_TestHangs_h 1 michael@0: michael@0: #include "mozilla/_ipdltest/IPDLUnitTests.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestHangsParent.h" michael@0: #include "mozilla/_ipdltest/PTestHangsChild.h" michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: michael@0: class TestHangsParent : michael@0: public PTestHangsParent michael@0: { michael@0: public: michael@0: TestHangsParent(); michael@0: virtual ~TestHangsParent(); michael@0: michael@0: static bool RunTestInProcesses() { return true; } michael@0: michael@0: // FIXME/bug 703320 Disabled because parent kills child proc, not michael@0: // clear how that should work in threads. michael@0: static bool RunTestInThreads() { return false; } michael@0: michael@0: void Main(); michael@0: michael@0: protected: michael@0: virtual bool ShouldContinueFromReplyTimeout() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvNonce() { michael@0: return true; michael@0: } michael@0: michael@0: virtual bool AnswerStackFrame() MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: if (AbnormalShutdown != why) michael@0: fail("unexpected destruction!"); michael@0: passed("ok"); michael@0: QuitParent(); michael@0: } michael@0: michael@0: void CleanUp(); michael@0: michael@0: bool mDetectedHang; michael@0: }; michael@0: michael@0: michael@0: class TestHangsChild : michael@0: public PTestHangsChild michael@0: { michael@0: public: michael@0: TestHangsChild(); michael@0: virtual ~TestHangsChild(); michael@0: michael@0: protected: michael@0: virtual bool RecvStart() MOZ_OVERRIDE { michael@0: if (!SendNonce()) michael@0: fail("sending Nonce"); michael@0: return true; michael@0: } michael@0: michael@0: virtual bool AnswerStackFrame() MOZ_OVERRIDE michael@0: { michael@0: if (CallStackFrame()) michael@0: fail("should have failed"); michael@0: return true; michael@0: } michael@0: michael@0: virtual bool AnswerHang() MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: if (AbnormalShutdown != why) michael@0: fail("unexpected destruction!"); michael@0: QuitChild(); michael@0: } michael@0: }; michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla michael@0: michael@0: michael@0: #endif // ifndef mozilla__ipdltest_TestHangs_h