Commit 08573839 authored by Henrique Ferreiro's avatar Henrique Ferreiro Committed by Commit Bot

Migrate test_mojo_sandbox_hooks.mojom to the new Mojo types

Convert the implementation and all users of the
chrome_cleaner::mojom::TestMojoSandboxHooks interface.

Bug: 955171
Change-Id: I105f2220f847fc9a51da9eb79244bd6213354497
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1833467Reviewed-by: default avatarJoe Mason <joenotcharles@chromium.org>
Reviewed-by: default avatarVarun Khaneja <vakh@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: Henrique Ferreiro <hferreiro@igalia.com>
Cr-Commit-Position: refs/heads/master@{#705442}
parent 92738329
...@@ -16,7 +16,10 @@ ...@@ -16,7 +16,10 @@
#include "chrome/chrome_cleaner/ipc/mojo_task_runner.h" #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
#include "chrome/chrome_cleaner/mojom/test_mojo_sandbox_hooks.mojom.h" #include "chrome/chrome_cleaner/mojom/test_mojo_sandbox_hooks.mojom.h"
#include "chrome/chrome_cleaner/os/early_exit.h" #include "chrome/chrome_cleaner/os/early_exit.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/message_pipe.h" #include "mojo/public/cpp/system/message_pipe.h"
#include "sandbox/win/src/sandbox_factory.h" #include "sandbox/win/src/sandbox_factory.h"
#include "testing/multiprocess_func_list.h" #include "testing/multiprocess_func_list.h"
...@@ -27,8 +30,9 @@ namespace { ...@@ -27,8 +30,9 @@ namespace {
constexpr char kTestString[] = "Hello World"; constexpr char kTestString[] = "Hello World";
using UniqueTestMojoSandboxHooksPtr = using RemoteTestMojoSandboxHooksPtr =
std::unique_ptr<mojom::TestMojoSandboxHooksPtr, base::OnTaskRunnerDeleter>; std::unique_ptr<mojo::Remote<mojom::TestMojoSandboxHooks>,
base::OnTaskRunnerDeleter>;
class MojoSandboxHooksTest : public base::MultiProcessTest { class MojoSandboxHooksTest : public base::MultiProcessTest {
public: public:
...@@ -45,9 +49,10 @@ class MojoSandboxHooksTest : public base::MultiProcessTest { ...@@ -45,9 +49,10 @@ class MojoSandboxHooksTest : public base::MultiProcessTest {
// child process. // child process.
class TestMojoSandboxHooksImpl : mojom::TestMojoSandboxHooks { class TestMojoSandboxHooksImpl : mojom::TestMojoSandboxHooks {
public: public:
explicit TestMojoSandboxHooksImpl(mojom::TestMojoSandboxHooksRequest request) explicit TestMojoSandboxHooksImpl(
: binding_(this, std::move(request)) { mojo::PendingReceiver<mojom::TestMojoSandboxHooks> receiver)
binding_.set_connection_error_handler(base::BindOnce(&EarlyExit, 1)); : receiver_(this, std::move(receiver)) {
receiver_.set_disconnect_handler(base::BindOnce(&EarlyExit, 1));
} }
void EchoString(const std::string& input, void EchoString(const std::string& input,
...@@ -56,7 +61,7 @@ class TestMojoSandboxHooksImpl : mojom::TestMojoSandboxHooks { ...@@ -56,7 +61,7 @@ class TestMojoSandboxHooksImpl : mojom::TestMojoSandboxHooks {
} }
private: private:
mojo::Binding<mojom::TestMojoSandboxHooks> binding_; mojo::Receiver<mojom::TestMojoSandboxHooks> receiver_;
}; };
class TestSandboxSetupHooks : public MojoSandboxSetupHooks { class TestSandboxSetupHooks : public MojoSandboxSetupHooks {
...@@ -65,41 +70,41 @@ class TestSandboxSetupHooks : public MojoSandboxSetupHooks { ...@@ -65,41 +70,41 @@ class TestSandboxSetupHooks : public MojoSandboxSetupHooks {
: mojo_task_runner_(mojo_task_runner), : mojo_task_runner_(mojo_task_runner),
// Manually use |new| here because |make_unique| doesn't work with // Manually use |new| here because |make_unique| doesn't work with
// custom deleter. // custom deleter.
test_mojo_ptr_(new mojom::TestMojoSandboxHooksPtr, test_mojo_(new mojo::Remote<mojom::TestMojoSandboxHooks>(),
base::OnTaskRunnerDeleter(mojo_task_runner_)) {} base::OnTaskRunnerDeleter(mojo_task_runner_)) {}
ResultCode UpdateSandboxPolicy(sandbox::TargetPolicy* policy, ResultCode UpdateSandboxPolicy(sandbox::TargetPolicy* policy,
base::CommandLine* command_line) override { base::CommandLine* command_line) override {
mojo::ScopedMessagePipeHandle pipe_handle = mojo::ScopedMessagePipeHandle pipe_handle =
SetupSandboxMessagePipe(policy, command_line); SetupSandboxMessagePipe(policy, command_line);
// Unretained pointer of |test_mojo_ptr_| is safe because its deleter is // Unretained pointer of |test_mojo_| is safe because its deleter is run on
// run on the same task runner. So it won't be deleted before this task. // the same task runner. So it won't be deleted before this task.
mojo_task_runner_->PostTask( mojo_task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(TestSandboxSetupHooks::BindTestMojoSandboxHooksPtr, base::BindOnce(TestSandboxSetupHooks::BindTestMojoSandboxHooksRemote,
base::Unretained(test_mojo_ptr_.get()), base::Unretained(test_mojo_.get()),
std::move(pipe_handle))); std::move(pipe_handle)));
return RESULT_CODE_SUCCESS; return RESULT_CODE_SUCCESS;
} }
UniqueTestMojoSandboxHooksPtr TakeTestMojoSandboxHooksPtr() { RemoteTestMojoSandboxHooksPtr TakeTestMojoSandboxHooksRemote() {
return std::move(test_mojo_ptr_); return std::move(test_mojo_);
} }
private: private:
static void BindTestMojoSandboxHooksPtr( static void BindTestMojoSandboxHooksRemote(
mojom::TestMojoSandboxHooksPtr* test_mojo_ptr, mojo::Remote<mojom::TestMojoSandboxHooks>* test_mojo,
mojo::ScopedMessagePipeHandle pipe_handle) { mojo::ScopedMessagePipeHandle pipe_handle) {
test_mojo_ptr->Bind( test_mojo->Bind(mojo::PendingRemote<mojom::TestMojoSandboxHooks>(
mojom::TestMojoSandboxHooksPtrInfo(std::move(pipe_handle), 0)); std::move(pipe_handle), 0));
test_mojo_ptr->set_connection_error_handler(base::BindOnce( test_mojo->set_disconnect_handler(base::BindOnce(
[] { FAIL() << "Mojo sandbox setup connection error"; })); [] { FAIL() << "Mojo sandbox setup connection error"; }));
} }
scoped_refptr<MojoTaskRunner> mojo_task_runner_; scoped_refptr<MojoTaskRunner> mojo_task_runner_;
UniqueTestMojoSandboxHooksPtr test_mojo_ptr_; RemoteTestMojoSandboxHooksPtr test_mojo_;
}; };
class TestSandboxTargetHooks : public MojoSandboxTargetHooks { class TestSandboxTargetHooks : public MojoSandboxTargetHooks {
...@@ -107,7 +112,7 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks { ...@@ -107,7 +112,7 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks {
ResultCode TargetDroppedPrivileges( ResultCode TargetDroppedPrivileges(
const base::CommandLine& command_line) override { const base::CommandLine& command_line) override {
scoped_refptr<MojoTaskRunner> mojo_task_runner = MojoTaskRunner::Create(); scoped_refptr<MojoTaskRunner> mojo_task_runner = MojoTaskRunner::Create();
mojom::TestMojoSandboxHooksRequest request( mojo::PendingReceiver<mojom::TestMojoSandboxHooks> receiver(
ExtractSandboxMessagePipe(command_line)); ExtractSandboxMessagePipe(command_line));
std::unique_ptr<TestMojoSandboxHooksImpl, base::OnTaskRunnerDeleter> std::unique_ptr<TestMojoSandboxHooksImpl, base::OnTaskRunnerDeleter>
...@@ -119,7 +124,7 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks { ...@@ -119,7 +124,7 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks {
mojo_task_runner->PostTask( mojo_task_runner->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(CreateTestMojoSandboxHooksImpl, base::BindOnce(CreateTestMojoSandboxHooksImpl,
base::Unretained(&impl_ptr), std::move(request))); base::Unretained(&impl_ptr), std::move(receiver)));
loop.Run(); loop.Run();
return RESULT_CODE_SUCCESS; return RESULT_CODE_SUCCESS;
...@@ -129,19 +134,19 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks { ...@@ -129,19 +134,19 @@ class TestSandboxTargetHooks : public MojoSandboxTargetHooks {
static void CreateTestMojoSandboxHooksImpl( static void CreateTestMojoSandboxHooksImpl(
std::unique_ptr<TestMojoSandboxHooksImpl, base::OnTaskRunnerDeleter>* std::unique_ptr<TestMojoSandboxHooksImpl, base::OnTaskRunnerDeleter>*
impl_ptr, impl_ptr,
mojom::TestMojoSandboxHooksRequest request) { mojo::PendingReceiver<mojom::TestMojoSandboxHooks> receiver) {
(*impl_ptr).reset(new TestMojoSandboxHooksImpl(std::move(request))); (*impl_ptr).reset(new TestMojoSandboxHooksImpl(std::move(receiver)));
} }
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
}; };
void RunEchoString(mojom::TestMojoSandboxHooksPtr* test_mojo_ptr, void RunEchoString(mojo::Remote<mojom::TestMojoSandboxHooks>* test_mojo,
const std::string& input, const std::string& input,
mojom::TestMojoSandboxHooks::EchoStringCallback callback) { mojom::TestMojoSandboxHooks::EchoStringCallback callback) {
DCHECK(test_mojo_ptr); DCHECK(test_mojo);
(*test_mojo_ptr)->EchoString(input, std::move(callback)); (*test_mojo)->EchoString(input, std::move(callback));
} }
void OnEchoStringDone(std::string* result_string, void OnEchoStringDone(std::string* result_string,
...@@ -172,8 +177,8 @@ TEST_F(MojoSandboxHooksTest, SpawnSandboxTarget) { ...@@ -172,8 +177,8 @@ TEST_F(MojoSandboxHooksTest, SpawnSandboxTarget) {
StartSandboxTarget(MakeCmdLine("MojoSandboxHooksTargetMain"), StartSandboxTarget(MakeCmdLine("MojoSandboxHooksTargetMain"),
&setup_hooks, SandboxType::kTest)); &setup_hooks, SandboxType::kTest));
UniqueTestMojoSandboxHooksPtr test_mojo_ptr = RemoteTestMojoSandboxHooksPtr test_mojo =
setup_hooks.TakeTestMojoSandboxHooksPtr(); setup_hooks.TakeTestMojoSandboxHooksRemote();
std::string test_result_string; std::string test_result_string;
base::RunLoop loop; base::RunLoop loop;
...@@ -181,7 +186,7 @@ TEST_F(MojoSandboxHooksTest, SpawnSandboxTarget) { ...@@ -181,7 +186,7 @@ TEST_F(MojoSandboxHooksTest, SpawnSandboxTarget) {
// ends. // ends.
mojo_task_runner_->PostTask( mojo_task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(RunEchoString, base::Unretained(test_mojo_ptr.get()), base::BindOnce(RunEchoString, base::Unretained(test_mojo.get()),
kTestString, kTestString,
base::BindOnce(OnEchoStringDone, base::BindOnce(OnEchoStringDone,
base::Unretained(&test_result_string), base::Unretained(&test_result_string),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment