summaryrefslogtreecommitdiff
path: root/chromium/ipc/ipc_channel_mojo.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-20 10:33:36 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-22 11:45:12 +0000
commitbe59a35641616a4cf23c4a13fa0632624b021c1b (patch)
tree9da183258bdf9cc413f7562079d25ace6955467f /chromium/ipc/ipc_channel_mojo.cc
parentd702e4b6a64574e97fc7df8fe3238cde70242080 (diff)
downloadqtwebengine-chromium-be59a35641616a4cf23c4a13fa0632624b021c1b.tar.gz
BASELINE: Update Chromium to 62.0.3202.101
Change-Id: I2d5eca8117600df6d331f6166ab24d943d9814ac Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/ipc/ipc_channel_mojo.cc')
-rw-r--r--chromium/ipc/ipc_channel_mojo.cc70
1 files changed, 51 insertions, 19 deletions
diff --git a/chromium/ipc/ipc_channel_mojo.cc b/chromium/ipc/ipc_channel_mojo.cc
index ba6b8edfe9e..29451c6cf64 100644
--- a/chromium/ipc/ipc_channel_mojo.cc
+++ b/chromium/ipc/ipc_channel_mojo.cc
@@ -29,6 +29,7 @@
#include "mojo/public/cpp/system/platform_handle.h"
#if defined(OS_POSIX)
+#include "base/posix/eintr_wrapper.h"
#include "ipc/ipc_platform_file_attachment_posix.h"
#endif
@@ -40,6 +41,10 @@
#include "ipc/handle_attachment_win.h"
#endif
+#if defined(OS_FUCHSIA)
+#include "ipc/handle_attachment_fuchsia.h"
+#endif
+
namespace IPC {
namespace {
@@ -92,7 +97,6 @@ MojoResult WrapPlatformHandle(base::PlatformFile handle,
}
#if defined(OS_MACOSX)
-
MojoResult WrapMachPort(mach_port_t mach_port,
mojom::SerializedHandlePtr* serialized) {
MojoPlatformHandle platform_handle = {
@@ -110,17 +114,32 @@ MojoResult WrapMachPort(mach_port_t mach_port,
mojom::SerializedHandle::Type::MACH_PORT);
return MOJO_RESULT_OK;
}
+#elif defined(OS_FUCHSIA)
+MojoResult WrapMxHandle(mx_handle_t handle,
+ mojom::SerializedHandlePtr* serialized) {
+ MojoPlatformHandle platform_handle = {
+ sizeof(MojoPlatformHandle), MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE,
+ static_cast<uint64_t>(handle)};
-#endif
+ MojoHandle wrapped_handle;
+ MojoResult result = MojoWrapPlatformHandle(&platform_handle, &wrapped_handle);
+ if (result != MOJO_RESULT_OK)
+ return result;
-#if defined(OS_POSIX)
+ *serialized = CreateSerializedHandle(
+ mojo::MakeScopedHandle(mojo::Handle(wrapped_handle)),
+ mojom::SerializedHandle::Type::FUCHSIA_HANDLE);
+ return MOJO_RESULT_OK;
+}
+#endif // defined(OS_FUCHSIA)
+#if defined(OS_POSIX)
base::ScopedFD TakeOrDupFile(internal::PlatformFileAttachment* attachment) {
- return attachment->Owns() ? base::ScopedFD(attachment->TakePlatformFile())
- : base::ScopedFD(dup(attachment->file()));
+ return attachment->Owns()
+ ? base::ScopedFD(attachment->TakePlatformFile())
+ : base::ScopedFD(HANDLE_EINTR(dup(attachment->file())));
}
-
-#endif
+#endif // defined(OS_POSIX)
MojoResult WrapAttachmentImpl(MessageAttachment* attachment,
mojom::SerializedHandlePtr* serialized) {
@@ -146,7 +165,7 @@ MojoResult WrapAttachmentImpl(MessageAttachment* attachment,
mojom::SerializedHandle::Type::PLATFORM_FILE,
serialized);
}
-#endif
+#endif // defined(OS_POSIX)
#if defined(OS_MACOSX)
DCHECK_EQ(attachment->GetType(), MessageAttachment::Type::MACH_PORT);
internal::MachPortAttachmentMac& mach_port_attachment =
@@ -155,14 +174,19 @@ MojoResult WrapAttachmentImpl(MessageAttachment* attachment,
serialized);
mach_port_attachment.reset_mach_port_ownership();
return result;
+#elif defined(OS_FUCHSIA)
+ DCHECK_EQ(attachment->GetType(), MessageAttachment::Type::FUCHSIA_HANDLE);
+ internal::HandleAttachmentFuchsia& handle_attachment =
+ static_cast<internal::HandleAttachmentFuchsia&>(*attachment);
+ MojoResult result = WrapMxHandle(handle_attachment.Take(), serialized);
+ return result;
#elif defined(OS_WIN)
DCHECK_EQ(attachment->GetType(), MessageAttachment::Type::WIN_HANDLE);
internal::HandleAttachmentWin& handle_attachment =
static_cast<internal::HandleAttachmentWin&>(*attachment);
- MojoResult result = WrapPlatformHandle(
- handle_attachment.get_handle(),
- mojom::SerializedHandle::Type::WIN_HANDLE, serialized);
- handle_attachment.reset_handle_ownership();
+ MojoResult result =
+ WrapPlatformHandle(handle_attachment.Take(),
+ mojom::SerializedHandle::Type::WIN_HANDLE, serialized);
return result;
#else
NOTREACHED();
@@ -212,8 +236,15 @@ MojoResult UnwrapAttachment(mojom::SerializedHandlePtr handle,
mach_port, internal::MachPortAttachmentMac::FROM_WIRE);
return MOJO_RESULT_OK;
}
-#endif // defined(OS_MACOSX)
-#if defined(OS_WIN)
+#elif defined(OS_FUCHSIA)
+ if (handle->type == mojom::SerializedHandle::Type::FUCHSIA_HANDLE) {
+ base::ScopedMxHandle handle;
+ if (platform_handle.type == MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE)
+ handle.reset(static_cast<mx_handle_t>(platform_handle.value));
+ *attachment = new internal::HandleAttachmentFuchsia(std::move(handle));
+ return MOJO_RESULT_OK;
+ }
+#elif defined(OS_WIN)
if (handle->type == mojom::SerializedHandle::Type::WIN_HANDLE) {
base::PlatformFile handle = base::kInvalidPlatformFile;
if (platform_handle.type == MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE)
@@ -257,7 +288,7 @@ std::unique_ptr<ChannelMojo> ChannelMojo::Create(
std::unique_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
mojo::ScopedMessagePipeHandle handle,
const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
- return base::MakeUnique<MojoChannelFactory>(
+ return std::make_unique<MojoChannelFactory>(
std::move(handle), Channel::MODE_SERVER, ipc_task_runner);
}
@@ -265,7 +296,7 @@ std::unique_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
std::unique_ptr<ChannelFactory> ChannelMojo::CreateClientFactory(
mojo::ScopedMessagePipeHandle handle,
const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
- return base::MakeUnique<MojoChannelFactory>(
+ return std::make_unique<MojoChannelFactory>(
std::move(handle), Channel::MODE_CLIENT, ipc_task_runner);
}
@@ -395,9 +426,10 @@ ChannelMojo::GetAssociatedInterfaceSupport() { return this; }
std::unique_ptr<mojo::ThreadSafeForwarder<mojom::Channel>>
ChannelMojo::CreateThreadSafeChannel() {
- return base::MakeUnique<mojo::ThreadSafeForwarder<mojom::Channel>>(
- task_runner_, base::Bind(&ChannelMojo::ForwardMessageFromThreadSafePtr,
- weak_factory_.GetWeakPtr()),
+ return std::make_unique<mojo::ThreadSafeForwarder<mojom::Channel>>(
+ task_runner_,
+ base::Bind(&ChannelMojo::ForwardMessageFromThreadSafePtr,
+ weak_factory_.GetWeakPtr()),
base::Bind(&ChannelMojo::ForwardMessageWithResponderFromThreadSafePtr,
weak_factory_.GetWeakPtr()),
*bootstrap_->GetAssociatedGroup());