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::vector; 8 using std::string; 9 10 namespace mozilla { 11 namespace _ipdltest { 12 13 //----------------------------------------------------------------------------- 14 // parent 15 16 mozilla::ipc::GeckoChildProcessHost* gSyncHangSubprocess; 17 TestSyncHangParent()18TestSyncHangParent::TestSyncHangParent() 19 { 20 MOZ_COUNT_CTOR(TestSyncHangParent); 21 } 22 ~TestSyncHangParent()23TestSyncHangParent::~TestSyncHangParent() 24 { 25 MOZ_COUNT_DTOR(TestSyncHangParent); 26 } 27 28 void DeleteSyncHangSubprocess(MessageLoop * uiLoop)29DeleteSyncHangSubprocess(MessageLoop* uiLoop) 30 { 31 delete gSyncHangSubprocess; 32 } 33 34 void DeferredSyncHangParentShutdown()35DeferredSyncHangParentShutdown() 36 { 37 // ping to DeleteSubprocess 38 XRE_GetIOMessageLoop()->PostTask( 39 NewRunnableFunction(DeleteSyncHangSubprocess, MessageLoop::current())); 40 } 41 42 void Main()43TestSyncHangParent::Main() 44 { 45 vector<string> args; 46 args.push_back("fake/path"); 47 gSyncHangSubprocess = new mozilla::ipc::GeckoChildProcessHost(GeckoProcessType_Plugin); 48 bool launched = gSyncHangSubprocess->SyncLaunch(args, 2); 49 if (launched) 50 fail("Calling SyncLaunch with an invalid path should return false"); 51 52 MessageLoop::current()->PostTask(NewRunnableFunction(DeferredSyncHangParentShutdown)); 53 Close(); 54 } 55 56 //----------------------------------------------------------------------------- 57 // child 58 TestSyncHangChild()59TestSyncHangChild::TestSyncHangChild() 60 { 61 MOZ_COUNT_CTOR(TestSyncHangChild); 62 } 63 ~TestSyncHangChild()64TestSyncHangChild::~TestSyncHangChild() 65 { 66 MOZ_COUNT_DTOR(TestSyncHangChild); 67 } 68 69 } // namespace _ipdltest 70 } // namespace mozilla 71