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()18 TestSyncHangParent::TestSyncHangParent() { MOZ_COUNT_CTOR(TestSyncHangParent); }
19 
~TestSyncHangParent()20 TestSyncHangParent::~TestSyncHangParent() {
21   MOZ_COUNT_DTOR(TestSyncHangParent);
22 }
23 
DeleteSyncHangSubprocess(MessageLoop * uiLoop)24 void DeleteSyncHangSubprocess(MessageLoop* uiLoop) {
25   gSyncHangSubprocess->Destroy();
26   gSyncHangSubprocess = nullptr;
27 }
28 
DeferredSyncHangParentShutdown()29 void DeferredSyncHangParentShutdown() {
30   // ping to DeleteSubprocess
31   XRE_GetIOMessageLoop()->PostTask(
32       NewRunnableFunction("DeleteSyncHangSubprocess", DeleteSyncHangSubprocess,
33                           MessageLoop::current()));
34 }
35 
Main()36 void 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()53 TestSyncHangChild::TestSyncHangChild() { MOZ_COUNT_CTOR(TestSyncHangChild); }
54 
~TestSyncHangChild()55 TestSyncHangChild::~TestSyncHangChild() { MOZ_COUNT_DTOR(TestSyncHangChild); }
56 
RecvUnusedMessage()57 mozilla::ipc::IPCResult TestSyncHangChild::RecvUnusedMessage() {
58   return IPC_OK();
59 }
60 
61 }  // namespace _ipdltest
62 }  // namespace mozilla
63