summaryrefslogtreecommitdiffstats
path: root/ipc/ipdl/test/cxx/TestManyChildAllocs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/ipdl/test/cxx/TestManyChildAllocs.cpp')
-rw-r--r--ipc/ipdl/test/cxx/TestManyChildAllocs.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/TestManyChildAllocs.cpp b/ipc/ipdl/test/cxx/TestManyChildAllocs.cpp
new file mode 100644
index 0000000000..77d5786cfa
--- /dev/null
+++ b/ipc/ipdl/test/cxx/TestManyChildAllocs.cpp
@@ -0,0 +1,83 @@
+#include "TestManyChildAllocs.h"
+
+#include "IPDLUnitTests.h" // fail etc.
+
+#define NALLOCS 10
+
+namespace mozilla {
+namespace _ipdltest {
+
+// parent code
+
+TestManyChildAllocsParent::TestManyChildAllocsParent() {
+ MOZ_COUNT_CTOR(TestManyChildAllocsParent);
+}
+
+TestManyChildAllocsParent::~TestManyChildAllocsParent() {
+ MOZ_COUNT_DTOR(TestManyChildAllocsParent);
+}
+
+void TestManyChildAllocsParent::Main() {
+ if (!SendGo()) fail("can't send Go()");
+}
+
+mozilla::ipc::IPCResult TestManyChildAllocsParent::RecvDone() {
+ // explicitly *not* cleaning up, so we can sanity-check IPDL's
+ // auto-shutdown/cleanup handling
+ Close();
+
+ return IPC_OK();
+}
+
+bool TestManyChildAllocsParent::DeallocPTestManyChildAllocsSubParent(
+ PTestManyChildAllocsSubParent* __a) {
+ delete __a;
+ return true;
+}
+
+PTestManyChildAllocsSubParent*
+TestManyChildAllocsParent::AllocPTestManyChildAllocsSubParent() {
+ return new TestManyChildAllocsSubParent();
+}
+
+// child code
+
+TestManyChildAllocsChild::TestManyChildAllocsChild() {
+ MOZ_COUNT_CTOR(TestManyChildAllocsChild);
+}
+
+TestManyChildAllocsChild::~TestManyChildAllocsChild() {
+ MOZ_COUNT_DTOR(TestManyChildAllocsChild);
+}
+
+mozilla::ipc::IPCResult TestManyChildAllocsChild::RecvGo() {
+ for (int i = 0; i < NALLOCS; ++i) {
+ PTestManyChildAllocsSubChild* child =
+ SendPTestManyChildAllocsSubConstructor();
+
+ if (!child) fail("can't send ctor()");
+
+ if (!child->SendHello()) fail("can't send Hello()");
+ }
+
+ size_t len = ManagedPTestManyChildAllocsSubChild().Count();
+ if (NALLOCS != len) fail("expected %lu kids, got %lu", NALLOCS, len);
+
+ if (!SendDone()) fail("can't send Done()");
+
+ return IPC_OK();
+}
+
+bool TestManyChildAllocsChild::DeallocPTestManyChildAllocsSubChild(
+ PTestManyChildAllocsSubChild* __a) {
+ delete __a;
+ return true;
+}
+
+PTestManyChildAllocsSubChild*
+TestManyChildAllocsChild::AllocPTestManyChildAllocsSubChild() {
+ return new TestManyChildAllocsSubChild();
+}
+
+} // namespace _ipdltest
+} // namespace mozilla