Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1276)

Unified Diff: mojo/system/channel_endpoint.cc

Issue 621153003: Move mojo edk into mojo/edk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix checkdeps Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/system/channel_endpoint.h ('k') | mojo/system/channel_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/system/channel_endpoint.cc
diff --git a/mojo/system/channel_endpoint.cc b/mojo/system/channel_endpoint.cc
deleted file mode 100644
index dbd3fdb6861cb4b6638b77e956b8100e2bf6bc3d..0000000000000000000000000000000000000000
--- a/mojo/system/channel_endpoint.cc
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2014 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 "mojo/system/channel_endpoint.h"
-
-#include "base/logging.h"
-#include "mojo/system/channel.h"
-#include "mojo/system/message_pipe.h"
-#include "mojo/system/transport_data.h"
-
-namespace mojo {
-namespace system {
-
-ChannelEndpoint::ChannelEndpoint(MessagePipe* message_pipe, unsigned port)
- : state_(STATE_NORMAL),
- message_pipe_(message_pipe),
- port_(port),
- channel_(),
- local_id_(MessageInTransit::kInvalidEndpointId),
- remote_id_(MessageInTransit::kInvalidEndpointId) {
- DCHECK(message_pipe_.get());
- DCHECK(port_ == 0 || port_ == 1);
-}
-
-void ChannelEndpoint::TakeMessages(MessageInTransitQueue* message_queue) {
- DCHECK(paused_message_queue_.IsEmpty());
- paused_message_queue_.Swap(message_queue);
-}
-
-bool ChannelEndpoint::EnqueueMessage(scoped_ptr<MessageInTransit> message) {
- DCHECK(message);
-
- base::AutoLock locker(lock_);
-
- if (!channel_ || remote_id_ == MessageInTransit::kInvalidEndpointId) {
- // We may reach here if we haven't been attached or run yet.
- // TODO(vtl): We may also reach here if the channel is shut down early for
- // some reason (with live message pipes on it). We can't check |state_| yet,
- // until it's protected under lock, but in this case we should return false
- // (and not enqueue any messages).
- paused_message_queue_.AddMessage(message.Pass());
- return true;
- }
-
- // TODO(vtl): Currently, this only works in the "running" case.
- DCHECK_NE(remote_id_, MessageInTransit::kInvalidEndpointId);
-
- return WriteMessageNoLock(message.Pass());
-}
-
-void ChannelEndpoint::DetachFromMessagePipe() {
- // TODO(vtl): Once |message_pipe_| is under |lock_|, we should null it out
- // here. For now, get the channel to do so for us.
-
- scoped_refptr<Channel> channel;
- {
- base::AutoLock locker(lock_);
- DCHECK(message_pipe_.get());
- message_pipe_ = nullptr;
-
- if (!channel_)
- return;
- DCHECK_NE(local_id_, MessageInTransit::kInvalidEndpointId);
- // TODO(vtl): Once we combine "run" into "attach", |remote_id_| should valid
- // here as well.
- channel = channel_;
- }
- // Don't call this under |lock_|, since it'll call us back.
- // TODO(vtl): This seems pretty suboptimal.
- channel->DetachMessagePipeEndpoint(local_id_, remote_id_);
-}
-
-void ChannelEndpoint::AttachToChannel(Channel* channel,
- MessageInTransit::EndpointId local_id) {
- DCHECK(channel);
- DCHECK_NE(local_id, MessageInTransit::kInvalidEndpointId);
-
- base::AutoLock locker(lock_);
- DCHECK(!channel_);
- DCHECK_EQ(local_id_, MessageInTransit::kInvalidEndpointId);
- channel_ = channel;
- local_id_ = local_id;
-}
-
-void ChannelEndpoint::Run(MessageInTransit::EndpointId remote_id) {
- DCHECK_NE(remote_id, MessageInTransit::kInvalidEndpointId);
-
- base::AutoLock locker(lock_);
- DCHECK(channel_);
- DCHECK_EQ(remote_id_, MessageInTransit::kInvalidEndpointId);
- remote_id_ = remote_id;
-
- while (!paused_message_queue_.IsEmpty()) {
- LOG_IF(WARNING, !WriteMessageNoLock(paused_message_queue_.GetMessage()))
- << "Failed to write enqueue message to channel";
- }
-}
-
-bool ChannelEndpoint::OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
- scoped_ptr<MessageInTransit> message(new MessageInTransit(message_view));
- scoped_refptr<MessagePipe> message_pipe;
- unsigned port;
- {
- base::AutoLock locker(lock_);
- DCHECK(channel_);
- if (!message_pipe_.get()) {
- // This isn't a failure per se. (It just means that, e.g., the other end
- // of the message point closed first.)
- return true;
- }
-
- if (message_view.transport_data_buffer_size() > 0) {
- DCHECK(message_view.transport_data_buffer());
- message->SetDispatchers(TransportData::DeserializeDispatchers(
- message_view.transport_data_buffer(),
- message_view.transport_data_buffer_size(),
- platform_handles.Pass(),
- channel_));
- }
-
- // Take a ref, and call |EnqueueMessage()| outside the lock.
- message_pipe = message_pipe_;
- port = port_;
- }
-
- MojoResult result = message_pipe->EnqueueMessage(
- MessagePipe::GetPeerPort(port), message.Pass());
- return (result == MOJO_RESULT_OK);
-}
-
-void ChannelEndpoint::OnDisconnect() {
- scoped_refptr<MessagePipe> message_pipe;
- unsigned port;
- {
- base::AutoLock locker(lock_);
- if (!message_pipe_.get())
- return;
-
- // Take a ref, and call |Close()| outside the lock.
- message_pipe = message_pipe_;
- port = port_;
- }
- message_pipe->Close(port);
-}
-
-void ChannelEndpoint::DetachFromChannel() {
- base::AutoLock locker(lock_);
- DCHECK(channel_);
- DCHECK_NE(local_id_, MessageInTransit::kInvalidEndpointId);
- // TODO(vtl): Once we combine "run" into "attach", |remote_id_| should valid
- // here as well.
- channel_ = nullptr;
- local_id_ = MessageInTransit::kInvalidEndpointId;
- remote_id_ = MessageInTransit::kInvalidEndpointId;
-}
-
-ChannelEndpoint::~ChannelEndpoint() {
- DCHECK(!message_pipe_.get());
- DCHECK(!channel_);
- DCHECK_EQ(local_id_, MessageInTransit::kInvalidEndpointId);
- DCHECK_EQ(remote_id_, MessageInTransit::kInvalidEndpointId);
-}
-
-bool ChannelEndpoint::WriteMessageNoLock(scoped_ptr<MessageInTransit> message) {
- DCHECK(message);
-
- lock_.AssertAcquired();
-
- DCHECK(channel_);
- DCHECK_NE(local_id_, MessageInTransit::kInvalidEndpointId);
- DCHECK_NE(remote_id_, MessageInTransit::kInvalidEndpointId);
-
- message->SerializeAndCloseDispatchers(channel_);
- message->set_source_id(local_id_);
- message->set_destination_id(remote_id_);
- return channel_->WriteMessage(message.Pass());
-}
-
-} // namespace system
-} // namespace mojo
« no previous file with comments | « mojo/system/channel_endpoint.h ('k') | mojo/system/channel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698