Commit 5cfa33cb authored by Takumi Fujimoto's avatar Takumi Fujimoto Committed by Commit Bot

Remove media_router::MediaStatus typemapping

Remove the MediaStatus struct and typemapping, and use mojom::MediaStatus
directly.

Also delete the MirroringMediaRouteController class which is no longer
used.

Change-Id: I92ee56c3c276000948340da2c7d85248041cbf28
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1747740Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarmark a. foltz <mfoltz@chromium.org>
Commit-Queue: Takumi Fujimoto <takumif@chromium.org>
Cr-Commit-Position: refs/heads/master@{#686626}
parent 87e85f1d
......@@ -121,11 +121,11 @@ void MediaRouteController::SetVolume(float volume) {
MediaRouteProviderWakeReason::ROUTE_CONTROLLER_COMMAND);
}
void MediaRouteController::OnMediaStatusUpdated(const MediaStatus& status) {
void MediaRouteController::OnMediaStatusUpdated(mojom::MediaStatusPtr status) {
DCHECK(is_valid_);
current_media_status_ = status;
current_media_status_ = std::move(status);
for (Observer& observer : observers_)
observer.OnMediaStatusUpdated(status);
observer.OnMediaStatusUpdated(*current_media_status_);
}
void MediaRouteController::Invalidate() {
......@@ -158,47 +158,4 @@ void MediaRouteController::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
// static
MirroringMediaRouteController* MirroringMediaRouteController::From(
MediaRouteController* controller) {
if (!controller || controller->GetType() != RouteControllerType::kMirroring)
return nullptr;
return static_cast<MirroringMediaRouteController*>(controller);
}
MirroringMediaRouteController::MirroringMediaRouteController(
const MediaRoute::Id& route_id,
content::BrowserContext* context,
MediaRouter* router)
: MediaRouteController(route_id, context, router),
prefs_(Profile::FromBrowserContext(context)->GetPrefs()) {
DCHECK(prefs_);
media_remoting_enabled_ =
prefs_->GetBoolean(prefs::kMediaRouterMediaRemotingEnabled);
}
MirroringMediaRouteController::~MirroringMediaRouteController() {}
RouteControllerType MirroringMediaRouteController::GetType() const {
return RouteControllerType::kMirroring;
}
void MirroringMediaRouteController::OnMediaStatusUpdated(
const MediaStatus& status) {
// The MRP does not set |mirroring_extra_data|. We set it here before sending
// it to observers.
latest_status_ = status;
latest_status_.mirroring_extra_data.emplace(media_remoting_enabled());
MediaRouteController::OnMediaStatusUpdated(latest_status_);
}
void MirroringMediaRouteController::SetMediaRemotingEnabled(bool enabled) {
// This method assumes that |latest_status_| is already set to a valid value.
media_remoting_enabled_ = enabled;
latest_status_.mirroring_extra_data.emplace(enabled);
prefs_->SetBoolean(prefs::kMediaRouterMediaRemotingEnabled, enabled);
MediaRouteController::OnMediaStatusUpdated(latest_status_);
}
} // namespace media_router
......@@ -15,8 +15,6 @@
#include "chrome/common/media_router/mojom/media_status.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
class PrefService;
namespace content {
class BrowserContext;
}
......@@ -63,7 +61,7 @@ class MediaRouteController
// Removes itself as an observer if |controller_| is still valid.
virtual ~Observer();
virtual void OnMediaStatusUpdated(const MediaStatus& status) = 0;
virtual void OnMediaStatusUpdated(const mojom::MediaStatus& status) = 0;
// Returns a reference to the observed MediaRouteController. The reference
// should not be stored by any object that does not subclass ::Observer.
......@@ -118,7 +116,7 @@ class MediaRouteController
// mojom::MediaStatusObserver:
// Notifies |observers_| of a status update.
void OnMediaStatusUpdated(const MediaStatus& status) override;
void OnMediaStatusUpdated(mojom::MediaStatusPtr status) override;
// Notifies |observers_| to dispose their references to the controller. The
// controller gets destroyed when all the references are disposed.
......@@ -130,12 +128,6 @@ class MediaRouteController
MediaRoute::Id route_id() const { return route_id_; }
// Returns the latest media status that the controller has been notified with.
// Returns a nullopt if the controller hasn't been notified yet.
const base::Optional<MediaStatus>& current_media_status() const {
return current_media_status_;
}
protected:
~MediaRouteController() override;
......@@ -194,52 +186,11 @@ class MediaRouteController
bool is_valid_ = true;
// The latest media status that the controller has been notified with.
base::Optional<MediaStatus> current_media_status_;
mojom::MediaStatusPtr current_media_status_;
DISALLOW_COPY_AND_ASSIGN(MediaRouteController);
};
// Controller subclass for Cast streaming mirroring routes. Responsible for:
// (1) updating the media remoting pref according to user input
// (2) augmenting the MediaStatus update sent by the MRP with the value from the
// media remoting pref.
class MirroringMediaRouteController : public MediaRouteController {
public:
// Casts |controller| to a MirroringMediaRouteController if its
// RouteControllerType is MIRRORING. Returns nullptr otherwise.
static MirroringMediaRouteController* From(MediaRouteController* controller);
MirroringMediaRouteController(const MediaRoute::Id& route_id,
content::BrowserContext* context,
MediaRouter* router);
// MediaRouteController
RouteControllerType GetType() const override;
void OnMediaStatusUpdated(const MediaStatus& status) override;
// Sets the media remoting pref to |enabled| and notifies the observers.
// Note that the MRP listens for updates on this pref value and enable/disable
// media remoting as needed.
void SetMediaRemotingEnabled(bool enabled);
bool media_remoting_enabled() const { return media_remoting_enabled_; }
protected:
~MirroringMediaRouteController() override;
private:
PrefService* const prefs_;
// This is initialized from |prefs_| in the constructor and updated in
// |SetMediaRemotingEnabled()|. This class does not need to listen for pref
// changes because this is the only place where the media remoting pref value
// can be modified.
bool media_remoting_enabled_ = true;
MediaStatus latest_status_;
DISALLOW_COPY_AND_ASSIGN(MirroringMediaRouteController);
};
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_MOJO_MEDIA_ROUTE_CONTROLLER_H_
......@@ -29,6 +29,10 @@ namespace {
constexpr char kRouteId[] = "routeId";
MATCHER_P(Equals, value, "") {
return arg.Equals(value);
}
} // namespace
class MediaRouteControllerTest : public ::testing::Test {
......@@ -87,16 +91,6 @@ class MediaRouteControllerTest : public ::testing::Test {
DISALLOW_COPY_AND_ASSIGN(MediaRouteControllerTest);
};
class MirroringMediaRouteControllerTest : public MediaRouteControllerTest {
public:
~MirroringMediaRouteControllerTest() override {}
scoped_refptr<MediaRouteController> CreateMediaRouteController() override {
return base::MakeRefCounted<MirroringMediaRouteController>(
kRouteId, &profile_, &router_);
}
};
// Test that when Mojo connections are ready, calls to the Mojo controller go
// through immediately.
TEST_F(MediaRouteControllerTest, ForwardControllerCommands) {
......@@ -163,22 +157,22 @@ TEST_F(MediaRouteControllerTest, NotifyMediaRouteControllerObservers) {
auto observer1 = CreateObserver();
auto observer2 = CreateObserver();
MediaStatus status;
mojom::MediaStatus status;
status.title = "test media status";
EXPECT_CALL(*observer_, OnMediaStatusUpdated(status));
EXPECT_CALL(*observer1, OnMediaStatusUpdated(status));
EXPECT_CALL(*observer2, OnMediaStatusUpdated(status));
mojo_media_status_observer_->OnMediaStatusUpdated(status);
EXPECT_CALL(*observer_, OnMediaStatusUpdated(Equals(status)));
EXPECT_CALL(*observer1, OnMediaStatusUpdated(Equals(status)));
EXPECT_CALL(*observer2, OnMediaStatusUpdated(Equals(status)));
mojo_media_status_observer_->OnMediaStatusUpdated(status.Clone());
base::RunLoop().RunUntilIdle();
observer1.reset();
auto observer3 = CreateObserver();
EXPECT_CALL(*observer_, OnMediaStatusUpdated(status));
EXPECT_CALL(*observer2, OnMediaStatusUpdated(status));
EXPECT_CALL(*observer3, OnMediaStatusUpdated(status));
mojo_media_status_observer_->OnMediaStatusUpdated(status);
EXPECT_CALL(*observer_, OnMediaStatusUpdated(Equals(status)));
EXPECT_CALL(*observer2, OnMediaStatusUpdated(Equals(status)));
EXPECT_CALL(*observer3, OnMediaStatusUpdated(Equals(status)));
mojo_media_status_observer_->OnMediaStatusUpdated(status.Clone());
base::RunLoop().RunUntilIdle();
}
......@@ -200,15 +194,4 @@ TEST_F(MediaRouteControllerTest, DestroyControllerOnNoObservers) {
EXPECT_TRUE(Mock::VerifyAndClearExpectations(&router_));
}
TEST_F(MirroringMediaRouteControllerTest, MirroringCommands) {
auto controller = GetController();
auto* mirroring_controller =
MirroringMediaRouteController::From(controller.get());
mirroring_controller->SetMediaRemotingEnabled(false);
EXPECT_FALSE(mirroring_controller->media_remoting_enabled());
EXPECT_FALSE(
profile_.GetPrefs()->GetBoolean(prefs::kMediaRouterMediaRemotingEnabled));
}
} // namespace media_router
......@@ -459,11 +459,8 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController(
<< __func__ << ": route does not support controller: " << route_id;
return nullptr;
case RouteControllerType::kGeneric:
route_controller = new MediaRouteController(route_id, context_, this);
break;
case RouteControllerType::kMirroring:
route_controller =
new MirroringMediaRouteController(route_id, context_, this);
route_controller = new MediaRouteController(route_id, context_, this);
break;
}
DCHECK(route_controller);
......
......@@ -114,12 +114,12 @@ void CastMediaController::SetSession(const CastSession& session) {
media_status_.can_set_volume = volume_type->GetString() != "fixed";
media_status_.can_mute = media_status_.can_set_volume;
}
observer_->OnMediaStatusUpdated(media_status_);
observer_->OnMediaStatusUpdated(media_status_.Clone());
}
void CastMediaController::SetMediaStatus(const base::Value& status_value) {
UpdateMediaStatus(status_value);
observer_->OnMediaStatusUpdated(media_status_);
observer_->OnMediaStatusUpdated(media_status_.Clone());
}
base::Value CastMediaController::CreateMediaRequest(V2MessageType type) {
......@@ -175,11 +175,11 @@ void CastMediaController::UpdateMediaStatus(const base::Value& message_value) {
if (player_state && player_state->is_string()) {
const std::string& state = player_state->GetString();
if (state == "PLAYING") {
media_status_.play_state = MediaStatus::PlayState::PLAYING;
media_status_.play_state = mojom::MediaStatus::PlayState::PLAYING;
} else if (state == "PAUSED") {
media_status_.play_state = MediaStatus::PlayState::PAUSED;
media_status_.play_state = mojom::MediaStatus::PlayState::PAUSED;
} else if (state == "BUFFERING") {
media_status_.play_state = MediaStatus::PlayState::BUFFERING;
media_status_.play_state = mojom::MediaStatus::PlayState::BUFFERING;
}
}
}
......
......@@ -6,7 +6,6 @@
#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_MEDIA_CONTROLLER_H_
#include "base/macros.h"
#include "chrome/common/media_router/media_status.h"
#include "chrome/common/media_router/mojom/media_controller.mojom.h"
#include "chrome/common/media_router/mojom/media_status.mojom.h"
#include "components/cast_channel/cast_message_util.h"
......@@ -52,7 +51,7 @@ class CastMediaController : public mojom::MediaController {
const std::string sender_id_;
ActivityRecord* const activity_;
MediaStatus media_status_;
mojom::MediaStatus media_status_;
std::string session_id_;
int media_session_id_;
......
......@@ -42,18 +42,18 @@ void VerifySessionAndMediaSessionIds(const Value& v2_message_body) {
EXPECT_EQ(kMediaSessionId, mediaSessionId->GetInt());
}
Value GetPlayerStateValue(const MediaStatus& status) {
Value GetPlayerStateValue(const mojom::MediaStatus& status) {
switch (status.play_state) {
case MediaStatus::PlayState::PLAYING:
case mojom::MediaStatus::PlayState::PLAYING:
return Value("PLAYING");
case MediaStatus::PlayState::PAUSED:
case mojom::MediaStatus::PlayState::PAUSED:
return Value("PAUSED");
case MediaStatus::PlayState::BUFFERING:
case mojom::MediaStatus::PlayState::BUFFERING:
return Value("BUFFERING");
}
}
Value GetSupportedMediaCommandsValue(const MediaStatus& status) {
Value GetSupportedMediaCommandsValue(const mojom::MediaStatus& status) {
int commands = 0;
// |can_set_volume| and |can_mute| are not used, because the receiver volume
// is used instead.
......@@ -64,8 +64,8 @@ Value GetSupportedMediaCommandsValue(const MediaStatus& status) {
return Value(commands);
}
MediaStatus CreateSampleMediaStatus() {
MediaStatus status;
mojom::MediaStatus CreateSampleMediaStatus() {
mojom::MediaStatus status;
status.title = "media title";
status.can_play_pause = true;
status.can_mute = true;
......@@ -73,7 +73,7 @@ MediaStatus CreateSampleMediaStatus() {
status.can_seek = false;
status.is_muted = false;
status.volume = 0.7;
status.play_state = MediaStatus::PlayState::BUFFERING;
status.play_state = mojom::MediaStatus::PlayState::BUFFERING;
status.duration = base::TimeDelta::FromSeconds(30);
status.current_time = base::TimeDelta::FromSeconds(12);
return status;
......@@ -134,7 +134,7 @@ class CastMediaControllerTest : public testing::Test {
SetMediaStatus(CreateSampleMediaStatus());
}
void SetMediaStatus(const MediaStatus& status) {
void SetMediaStatus(const mojom::MediaStatus& status) {
Value status_value(Value::Type::DICTIONARY);
status_value.SetKey("mediaSessionId", Value(kMediaSessionId));
status_value.SetKey("media", Value(Value::Type::DICTIONARY));
......@@ -239,15 +239,15 @@ TEST_F(CastMediaControllerTest, SendSeekRequest) {
}
TEST_F(CastMediaControllerTest, UpdateMediaStatus) {
const MediaStatus expected_status = CreateSampleMediaStatus();
const mojom::MediaStatus expected_status = CreateSampleMediaStatus();
EXPECT_CALL(*status_observer_, OnMediaStatusUpdated(_))
.WillOnce([&](const MediaStatus& status) {
EXPECT_EQ(expected_status.title, status.title);
EXPECT_EQ(expected_status.can_play_pause, status.can_play_pause);
EXPECT_EQ(expected_status.play_state, status.play_state);
EXPECT_EQ(expected_status.duration, status.duration);
EXPECT_EQ(expected_status.current_time, status.current_time);
.WillOnce([&](mojom::MediaStatusPtr status) {
EXPECT_EQ(expected_status.title, status->title);
EXPECT_EQ(expected_status.can_play_pause, status->can_play_pause);
EXPECT_EQ(expected_status.play_state, status->play_state);
EXPECT_EQ(expected_status.duration, status->duration);
EXPECT_EQ(expected_status.current_time, status->current_time);
});
SetMediaStatus(expected_status);
VerifyAndClearExpectations();
......@@ -260,9 +260,9 @@ TEST_F(CastMediaControllerTest, UpdateVolumeStatus) {
const bool session_muted =
session->value().FindPath("receiver.volume.muted")->GetBool();
EXPECT_CALL(*status_observer_, OnMediaStatusUpdated(_))
.WillOnce([&](const MediaStatus& status) {
EXPECT_FLOAT_EQ(session_volume, status.volume);
EXPECT_EQ(session_muted, status.is_muted);
.WillOnce([&](mojom::MediaStatusPtr status) {
EXPECT_FLOAT_EQ(session_volume, status->volume);
EXPECT_EQ(session_muted, status->is_muted);
});
controller_->SetSession(*session);
VerifyAndClearExpectations();
......@@ -270,11 +270,11 @@ TEST_F(CastMediaControllerTest, UpdateVolumeStatus) {
// The volume info is set in SetSession() rather than SetMediaStatus(), so the
// volume info in the latter should be ignored.
EXPECT_CALL(*status_observer_, OnMediaStatusUpdated(_))
.WillOnce([&](const MediaStatus& status) {
EXPECT_FLOAT_EQ(session_volume, status.volume);
EXPECT_EQ(session_muted, status.is_muted);
.WillOnce([&](mojom::MediaStatusPtr status) {
EXPECT_FLOAT_EQ(session_volume, status->volume);
EXPECT_EQ(session_muted, status->is_muted);
});
MediaStatus updated_status = CreateSampleMediaStatus();
mojom::MediaStatus updated_status = CreateSampleMediaStatus();
updated_status.volume = 0.3;
updated_status.is_muted = true;
SetMediaStatus(updated_status);
......
......@@ -340,7 +340,7 @@ void WiredDisplayMediaRouteProvider::Presentation::UpdatePresentationTitle(
status_.title = title;
if (media_status_observer_)
media_status_observer_->OnMediaStatusUpdated(status_);
media_status_observer_->OnMediaStatusUpdated(status_.Clone());
}
void WiredDisplayMediaRouteProvider::Presentation::SetMojoConnections(
......@@ -351,7 +351,7 @@ void WiredDisplayMediaRouteProvider::Presentation::SetMojoConnections(
media_controller_receiver_ = std::move(media_controller);
media_status_observer_ = std::move(observer);
media_status_observer_->OnMediaStatusUpdated(status_);
media_status_observer_->OnMediaStatusUpdated(status_.Clone());
media_status_observer_.set_connection_error_handler(base::BindOnce(
&WiredDisplayMediaRouteProvider::Presentation::ResetMojoConnections,
base::Unretained(this)));
......
......@@ -17,7 +17,6 @@
#include "chrome/browser/media/router/discovery/media_sink_discovery_metrics.h"
#include "chrome/browser/media/router/providers/wired_display/wired_display_presentation_receiver.h"
#include "chrome/common/media_router/media_route_provider_helper.h"
#include "chrome/common/media_router/media_status.h"
#include "chrome/common/media_router/mojom/media_router.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "ui/display/display.h"
......@@ -143,7 +142,7 @@ class WiredDisplayMediaRouteProvider : public mojom::MediaRouteProvider,
private:
MediaRoute route_;
std::unique_ptr<WiredDisplayPresentationReceiver> receiver_;
MediaStatus status_;
mojom::MediaStatus status_;
// |media_controller_request| is retained but not used.
mojo::PendingReceiver<mojom::MediaController> media_controller_receiver_;
......
......@@ -383,8 +383,8 @@ TEST_F(WiredDisplayMediaRouteProviderTest, SendMediaStatusUpdate) {
std::move(status_observer_ptr), base::BindOnce([](bool success) {}));
EXPECT_CALL(status_observer, OnMediaStatusUpdated(_))
.WillOnce(Invoke([&page_title](const MediaStatus& status) {
EXPECT_EQ(status.title, page_title);
.WillOnce(Invoke([&page_title](mojom::MediaStatusPtr status) {
EXPECT_EQ(status->title, page_title);
}));
receiver_creator_.receiver()->RunTitleChangeCallback(page_title);
base::RunLoop().RunUntilIdle();
......
......@@ -34,6 +34,10 @@ const int kInvalidTabId = -1;
const int kTimeoutMillis = 5 * 1000;
const uint8_t kBinaryMessage[] = {0x01, 0x02, 0x03, 0x04};
MATCHER_P(Equals, value, "") {
return arg.Equals(value);
}
// Creates a media route whose ID is |kRouteId|.
MediaRoute CreateMediaRoute() {
MediaRoute route(kRouteId, MediaSource(kSource), kSinkId, kDescription, true,
......@@ -403,7 +407,7 @@ void MediaRouterMojoTest::TestSearchSinks() {
void MediaRouterMojoTest::TestCreateMediaRouteController() {
MockMediaController media_controller;
mojom::MediaStatusObserverPtr route_controller_as_observer;
MediaStatus media_status;
mojom::MediaStatus media_status;
media_status.title = "test title";
router()->OnRoutesUpdated(MediaRouteProviderId::EXTENSION,
......@@ -440,8 +444,8 @@ void MediaRouterMojoTest::TestCreateMediaRouteController() {
// The MediaRouteController should be registered with the MediaRouteProvider
// as a MediaStatusObserver, and should also notify its own observers.
EXPECT_CALL(controller_observer, OnMediaStatusUpdated(media_status));
route_controller_as_observer->OnMediaStatusUpdated(media_status);
EXPECT_CALL(controller_observer, OnMediaStatusUpdated(Equals(media_status)));
route_controller_as_observer->OnMediaStatusUpdated(media_status.Clone());
base::RunLoop().RunUntilIdle();
}
......
......@@ -208,7 +208,7 @@ class MockMediaStatusObserver : public mojom::MediaStatusObserver {
explicit MockMediaStatusObserver(mojom::MediaStatusObserverRequest request);
~MockMediaStatusObserver() override;
MOCK_METHOD1(OnMediaStatusUpdated, void(const MediaStatus& status));
MOCK_METHOD1(OnMediaStatusUpdated, void(mojom::MediaStatusPtr status));
private:
mojo::Binding<mojom::MediaStatusObserver> binding_;
......@@ -255,7 +255,7 @@ class MockMediaRouteControllerObserver : public MediaRouteController::Observer {
scoped_refptr<MediaRouteController> controller);
~MockMediaRouteControllerObserver() override;
MOCK_METHOD1(OnMediaStatusUpdated, void(const MediaStatus& status));
MOCK_METHOD1(OnMediaStatusUpdated, void(const mojom::MediaStatus& status));
MOCK_METHOD0(OnControllerInvalidated, void());
};
......
......@@ -27,8 +27,6 @@ static_library("router") {
"media_sink.h",
"media_source.cc",
"media_source.h",
"media_status.cc",
"media_status.h",
"route_request_result.cc",
"route_request_result.h",
]
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/common/media_router/media_status.h"
namespace media_router {
MirroringMediaStatusExtraData::MirroringMediaStatusExtraData(
bool media_remoting_enabled)
: media_remoting_enabled(media_remoting_enabled) {}
MirroringMediaStatusExtraData::~MirroringMediaStatusExtraData() = default;
MediaStatus::MediaStatus() = default;
MediaStatus::MediaStatus(const MediaStatus& other) = default;
MediaStatus::~MediaStatus() = default;
MediaStatus& MediaStatus::operator=(const MediaStatus& other) = default;
bool MediaStatus::operator==(const MediaStatus& other) const {
return title == other.title &&
can_play_pause == other.can_play_pause && can_mute == other.can_mute &&
can_set_volume == other.can_set_volume && can_seek == other.can_seek &&
play_state == other.play_state && is_muted == other.is_muted &&
volume == other.volume && duration == other.duration &&
current_time == other.current_time;
}
} // namespace media_router
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_
#define CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_
#include <string>
#include "base/optional.h"
#include "base/time/time.h"
namespace media_router {
struct MirroringMediaStatusExtraData {
explicit MirroringMediaStatusExtraData(bool media_remoting_enabled);
~MirroringMediaStatusExtraData();
// Whether media remoting is enabled for mirroring session associated with the
// MediaRoute.
bool media_remoting_enabled;
};
// Represents the current state of a media content.
struct MediaStatus {
public:
enum class PlayState { PLAYING, PAUSED, BUFFERING };
MediaStatus();
MediaStatus(const MediaStatus& other);
~MediaStatus();
MediaStatus& operator=(const MediaStatus& other);
bool operator==(const MediaStatus& other) const;
// The main title of the media. For example, in a MediaStatus representing
// a YouTube Cast session, this could be the title of the video.
std::string title;
// If this is true, the media can be played and paused.
bool can_play_pause = false;
// If this is true, the media can be muted and unmuted.
bool can_mute = false;
// If this is true, the media's volume can be changed.
bool can_set_volume = false;
// If this is true, the media's current playback position can be changed.
bool can_seek = false;
PlayState play_state = PlayState::PLAYING;
bool is_muted = false;
// Current volume of the media, with 1 being the highest and 0 being the
// lowest/no sound. When |is_muted| is true, there should be no sound
// regardless of |volume|.
float volume = 0;
// The length of the media. A value of zero indicates that this is a media
// with no set duration (e.g. a live stream).
base::TimeDelta duration;
// Current playback position. Must be less than or equal to |duration|.
base::TimeDelta current_time;
// Only set for mirroring routes.
base::Optional<MirroringMediaStatusExtraData> mirroring_extra_data;
};
} // namespace media_router
#endif // CHROME_COMMON_MEDIA_ROUTER_MEDIA_STATUS_H_
......@@ -87,6 +87,7 @@ struct CastMediaSink {
int32 cast_channel_id;
};
// TODO(crbug.com/993437): Replace the use of this enum with a boolean field.
enum RouteControllerType {
kNone,
kGeneric,
......
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
mojom = "//chrome/common/media_router/mojom/media_status.mojom"
public_headers = [ "//chrome/common/media_router/media_status.h" ]
traits_headers =
[ "//chrome/common/media_router/mojom/media_status_mojom_traits.h" ]
sources = [
"//chrome/common/media_router/mojom/media_status_mojom_traits.cc",
]
type_mappings = [ "media_router.mojom.MediaStatus=media_router::MediaStatus" ]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/common/media_router/mojom/media_status_mojom_traits.h"
#include "base/strings/string_util.h"
#include "mojo/public/cpp/base/time_mojom_traits.h"
namespace mojo {
// static
bool StructTraits<media_router::mojom::MediaStatusDataView,
media_router::MediaStatus>::
Read(media_router::mojom::MediaStatusDataView data,
media_router::MediaStatus* out) {
if (!data.ReadTitle(&out->title) || !base::IsStringUTF8(out->title))
return false;
out->can_play_pause = data.can_play_pause();
out->can_mute = data.can_mute();
out->can_set_volume = data.can_set_volume();
out->can_seek = data.can_seek();
if (!data.ReadPlayState(&out->play_state))
return false;
out->is_muted = data.is_muted();
out->volume = data.volume();
if (!data.ReadDuration(&out->duration))
return false;
if (!data.ReadCurrentTime(&out->current_time))
return false;
return true;
}
} // namespace mojo
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_COMMON_MEDIA_ROUTER_MOJOM_MEDIA_STATUS_MOJOM_TRAITS_H_
#define CHROME_COMMON_MEDIA_ROUTER_MOJOM_MEDIA_STATUS_MOJOM_TRAITS_H_
#include <string>
#include "chrome/common/media_router/media_status.h"
#include "chrome/common/media_router/mojom/media_status.mojom.h"
namespace mojo {
template <>
struct EnumTraits<media_router::mojom::MediaStatus::PlayState,
media_router::MediaStatus::PlayState> {
static media_router::mojom::MediaStatus::PlayState ToMojom(
media_router::MediaStatus::PlayState play_state) {
switch (play_state) {
case media_router::MediaStatus::PlayState::PLAYING:
return media_router::mojom::MediaStatus::PlayState::PLAYING;
case media_router::MediaStatus::PlayState::PAUSED:
return media_router::mojom::MediaStatus::PlayState::PAUSED;
case media_router::MediaStatus::PlayState::BUFFERING:
return media_router::mojom::MediaStatus::PlayState::BUFFERING;
}
NOTREACHED() << "Unknown play state " << static_cast<int>(play_state);
return media_router::mojom::MediaStatus::PlayState::PLAYING;
}
static bool FromMojom(media_router::mojom::MediaStatus::PlayState input,
media_router::MediaStatus::PlayState* output) {
switch (input) {
case media_router::mojom::MediaStatus::PlayState::PLAYING:
*output = media_router::MediaStatus::PlayState::PLAYING;
return true;
case media_router::mojom::MediaStatus::PlayState::PAUSED:
*output = media_router::MediaStatus::PlayState::PAUSED;
return true;
case media_router::mojom::MediaStatus::PlayState::BUFFERING:
*output = media_router::MediaStatus::PlayState::BUFFERING;
return true;
}
NOTREACHED() << "Unknown play state " << static_cast<int>(input);
return false;
}
};
template <>
struct StructTraits<media_router::mojom::MediaStatusDataView,
media_router::MediaStatus> {
static bool Read(media_router::mojom::MediaStatusDataView data,
media_router::MediaStatus* out);
static const std::string& title(const media_router::MediaStatus& status) {
return status.title;
}
static bool can_play_pause(const media_router::MediaStatus& status) {
return status.can_play_pause;
}
static bool can_mute(const media_router::MediaStatus& status) {
return status.can_mute;
}
static bool can_set_volume(const media_router::MediaStatus& status) {
return status.can_set_volume;
}
static bool can_seek(const media_router::MediaStatus& status) {
return status.can_seek;
}
static media_router::MediaStatus::PlayState play_state(
const media_router::MediaStatus& status) {
return status.play_state;
}
static bool is_muted(const media_router::MediaStatus& status) {
return status.is_muted;
}
static float volume(const media_router::MediaStatus& status) {
return status.volume;
}
static base::TimeDelta duration(const media_router::MediaStatus& status) {
return status.duration;
}
static base::TimeDelta current_time(const media_router::MediaStatus& status) {
return status.current_time;
}
};
} // namespace mojo
#endif // CHROME_COMMON_MEDIA_ROUTER_MOJOM_MEDIA_STATUS_MOJOM_TRAITS_H_
......@@ -2,7 +2,4 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
typemaps = [
"//chrome/common/media_router/mojom/media_router.typemap",
"//chrome/common/media_router/mojom/media_status.typemap",
]
typemaps = [ "//chrome/common/media_router/mojom/media_router.typemap" ]
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment