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

Unified Diff: third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h

Issue 975973002: Update mojo sdk to rev f68e697e389943cd9bf9652397312280e96b127a (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: shake fist at msvc Created 5 years, 10 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: third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h b/third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h
index 8b5e0b4a91dd90528d36f7321f4b01b9645b43e1..00f1ccea2b9a91e5239565deee536b575a1a3b25 100644
--- a/third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h
@@ -8,6 +8,7 @@
#include <algorithm>
#include "mojo/public/cpp/bindings/error_handler.h"
+#include "mojo/public/cpp/bindings/interface_ptr_info.h"
#include "mojo/public/cpp/bindings/lib/interface_ptr_internal.h"
#include "mojo/public/cpp/environment/environment.h"
#include "mojo/public/cpp/system/macros.h"
@@ -56,15 +57,30 @@ class InterfacePtr {
// Closes the bound message pipe (if any) on destruction.
~InterfacePtr() {}
- // Binds the InterfacePtr to a message pipe that is connected to a remote
- // implementation of Interface. The |waiter| is used for receiving
- // notifications when there is data to read from the message pipe. For most
- // callers, the default |waiter| will be sufficient.
+ // Binds the InterfacePtr to a remote implementation of Interface. The
+ // |waiter| is used for receiving notifications when there is data to read
+ // from the message pipe. For most callers, the default |waiter| will be
+ // sufficient.
+ //
+ // Calling with an invalid |info| (containing an invalid message pipe handle)
+ // has the same effect as reset(). In this case, the InterfacePtr is not
+ // considered as bound.
void Bind(
- ScopedMessagePipeHandle handle,
+ InterfacePtrInfo<Interface> info,
const MojoAsyncWaiter* waiter = Environment::GetDefaultAsyncWaiter()) {
reset();
- internal_state_.Bind(handle.Pass(), waiter);
+ if (info.is_valid())
+ internal_state_.Bind(info.Pass(), waiter);
+ }
+
+ // Similar to the previous method, but takes a message pipe handle as input.
+ //
+ // TODO(yzshen): Remove this method and change call sites to use the other
+ // Bind().
+ void Bind(
+ ScopedMessagePipeHandle handle,
+ const MojoAsyncWaiter* waiter = Environment::GetDefaultAsyncWaiter()) {
+ Bind(InterfacePtrInfo<Interface>(handle.Pass(), 0u), waiter);
}
// Returns a raw pointer to the local proxy. Caller does not take ownership.
@@ -75,6 +91,9 @@ class InterfacePtr {
Interface* operator->() const { return get(); }
Interface& operator*() const { return *get(); }
+ // Returns the version number of the interface that the remote side supports.
+ uint32_t version() const { return internal_state_->version(); }
+
// Closes the bound message pipe (if any) and returns the pointer to the
// unbound state.
void reset() {
@@ -108,13 +127,23 @@ class InterfacePtr {
internal_state_.set_error_handler(error_handler);
}
- // Unbinds the InterfacePtr and return the previously bound message pipe (if
- // any). This method may be used to move the proxy to a different thread (see
- // class comments for details).
- ScopedMessagePipeHandle PassMessagePipe() {
+ // Unbinds the InterfacePtr and returns the information which could be used
+ // to setup an InterfacePtr again. This method may be used to move the proxy
+ // to a different thread (see class comments for details).
+ InterfacePtrInfo<Interface> PassInterface() {
State state;
internal_state_.Swap(&state);
- return state.PassMessagePipe();
+
+ return state.PassInterface();
+ }
+
+ // Similar to the previous method but returns the previously bound message
+ // pipe (if any).
+ //
+ // TODO(yzshen): Remove this method and change call sites to use
+ // PassInterface().
+ ScopedMessagePipeHandle PassMessagePipe() {
+ return PassInterface().PassHandle();
}
// DO NOT USE. Exposed only for internal use and for testing.
@@ -141,6 +170,9 @@ class InterfacePtr {
// If the specified message pipe handle is valid, returns an InterfacePtr bound
// to it. Otherwise, returns an unbound InterfacePtr. The specified |waiter|
// will be used as in the InterfacePtr::Bind() method.
+//
+// TODO(yzshen): Either remove it or change to use InterfacePtrInfo as the first
+// parameter.
template <typename Interface>
InterfacePtr<Interface> MakeProxy(
ScopedMessagePipeHandle handle,

Powered by Google App Engine
This is Rietveld 408576698