blob: 9e7bbe9c70d9fd4db9ffc7e0a72c03e5a3bf285d [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/media_router/common/mojom/media_router_mojom_traits.h"
#include "components/media_router/common/media_source.h"
#include "components/media_router/common/mojom/media_router.mojom.h"
#include "services/network/public/cpp/ip_address_mojom_traits.h"
#include "services/network/public/cpp/ip_endpoint_mojom_traits.h"
#include "url/mojom/url_gurl_mojom_traits.h"
namespace mojo {
// static
bool StructTraits<media_router::mojom::IssueDataView, media_router::IssueInfo>::
Read(media_router::mojom::IssueDataView data,
media_router::IssueInfo* out) {
if (!data.ReadTitle(&out->title))
return false;
if (!data.ReadSeverity(&out->severity))
return false;
absl::optional<std::string> message;
if (!data.ReadMessage(&message))
return false;
out->message = message.value_or(std::string());
if (!data.ReadRouteId(&out->route_id))
return false;
if (!data.ReadSinkId(&out->sink_id))
return false;
return true;
}
// static
media_router::mojom::MediaSinkExtraDataDataView::Tag
UnionTraits<media_router::mojom::MediaSinkExtraDataDataView,
media_router::MediaSinkInternal>::
GetTag(const media_router::MediaSinkInternal& sink) {
if (sink.is_dial_sink()) {
return media_router::mojom::MediaSinkExtraDataDataView::Tag::kDialMediaSink;
} else if (sink.is_cast_sink()) {
return media_router::mojom::MediaSinkExtraDataDataView::Tag::kCastMediaSink;
}
NOTREACHED();
return media_router::mojom::MediaSinkExtraDataDataView::Tag::kCastMediaSink;
}
// static
bool StructTraits<media_router::mojom::MediaSinkDataView,
media_router::MediaSinkInternal>::
Read(media_router::mojom::MediaSinkDataView data,
media_router::MediaSinkInternal* out) {
media_router::MediaSink::Id id;
if (!data.ReadSinkId(&id) ||
!media_router::MediaSinkInternal::IsValidSinkId(id)) {
return false;
}
out->sink().set_sink_id(id);
std::string name;
if (!data.ReadName(&name))
return false;
out->sink().set_name(name);
absl::optional<std::string> description;
if (!data.ReadDescription(&description))
return false;
if (description)
out->sink().set_description(*description);
absl::optional<std::string> domain;
if (!data.ReadDomain(&domain))
return false;
if (domain)
out->sink().set_domain(*domain);
media_router::SinkIconType icon_type;
if (!data.ReadIconType(&icon_type))
return false;
out->sink().set_icon_type(icon_type);
media_router::mojom::MediaRouteProviderId provider_id;
if (!data.ReadProviderId(&provider_id))
return false;
out->sink().set_provider_id(provider_id);
if (!data.ReadExtraData(out))
return false;
return true;
}
// static
bool UnionTraits<media_router::mojom::MediaSinkExtraDataDataView,
media_router::MediaSinkInternal>::
Read(media_router::mojom::MediaSinkExtraDataDataView data,
media_router::MediaSinkInternal* out) {
switch (data.tag()) {
case media_router::mojom::MediaSinkExtraDataDataView::Tag::kDialMediaSink: {
media_router::DialSinkExtraData extra_data;
if (!data.ReadDialMediaSink(&extra_data))
return false;
out->set_dial_data(extra_data);
return true;
}
case media_router::mojom::MediaSinkExtraDataDataView::Tag::kCastMediaSink: {
media_router::CastSinkExtraData extra_data;
if (!data.ReadCastMediaSink(&extra_data))
return false;
out->set_cast_data(extra_data);
return true;
}
}
NOTREACHED();
return false;
}
// static
bool StructTraits<media_router::mojom::DialMediaSinkDataView,
media_router::DialSinkExtraData>::
Read(media_router::mojom::DialMediaSinkDataView data,
media_router::DialSinkExtraData* out) {
if (!data.ReadIpAddress(&out->ip_address))
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) {
if (!data.ReadIpEndpoint(&out->ip_endpoint))
return false;
if (!data.ReadModelName(&out->model_name))
return false;
out->capabilities = data.capabilities();
out->cast_channel_id = data.cast_channel_id();
return true;
}
// static
bool StructTraits<media_router::mojom::MediaRouteDataView,
media_router::MediaRoute>::
Read(media_router::mojom::MediaRouteDataView data,
media_router::MediaRoute* out) {
media_router::MediaRoute::Id media_route_id;
if (!data.ReadMediaRouteId(&media_route_id))
return false;
out->set_media_route_id(media_route_id);
std::string presentation_id;
if (!data.ReadPresentationId(&presentation_id))
return false;
out->set_presentation_id(presentation_id);
absl::optional<media_router::MediaSource::Id> media_source_id;
if (!data.ReadMediaSource(&media_source_id))
return false;
if (media_source_id)
out->set_media_source(media_router::MediaSource(*media_source_id));
media_router::MediaSink::Id media_sink_id;
if (!data.ReadMediaSinkId(&media_sink_id))
return false;
out->set_media_sink_id(media_sink_id);
std::string media_sink_name;
if (!data.ReadMediaSinkName(&media_sink_name))
return false;
out->set_media_sink_name(media_sink_name);
std::string description;
if (!data.ReadDescription(&description))
return false;
out->set_description(description);
media_router::RouteControllerType controller_type;
if (!data.ReadControllerType(&controller_type))
return false;
out->set_controller_type(controller_type);
out->set_local(data.is_local());
out->set_off_the_record(data.is_off_the_record());
out->set_local_presentation(data.is_local_presentation());
out->set_is_connecting(data.is_connecting());
return true;
}
} // namespace mojo