Chromium Code Reviews| Index: chrome/browser/media/router/mojo/media_router_struct_traits.h |
| diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.h b/chrome/browser/media/router/mojo/media_router_struct_traits.h |
| index 67edb860e620cf623e24bf77e86b515d18b30119..44deef4a76d26a23f01f569a5495504703e579b2 100644 |
| --- a/chrome/browser/media/router/mojo/media_router_struct_traits.h |
| +++ b/chrome/browser/media/router/mojo/media_router_struct_traits.h |
| @@ -7,7 +7,10 @@ |
| #include <string> |
| +#include "chrome/browser/media/router/cast_media_sink.h" |
| +#include "chrome/browser/media/router/dial_media_sink.h" |
| #include "chrome/browser/media/router/issue.h" |
| +#include "chrome/browser/media/router/media_sink.h" |
| #include "chrome/browser/media/router/mojo/media_router.mojom.h" |
| #include "mojo/common/common_custom_types_struct_traits.h" |
| @@ -77,6 +80,186 @@ struct EnumTraits<media_router::mojom::Issue::Severity, |
| }; |
| template <> |
| +struct EnumTraits<media_router::mojom::MediaSink::IconType, |
| + media_router::MediaSink::IconType> { |
| + static media_router::mojom::MediaSink::IconType ToMojom( |
| + media_router::MediaSink::IconType type) { |
| + switch (type) { |
| + case media_router::MediaSink::CAST: |
| + return media_router::mojom::MediaSink::IconType::CAST; |
| + case media_router::MediaSink::CAST_AUDIO: |
| + return media_router::mojom::MediaSink::IconType::CAST_AUDIO; |
| + case media_router::MediaSink::CAST_AUDIO_GROUP: |
| + return media_router::mojom::MediaSink::IconType::CAST_AUDIO_GROUP; |
| + case media_router::MediaSink::HANGOUT: |
| + return media_router::mojom::MediaSink::IconType::HANGOUT; |
| + case media_router::MediaSink::GENERIC: |
| + return media_router::mojom::MediaSink::IconType::GENERIC; |
| + default: |
|
dcheng
2017/02/05 09:23:00
Nit: remove default (that way the compiler will wa
zhaobin
2017/02/06 19:37:11
Done.
|
| + NOTREACHED() << "Unknown sink icon type " << type; |
| + return media_router::mojom::MediaSink::IconType::GENERIC; |
| + } |
| + } |
| + |
| + static bool FromMojom(media_router::mojom::MediaSink::IconType input, |
| + media_router::MediaSink::IconType* output) { |
| + switch (input) { |
| + case media_router::mojom::MediaSink::IconType::CAST: |
| + *output = media_router::MediaSink::CAST; |
| + return true; |
| + case media_router::mojom::MediaSink::IconType::CAST_AUDIO: |
| + *output = media_router::MediaSink::CAST_AUDIO; |
| + return true; |
| + case media_router::mojom::MediaSink::IconType::CAST_AUDIO_GROUP: |
| + *output = media_router::MediaSink::CAST_AUDIO_GROUP; |
| + return true; |
| + case media_router::mojom::MediaSink::IconType::HANGOUT: |
| + *output = media_router::MediaSink::HANGOUT; |
| + return true; |
| + case media_router::mojom::MediaSink::IconType::GENERIC: |
| + *output = media_router::MediaSink::GENERIC; |
| + return true; |
| + default: |
|
dcheng
2017/02/05 09:23:00
Nit: remove default (that way the compiler will wa
zhaobin
2017/02/06 19:37:10
Done.
|
| + NOTREACHED() << "Unknown sink icon type " << input; |
| + *output = media_router::MediaSink::GENERIC; |
| + } |
| + return false; |
| + } |
| +}; |
| + |
| +template <> |
| +struct StructTraits<media_router::mojom::MediaSinkDataView, |
| + std::unique_ptr<media_router::MediaSink>> { |
| + static bool IsNull(const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return !sink.get(); |
| + } |
| + |
| + static void SetToNull(std::unique_ptr<media_router::MediaSink>* out) { |
| + out->reset(); |
| + } |
| + |
| + static const std::string& sink_id( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->id(); |
| + } |
| + |
| + static const std::string& name( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->name(); |
| + } |
| + |
| + static base::Optional<std::string> description( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->description().empty() |
|
dcheng
2017/02/05 09:23:00
Make the fields on the C++ class optional; doing t
zhaobin
2017/02/06 19:37:11
Done.
|
| + ? base::Optional<std::string>() |
| + : base::make_optional(sink->description()); |
| + } |
| + |
| + static base::Optional<std::string> domain( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->domain().empty() ? base::Optional<std::string>() |
| + : base::make_optional(sink->domain()); |
| + } |
| + |
| + static media_router::MediaSink::IconType icon_type( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->icon_type(); |
| + } |
| + |
| + static base::Optional<std::string> model_name( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return sink->model_name().empty() ? base::Optional<std::string>() |
| + : base::make_optional(sink->model_name()); |
| + } |
| + |
| + static const media_router::MediaSink& extra_data( |
| + const std::unique_ptr<media_router::MediaSink>& sink) { |
| + return *sink; |
| + } |
| + |
| + static bool Read(media_router::mojom::MediaSinkDataView data, |
| + std::unique_ptr<media_router::MediaSink>* out); |
| +}; |
| + |
| +template <> |
| +struct UnionTraits<media_router::mojom::MediaSinkExtraDataDataView, |
| + media_router::MediaSink> { |
| + static bool IsNull(const media_router::MediaSink& sink) { |
| + return sink.type() == media_router::MediaSink::SinkType::GENERAL; |
| + } |
| + |
| + static media_router::mojom::MediaSinkExtraDataDataView::Tag GetTag( |
| + const media_router::MediaSink& sink) { |
| + switch (sink.type()) { |
| + case media_router::MediaSink::SinkType::DIAL: |
| + return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
| + DIAL_MEDIA_SINK; |
| + case media_router::MediaSink::SinkType::CAST: |
| + return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
| + CAST_MEDIA_SINK; |
| + default: |
| + NOTREACHED(); |
| + } |
| + return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
| + CAST_MEDIA_SINK; |
| + } |
| + |
| + static const media_router::MediaSink& dial_media_sink( |
| + const media_router::MediaSink& sink) { |
| + return sink; |
| + } |
| + |
| + static const media_router::MediaSink& cast_media_sink( |
| + const media_router::MediaSink& sink) { |
| + return sink; |
| + } |
| +}; |
| + |
| +template <> |
| +struct StructTraits<media_router::mojom::DialMediaSinkDataView, |
| + media_router::MediaSink> { |
| + static const std::string& ip_address(const media_router::MediaSink& sink) { |
| + const media_router::DialMediaSink* dial_sink = |
| + media_router::DialMediaSink::Cast(&sink); |
| + return dial_sink->ip_address(); |
| + } |
| + |
| + static const GURL& app_url(const media_router::MediaSink& sink) { |
| + const media_router::DialMediaSink* dial_sink = |
| + media_router::DialMediaSink::Cast(&sink); |
| + return dial_sink->app_url(); |
| + } |
| + |
| + static bool Read(media_router::mojom::DialMediaSinkDataView data, |
| + media_router::MediaSink* out); |
| +}; |
| + |
| +template <> |
| +struct StructTraits<media_router::mojom::CastMediaSinkDataView, |
| + media_router::MediaSink> { |
| + static int32_t capabilities(const media_router::MediaSink& sink) { |
| + const media_router::CastMediaSink* cast_sink = |
| + media_router::CastMediaSink::Cast(&sink); |
| + return cast_sink->capabilities(); |
| + } |
| + |
| + static const std::string& ip_address(const media_router::MediaSink& sink) { |
| + const media_router::CastMediaSink* cast_sink = |
| + media_router::CastMediaSink::Cast(&sink); |
| + return cast_sink->ip_address(); |
| + } |
| + |
| + static int32_t cast_channel_id(const media_router::MediaSink& sink) { |
| + const media_router::CastMediaSink* cast_sink = |
| + media_router::CastMediaSink::Cast(&sink); |
| + return cast_sink->cast_channel_id(); |
| + } |
| + |
| + static bool Read(media_router::mojom::CastMediaSinkDataView data, |
| + media_router::MediaSink* out); |
| +}; |
| + |
| +template <> |
| struct StructTraits<media_router::mojom::RouteMessageDataView, |
| media_router::RouteMessage> { |
| static media_router::mojom::RouteMessage::Type type( |