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

Unified Diff: mojo/public/cpp/bindings/lib/message.cc

Issue 2064903002: Mojo: Report bindings validation errors via MojoNotifyBadMessage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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
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;

Powered by Google App Engine
This is Rietveld 408576698