Chromium Code Reviews| Index: chrome/browser/media/router/mojo/media_router_struct_traits.cc |
| diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.cc b/chrome/browser/media/router/mojo/media_router_struct_traits.cc |
| index 47e9283b822136dc7566def4dd916f951d64cba7..f50536a807c60db99a2a65c2c24ebe9e2d801deb 100644 |
| --- a/chrome/browser/media/router/mojo/media_router_struct_traits.cc |
| +++ b/chrome/browser/media/router/mojo/media_router_struct_traits.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/media/router/mojo/media_router_struct_traits.h" |
| #include "chrome/browser/media/router/media_source.h" |
| +#include "url/mojo/url_gurl_struct_traits.h" |
| namespace mojo { |
| @@ -43,46 +44,116 @@ bool StructTraits<media_router::mojom::IssueDataView, media_router::IssueInfo>:: |
| } |
| // static |
| -bool StructTraits< |
| - media_router::mojom::MediaSinkDataView, |
| - media_router::MediaSink>::Read(media_router::mojom::MediaSinkDataView data, |
| - media_router::MediaSink* out) { |
| +bool StructTraits<media_router::mojom::MediaSinkDataView, |
| + media_router::MediaSinkInternal>:: |
| + Read(media_router::mojom::MediaSinkDataView data, |
| + media_router::MediaSinkInternal* out) { |
| + media_router::MediaSink sink; |
|
dcheng
2017/03/03 10:37:10
Any particular reason for using a local? |out| is
zhaobin
2017/03/03 23:56:42
out->sink() returns const ref. Besides, it seems o
dcheng
2017/03/04 01:49:16
It doesn't really matter though: on failure, |out|
zhaobin
2017/03/06 18:31:26
Done.
|
| + |
| media_router::MediaSink::Id id; |
| - if (!data.ReadSinkId(&id)) |
| + if (!data.ReadSinkId(&id) || |
| + !media_router::MediaSinkInternal::IsValidSinkId(id)) { |
| return false; |
| + } |
| - out->set_sink_id(id); |
| + sink.set_sink_id(id); |
| std::string name; |
| if (!data.ReadName(&name)) |
| return false; |
| - out->set_name(name); |
| + sink.set_name(name); |
| base::Optional<std::string> description; |
| if (!data.ReadDescription(&description)) |
| return false; |
| if (description) |
| - out->set_description(*description); |
| + sink.set_description(*description); |
| base::Optional<std::string> domain; |
| if (!data.ReadDomain(&domain)) |
| return false; |
| if (domain) |
| - out->set_domain(*domain); |
| + sink.set_domain(*domain); |
| media_router::MediaSink::IconType icon_type; |
| if (!data.ReadIconType(&icon_type)) |
| return false; |
| - out->set_icon_type(icon_type); |
| + sink.set_icon_type(icon_type); |
| + |
| + out->set_sink(sink); |
| + |
| + media_router::mojom::MediaSinkExtraDataDataView extra_data_data_view; |
| + data.GetExtraDataDataView(&extra_data_data_view); |
| + |
| + if (extra_data_data_view.is_null()) { |
| + return true; |
| + } else if (extra_data_data_view.is_dial_media_sink()) { |
| + media_router::DialSinkExtraData extra_data; |
| + if (!extra_data_data_view.ReadDialMediaSink(&extra_data)) |
| + return false; |
| + |
| + out->set_dial_data(extra_data); |
| + } else if (extra_data_data_view.is_cast_media_sink()) { |
| + media_router::CastSinkExtraData extra_data; |
| + if (!extra_data_data_view.ReadCastMediaSink(&extra_data)) |
| + return false; |
| + |
| + out->set_cast_data(extra_data); |
| + } |
| + |
| + return true; |
| +} |
| + |
| +// static |
| +bool StructTraits<media_router::mojom::DialMediaSinkDataView, |
| + media_router::DialSinkExtraData>:: |
| + Read(media_router::mojom::DialMediaSinkDataView data, |
| + media_router::DialSinkExtraData* out) { |
| + std::string ip_address; |
| + if (!data.ReadIpAddress(&ip_address)) |
| + return false; |
| + |
| + if (!out->ip_address.AssignFromIPLiteral(ip_address) || |
| + !out->ip_address.IsValid()) { |
| + return false; |
| + } |
| + |
| + if (!data.ReadModelName(&out->model_name)) |
| + return false; |
| + |
| + if (!data.ReadAppUrl(&out->app_url)) |
| + return false; |
| return true; |
| } |
| // static |
| +bool StructTraits<media_router::mojom::CastMediaSinkDataView, |
| + media_router::CastSinkExtraData>:: |
| + Read(media_router::mojom::CastMediaSinkDataView data, |
| + media_router::CastSinkExtraData* out) { |
| + std::string ip_address; |
| + if (!data.ReadIpAddress(&ip_address)) |
| + return false; |
| + |
| + if (!out->ip_address.AssignFromIPLiteral(ip_address) || |
| + !out->ip_address.IsValid()) { |
| + return false; |
| + } |
| + |
| + if (!data.ReadModelName(&out->model_name)) |
| + return false; |
| + |
| + out->capabilities = data.capabilities(); |
| + out->cast_channel_id = data.cast_channel_id(); |
| + |
| + return true; |
| +} |
| + |
| bool StructTraits<media_router::mojom::MediaRouteDataView, |
| media_router::MediaRoute>:: |
| Read(media_router::mojom::MediaRouteDataView data, |