mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 04:09:50 +00:00
Bug 1500219: Part 2 - Test UniquePtr integration with IPDL (r=jld)
Tests that pass UniquePtrs in IPDL messages. Depends on D9143 Differential Revision: https://phabricator.services.mozilla.com/D9144 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
737cd420f5
commit
41d439e4e4
23
ipc/ipdl/test/cxx/PTestUniquePtrIPC.ipdl
Normal file
23
ipc/ipdl/test/cxx/PTestUniquePtrIPC.ipdl
Normal file
@ -0,0 +1,23 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
namespace mozilla {
|
||||
namespace _ipdltest {
|
||||
|
||||
struct DummyStruct {
|
||||
int x;
|
||||
};
|
||||
|
||||
protocol PTestUniquePtrIPC
|
||||
{
|
||||
child:
|
||||
async TestMessage(UniquePtr<int> a1, UniquePtr<DummyStruct> a2,
|
||||
DummyStruct a3, UniquePtr<int> a4);
|
||||
async TestSendReference(UniquePtr<DummyStruct> a);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
88
ipc/ipdl/test/cxx/TestUniquePtrIPC.cpp
Normal file
88
ipc/ipdl/test/cxx/TestUniquePtrIPC.cpp
Normal file
@ -0,0 +1,88 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "TestUniquePtrIPC.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace _ipdltest {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// PARENT PROCESS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
TestUniquePtrIPCParent::Main()
|
||||
{
|
||||
UniquePtr<int> a1 = MakeUnique<int>(1);
|
||||
UniquePtr<DummyStruct> a2 = MakeUnique<DummyStruct>(2);
|
||||
DummyStruct a3(3);
|
||||
UniquePtr<int> a4;
|
||||
|
||||
if (!SendTestMessage(std::move(a1), std::move(a2), a3, std::move(a4))) {
|
||||
fail("failed sending UniquePtr items");
|
||||
}
|
||||
|
||||
if (a1 || a2) {
|
||||
fail("did not move TestMessage items in parent");
|
||||
}
|
||||
|
||||
if (a4) {
|
||||
fail("somehow turned null ptr into non-null by sending it");
|
||||
}
|
||||
|
||||
// Pass UniquePtr by reference
|
||||
UniquePtr<DummyStruct> b = MakeUnique<DummyStruct>(1);
|
||||
|
||||
if (!SendTestSendReference(b)) {
|
||||
fail("failed sending UniquePtr by reference");
|
||||
}
|
||||
if (b) {
|
||||
fail("did not move UniquePtr sent by reference");
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// CHILD PROCESS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
TestUniquePtrIPCChild::RecvTestMessage(UniquePtr<int>&& aA1,
|
||||
UniquePtr<DummyStruct>&& aA2,
|
||||
const DummyStruct& aA3,
|
||||
UniquePtr<int>&& aA4)
|
||||
{
|
||||
if ((!aA1) || (!aA2)) {
|
||||
fail("TestMessage received NULL items in child");
|
||||
}
|
||||
|
||||
if (aA4) {
|
||||
fail("TestMessage received non-NULL when expecting NULL");
|
||||
}
|
||||
|
||||
if ((*aA1 != 1) || (aA2->x() != 2) || (aA3.x() != 3)) {
|
||||
fail("TestMessage received incorrect items in child");
|
||||
}
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
TestUniquePtrIPCChild::RecvTestSendReference(UniquePtr<DummyStruct>&& aA)
|
||||
{
|
||||
if (!aA) {
|
||||
fail("TestSendReference received NULL item in child");
|
||||
}
|
||||
|
||||
if (*aA != 1) {
|
||||
fail("TestSendReference received incorrect item in child");
|
||||
}
|
||||
|
||||
Close();
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
||||
} // namespace _ipdltest
|
||||
} // namespace mozilla
|
71
ipc/ipdl/test/cxx/TestUniquePtrIPC.h
Normal file
71
ipc/ipdl/test/cxx/TestUniquePtrIPC.h
Normal file
@ -0,0 +1,71 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_TestUniquePtrIPC_h
|
||||
#define mozilla_TestUniquePtrIPC_h
|
||||
|
||||
#include "mozilla/_ipdltest/IPDLUnitTests.h"
|
||||
|
||||
#include "mozilla/_ipdltest/PTestUniquePtrIPCParent.h"
|
||||
#include "mozilla/_ipdltest/PTestUniquePtrIPCChild.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace _ipdltest {
|
||||
|
||||
class TestUniquePtrIPCParent :
|
||||
public PTestUniquePtrIPCParent
|
||||
{
|
||||
public:
|
||||
TestUniquePtrIPCParent() { MOZ_COUNT_CTOR(TestUniquePtrIPCParent); }
|
||||
virtual ~TestUniquePtrIPCParent() { MOZ_COUNT_DTOR(TestUniquePtrIPCParent); }
|
||||
|
||||
static bool RunTestInProcesses() { return true; }
|
||||
static bool RunTestInThreads() { return false; }
|
||||
|
||||
void Main();
|
||||
|
||||
bool ShouldContinueFromReplyTimeout() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void ActorDestroy(ActorDestroyReason why) override
|
||||
{
|
||||
if (NormalShutdown != why) {
|
||||
fail("Abnormal shutdown of parent");
|
||||
}
|
||||
passed("ok");
|
||||
QuitParent();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class TestUniquePtrIPCChild :
|
||||
public PTestUniquePtrIPCChild
|
||||
{
|
||||
public:
|
||||
TestUniquePtrIPCChild() { MOZ_COUNT_CTOR(TestUniquePtrIPCChild); }
|
||||
virtual ~TestUniquePtrIPCChild() { MOZ_COUNT_DTOR(TestUniquePtrIPCChild); }
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
RecvTestMessage(UniquePtr<int>&& aA1, UniquePtr<DummyStruct>&& aA2,
|
||||
const DummyStruct& aA3, UniquePtr<int>&& aA4) override;
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
RecvTestSendReference(UniquePtr<DummyStruct>&& aA) override;
|
||||
|
||||
virtual void ActorDestroy(ActorDestroyReason why) override
|
||||
{
|
||||
if (NormalShutdown != why) {
|
||||
fail("Abnormal shutdown of child");
|
||||
}
|
||||
QuitChild();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace _ipdltest
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_TestUniquePtrIPC_h
|
@ -50,6 +50,7 @@ SOURCES += [
|
||||
'TestSyncError.cpp',
|
||||
'TestSyncHang.cpp',
|
||||
'TestSyncWakeup.cpp',
|
||||
'TestUniquePtrIPC.cpp',
|
||||
'TestUrgency.cpp',
|
||||
'TestUrgentHangs.cpp',
|
||||
]
|
||||
@ -123,6 +124,7 @@ IPDL_SOURCES += [
|
||||
'PTestSyncError.ipdl',
|
||||
'PTestSyncHang.ipdl',
|
||||
'PTestSyncWakeup.ipdl',
|
||||
'PTestUniquePtrIPC.ipdl',
|
||||
'PTestUrgency.ipdl',
|
||||
'PTestUrgentHangs.ipdl',
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user