diff options
author | rockot <rockot@chromium.org> | 2015-06-17 13:56:53 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-17 20:57:30 +0000 |
commit | d3bd2cb5bc98903bbd9788ca01c0d1e9b15536ba (patch) | |
tree | 20156b13a0d69272d39bcf05fdffc3e0307f344a /components/html_viewer/web_message_port_channel_impl.cc | |
parent | 9219ddcabb17046227446df263de5ab4ee8fac3d (diff) | |
download | chromium_src-d3bd2cb5bc98903bbd9788ca01c0d1e9b15536ba.zip chromium_src-d3bd2cb5bc98903bbd9788ca01c0d1e9b15536ba.tar.gz chromium_src-d3bd2cb5bc98903bbd9788ca01c0d1e9b15536ba.tar.bz2 |
Componentize html_viewer's MessagePort
We should transition to using the same implementation in content, and this
is the first step to doing that.
BUG=361001
R=jam@chromium.org
TBR=jochen@chromium.org (+WebKit DEPS)
Review URL: https://codereview.chromium.org/1182303012
Cr-Commit-Position: refs/heads/master@{#334914}
Diffstat (limited to 'components/html_viewer/web_message_port_channel_impl.cc')
-rw-r--r-- | components/html_viewer/web_message_port_channel_impl.cc | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/components/html_viewer/web_message_port_channel_impl.cc b/components/html_viewer/web_message_port_channel_impl.cc deleted file mode 100644 index 45e75fc..0000000 --- a/components/html_viewer/web_message_port_channel_impl.cc +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/html_viewer/web_message_port_channel_impl.h" - -#include "base/bind.h" -#include "base/logging.h" -#include "base/strings/string16.h" -#include "third_party/WebKit/public/platform/WebMessagePortChannelClient.h" -#include "third_party/WebKit/public/platform/WebString.h" -#include "third_party/mojo/src/mojo/public/cpp/system/message_pipe.h" - -using blink::WebMessagePortChannel; -using blink::WebMessagePortChannelArray; -using blink::WebMessagePortChannelClient; -using blink::WebString; - -namespace html_viewer { - -void WebMessagePortChannelImpl::CreatePair( - blink::WebMessagePortChannel** channel1, - blink::WebMessagePortChannel** channel2) { - mojo::ScopedMessagePipeHandle pipe1; - mojo::ScopedMessagePipeHandle pipe2; - MojoResult result = mojo::CreateMessagePipe(nullptr, &pipe1, &pipe2); - if (result != MOJO_RESULT_OK) { - NOTREACHED(); - return; - } - - *channel1 = new WebMessagePortChannelImpl(pipe1.Pass());; - *channel2 = new WebMessagePortChannelImpl(pipe2.Pass()); -} - -WebMessagePortChannelImpl::WebMessagePortChannelImpl( - mojo::ScopedMessagePipeHandle pipe) - : client_(nullptr), pipe_(pipe.Pass()) { - WaitForNextMessage(); -} - -WebMessagePortChannelImpl::~WebMessagePortChannelImpl() { -} - -void WebMessagePortChannelImpl::setClient(WebMessagePortChannelClient* client) { - client_ = client; -} - -void WebMessagePortChannelImpl::destroy() { - setClient(nullptr); - delete this; -} - -void WebMessagePortChannelImpl::postMessage( - const WebString& message_as_string, - WebMessagePortChannelArray* channels) { - base::string16 string = message_as_string; - - std::vector<MojoHandle> handles; - if (channels) { - for (size_t i = 0; i < channels->size(); ++i) { - WebMessagePortChannelImpl* channel = - static_cast<WebMessagePortChannelImpl*>((*channels)[i]); - handles.push_back(channel->pipe_.release().value()); - channel->handle_watcher_.Stop(); - } - delete channels; - } - - uint32_t num_handles = static_cast<uint32_t>(handles.size()); - MojoHandle* handles_ptr = handles.empty() ? nullptr : &handles[0]; - - MojoResult result = MojoWriteMessage( - pipe_.get().value(), string.c_str(), - static_cast<uint32_t>(string.length() * sizeof(base::char16)), - handles_ptr, num_handles, MOJO_WRITE_MESSAGE_FLAG_NONE); - DCHECK_EQ(MOJO_RESULT_OK, result); -} - -bool WebMessagePortChannelImpl::tryGetMessage( - WebString* message, - WebMessagePortChannelArray& channels) { - uint32_t num_bytes = 0; - uint32_t num_handles = 0; - MojoResult result = MojoReadMessage( - pipe_.get().value(), nullptr, &num_bytes, nullptr, &num_handles, - MOJO_READ_MESSAGE_FLAG_NONE); - if (result != MOJO_RESULT_RESOURCE_EXHAUSTED) - return false; - - base::string16 message16; - CHECK(num_bytes % sizeof(base::char16) == 0); - message16.resize(num_bytes / sizeof(base::char16)); - std::vector<MojoHandle> handles; - handles.resize(num_handles); - - MojoHandle* handles_ptr = handles.empty() ? nullptr : &handles[0]; - result = MojoReadMessage( - pipe_.get().value(), &message16[0], &num_bytes, handles_ptr, &num_handles, - MOJO_READ_MESSAGE_FLAG_NONE); - if (result != MOJO_RESULT_OK) { - NOTREACHED(); - return false; - } - - *message = message16; - WebMessagePortChannelArray ports(handles.size()); - for (size_t i = 0; i < handles.size(); ++i) { - mojo::MessagePipeHandle mph(handles[i]); - mojo::ScopedMessagePipeHandle handle(mph); - ports[i] = new WebMessagePortChannelImpl(handle.Pass()); - } - channels = ports; - return true; -} - -void WebMessagePortChannelImpl::WaitForNextMessage() { - handle_watcher_.Start( - pipe_.get(), - MOJO_HANDLE_SIGNAL_READABLE, - MOJO_DEADLINE_INDEFINITE, - base::Bind(&WebMessagePortChannelImpl::OnMessageAvailable, - base::Unretained(this))); -} - -void WebMessagePortChannelImpl::OnMessageAvailable(MojoResult result) { - DCHECK_EQ(MOJO_RESULT_OK, result); - client_->messageAvailable(); - WaitForNextMessage(); -} - -} // namespace html_viewer |