| OLD | NEW |
| 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_BINDING_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_BINDING_H_ |
| 6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_BINDING_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_BINDING_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 public: | 100 public: |
| 101 using ImplPointerType = typename ImplRefTraits::PointerType; | 101 using ImplPointerType = typename ImplRefTraits::PointerType; |
| 102 | 102 |
| 103 // Constructs an incomplete associated binding that will use the | 103 // Constructs an incomplete associated binding that will use the |
| 104 // implementation |impl|. It may be completed with a subsequent call to the | 104 // implementation |impl|. It may be completed with a subsequent call to the |
| 105 // |Bind| method. Does not take ownership of |impl|, which must outlive this | 105 // |Bind| method. Does not take ownership of |impl|, which must outlive this |
| 106 // object. | 106 // object. |
| 107 explicit AssociatedBinding(ImplPointerType impl) { stub_.set_sink(impl); } | 107 explicit AssociatedBinding(ImplPointerType impl) { stub_.set_sink(impl); } |
| 108 | 108 |
| 109 // Constructs a completed associated binding of |impl|. The output |ptr_info| | 109 // Constructs a completed associated binding of |impl|. The output |ptr_info| |
| 110 // should be passed through the message pipe endpoint referred to by | 110 // should be sent by another interface. |impl| must outlive this object. |
| 111 // |associated_group| to setup the corresponding asssociated interface | |
| 112 // pointer. |impl| must outlive this object. | |
| 113 AssociatedBinding(ImplPointerType impl, | 111 AssociatedBinding(ImplPointerType impl, |
| 114 AssociatedInterfacePtrInfo<Interface>* ptr_info, | 112 AssociatedInterfacePtrInfo<Interface>* ptr_info, |
| 115 AssociatedGroup* associated_group, | 113 AssociatedGroup* associated_group = nullptr, |
| 116 scoped_refptr<base::SingleThreadTaskRunner> runner = | 114 scoped_refptr<base::SingleThreadTaskRunner> runner = |
| 117 base::ThreadTaskRunnerHandle::Get()) | 115 base::ThreadTaskRunnerHandle::Get()) |
| 118 : AssociatedBinding(std::move(impl)) { | 116 : AssociatedBinding(std::move(impl)) { |
| 119 Bind(ptr_info, associated_group, std::move(runner)); | 117 Bind(ptr_info, associated_group, std::move(runner)); |
| 120 } | 118 } |
| 121 | 119 |
| 122 // Constructs a completed associated binding of |impl|. |impl| must outlive | 120 // Constructs a completed associated binding of |impl|. |impl| must outlive |
| 123 // the binding. | 121 // the binding. |
| 124 AssociatedBinding(ImplPointerType impl, | 122 AssociatedBinding(ImplPointerType impl, |
| 125 AssociatedInterfaceRequest<Interface> request, | 123 AssociatedInterfaceRequest<Interface> request, |
| 126 scoped_refptr<base::SingleThreadTaskRunner> runner = | 124 scoped_refptr<base::SingleThreadTaskRunner> runner = |
| 127 base::ThreadTaskRunnerHandle::Get()) | 125 base::ThreadTaskRunnerHandle::Get()) |
| 128 : AssociatedBinding(std::move(impl)) { | 126 : AssociatedBinding(std::move(impl)) { |
| 129 Bind(std::move(request), std::move(runner)); | 127 Bind(std::move(request), std::move(runner)); |
| 130 } | 128 } |
| 131 | 129 |
| 132 ~AssociatedBinding() {} | 130 ~AssociatedBinding() {} |
| 133 | 131 |
| 134 // Creates an associated inteface and sets up this object as the | 132 // Creates an associated inteface and sets up this object as the |
| 135 // implementation side. The output |ptr_info| should be passed through the | 133 // implementation side. The output |ptr_info| should be sent by another |
| 136 // message pipe endpoint referred to by |associated_group| to setup the | 134 // interface. |
| 137 // corresponding asssociated interface pointer. | |
| 138 void Bind(AssociatedInterfacePtrInfo<Interface>* ptr_info, | 135 void Bind(AssociatedInterfacePtrInfo<Interface>* ptr_info, |
| 139 AssociatedGroup* associated_group, | 136 AssociatedGroup* associated_group = nullptr, |
| 140 scoped_refptr<base::SingleThreadTaskRunner> runner = | 137 scoped_refptr<base::SingleThreadTaskRunner> runner = |
| 141 base::ThreadTaskRunnerHandle::Get()) { | 138 base::ThreadTaskRunnerHandle::Get()) { |
| 142 AssociatedInterfaceRequest<Interface> request; | 139 auto request = MakeRequest(ptr_info); |
| 143 associated_group->CreateAssociatedInterface(AssociatedGroup::WILL_PASS_PTR, | 140 ptr_info->set_version(Interface::Version_); |
| 144 ptr_info, &request); | |
| 145 Bind(std::move(request), std::move(runner)); | 141 Bind(std::move(request), std::move(runner)); |
| 146 } | 142 } |
| 147 | 143 |
| 148 // Sets up this object as the implementation side of an associated interface. | 144 // Sets up this object as the implementation side of an associated interface. |
| 149 void Bind(AssociatedInterfaceRequest<Interface> request, | 145 void Bind(AssociatedInterfaceRequest<Interface> request, |
| 150 scoped_refptr<base::SingleThreadTaskRunner> runner = | 146 scoped_refptr<base::SingleThreadTaskRunner> runner = |
| 151 base::ThreadTaskRunnerHandle::Get()) { | 147 base::ThreadTaskRunnerHandle::Get()) { |
| 152 BindImpl(request.PassHandle(), &stub_, | 148 BindImpl(request.PassHandle(), &stub_, |
| 153 base::WrapUnique(new typename Interface::RequestValidator_()), | 149 base::WrapUnique(new typename Interface::RequestValidator_()), |
| 154 Interface::HasSyncMethods_, std::move(runner), | 150 Interface::HasSyncMethods_, std::move(runner), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 174 | 170 |
| 175 private: | 171 private: |
| 176 typename Interface::template Stub_<ImplRefTraits> stub_; | 172 typename Interface::template Stub_<ImplRefTraits> stub_; |
| 177 | 173 |
| 178 DISALLOW_COPY_AND_ASSIGN(AssociatedBinding); | 174 DISALLOW_COPY_AND_ASSIGN(AssociatedBinding); |
| 179 }; | 175 }; |
| 180 | 176 |
| 181 } // namespace mojo | 177 } // namespace mojo |
| 182 | 178 |
| 183 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_BINDING_H_ | 179 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_BINDING_H_ |
| OLD | NEW |