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

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

Issue 2280483002: Add FlushForTesting to InterfacePtr and Binding. (Closed)
Patch Set: Created 4 years, 4 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/interface_endpoint_client.cc
diff --git a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
index a79316c0b8232f38c94048461c5276504849070d..8875e02a072f0d5fd9e08225f111ff22aee4d4d5 100644
--- a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
+++ b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
@@ -17,6 +17,7 @@
#include "mojo/public/cpp/bindings/associated_group.h"
#include "mojo/public/cpp/bindings/associated_group_controller.h"
#include "mojo/public/cpp/bindings/interface_endpoint_controller.h"
+#include "mojo/public/cpp/bindings/lib/validation_util.h"
#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
namespace mojo {
@@ -134,7 +135,8 @@ InterfaceEndpointClient::InterfaceEndpointClient(
MessageReceiverWithResponderStatus* receiver,
std::unique_ptr<MessageReceiver> payload_validator,
bool expect_sync_requests,
- scoped_refptr<base::SingleThreadTaskRunner> runner)
+ scoped_refptr<base::SingleThreadTaskRunner> runner,
+ uint32_t interface_version)
: handle_(std::move(handle)),
incoming_receiver_(receiver),
thunk_(this),
@@ -142,6 +144,8 @@ InterfaceEndpointClient::InterfaceEndpointClient(
next_request_id_(1),
encountered_error_(false),
task_runner_(std::move(runner)),
+ control_message_proxy_(this),
+ control_message_handler_(interface_version),
weak_ptr_factory_(this) {
DCHECK(handle_.is_valid());
DCHECK(handle_.is_local());
@@ -149,6 +153,7 @@ InterfaceEndpointClient::InterfaceEndpointClient(
// TODO(yzshen): the way to use validator (or message filter in general)
// directly is a little awkward.
filters_.Append(std::move(payload_validator));
+ filters_.Append(base::MakeUnique<internal::ControlMessageValidator>());
yzshen1 2016/08/29 23:24:58 I took a different approach for pipe-control messa
Sam McNally 2016/08/30 03:05:51 Done.
controller_ = handle_.group_controller()->AttachEndpointClient(
handle_, this, task_runner_);
@@ -275,6 +280,8 @@ void InterfaceEndpointClient::NotifyError() {
// longer.
async_responders_.clear();
+ control_message_proxy_.OnConnectionError();
+
if (!error_handler_.is_null())
error_handler_.Run();
}
@@ -284,12 +291,19 @@ bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) {
DCHECK(!encountered_error_);
if (message->has_flag(Message::kFlagExpectsResponse)) {
- if (!incoming_receiver_)
+ if (!incoming_receiver_ &&
yzshen1 2016/08/29 23:24:58 nit: maybe we could remove this check and let it c
Sam McNally 2016/08/30 03:05:51 Done. This should never happen because validation
+ !mojo::internal::ControlMessageHandler::IsControlMessage(message)) {
return false;
+ }
MessageReceiverWithStatus* responder =
new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_);
- bool ok = incoming_receiver_->AcceptWithResponder(message, responder);
+ bool ok = false;
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) {
+ ok = control_message_handler_.AcceptWithResponder(message, responder);
+ } else {
+ ok = incoming_receiver_->AcceptWithResponder(message, responder);
+ }
if (!ok)
delete responder;
return ok;
@@ -312,6 +326,9 @@ bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) {
async_responders_.erase(it);
return responder->Accept(message);
} else {
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
+ return control_message_handler_.Accept(message);
+
if (!incoming_receiver_)
return false;

Powered by Google App Engine
This is Rietveld 408576698