| Index: chrome/browser/media/router/mojo/media_route_controller.cc
|
| diff --git a/chrome/browser/media/router/mojo/media_route_controller.cc b/chrome/browser/media/router/mojo/media_route_controller.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e56866b082eb9a7fc70efbe3ca885dc2bfad376f
|
| --- /dev/null
|
| +++ b/chrome/browser/media/router/mojo/media_route_controller.cc
|
| @@ -0,0 +1,110 @@
|
| +// 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/browser/media/router/mojo/media_route_controller.h"
|
| +
|
| +#include "chrome/browser/media/router/media_route_status_observer.h"
|
| +#include "chrome/browser/media/router/media_router.h"
|
| +#include "chrome/browser/media/router/media_status.h"
|
| +#include "chrome/browser/media/router/mojo/media_router.mojom.h"
|
| +#include "mojo/public/cpp/bindings/interface_request.h"
|
| +
|
| +namespace media_router {
|
| +
|
| +MediaRouteController::MediaRouteController(
|
| + MediaRoute::Id route_id,
|
| + mojom::MediaRouteProvider* provider,
|
| + base::Callback<void()> destroyer_callback)
|
| + : destroyer_callback_(destroyer_callback) {
|
| + provider->CreateMediaRouteController(
|
| + route_id, mojo::MakeRequest<mojom::MediaController>(&media_controller_),
|
| + base::Bind(&MediaRouteController::OnControllerSet,
|
| + base::Unretained(this)));
|
| +}
|
| +MediaRouteController::~MediaRouteController() {}
|
| +
|
| +void MediaRouteController::OnControllerSet(bool success) {
|
| + if (success) {
|
| + mojom::MediaStatusObserverPtr observer;
|
| + binding_ = base::MakeUnique<mojo::Binding<mojom::MediaStatusObserver>>(
|
| + this, mojo::MakeRequest<mojom::MediaStatusObserver>(&observer));
|
| + binding_->set_connection_error_handler(destroyer_callback_);
|
| + media_controller_->SetObserver(std::move(observer));
|
| + } else {
|
| + destroyer_callback_.Run();
|
| + }
|
| +}
|
| +
|
| +void MediaRouteController::Play() {
|
| + media_controller_->Play();
|
| +}
|
| +
|
| +void MediaRouteController::Pause() {
|
| + media_controller_->Pause();
|
| +}
|
| +
|
| +void MediaRouteController::Seek(uint32_t time) {
|
| + media_controller_->Seek(time);
|
| +}
|
| +
|
| +void MediaRouteController::SetMute(bool mute) {
|
| + media_controller_->SetMute(mute);
|
| +}
|
| +
|
| +void MediaRouteController::SetVolume(float volume) {
|
| + media_controller_->SetVolume(volume);
|
| +}
|
| +
|
| +void MediaRouteController::AddObserver(MediaRouteStatusObserver* observer) {
|
| + observers_.insert(observer);
|
| + OnDummyMediaStatusUpdated();
|
| +}
|
| +
|
| +void MediaRouteController::RemoveObserver(MediaRouteStatusObserver* observer) {
|
| + observers_.erase(observer);
|
| + if (observers_.empty()) {
|
| + destroyer_callback_.Run();
|
| + // |this| gets destroyed here!
|
| + }
|
| +}
|
| +
|
| +void MediaRouteController::OnMediaStatusUpdated(
|
| + mojom::MediaStatusPtr mojo_status) {
|
| + // TODO(takumif): Add a typemap for MediaStatus.
|
| + MediaStatus status;
|
| + status.title = mojo_status->title;
|
| + status.status = mojo_status->status;
|
| + status.can_play_pause = mojo_status->can_play_pause;
|
| + status.can_mute = mojo_status->can_mute;
|
| + status.can_set_volume = mojo_status->can_set_volume;
|
| + status.can_seek = mojo_status->can_seek;
|
| + status.is_paused = mojo_status->is_paused;
|
| + status.is_muted = mojo_status->is_muted;
|
| + status.volume = mojo_status->volume;
|
| + status.duration = mojo_status->duration;
|
| + status.current_time = mojo_status->current_time;
|
| +
|
| + for (MediaRouteStatusObserver* observer : observers_)
|
| + observer->OnMediaRouteStatusUpdated(status);
|
| +}
|
| +
|
| +void MediaRouteController::OnDummyMediaStatusUpdated() {
|
| + MediaStatus status;
|
| + status.title = "Title from MRC";
|
| + status.status = "Status from MRC";
|
| + status.can_play_pause = true;
|
| + status.can_mute = true;
|
| + status.can_set_volume = true;
|
| + status.can_seek = true;
|
| + status.is_paused = true;
|
| + status.is_muted = true;
|
| + status.duration = 10000;
|
| + status.current_time = 5000;
|
| + status.volume = 0.7;
|
| +
|
| + for (MediaRouteStatusObserver* observer : observers_)
|
| + observer->OnMediaRouteStatusUpdated(status);
|
| +}
|
| +
|
| +} // namespace media_router
|
|
|