Index: mojo/public/cpp/bindings/interface_request.h |
diff --git a/mojo/public/cpp/bindings/interface_request.h b/mojo/public/cpp/bindings/interface_request.h |
index fc23aec3ee73be187dabf450972a4a8906cf3626..5d75dd3e610deddefff8f773d348b4094eb76f09 100644 |
--- a/mojo/public/cpp/bindings/interface_request.h |
+++ b/mojo/public/cpp/bindings/interface_request.h |
@@ -5,12 +5,15 @@ |
#ifndef MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_REQUEST_H_ |
#define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_REQUEST_H_ |
+#include <string> |
#include <utility> |
#include "base/macros.h" |
#include "base/single_thread_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "mojo/public/cpp/bindings/interface_ptr.h" |
+#include "mojo/public/cpp/bindings/lib/control_message_proxy.h" |
+#include "mojo/public/cpp/system/message_pipe.h" |
namespace mojo { |
@@ -64,6 +67,20 @@ class InterfaceRequest { |
return !is_pending() && !other.is_pending(); |
} |
+ void ResetWithReason(uint32_t custom_reason, const std::string& description) { |
+ if (!handle_.is_valid()) |
+ return; |
+ |
+ Message message = |
+ internal::ControlMessageProxy::ConstructDisconnectReasonMessage( |
+ custom_reason, description); |
+ MojoResult result = WriteMessageNew( |
+ handle_.get(), message.TakeMojoMessage(), MOJO_WRITE_MESSAGE_FLAG_NONE); |
+ DCHECK_EQ(MOJO_RESULT_OK, result); |
+ |
+ handle_.reset(); |
+ } |
+ |
private: |
ScopedMessagePipeHandle handle_; |