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

Unified Diff: mojo/public/cpp/bindings/lib/multiplex_router.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/multiplex_router.cc
diff --git a/mojo/public/cpp/bindings/lib/multiplex_router.cc b/mojo/public/cpp/bindings/lib/multiplex_router.cc
index a8d06a45f93f942f968f2096f7f8c5083ef9601e..d1a95bed67e970470ef3474d8f304ce773e2d255 100644
--- a/mojo/public/cpp/bindings/lib/multiplex_router.cc
+++ b/mojo/public/cpp/bindings/lib/multiplex_router.cc
@@ -111,7 +111,8 @@ class MultiplexRouter::InterfaceEndpoint
bool SendMessage(Message* message) override {
DCHECK(task_runner_->BelongsToCurrentThread());
message->set_interface_id(id_);
- return router_->connector_.Accept(message);
+
+ return router_->connector_.Accept(message).Succeeded();
}
void AllowWokenUpBySyncWatchOnSameThread() override {
@@ -430,12 +431,13 @@ void MultiplexRouter::DetachEndpointClient(
endpoint->DetachClient();
}
-void MultiplexRouter::RaiseError() {
+void MultiplexRouter::RaiseError(Result error) {
if (task_runner_->BelongsToCurrentThread()) {
- connector_.RaiseError();
+ connector_.RaiseError(std::move(error));
} else {
task_runner_->PostTask(FROM_HERE,
- base::Bind(&MultiplexRouter::RaiseError, this));
+ base::Bind(&MultiplexRouter::RaiseError, this,
+ base::Passed(&error)));
}
}
@@ -471,6 +473,12 @@ bool MultiplexRouter::HasAssociatedEndpoints() const {
return !ContainsKey(endpoints_, kMasterInterfaceId);
}
+void MultiplexRouter::SetMasterInterfaceName(const std::string& name) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ control_message_handler_.set_interface_name(name);
+ header_validator_.set_debug_info(name + " master interface header validator");
+}
+
void MultiplexRouter::EnableTestingMode() {
DCHECK(thread_checker_.CalledOnValidThread());
base::AutoLock locker(lock_);
@@ -479,7 +487,7 @@ void MultiplexRouter::EnableTestingMode() {
connector_.set_enforce_errors_from_incoming_receiver(false);
}
-bool MultiplexRouter::Accept(Message* message) {
+MessageReceiver::Result MultiplexRouter::Accept(Message* message) {
DCHECK(thread_checker_.CalledOnValidThread());
scoped_refptr<MultiplexRouter> protector(this);
@@ -514,9 +522,9 @@ bool MultiplexRouter::Accept(Message* message) {
ProcessTasks(client_call_behavior, connector_.task_runner());
}
- // Always return true. If we see errors during message processing, we will
+ // Always succeed. If we see errors during message processing, we will
// explicitly call Connector::RaiseError() to disconnect the message pipe.
- return true;
+ return Result::ForSuccess();
}
bool MultiplexRouter::OnPeerAssociatedEndpointClosed(InterfaceId id) {
@@ -706,8 +714,9 @@ bool MultiplexRouter::ProcessIncomingMessage(
}
if (PipeControlMessageHandler::IsPipeControlMessage(message)) {
- if (!control_message_handler_.Accept(message))
- RaiseErrorInNonTestingMode();
+ Result result = control_message_handler_.Accept(message);
+ if (!result.Succeeded())
+ RaiseErrorInNonTestingMode(std::move(result));
return true;
}
@@ -763,7 +772,7 @@ bool MultiplexRouter::ProcessIncomingMessage(
DCHECK(endpoint->task_runner()->BelongsToCurrentThread());
InterfaceEndpointClient* client = endpoint->client();
- bool result = false;
+ Result result(Result::Type::UNKNOWN_ERROR);
{
// We must unlock before calling into |client| because it may call this
// object within HandleIncomingMessage(). Holding the lock will lead to
@@ -774,8 +783,8 @@ bool MultiplexRouter::ProcessIncomingMessage(
base::AutoUnlock unlocker(lock_);
result = client->HandleIncomingMessage(message);
}
- if (!result)
- RaiseErrorInNonTestingMode();
+ if (!result.Succeeded())
+ RaiseErrorInNonTestingMode(std::move(result));
return true;
}
@@ -820,10 +829,10 @@ void MultiplexRouter::UpdateEndpointStateMayRemove(
endpoints_.erase(endpoint->id());
}
-void MultiplexRouter::RaiseErrorInNonTestingMode() {
+void MultiplexRouter::RaiseErrorInNonTestingMode(Result error) {
lock_.AssertAcquired();
if (!testing_mode_)
- RaiseError();
+ RaiseError(std::move(error));
}
MultiplexRouter::InterfaceEndpoint* MultiplexRouter::FindOrInsertEndpoint(

Powered by Google App Engine
This is Rietveld 408576698