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