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()18 TestSyncHangParent::TestSyncHangParent()
19 {
20     MOZ_COUNT_CTOR(TestSyncHangParent);
21 }
22 
~TestSyncHangParent()23 TestSyncHangParent::~TestSyncHangParent()
24 {
25     MOZ_COUNT_DTOR(TestSyncHangParent);
26 }
27 
28 void
DeleteSyncHangSubprocess(MessageLoop * uiLoop)29 DeleteSyncHangSubprocess(MessageLoop* uiLoop)
30 {
31   delete gSyncHangSubprocess;
32 }
33 
34 void
DeferredSyncHangParentShutdown()35 DeferredSyncHangParentShutdown()
36 {
37   // ping to DeleteSubprocess
38   XRE_GetIOMessageLoop()->PostTask(
39       NewRunnableFunction(DeleteSyncHangSubprocess, MessageLoop::current()));
40 }
41 
42 void
Main()43 TestSyncHangParent::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()59 TestSyncHangChild::TestSyncHangChild()
60 {
61     MOZ_COUNT_CTOR(TestSyncHangChild);
62 }
63 
~TestSyncHangChild()64 TestSyncHangChild::~TestSyncHangChild()
65 {
66     MOZ_COUNT_DTOR(TestSyncHangChild);
67 }
68 
69 } // namespace _ipdltest
70 } // namespace mozilla
71