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

Unified Diff: ipc/ipc_message_pipe_reader.cc

Issue 2301123004: Mojo Channel: Fix deferred proxy dispatch; support paused channels (Closed)
Patch Set: . Created 4 years, 3 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 | « ipc/ipc_message_pipe_reader.h ('k') | ipc/ipc_mojo_bootstrap.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_message_pipe_reader.cc
diff --git a/ipc/ipc_message_pipe_reader.cc b/ipc/ipc_message_pipe_reader.cc
index 8e00d5c7b272e1a4a9795ce8802844f4d3d12601..a20489bb41107cac098cdcdfc464c590c13c21b8 100644
--- a/ipc/ipc_message_pipe_reader.cc
+++ b/ipc/ipc_message_pipe_reader.cc
@@ -21,36 +21,6 @@
namespace IPC {
namespace internal {
-namespace {
-
-// Used by Send() to capture a serialized Channel::Receive message.
-class MessageSerializer : public mojo::MessageReceiverWithResponder {
- public:
- MessageSerializer() {}
- ~MessageSerializer() override {}
-
- mojo::Message* message() { return &message_; }
-
- private:
- // mojo::MessageReceiverWithResponder
- bool Accept(mojo::Message* message) override {
- message_ = std::move(*message);
- return true;
- }
-
- bool AcceptWithResponder(mojo::Message* message,
- mojo::MessageReceiver* responder) override {
- NOTREACHED();
- return false;
- }
-
- mojo::Message message_;
-
- DISALLOW_COPY_AND_ASSIGN(MessageSerializer);
-};
-
-} // namespace
-
MessagePipeReader::MessagePipeReader(
mojo::MessagePipeHandle pipe,
mojom::ChannelAssociatedPtr sender,
@@ -58,9 +28,7 @@ MessagePipeReader::MessagePipeReader(
MessagePipeReader::Delegate* delegate)
: delegate_(delegate),
sender_(std::move(sender)),
- binding_(this, std::move(receiver)),
- sender_interface_id_(sender_.interface_id()),
- sender_pipe_(pipe) {
+ binding_(this, std::move(receiver)) {
sender_.set_connection_error_handler(
base::Bind(&MessagePipeReader::OnPipeError, base::Unretained(this),
MOJO_RESULT_FAILED_PRECONDITION));
@@ -97,20 +65,13 @@ bool MessagePipeReader::Send(std::unique_ptr<Message> message) {
reinterpret_cast<const uint8_t*>(message->data()) + message->size(),
data.data());
- MessageSerializer serializer;
- mojom::ChannelProxy proxy(&serializer);
- proxy.Receive(data, std::move(handles));
- mojo::Message* mojo_message = serializer.message();
-
- size_t num_handles = mojo_message->handles()->size();
- DCHECK_LE(num_handles, std::numeric_limits<uint32_t>::max());
+ if (!sender_)
+ return false;
- mojo_message->set_interface_id(sender_interface_id_);
- result = mojo::WriteMessageNew(sender_pipe_, mojo_message->TakeMojoMessage(),
- MOJO_WRITE_MESSAGE_FLAG_NONE);
+ sender_->Receive(data, std::move(handles));
DVLOG(4) << "Send " << message->type() << ": " << message->size();
- return result == MOJO_RESULT_OK;
+ return true;
}
void MessagePipeReader::GetRemoteInterface(
« no previous file with comments | « ipc/ipc_message_pipe_reader.h ('k') | ipc/ipc_mojo_bootstrap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698