1 #include "TestSyncHang.h" 2 #include "base/task.h" 3 #include "mozilla/ipc/GeckoChildProcessHost.h" 4 5 #include "IPDLUnitTests.h" // fail etc. 6 7 using std::string; 8 using std::vector; 9 10 namespace mozilla { 11 namespace _ipdltest { 12 13 //----------------------------------------------------------------------------- 14 // parent 15 16 mozilla::ipc::GeckoChildProcessHost* gSyncHangSubprocess; 17 TestSyncHangParent()18TestSyncHangParent::TestSyncHangParent() { MOZ_COUNT_CTOR(TestSyncHangParent); } 19 ~TestSyncHangParent()20TestSyncHangParent::~TestSyncHangParent() { 21 MOZ_COUNT_DTOR(TestSyncHangParent); 22 } 23 DeleteSyncHangSubprocess(MessageLoop * uiLoop)24void DeleteSyncHangSubprocess(MessageLoop* uiLoop) { 25 gSyncHangSubprocess->Destroy(); 26 gSyncHangSubprocess = nullptr; 27 } 28 DeferredSyncHangParentShutdown()29void DeferredSyncHangParentShutdown() { 30 // ping to DeleteSubprocess 31 XRE_GetIOMessageLoop()->PostTask( 32 NewRunnableFunction("DeleteSyncHangSubprocess", DeleteSyncHangSubprocess, 33 MessageLoop::current())); 34 } 35 Main()36void TestSyncHangParent::Main() { 37 vector<string> args; 38 args.push_back("fake/path"); 39 gSyncHangSubprocess = 40 new mozilla::ipc::GeckoChildProcessHost(GeckoProcessType_Plugin); 41 bool launched = gSyncHangSubprocess->SyncLaunch(args, 2); 42 if (launched) 43 fail("Calling SyncLaunch with an invalid path should return false"); 44 45 MessageLoop::current()->PostTask(NewRunnableFunction( 46 "DeferredSyncHangParentShutdown", DeferredSyncHangParentShutdown)); 47 Close(); 48 } 49 50 //----------------------------------------------------------------------------- 51 // child 52 TestSyncHangChild()53TestSyncHangChild::TestSyncHangChild() { MOZ_COUNT_CTOR(TestSyncHangChild); } 54 ~TestSyncHangChild()55TestSyncHangChild::~TestSyncHangChild() { MOZ_COUNT_DTOR(TestSyncHangChild); } 56 RecvUnusedMessage()57mozilla::ipc::IPCResult TestSyncHangChild::RecvUnusedMessage() { 58 return IPC_OK(); 59 } 60 61 } // namespace _ipdltest 62 } // namespace mozilla 63