Chromium Code Reviews| Index: mojo/public/cpp/bindings/lib/message.cc |
| diff --git a/mojo/public/cpp/bindings/lib/message.cc b/mojo/public/cpp/bindings/lib/message.cc |
| index 4274cc86cb12695c4d0bebd5ea3664e88d89a71c..ab82cbe8bf3bd6ad887ffaebec7818aa905e1f83 100644 |
| --- a/mojo/public/cpp/bindings/lib/message.cc |
| +++ b/mojo/public/cpp/bindings/lib/message.cc |
| @@ -12,6 +12,7 @@ |
| #include <utility> |
| #include "base/logging.h" |
| +#include "base/strings/stringprintf.h" |
| namespace mojo { |
| @@ -78,6 +79,10 @@ ScopedMessageHandle Message::TakeMojoMessage() { |
| return new_message; |
| } |
| +void Message::NotifyBadMessage(const std::string& error) { |
| + buffer_->NotifyBadMessage(error); |
| +} |
| + |
| void Message::CloseHandles() { |
| for (std::vector<Handle>::iterator it = handles_.begin(); |
| it != handles_.end(); ++it) { |
| @@ -86,6 +91,89 @@ void Message::CloseHandles() { |
| } |
| } |
| + |
| +MessageReceiver::Result::Result(Type type) : Result(type, "") {} |
|
yzshen1
2016/06/15 16:22:33
nit: it is preferred to use a default constructed
|
| + |
| +MessageReceiver::Result::Result(Type type, const std::string& details) |
| + : type_(type), details_(details) {} |
| + |
| +MessageReceiver::Result::Result(Result&& other) { *this = std::move(other); } |
| + |
| +MessageReceiver::Result::~Result() {} |
| + |
| +MessageReceiver::Result& MessageReceiver::Result::operator=(Result&& other) { |
| + type_ = other.type_; |
| + details_ = std::move(other.details_); |
| + other.message_.MoveTo(&message_); |
| + return *this; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForBadMessage( |
| + const std::string& details, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, details); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForBadRequest( |
| + const std::string& interface_name, |
| + const std::string& method_name, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, |
| + base::StringPrintf("%s::%s", interface_name.c_str(), |
| + method_name.c_str())); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForBadResponse( |
| + const std::string& interface_name, |
| + const std::string& method_name, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, |
| + base::StringPrintf("%s::%s", |
| + interface_name.c_str(), method_name.c_str())); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForUnexpectedRequest( |
| + const std::string& interface_name, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, |
|
yzshen1
2016/06/15 16:22:33
It seems the difference between unexpected request
|
| + base::StringPrintf("%s (unexpected request %u)", |
| + interface_name.c_str(), message->name())); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForUnexpectedResponse( |
| + const std::string& interface_name, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, |
| + base::StringPrintf("%s (unexpected response %u)", |
| + interface_name.c_str(), message->name())); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| +// static |
| +MessageReceiver::Result MessageReceiver::Result::ForBadControlMessage( |
|
yzshen1
2016/06/15 16:22:33
Does this also apply to "pipe-level" control messa
|
| + const std::string& interface_name, |
| + Message* message) { |
| + Result error(Type::BAD_MESSAGE, |
| + base::StringPrintf("%s (control message ID %u)", |
| + interface_name.c_str(), message->name())); |
| + error.set_message(message); |
| + return error; |
| +} |
| + |
| MojoResult ReadMessage(MessagePipeHandle handle, Message* message) { |
| MojoResult rv; |