OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/common/media_router/discovery/media_sink_internal.h" | 5 #include "chrome/common/media_router/discovery/media_sink_internal.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 | 9 |
10 namespace media_router { | 10 namespace media_router { |
11 | 11 |
12 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, | 12 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, |
13 const DialSinkExtraData& dial_data) | 13 const DialSinkExtraData& dial_data) |
14 : sink_(sink), sink_type_(SinkType::DIAL) { | 14 : sink_(sink), sink_type_(SinkType::DIAL) { |
15 dial_data_.Init(dial_data); | 15 dial_data_.Init(dial_data); |
16 } | 16 } |
17 | 17 |
18 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, | 18 MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, |
19 const CastSinkExtraData& cast_data) | 19 const CastSinkExtraData& cast_data) |
20 : sink_(sink), sink_type_(SinkType::CAST) { | 20 : sink_(sink), sink_type_(SinkType::CAST) { |
21 cast_data_.Init(cast_data); | 21 cast_data_.Init(cast_data); |
22 } | 22 } |
23 | 23 |
24 MediaSinkInternal::MediaSinkInternal() : sink_type_(SinkType::GENERIC) {} | 24 MediaSinkInternal::MediaSinkInternal() : sink_type_(SinkType::GENERIC) {} |
25 | 25 |
26 MediaSinkInternal::MediaSinkInternal(const MediaSinkInternal& other) { | 26 MediaSinkInternal::MediaSinkInternal(const MediaSinkInternal& other) { |
27 InternalCopyConstructFrom(other); | 27 InternalCopyConstructFrom(other); |
28 } | 28 } |
29 | 29 |
| 30 MediaSinkInternal::MediaSinkInternal(MediaSinkInternal&& other) { |
| 31 InternalMoveConstructFrom(std::move(other)); |
| 32 } |
| 33 |
30 MediaSinkInternal::~MediaSinkInternal() { | 34 MediaSinkInternal::~MediaSinkInternal() { |
31 InternalCleanup(); | 35 InternalCleanup(); |
32 } | 36 } |
33 | 37 |
34 MediaSinkInternal& MediaSinkInternal::operator=( | 38 MediaSinkInternal& MediaSinkInternal::operator=( |
35 const MediaSinkInternal& other) { | 39 const MediaSinkInternal& other) { |
36 if (this != &other) { | 40 if (this != &other) { |
37 if (sink_type_ == other.sink_type_) { | 41 if (sink_type_ == other.sink_type_) { |
38 InternalCopyAssignFrom(other); | 42 InternalCopyAssignFrom(other); |
39 } else { | 43 } else { |
40 InternalCleanup(); | 44 InternalCleanup(); |
41 InternalCopyConstructFrom(other); | 45 InternalCopyConstructFrom(other); |
42 } | 46 } |
43 } | 47 } |
44 | 48 |
45 return *this; | 49 return *this; |
46 } | 50 } |
47 | 51 |
| 52 MediaSinkInternal& MediaSinkInternal::operator=( |
| 53 MediaSinkInternal&& other) noexcept { |
| 54 InternalCleanup(); |
| 55 InternalMoveConstructFrom(std::move(other)); |
| 56 |
| 57 return *this; |
| 58 } |
| 59 |
48 bool MediaSinkInternal::operator==(const MediaSinkInternal& other) const { | 60 bool MediaSinkInternal::operator==(const MediaSinkInternal& other) const { |
49 if (sink_type_ != other.sink_type_) | 61 if (sink_type_ != other.sink_type_) |
50 return false; | 62 return false; |
51 | 63 |
52 if (sink_ != other.sink_) | 64 if (sink_ != other.sink_) |
53 return false; | 65 return false; |
54 | 66 |
55 switch (sink_type_) { | 67 switch (sink_type_) { |
56 case SinkType::DIAL: | 68 case SinkType::DIAL: |
57 return *dial_data_ == *(other.dial_data_); | 69 return *dial_data_ == *(other.dial_data_); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 return; | 152 return; |
141 case SinkType::CAST: | 153 case SinkType::CAST: |
142 cast_data_.Init(*other.cast_data_); | 154 cast_data_.Init(*other.cast_data_); |
143 return; | 155 return; |
144 case SinkType::GENERIC: | 156 case SinkType::GENERIC: |
145 return; | 157 return; |
146 } | 158 } |
147 NOTREACHED(); | 159 NOTREACHED(); |
148 } | 160 } |
149 | 161 |
| 162 void MediaSinkInternal::InternalMoveConstructFrom(MediaSinkInternal&& other) { |
| 163 sink_ = std::move(other.sink_); |
| 164 sink_type_ = other.sink_type_; |
| 165 |
| 166 switch (sink_type_) { |
| 167 case SinkType::DIAL: |
| 168 dial_data_.InitFromMove(std::move(other.dial_data_)); |
| 169 return; |
| 170 case SinkType::CAST: |
| 171 cast_data_.InitFromMove(std::move(other.cast_data_)); |
| 172 return; |
| 173 case SinkType::GENERIC: |
| 174 return; |
| 175 } |
| 176 NOTREACHED(); |
| 177 } |
| 178 |
150 void MediaSinkInternal::InternalCleanup() { | 179 void MediaSinkInternal::InternalCleanup() { |
151 switch (sink_type_) { | 180 switch (sink_type_) { |
152 case SinkType::DIAL: | 181 case SinkType::DIAL: |
153 dial_data_.Destroy(); | 182 dial_data_.Destroy(); |
154 return; | 183 return; |
155 case SinkType::CAST: | 184 case SinkType::CAST: |
156 cast_data_.Destroy(); | 185 cast_data_.Destroy(); |
157 return; | 186 return; |
158 case SinkType::GENERIC: | 187 case SinkType::GENERIC: |
159 return; | 188 return; |
160 } | 189 } |
161 NOTREACHED(); | 190 NOTREACHED(); |
162 } | 191 } |
163 | 192 |
164 DialSinkExtraData::DialSinkExtraData() = default; | 193 DialSinkExtraData::DialSinkExtraData() = default; |
165 DialSinkExtraData::DialSinkExtraData(const DialSinkExtraData& other) = default; | 194 DialSinkExtraData::DialSinkExtraData(const DialSinkExtraData& other) = default; |
166 DialSinkExtraData::~DialSinkExtraData() = default; | 195 DialSinkExtraData::~DialSinkExtraData() = default; |
167 | 196 |
168 bool DialSinkExtraData::operator==(const DialSinkExtraData& other) const { | 197 bool DialSinkExtraData::operator==(const DialSinkExtraData& other) const { |
169 return ip_address == other.ip_address && model_name == other.model_name && | 198 return ip_address == other.ip_address && model_name == other.model_name && |
170 app_url == other.app_url; | 199 app_url == other.app_url; |
171 } | 200 } |
172 | 201 |
173 CastSinkExtraData::CastSinkExtraData() = default; | 202 CastSinkExtraData::CastSinkExtraData() = default; |
174 CastSinkExtraData::CastSinkExtraData(const CastSinkExtraData& other) = default; | 203 CastSinkExtraData::CastSinkExtraData(const CastSinkExtraData& other) = default; |
175 CastSinkExtraData::~CastSinkExtraData() = default; | 204 CastSinkExtraData::~CastSinkExtraData() = default; |
176 | 205 |
177 bool CastSinkExtraData::operator==(const CastSinkExtraData& other) const { | 206 bool CastSinkExtraData::operator==(const CastSinkExtraData& other) const { |
178 return ip_address == other.ip_address && model_name == other.model_name && | 207 return ip_address == other.ip_address && port == other.port && |
179 capabilities == other.capabilities && | 208 model_name == other.model_name && capabilities == other.capabilities && |
180 cast_channel_id == other.cast_channel_id; | 209 cast_channel_id == other.cast_channel_id && |
| 210 discovered_by_dial == other.discovered_by_dial; |
181 } | 211 } |
182 | 212 |
183 } // namespace media_router | 213 } // namespace media_router |
OLD | NEW |