Index: mojo/edk/system/core.cc |
diff --git a/mojo/edk/system/core.cc b/mojo/edk/system/core.cc |
index a5e432b8a749f3a2ddc937bcf5a86f392db1baa6..4b60bc48fe5eec210bdc2fd3c1fe3f817abd7f48 100644 |
--- a/mojo/edk/system/core.cc |
+++ b/mojo/edk/system/core.cc |
@@ -36,6 +36,10 @@ |
#include "mojo/edk/system/wait_set_dispatcher.h" |
#include "mojo/edk/system/waiter.h" |
+#if defined(OS_ANDROID) |
+#include "base/android/jni_android.h" |
+#endif |
+ |
namespace mojo { |
namespace edk { |
@@ -89,6 +93,15 @@ MojoResult MojoPlatformHandleToScopedPlatformHandle( |
break; |
#endif |
+#if defined(OS_ANDROID) |
+ case MOJO_PLATFORM_HANDLE_TYPE_PARCELABLE: |
+ handle.type = PlatformHandle::Type::PARCELABLE; |
+ handle.parcelable.Reset( |
+ base::android::AttachCurrentThread(), |
+ reinterpret_cast<jobject>(platform_handle->value)); |
+ break; |
+#endif |
+ |
default: |
return MOJO_RESULT_INVALID_ARGUMENT; |
} |
@@ -122,6 +135,14 @@ MojoResult ScopedPlatformHandleToMojoPlatformHandle( |
break; |
#endif // defined(OS_MACOSX) && !defined(OS_IOS) |
+#if defined(OS_ANDROID) |
+ case PlatformHandle::Type::PARCELABLE: |
+ platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_PARCELABLE; |
+ platform_handle->value = |
+ reinterpret_cast<uint64_t>(handle.release().parcelable.Release()); |
+ break; |
+#endif // defined(OS_ANDROID) |
+ |
default: |
return MOJO_RESULT_INVALID_ARGUMENT; |
} |
@@ -172,12 +193,11 @@ void Core::SetDefaultProcessErrorCallback( |
} |
void Core::AddChild(base::ProcessHandle process_handle, |
- ScopedPlatformHandle platform_handle, |
+ ConnectionParam connection_param, |
const std::string& child_token, |
const ProcessErrorCallback& process_error_callback) { |
GetNodeController()->ConnectToChild(process_handle, |
- std::move(platform_handle), |
- child_token, |
+ std::move(connection_param), child_token, |
process_error_callback); |
} |
@@ -194,7 +214,9 @@ ScopedMessagePipeHandle Core::ConnectToPeerProcess( |
GetNodeController()->node()->CreatePortPair(&port0, &port1); |
MojoHandle handle = AddDispatcher(new MessagePipeDispatcher( |
GetNodeController(), port0, kUnknownPipeIdForDebug, 0)); |
- GetNodeController()->ConnectToPeer(std::move(pipe_handle), port1, peer_token); |
+ ConnectionParam connection_param(std::move(pipe_handle)); |
+ GetNodeController()->ConnectToPeer(std::move(connection_param), port1, |
+ peer_token); |
return ScopedMessagePipeHandle(MessagePipeHandle(handle)); |
} |
@@ -202,8 +224,8 @@ void Core::ClosePeerConnection(const std::string& peer_token) { |
GetNodeController()->ClosePeerConnection(peer_token); |
} |
-void Core::InitChild(ScopedPlatformHandle platform_handle) { |
- GetNodeController()->ConnectToParent(std::move(platform_handle)); |
+void Core::InitChild(ConnectionParam connection_param) { |
+ GetNodeController()->ConnectToParent(std::move(connection_param)); |
} |
void Core::SetMachPortProvider(base::PortProvider* port_provider) { |
@@ -687,6 +709,7 @@ MojoResult Core::ReadMessage(MojoHandle message_pipe_handle, |
auto dispatcher = GetDispatcher(message_pipe_handle); |
if (!dispatcher) |
return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
std::unique_ptr<MessageForTransit> message; |
MojoResult rv = |
dispatcher->ReadMessage(&message, num_bytes, handles, num_handles, flags, |