native_support service: SynchronousInterfacePtr conversion in tests.
R=vardhan@google.com
Review URL: https://codereview.chromium.org/1919503003 .
diff --git a/services/native_support/BUILD.gn b/services/native_support/BUILD.gn
index 276a086..b19b82f 100644
--- a/services/native_support/BUILD.gn
+++ b/services/native_support/BUILD.gn
@@ -52,7 +52,10 @@
"//mojo/services/files/cpp:files_impl",
"//mojo/services/files/interfaces",
"//mojo/services/native_support/interfaces",
+ "//mojo/services/native_support/interfaces:interfaces_sync",
]
- data_deps = [ ":native_support($default_toolchain)" ]
+ data_deps = [
+ ":native_support($default_toolchain)",
+ ]
}
diff --git a/services/native_support/process_controller_impl_unittest.cc b/services/native_support/process_controller_impl_unittest.cc
index d29f34f..8046ae7 100644
--- a/services/native_support/process_controller_impl_unittest.cc
+++ b/services/native_support/process_controller_impl_unittest.cc
@@ -10,11 +10,14 @@
#include "base/message_loop/message_loop.h"
#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
#include "mojo/services/files/cpp/input_stream_file.h"
#include "mojo/services/files/cpp/output_stream_file.h"
#include "mojo/services/files/interfaces/types.mojom.h"
#include "services/native_support/process_test_base.h"
+using mojo::SynchronousInterfacePtr;
+
namespace native_support {
namespace {
@@ -40,23 +43,21 @@
mojo::files::Error error;
{
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
error = mojo::files::Error::INTERNAL;
const char kPath[] = "/bin/sh";
mojo::Array<mojo::Array<uint8_t>> argv;
argv.push_back(ToByteArray(kPath));
argv.push_back(ToByteArray("-c"));
argv.push_back(ToByteArray("exit 42"));
- process()->Spawn(ToByteArray(kPath), argv.Pass(), nullptr, nullptr,
- nullptr, nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray(kPath), argv.Pass(), nullptr, nullptr, nullptr, nullptr,
+ GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
error = mojo::files::Error::INTERNAL;
int32_t exit_status = 0;
- process_controller->Wait(Capture(&error, &exit_status));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Wait(&error, &exit_status));
EXPECT_EQ(mojo::files::Error::OK, error);
EXPECT_EQ(42, exit_status);
}
@@ -132,7 +133,7 @@
mojo::files::FilePtr ofile;
QuitOnReadyFile ofile_impl(GetProxy(&ofile));
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
mojo::files::Error error = mojo::files::Error::INTERNAL;
const char kPath[] = "/bin/bash";
mojo::Array<mojo::Array<uint8_t>> argv;
@@ -140,10 +141,9 @@
argv.push_back(ToByteArray("-c"));
argv.push_back(
ToByteArray("trap 'exit 42' INT; echo ready; read -t30; exit 1"));
- process()->Spawn(ToByteArray(kPath), argv.Pass(), nullptr, ifile.Pass(),
- ofile.Pass(), nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray(kPath), argv.Pass(), nullptr, ifile.Pass(), ofile.Pass(),
+ nullptr, GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
// |ofile_impl| will quit the message loop once it sees "ready".
@@ -152,14 +152,12 @@
// Send SIGINT.
error = mojo::files::Error::INTERNAL;
- process_controller->Kill(static_cast<int32_t>(SIGINT), Capture(&error));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Kill(static_cast<int32_t>(SIGINT), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
error = mojo::files::Error::INTERNAL;
int32_t exit_status = 0;
- process_controller->Wait(Capture(&error, &exit_status));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Wait(&error, &exit_status));
EXPECT_EQ(mojo::files::Error::OK, error);
EXPECT_EQ(42, exit_status);
}
@@ -173,17 +171,16 @@
mojo::files::FilePtr ofile;
QuitOnReadyFile ofile_impl(GetProxy(&ofile));
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
mojo::files::Error error = mojo::files::Error::INTERNAL;
const char kPath[] = "/bin/bash";
mojo::Array<mojo::Array<uint8_t>> argv;
argv.push_back(ToByteArray(kPath));
argv.push_back(ToByteArray("-c"));
argv.push_back(ToByteArray("echo ready; read -t30"));
- process()->Spawn(ToByteArray(kPath), argv.Pass(), nullptr, ifile.Pass(),
- ofile.Pass(), nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray(kPath), argv.Pass(), nullptr, ifile.Pass(), ofile.Pass(),
+ nullptr, GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
// |ofile_impl| will quit the message loop once it sees "ready".
diff --git a/services/native_support/process_impl_unittest.cc b/services/native_support/process_impl_unittest.cc
index ed49095..30fd035 100644
--- a/services/native_support/process_impl_unittest.cc
+++ b/services/native_support/process_impl_unittest.cc
@@ -14,8 +14,12 @@
#include "mojo/services/files/cpp/output_stream_file.h"
#include "mojo/services/files/interfaces/file.mojom.h"
#include "mojo/services/files/interfaces/types.mojom.h"
+// FIXME
+#include "mojo/services/native_support/interfaces/process.mojom.h"
#include "services/native_support/process_test_base.h"
+using mojo::SynchronousInterfacePtr;
+
namespace native_support {
namespace {
@@ -33,35 +37,31 @@
mojo::files::Error error;
{
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
error = mojo::files::Error::INTERNAL;
- process()->Spawn(ToByteArray("/bin/true"), nullptr, nullptr, nullptr,
- nullptr, nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray("/bin/true"), nullptr, nullptr, nullptr, nullptr, nullptr,
+ GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
error = mojo::files::Error::INTERNAL;
int32_t exit_status = 42;
- process_controller->Wait(Capture(&error, &exit_status));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Wait(&error, &exit_status));
EXPECT_EQ(mojo::files::Error::OK, error);
EXPECT_EQ(0, exit_status);
}
{
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
error = mojo::files::Error::INTERNAL;
- process()->Spawn(ToByteArray("/bin/false"), nullptr, nullptr, nullptr,
- nullptr, nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray("/bin/false"), nullptr, nullptr, nullptr, nullptr, nullptr,
+ GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
error = mojo::files::Error::INTERNAL;
int32_t exit_status = 0;
- process_controller->Wait(Capture(&error, &exit_status));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Wait(&error, &exit_status));
EXPECT_EQ(mojo::files::Error::OK, error);
EXPECT_NE(exit_status, 0);
}
@@ -113,12 +113,11 @@
mojo::Array<mojo::Array<uint8_t>> argv;
argv.push_back(ToByteArray("/bin/echo"));
argv.push_back(ToByteArray(kOutput));
- ProcessControllerPtr process_controller;
+ SynchronousInterfacePtr<ProcessController> process_controller;
mojo::files::Error error = mojo::files::Error::INTERNAL;
- process()->Spawn(ToByteArray("/bin/echo"), argv.Pass(), nullptr, nullptr,
- file.Pass(), nullptr, GetProxy(&process_controller),
- Capture(&error));
- ASSERT_TRUE(process().WaitForIncomingResponse());
+ ASSERT_TRUE(process()->Spawn(
+ ToByteArray("/bin/echo"), argv.Pass(), nullptr, nullptr, file.Pass(),
+ nullptr, GetSynchronousProxy(&process_controller), &error));
EXPECT_EQ(mojo::files::Error::OK, error);
// Since |file|'s impl is on our thread, we have to spin our message loop.
@@ -128,8 +127,7 @@
error = mojo::files::Error::INTERNAL;
int32_t exit_status = 0;
- process_controller->Wait(Capture(&error, &exit_status));
- ASSERT_TRUE(process_controller.WaitForIncomingResponse());
+ ASSERT_TRUE(process_controller->Wait(&error, &exit_status));
EXPECT_EQ(mojo::files::Error::OK, error);
EXPECT_EQ(0, exit_status);
diff --git a/services/native_support/process_test_base.cc b/services/native_support/process_test_base.cc
index 1226b4b..9272f69 100644
--- a/services/native_support/process_test_base.cc
+++ b/services/native_support/process_test_base.cc
@@ -5,6 +5,9 @@
#include "services/native_support/process_test_base.h"
#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/services/native_support/interfaces/process.mojom.h"
+
+using mojo::SynchronousInterfacePtr;
namespace native_support {
@@ -14,7 +17,11 @@
void ProcessTestBase::SetUp() {
mojo::test::ApplicationTestBase::SetUp();
- application_impl()->ConnectToService("mojo:native_support", &process_);
+ ProcessPtr process_async;
+ // TODO(vtl): Fix |ConnectToService()|.
+ application_impl()->ConnectToService("mojo:native_support", &process_async);
+ process_ = SynchronousInterfacePtr<Process>::Create(
+ process_async.PassInterfaceHandle());
}
} // namespace native_support
diff --git a/services/native_support/process_test_base.h b/services/native_support/process_test_base.h
index 6b7900d..c7454ce 100644
--- a/services/native_support/process_test_base.h
+++ b/services/native_support/process_test_base.h
@@ -9,53 +9,11 @@
#include "base/macros.h"
#include "mojo/public/cpp/application/application_test_base.h"
-#include "mojo/services/native_support/interfaces/process.mojom.h"
+#include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
+#include "mojo/services/native_support/interfaces/process.mojom-sync.h"
namespace native_support {
-// TODO(vtl): Stuff copied from mojo/public/cpp/bindings/lib/template_util.h.
-typedef char YesType;
-
-struct NoType {
- YesType dummy[2];
-};
-
-template <typename T>
-struct IsMoveOnlyType {
- template <typename U>
- static YesType Test(const typename U::MoveOnlyTypeForCPP03*);
-
- template <typename U>
- static NoType Test(...);
-
- static const bool value =
- sizeof(Test<T>(0)) == sizeof(YesType) && !std::is_const<T>::value;
-};
-
-template <typename T>
-typename std::enable_if<!IsMoveOnlyType<T>::value, T>::type& Forward(T& t) {
- return t;
-}
-
-template <typename T>
-typename std::enable_if<IsMoveOnlyType<T>::value, T>::type Forward(T& t) {
- return t.Pass();
-}
-// TODO(vtl): (End of stuff copied from template_util.h.)
-
-template <typename T1>
-mojo::Callback<void(T1)> Capture(T1* t1) {
- return [t1](T1 got_t1) { *t1 = Forward(got_t1); };
-}
-
-template <typename T1, typename T2>
-mojo::Callback<void(T1, T2)> Capture(T1* t1, T2* t2) {
- return [t1, t2](T1 got_t1, T2 got_t2) {
- *t1 = Forward(got_t1);
- *t2 = Forward(got_t2);
- };
-}
-
class ProcessTestBase : public mojo::test::ApplicationTestBase {
public:
ProcessTestBase();
@@ -64,10 +22,10 @@
void SetUp() override;
protected:
- ProcessPtr& process() { return process_; }
+ mojo::SynchronousInterfacePtr<Process>& process() { return process_; }
private:
- ProcessPtr process_;
+ mojo::SynchronousInterfacePtr<Process> process_;
DISALLOW_COPY_AND_ASSIGN(ProcessTestBase);
};