Chromium Code Reviews| 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 #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" | 5 #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "mojo/public/cpp/bindings/associated_group_controller.h" | 8 #include "mojo/public/cpp/bindings/associated_group_controller.h" |
| 9 | 9 |
| 10 namespace mojo { | 10 namespace mojo { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 | 25 |
| 26 ScopedInterfaceEndpointHandle& ScopedInterfaceEndpointHandle::operator=( | 26 ScopedInterfaceEndpointHandle& ScopedInterfaceEndpointHandle::operator=( |
| 27 ScopedInterfaceEndpointHandle&& other) { | 27 ScopedInterfaceEndpointHandle&& other) { |
| 28 reset(); | 28 reset(); |
| 29 swap(other); | 29 swap(other); |
| 30 | 30 |
| 31 return *this; | 31 return *this; |
| 32 } | 32 } |
| 33 | 33 |
| 34 void ScopedInterfaceEndpointHandle::reset() { | 34 void ScopedInterfaceEndpointHandle::reset() { |
| 35 if (!IsValidInterfaceId(id_)) | 35 ResetInternal(base::nullopt); |
| 36 return; | 36 } |
| 37 | 37 |
| 38 group_controller_->CloseEndpointHandle(id_, is_local_); | 38 void ScopedInterfaceEndpointHandle::ResetWithReason( |
| 39 | 39 uint32_t custom_reason, |
| 40 id_ = kInvalidInterfaceId; | 40 const std::string& description) { |
| 41 is_local_ = true; | 41 base::Optional<DisconnectReason> reason; |
| 42 group_controller_ = nullptr; | 42 reason.emplace(custom_reason, description); |
| 43 ResetInternal(reason); | |
|
dcheng
2017/01/23 23:20:22
FWIW, here and a couple other places
ResetInterna
yzshen1
2017/01/23 23:30:09
I think the original code doesn't copy either. Hav
dcheng
2017/01/24 03:39:21
Ah, you're right: my comment is only true if |reas
| |
| 43 } | 44 } |
| 44 | 45 |
| 45 void ScopedInterfaceEndpointHandle::swap(ScopedInterfaceEndpointHandle& other) { | 46 void ScopedInterfaceEndpointHandle::swap(ScopedInterfaceEndpointHandle& other) { |
| 46 using std::swap; | 47 using std::swap; |
| 47 swap(other.id_, id_); | 48 swap(other.id_, id_); |
| 48 swap(other.is_local_, is_local_); | 49 swap(other.is_local_, is_local_); |
| 49 swap(other.group_controller_, group_controller_); | 50 swap(other.group_controller_, group_controller_); |
| 50 } | 51 } |
| 51 | 52 |
| 52 InterfaceId ScopedInterfaceEndpointHandle::release() { | 53 InterfaceId ScopedInterfaceEndpointHandle::release() { |
| 53 InterfaceId result = id_; | 54 InterfaceId result = id_; |
| 54 | 55 |
| 55 id_ = kInvalidInterfaceId; | 56 id_ = kInvalidInterfaceId; |
| 56 is_local_ = true; | 57 is_local_ = true; |
| 57 group_controller_ = nullptr; | 58 group_controller_ = nullptr; |
| 58 | 59 |
| 59 return result; | 60 return result; |
| 60 } | 61 } |
| 61 | 62 |
| 62 ScopedInterfaceEndpointHandle::ScopedInterfaceEndpointHandle( | 63 ScopedInterfaceEndpointHandle::ScopedInterfaceEndpointHandle( |
| 63 InterfaceId id, | 64 InterfaceId id, |
| 64 bool is_local, | 65 bool is_local, |
| 65 scoped_refptr<AssociatedGroupController> group_controller) | 66 scoped_refptr<AssociatedGroupController> group_controller) |
| 66 : id_(id), | 67 : id_(id), |
| 67 is_local_(is_local), | 68 is_local_(is_local), |
| 68 group_controller_(std::move(group_controller)) { | 69 group_controller_(std::move(group_controller)) { |
| 69 DCHECK(!IsValidInterfaceId(id) || group_controller_); | 70 DCHECK(!IsValidInterfaceId(id) || group_controller_); |
| 70 } | 71 } |
| 71 | 72 |
| 73 void ScopedInterfaceEndpointHandle::ResetInternal( | |
| 74 const base::Optional<DisconnectReason>& reason) { | |
| 75 if (!IsValidInterfaceId(id_)) | |
| 76 return; | |
| 77 | |
| 78 group_controller_->CloseEndpointHandle(id_, is_local_, reason); | |
| 79 | |
| 80 id_ = kInvalidInterfaceId; | |
| 81 is_local_ = true; | |
| 82 group_controller_ = nullptr; | |
| 83 } | |
| 84 | |
| 72 } // namespace mojo | 85 } // namespace mojo |
| OLD | NEW |