NaCl: create a separate namespace for Mojo handles.
BUG=401761
R=viettrungluu@chromium.org
Review URL: https://codereview.chromium.org/1052723003
diff --git a/nacl_bindings/mojo_syscall.cc b/nacl_bindings/mojo_syscall.cc
index 4453381..1339753 100644
--- a/nacl_bindings/mojo_syscall.cc
+++ b/nacl_bindings/mojo_syscall.cc
@@ -10,12 +10,14 @@
#include <stdio.h>
#include "mojo/public/c/system/core.h"
+#include "mojo/public/platform/native/system_impl_private.h"
#include "nacl_bindings/mojo_syscall_internal.h"
#include "native_client/src/public/chrome_main.h"
#include "native_client/src/public/nacl_app.h"
#include "native_client/src/trusted/desc/nacl_desc_custom.h"
MojoHandle g_mojo_handle = MOJO_HANDLE_INVALID;
+MojoSystemImpl g_mojo_system = nullptr;
namespace {
@@ -73,8 +75,8 @@
}
}
- result_value = MojoCreateSharedBuffer(options, num_bytes_value,
- &shared_buffer_handle_value);
+ result_value = MojoSystemImplCreateSharedBuffer(
+ g_mojo_system, options, num_bytes_value, &shared_buffer_handle_value);
{
ScopedCopyLock copy_lock(nap);
@@ -111,8 +113,9 @@
}
}
- result_value = MojoDuplicateBufferHandle(buffer_handle_value, options,
- &new_buffer_handle_value);
+ result_value = MojoSystemImplDuplicateBufferHandle(
+ g_mojo_system, buffer_handle_value, options,
+ &new_buffer_handle_value);
{
ScopedCopyLock copy_lock(nap);
@@ -159,9 +162,9 @@
}
}
- result_value =
- MojoCreateDataPipe(options, &data_pipe_producer_handle_value,
- &data_pipe_consumer_handle_value);
+ result_value = MojoSystemImplCreateDataPipe(
+ g_mojo_system, options, &data_pipe_producer_handle_value,
+ &data_pipe_consumer_handle_value);
{
ScopedCopyLock copy_lock(nap);
@@ -205,8 +208,9 @@
}
}
- result_value = MojoWriteData(data_pipe_producer_handle_value, elements,
- &num_bytes_value, flags_value);
+ result_value = MojoSystemImplWriteData(
+ g_mojo_system, data_pipe_producer_handle_value, elements,
+ &num_bytes_value, flags_value);
{
ScopedCopyLock copy_lock(nap);
@@ -241,8 +245,9 @@
}
}
- result_value = MojoEndWriteData(data_pipe_producer_handle_value,
- num_bytes_written_value);
+ result_value = MojoSystemImplEndWriteData(g_mojo_system,
+ data_pipe_producer_handle_value,
+ num_bytes_written_value);
{
ScopedCopyLock copy_lock(nap);
@@ -284,8 +289,9 @@
}
}
- result_value = MojoReadData(data_pipe_consumer_handle_value, elements,
- &num_bytes_value, flags_value);
+ result_value =
+ MojoSystemImplReadData(g_mojo_system, data_pipe_consumer_handle_value,
+ elements, &num_bytes_value, flags_value);
{
ScopedCopyLock copy_lock(nap);
@@ -320,8 +326,8 @@
}
}
- result_value = MojoEndReadData(data_pipe_consumer_handle_value,
- num_bytes_read_value);
+ result_value = MojoSystemImplEndReadData(
+ g_mojo_system, data_pipe_consumer_handle_value, num_bytes_read_value);
{
ScopedCopyLock copy_lock(nap);
@@ -343,7 +349,7 @@
}
}
- result_value = MojoGetTimeTicksNow();
+ result_value = MojoSystemImplGetTimeTicksNow(g_mojo_system);
{
ScopedCopyLock copy_lock(nap);
@@ -369,7 +375,7 @@
}
}
- result_value = MojoClose(handle_value);
+ result_value = MojoSystemImplClose(g_mojo_system, handle_value);
{
ScopedCopyLock copy_lock(nap);
@@ -408,8 +414,9 @@
}
}
- result_value = MojoWait(handle_value, signals_value, deadline_value,
- signals_state_ptr ? &signals_state_value : NULL);
+ result_value = MojoSystemImplWait(
+ g_mojo_system, handle_value, signals_value, deadline_value,
+ signals_state_ptr ? &signals_state_value : NULL);
{
ScopedCopyLock copy_lock(nap);
@@ -464,8 +471,8 @@
}
}
- result_value = MojoWaitMany(
- handles, signals, num_handles_value, deadline_value,
+ result_value = MojoSystemImplWaitMany(
+ g_mojo_system, handles, signals, num_handles_value, deadline_value,
result_index_ptr ? &result_index_value : NULL, signals_states);
{
@@ -509,8 +516,9 @@
}
}
- result_value = MojoCreateMessagePipe(options, &message_pipe_handle0_value,
- &message_pipe_handle1_value);
+ result_value = MojoSystemImplCreateMessagePipe(
+ g_mojo_system, options, &message_pipe_handle0_value,
+ &message_pipe_handle1_value);
{
ScopedCopyLock copy_lock(nap);
@@ -559,9 +567,9 @@
}
}
- result_value =
- MojoWriteMessage(message_pipe_handle_value, bytes, num_bytes_value,
- handles, num_handles_value, flags_value);
+ result_value = MojoSystemImplWriteMessage(
+ g_mojo_system, message_pipe_handle_value, bytes, num_bytes_value,
+ handles, num_handles_value, flags_value);
{
ScopedCopyLock copy_lock(nap);
@@ -612,8 +620,8 @@
}
}
- result_value = MojoReadMessage(
- message_pipe_handle_value, bytes,
+ result_value = MojoSystemImplReadMessage(
+ g_mojo_system, message_pipe_handle_value, bytes,
num_bytes_ptr ? &num_bytes_value : NULL, handles,
num_handles_ptr ? &num_handles_value : NULL, flags_value);
@@ -710,14 +718,11 @@
// from there.
#define NACL_MOJO_DESC (NACL_CHROME_DESC_BASE + 3)
-void InjectMojo(struct NaClApp* nap) {
+MojoResult InjectMojo(struct NaClApp* nap, MojoHandle handle) {
NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeMojoDesc(nap));
- g_mojo_handle = MOJO_HANDLE_INVALID;
-}
-
-void InjectMojo(struct NaClApp* nap, MojoHandle handle) {
- NaClAppSetDesc(nap, NACL_MOJO_DESC, MakeMojoDesc(nap));
- g_mojo_handle = handle;
+ g_mojo_system = MojoSystemImplCreateImpl();
+ return MojoSystemImplTransferHandle(MojoSystemImplGetDefaultImpl(), handle,
+ g_mojo_system, &g_mojo_handle);
}
void InjectDisabledMojo(struct NaClApp* nap) {
diff --git a/nacl_bindings/mojo_syscall.h b/nacl_bindings/mojo_syscall.h
index 700d191..031fdf2 100644
--- a/nacl_bindings/mojo_syscall.h
+++ b/nacl_bindings/mojo_syscall.h
@@ -12,12 +12,7 @@
// implementation of the Mojo system API outside the NaCl sandbox and allows
// untrusted code to communicate with Mojo interfaces outside the sandbox or in
// other processes.
-void InjectMojo(struct NaClApp* nap, MojoHandle handle);
-
-// Injects a NaClDesc for Mojo support. This provides the implementation of the
-// Mojo system API outside the NaCl sandbox.
-// TODO(teravest): Remove this once it is no longer called.
-void InjectMojo(struct NaClApp* nap);
+MojoResult InjectMojo(struct NaClApp* nap, MojoHandle handle);
// Injects a "disabled" NaClDesc for Mojo support. This is to make debugging
// more straightforward in the case where Mojo is not enabled for NaCl plugins.