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

Side by Side Diff: mojo/public/cpp/bindings/associated_interface_ptr.h

Issue 1524693002: [mojo] Add GenericInterface_ to interface class variants (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bindings-2-typemaps
Patch Set: merge Created 5 years 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 unified diff | Download patch
« no previous file with comments | « mojo/public/cpp/bindings/associated_group.h ('k') | mojo/public/cpp/bindings/binding.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "mojo/public/cpp/bindings/associated_group.h" 10 #include "mojo/public/cpp/bindings/associated_group.h"
11 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" 11 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
12 #include "mojo/public/cpp/bindings/associated_interface_request.h" 12 #include "mojo/public/cpp/bindings/associated_interface_request.h"
13 #include "mojo/public/cpp/bindings/callback.h" 13 #include "mojo/public/cpp/bindings/callback.h"
14 #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h" 14 #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h"
15 15
16 namespace mojo { 16 namespace mojo {
17 17
18 // Represents the client side of an associated interface. It is similar to 18 // Represents the client side of an associated interface. It is similar to
19 // InterfacePtr, except that it doesn't own a message pipe handle. 19 // InterfacePtr, except that it doesn't own a message pipe handle.
20 template <typename Interface> 20 template <typename Interface>
21 class AssociatedInterfacePtr { 21 class AssociatedInterfacePtr {
22 DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND(AssociatedInterfacePtr) 22 DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND(AssociatedInterfacePtr)
23 23
24 public: 24 public:
25 using GenericInterface = typename Interface::GenericInterface;
26
25 // Constructs an unbound AssociatedInterfacePtr. 27 // Constructs an unbound AssociatedInterfacePtr.
26 AssociatedInterfacePtr() {} 28 AssociatedInterfacePtr() {}
27 AssociatedInterfacePtr(decltype(nullptr)) {} 29 AssociatedInterfacePtr(decltype(nullptr)) {}
28 30
29 AssociatedInterfacePtr(AssociatedInterfacePtr&& other) { 31 AssociatedInterfacePtr(AssociatedInterfacePtr&& other) {
30 internal_state_.Swap(&other.internal_state_); 32 internal_state_.Swap(&other.internal_state_);
31 } 33 }
32 34
33 AssociatedInterfacePtr& operator=(AssociatedInterfacePtr&& other) { 35 AssociatedInterfacePtr& operator=(AssociatedInterfacePtr&& other) {
34 reset(); 36 reset();
(...skipping 10 matching lines...) Expand all
45 47
46 ~AssociatedInterfacePtr() {} 48 ~AssociatedInterfacePtr() {}
47 49
48 // Sets up this object as the client side of an associated interface. 50 // Sets up this object as the client side of an associated interface.
49 // Calling with an invalid |info| has the same effect as reset(). In this 51 // Calling with an invalid |info| has the same effect as reset(). In this
50 // case, the AssociatedInterfacePtr is not considered as bound. 52 // case, the AssociatedInterfacePtr is not considered as bound.
51 // 53 //
52 // NOTE: Please see the comments of 54 // NOTE: Please see the comments of
53 // AssociatedGroup.CreateAssociatedInterface() about when you can use this 55 // AssociatedGroup.CreateAssociatedInterface() about when you can use this
54 // object to make calls. 56 // object to make calls.
55 void Bind(AssociatedInterfacePtrInfo<Interface> info) { 57 void Bind(AssociatedInterfacePtrInfo<GenericInterface> info) {
56 reset(); 58 reset();
57 59
58 bool is_local = 60 bool is_local =
59 internal::AssociatedInterfacePtrInfoHelper::GetHandle(&info).is_local(); 61 internal::AssociatedInterfacePtrInfoHelper::GetHandle(&info).is_local();
60 62
61 DCHECK(is_local) << "The AssociatedInterfacePtrInfo is supposed to be used " 63 DCHECK(is_local) << "The AssociatedInterfacePtrInfo is supposed to be used "
62 "at the other side of the message pipe."; 64 "at the other side of the message pipe.";
63 65
64 if (info.is_valid() && is_local) 66 if (info.is_valid() && is_local)
65 internal_state_.Bind(info.Pass()); 67 internal_state_.Bind(info.Pass());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 internal_state_.set_connection_error_handler(error_handler); 115 internal_state_.set_connection_error_handler(error_handler);
114 } 116 }
115 117
116 // Unbinds and returns the associated interface pointer information which 118 // Unbinds and returns the associated interface pointer information which
117 // could be used to setup an AssociatedInterfacePtr again. This method may be 119 // could be used to setup an AssociatedInterfacePtr again. This method may be
118 // used to move the proxy to a different thread. 120 // used to move the proxy to a different thread.
119 // 121 //
120 // It is an error to call PassInterface() while there are pending responses. 122 // It is an error to call PassInterface() while there are pending responses.
121 // TODO: fix this restriction, it's not always obvious when there is a 123 // TODO: fix this restriction, it's not always obvious when there is a
122 // pending response. 124 // pending response.
123 AssociatedInterfacePtrInfo<Interface> PassInterface() { 125 AssociatedInterfacePtrInfo<GenericInterface> PassInterface() {
124 DCHECK(!internal_state_.has_pending_callbacks()); 126 DCHECK(!internal_state_.has_pending_callbacks());
125 State state; 127 State state;
126 internal_state_.Swap(&state); 128 internal_state_.Swap(&state);
127 129
128 return state.PassInterface(); 130 return state.PassInterface();
129 } 131 }
130 132
131 // Returns the associated group that this object belongs to. Returns null if 133 // Returns the associated group that this object belongs to. Returns null if
132 // the object is not bound. 134 // the object is not bound.
133 AssociatedGroup* associated_group() { 135 AssociatedGroup* associated_group() {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // Creates an associated interface. The output |ptr| should be used locally 168 // Creates an associated interface. The output |ptr| should be used locally
167 // while the returned request should be passed through the message pipe endpoint 169 // while the returned request should be passed through the message pipe endpoint
168 // referred to by |associated_group| to setup the corresponding asssociated 170 // referred to by |associated_group| to setup the corresponding asssociated
169 // interface implementation at the remote side. 171 // interface implementation at the remote side.
170 // 172 //
171 // NOTE: |ptr| should NOT be used to make calls before the request is sent. 173 // NOTE: |ptr| should NOT be used to make calls before the request is sent.
172 // Violating that will cause the message pipe to be closed. On the other hand, 174 // Violating that will cause the message pipe to be closed. On the other hand,
173 // as soon as the request is sent, |ptr| is usable. There is no need to wait 175 // as soon as the request is sent, |ptr| is usable. There is no need to wait
174 // until the request is bound to an implementation at the remote side. 176 // until the request is bound to an implementation at the remote side.
175 template <typename Interface> 177 template <typename Interface>
176 AssociatedInterfaceRequest<Interface> GetProxy( 178 AssociatedInterfaceRequest<typename Interface::GenericInterface> GetProxy(
177 AssociatedInterfacePtr<Interface>* ptr, 179 AssociatedInterfacePtr<Interface>* ptr,
178 AssociatedGroup* group) { 180 AssociatedGroup* group) {
179 AssociatedInterfaceRequest<Interface> request; 181 AssociatedInterfaceRequest<typename Interface::GenericInterface> request;
180 AssociatedInterfacePtrInfo<Interface> ptr_info; 182 AssociatedInterfacePtrInfo<typename Interface::GenericInterface> ptr_info;
181 group->CreateAssociatedInterface(AssociatedGroup::WILL_PASS_REQUEST, 183 group->CreateAssociatedInterface(AssociatedGroup::WILL_PASS_REQUEST,
182 &ptr_info, &request); 184 &ptr_info, &request);
183 185
184 ptr->Bind(ptr_info.Pass()); 186 ptr->Bind(ptr_info.Pass());
185 return request.Pass(); 187 return request.Pass();
186 } 188 }
187 189
188 } // namespace mojo 190 } // namespace mojo
189 191
190 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ 192 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/associated_group.h ('k') | mojo/public/cpp/bindings/binding.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698