1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h"
6
7 #include "mojo/public/cpp/bindings/lib/task_runner_helper.h"
8
9 namespace mojo {
10 namespace internal {
11
12 AssociatedInterfacePtrStateBase::AssociatedInterfacePtrStateBase() = default;
13
14 AssociatedInterfacePtrStateBase::~AssociatedInterfacePtrStateBase() = default;
15
QueryVersion(const base::Callback<void (uint32_t)> & callback)16 void AssociatedInterfacePtrStateBase::QueryVersion(
17 const base::Callback<void(uint32_t)>& callback) {
18 // It is safe to capture |this| because the callback won't be run after this
19 // object goes away.
20 endpoint_client_->QueryVersion(
21 base::Bind(&AssociatedInterfacePtrStateBase::OnQueryVersion,
22 base::Unretained(this), callback));
23 }
24
RequireVersion(uint32_t version)25 void AssociatedInterfacePtrStateBase::RequireVersion(uint32_t version) {
26 if (version <= version_)
27 return;
28
29 version_ = version;
30 endpoint_client_->RequireVersion(version);
31 }
32
OnQueryVersion(const base::Callback<void (uint32_t)> & callback,uint32_t version)33 void AssociatedInterfacePtrStateBase::OnQueryVersion(
34 const base::Callback<void(uint32_t)>& callback,
35 uint32_t version) {
36 version_ = version;
37 callback.Run(version);
38 }
39
FlushForTesting()40 void AssociatedInterfacePtrStateBase::FlushForTesting() {
41 endpoint_client_->FlushForTesting();
42 }
43
CloseWithReason(uint32_t custom_reason,const std::string & description)44 void AssociatedInterfacePtrStateBase::CloseWithReason(
45 uint32_t custom_reason,
46 const std::string& description) {
47 endpoint_client_->CloseWithReason(custom_reason, description);
48 }
49
Swap(AssociatedInterfacePtrStateBase * other)50 void AssociatedInterfacePtrStateBase::Swap(
51 AssociatedInterfacePtrStateBase* other) {
52 using std::swap;
53 swap(other->endpoint_client_, endpoint_client_);
54 swap(other->version_, version_);
55 }
56
Bind(ScopedInterfaceEndpointHandle handle,uint32_t version,std::unique_ptr<MessageReceiver> validator,scoped_refptr<base::SequencedTaskRunner> runner)57 void AssociatedInterfacePtrStateBase::Bind(
58 ScopedInterfaceEndpointHandle handle,
59 uint32_t version,
60 std::unique_ptr<MessageReceiver> validator,
61 scoped_refptr<base::SequencedTaskRunner> runner) {
62 DCHECK(!endpoint_client_);
63 DCHECK_EQ(0u, version_);
64 DCHECK(handle.is_valid());
65
66 version_ = version;
67 // The version is only queried from the client so the value passed here
68 // will not be used.
69 endpoint_client_ = std::make_unique<InterfaceEndpointClient>(
70 std::move(handle), nullptr, std::move(validator), false,
71 GetTaskRunnerToUseFromUserProvidedTaskRunner(std::move(runner)), 0u);
72 }
73
PassHandle()74 ScopedInterfaceEndpointHandle AssociatedInterfacePtrStateBase::PassHandle() {
75 auto handle = endpoint_client_->PassHandle();
76 endpoint_client_.reset();
77 return handle;
78 }
79
80 } // namespace internal
81 } // namespace mojo
82