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..2217aa5b1646bbd53d2a9683c7644e835b24fc13 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,180 @@ 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; | 
| + } | 
| + 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; | 
| + } | 
| + 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(); | 
| + } | 
| + | 
| + static base::Optional<std::string> domain( | 
| + const std::unique_ptr<media_router::MediaSink>& sink) { | 
| + return 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(); | 
| + } | 
| + | 
| + 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: | 
| 
 
imcheng
2017/02/08 01:28:09
Omit default case to let compiler catch cases we f
 
zhaobin
2017/02/09 00:13:53
Done.
 
 | 
| + 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( |