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..ac134d75939db60bafdf854ca91a70d3b92c0f50 100644 |
--- a/chrome/browser/media/router/mojo/media_router_struct_traits.h |
+++ b/chrome/browser/media/router/mojo/media_router_struct_traits.h |
@@ -8,7 +8,9 @@ |
#include <string> |
#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 "chrome/browser/media/router/typed_media_sink.h" |
#include "mojo/common/common_custom_types_struct_traits.h" |
namespace mojo { |
@@ -77,6 +79,170 @@ 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, |
+ media_router::MediaSink> { |
+ static const std::string& sink_id(const media_router::MediaSink& sink) { |
+ return sink.id(); |
+ } |
+ |
+ static const std::string& name(const media_router::MediaSink& sink) { |
+ return sink.name(); |
+ } |
+ |
+ static base::Optional<std::string> description( |
+ const media_router::MediaSink& sink) { |
+ return sink.description(); |
+ } |
+ |
+ static base::Optional<std::string> domain( |
+ const media_router::MediaSink& sink) { |
+ return sink.domain(); |
+ } |
+ |
+ static media_router::MediaSink::IconType icon_type( |
+ const media_router::MediaSink& sink) { |
+ return sink.icon_type(); |
+ } |
+ |
+ static bool Read(media_router::mojom::MediaSinkDataView data, |
+ media_router::MediaSink* out); |
+}; |
+ |
+template <> |
+struct StructTraits<media_router::mojom::TypedMediaSinkDataView, |
+ media_router::TypedMediaSink> { |
+ static const media_router::MediaSink& sink( |
+ const media_router::TypedMediaSink& sink) { |
+ return sink.sink(); |
+ } |
+ |
+ static base::Optional<std::string> model_name( |
+ const media_router::TypedMediaSink& sink) { |
+ return sink.model_name(); |
+ } |
+ |
+ static const std::string& ip_address( |
+ const media_router::TypedMediaSink& sink) { |
+ return sink.ip_address(); |
+ } |
+ |
+ static const media_router::TypedMediaSink& extra_data( |
+ const media_router::TypedMediaSink& sink) { |
+ return sink; |
+ } |
+ |
+ static bool Read(media_router::mojom::TypedMediaSinkDataView data, |
+ media_router::TypedMediaSink* out); |
+}; |
+ |
+template <> |
+struct UnionTraits<media_router::mojom::MediaSinkExtraDataDataView, |
+ media_router::TypedMediaSink> { |
+ static media_router::mojom::MediaSinkExtraDataDataView::Tag GetTag( |
+ const media_router::TypedMediaSink& sink) { |
+ if (sink.is_dial_sink()) { |
+ return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
+ DIAL_MEDIA_SINK; |
+ } else if (sink.is_cast_sink()) { |
+ return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
+ CAST_MEDIA_SINK; |
+ } |
+ NOTREACHED(); |
imcheng
2017/02/11 01:00:22
should this be a CHECK(false) since we shouldn't e
zhaobin
2017/02/14 02:08:49
Done.
|
+ return media_router::mojom::MediaSinkExtraDataDataView::Tag:: |
+ CAST_MEDIA_SINK; |
+ } |
+ |
+ static const media_router::DialSinkExtraData& dial_media_sink( |
+ const media_router::TypedMediaSink& sink) { |
+ auto* extra_data = sink.dial_sink_extra_data(); |
+ DCHECK(extra_data); |
+ return *extra_data; |
+ } |
+ |
+ static const media_router::CastSinkExtraData& cast_media_sink( |
+ const media_router::TypedMediaSink& sink) { |
+ auto* extra_data = sink.cast_sink_extra_data(); |
+ DCHECK(extra_data); |
+ return *extra_data; |
+ } |
+}; |
+ |
+template <> |
+struct StructTraits<media_router::mojom::DialMediaSinkDataView, |
+ media_router::DialSinkExtraData> { |
+ static const GURL& app_url( |
+ const media_router::DialSinkExtraData& extra_data) { |
+ return extra_data.app_url; |
+ } |
+ |
+ static bool Read(media_router::mojom::DialMediaSinkDataView data, |
+ media_router::DialSinkExtraData* out); |
+}; |
+ |
+template <> |
+struct StructTraits<media_router::mojom::CastMediaSinkDataView, |
+ media_router::CastSinkExtraData> { |
+ static int32_t capabilities( |
+ const media_router::CastSinkExtraData& extra_data) { |
+ return extra_data.capabilities; |
+ } |
+ |
+ static int32_t cast_channel_id( |
+ const media_router::CastSinkExtraData& extra_data) { |
+ return extra_data.cast_channel_id; |
+ } |
+ |
+ static bool Read(media_router::mojom::CastMediaSinkDataView data, |
+ media_router::CastSinkExtraData* out); |
+}; |
+ |
+template <> |
struct StructTraits<media_router::mojom::RouteMessageDataView, |
media_router::RouteMessage> { |
static media_router::mojom::RouteMessage::Type type( |