Index: mojo/public/cpp/bindings/lib/control_message_proxy.cc |
diff --git a/mojo/public/cpp/bindings/lib/control_message_proxy.cc b/mojo/public/cpp/bindings/lib/control_message_proxy.cc |
index 06d9815bc08ba8a6fcfb4741579d60b9a8cd81c8..79da7d8971b34bea6bdd80d425975984f51a154b 100644 |
--- a/mojo/public/cpp/bindings/lib/control_message_proxy.cc |
+++ b/mojo/public/cpp/bindings/lib/control_message_proxy.cc |
@@ -10,6 +10,7 @@ |
#include "base/bind.h" |
#include "base/macros.h" |
+#include "base/run_loop.h" |
#include "mojo/public/cpp/bindings/lib/message_builder.h" |
#include "mojo/public/cpp/bindings/lib/serialization.h" |
#include "mojo/public/cpp/bindings/message.h" |
@@ -95,12 +96,19 @@ void RunVersionCallback( |
callback.Run(version); |
} |
+void RunClosure(const base::Closure& callback, |
+ interface_control::RunResponseMessageParamsPtr run_response) { |
+ callback.Run(); |
+} |
+ |
} // namespace |
ControlMessageProxy::ControlMessageProxy(MessageReceiverWithResponder* receiver) |
: receiver_(receiver) { |
} |
+ControlMessageProxy::~ControlMessageProxy() = default; |
+ |
void ControlMessageProxy::QueryVersion( |
const base::Callback<void(uint32_t)>& callback) { |
auto input_ptr = interface_control::RunInput::New(); |
@@ -117,5 +125,30 @@ void ControlMessageProxy::RequireVersion(uint32_t version) { |
SendRunOrClosePipeMessage(receiver_, std::move(input_ptr), &context_); |
} |
+void ControlMessageProxy::FlushForTesting() { |
+ auto input_ptr = interface_control::RunInput::New(); |
+ input_ptr->set_flush_for_testing(interface_control::FlushForTesting::New()); |
+ base::RunLoop run_loop; |
+ run_loop_quit_closure_ = run_loop.QuitClosure(); |
+ SendRunMessage( |
+ receiver_, std::move(input_ptr), |
+ base::Bind(&RunClosure, |
+ base::Bind(&ControlMessageProxy::RunFlushForTestingClosure, |
+ base::Unretained(this))), |
+ &context_); |
+ run_loop.Run(); |
+} |
+ |
+void ControlMessageProxy::RunFlushForTestingClosure() { |
+ DCHECK(!run_loop_quit_closure_.is_null()); |
+ run_loop_quit_closure_.Run(); |
+ run_loop_quit_closure_.Reset(); |
+} |
+ |
+void ControlMessageProxy::OnConnectionError() { |
+ if (!run_loop_quit_closure_.is_null()) |
+ RunFlushForTestingClosure(); |
+} |
+ |
} // namespace internal |
} // namespace mojo |