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

Unified Diff: third_party/mojo/src/mojo/public/cpp/bindings/lib/interface_ptr_internal.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/lib/interface_ptr_internal.h
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/lib/interface_ptr_internal.h b/third_party/mojo/src/mojo/public/cpp/bindings/lib/interface_ptr_internal.h
index 3618a26aa320e927673797f3c842c0151dc5f4fb..a3ed7940787b551697b3df46a733d7356200d166 100644
--- a/third_party/mojo/src/mojo/public/cpp/bindings/lib/interface_ptr_internal.h
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/lib/interface_ptr_internal.h
@@ -7,6 +7,7 @@
#include <algorithm> // For |std::swap()|.
+#include "mojo/public/cpp/bindings/interface_ptr_info.h"
#include "mojo/public/cpp/bindings/lib/filter_chain.h"
#include "mojo/public/cpp/bindings/lib/message_header_validator.h"
#include "mojo/public/cpp/bindings/lib/router.h"
@@ -20,7 +21,8 @@ namespace internal {
template <typename Interface>
class InterfacePtrState {
public:
- InterfacePtrState() : proxy_(nullptr), router_(nullptr), waiter_(nullptr) {}
+ InterfacePtrState()
+ : proxy_(nullptr), router_(nullptr), waiter_(nullptr), version_(0u) {}
~InterfacePtrState() {
// Destruction order matters here. We delete |proxy_| first, even though
@@ -37,21 +39,28 @@ class InterfacePtrState {
return proxy_;
}
+ uint32_t version() const { return version_; }
+
void Swap(InterfacePtrState* other) {
- std::swap(other->proxy_, proxy_);
- std::swap(other->router_, router_);
+ using std::swap;
+ swap(other->proxy_, proxy_);
+ swap(other->router_, router_);
handle_.swap(other->handle_);
- std::swap(other->waiter_, waiter_);
+ swap(other->waiter_, waiter_);
+ swap(other->version_, version_);
}
- void Bind(ScopedMessagePipeHandle handle, const MojoAsyncWaiter* waiter) {
+ void Bind(InterfacePtrInfo<Interface> info, const MojoAsyncWaiter* waiter) {
MOJO_DCHECK(!proxy_);
MOJO_DCHECK(!router_);
MOJO_DCHECK(!handle_.is_valid());
MOJO_DCHECK(!waiter_);
+ MOJO_DCHECK(version_ == 0u);
+ MOJO_DCHECK(info.is_valid());
- handle_ = handle.Pass();
+ handle_ = info.PassHandle();
waiter_ = waiter;
+ version_ = info.version();
}
bool WaitForIncomingMethodCall() {
@@ -61,12 +70,11 @@ class InterfacePtrState {
return router_->WaitForIncomingMessage();
}
- ScopedMessagePipeHandle PassMessagePipe() {
- if (router_)
- return router_->PassMessagePipe();
-
- waiter_ = nullptr;
- return handle_.Pass();
+ // After this method is called, the object is in an invalid state and
+ // shouldn't be reused.
+ InterfacePtrInfo<Interface> PassInterface() {
+ return InterfacePtrInfo<Interface>(
+ router_ ? router_->PassMessagePipe() : handle_.Pass(), version_);
}
bool is_bound() const { return handle_.is_valid() || router_; }
@@ -116,11 +124,13 @@ class InterfacePtrState {
Router* router_;
// |proxy_| and |router_| are not initialized until read/write with the
- // message pipe handle is needed. Before that, |handle_| and |waiter_| store
- // the arguments of Bind().
+ // message pipe handle is needed. |handle_| and |waiter_| are valid between
+ // the Bind() call and the initialization of |proxy_| and |router_|.
ScopedMessagePipeHandle handle_;
const MojoAsyncWaiter* waiter_;
+ uint32_t version_;
+
MOJO_DISALLOW_COPY_AND_ASSIGN(InterfacePtrState);
};

Powered by Google App Engine
This is Rietveld 408576698