OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/media/router/mojo/media_route_controller.h" |
| 6 |
| 7 #include "chrome/browser/media/router/media_route_status_observer.h" |
| 8 #include "chrome/browser/media/router/media_router.h" |
| 9 #include "chrome/browser/media/router/media_status.h" |
| 10 #include "chrome/browser/media/router/mojo/media_router.mojom.h" |
| 11 #include "mojo/public/cpp/bindings/interface_request.h" |
| 12 |
| 13 namespace media_router { |
| 14 |
| 15 MediaRouteController::MediaRouteController( |
| 16 MediaRoute::Id route_id, |
| 17 mojom::MediaRouteProvider* provider, |
| 18 base::Callback<void()> destroyer_callback) |
| 19 : destroyer_callback_(destroyer_callback) { |
| 20 provider->CreateMediaRouteController( |
| 21 route_id, mojo::MakeRequest<mojom::MediaController>(&media_controller_), |
| 22 base::Bind(&MediaRouteController::OnControllerSet, |
| 23 base::Unretained(this))); |
| 24 } |
| 25 MediaRouteController::~MediaRouteController() {} |
| 26 |
| 27 void MediaRouteController::OnControllerSet(bool success) { |
| 28 if (success) { |
| 29 mojom::MediaStatusObserverPtr observer; |
| 30 binding_ = base::MakeUnique<mojo::Binding<mojom::MediaStatusObserver>>( |
| 31 this, mojo::MakeRequest<mojom::MediaStatusObserver>(&observer)); |
| 32 binding_->set_connection_error_handler(destroyer_callback_); |
| 33 media_controller_->SetObserver(std::move(observer)); |
| 34 } else { |
| 35 destroyer_callback_.Run(); |
| 36 } |
| 37 } |
| 38 |
| 39 void MediaRouteController::Play() { |
| 40 media_controller_->Play(); |
| 41 } |
| 42 |
| 43 void MediaRouteController::Pause() { |
| 44 media_controller_->Pause(); |
| 45 } |
| 46 |
| 47 void MediaRouteController::Seek(uint32_t time) { |
| 48 media_controller_->Seek(time); |
| 49 } |
| 50 |
| 51 void MediaRouteController::SetMute(bool mute) { |
| 52 media_controller_->SetMute(mute); |
| 53 } |
| 54 |
| 55 void MediaRouteController::SetVolume(float volume) { |
| 56 media_controller_->SetVolume(volume); |
| 57 } |
| 58 |
| 59 void MediaRouteController::AddObserver(MediaRouteStatusObserver* observer) { |
| 60 observers_.insert(observer); |
| 61 OnDummyMediaStatusUpdated(); |
| 62 } |
| 63 |
| 64 void MediaRouteController::RemoveObserver(MediaRouteStatusObserver* observer) { |
| 65 observers_.erase(observer); |
| 66 if (observers_.empty()) { |
| 67 destroyer_callback_.Run(); |
| 68 // |this| gets destroyed here! |
| 69 } |
| 70 } |
| 71 |
| 72 void MediaRouteController::OnMediaStatusUpdated( |
| 73 mojom::MediaStatusPtr mojo_status) { |
| 74 // TODO(takumif): Add a typemap for MediaStatus. |
| 75 MediaStatus status; |
| 76 status.title = mojo_status->title; |
| 77 status.status = mojo_status->status; |
| 78 status.can_play_pause = mojo_status->can_play_pause; |
| 79 status.can_mute = mojo_status->can_mute; |
| 80 status.can_set_volume = mojo_status->can_set_volume; |
| 81 status.can_seek = mojo_status->can_seek; |
| 82 status.is_paused = mojo_status->is_paused; |
| 83 status.is_muted = mojo_status->is_muted; |
| 84 status.volume = mojo_status->volume; |
| 85 status.duration = mojo_status->duration; |
| 86 status.current_time = mojo_status->current_time; |
| 87 |
| 88 for (MediaRouteStatusObserver* observer : observers_) |
| 89 observer->OnMediaRouteStatusUpdated(status); |
| 90 } |
| 91 |
| 92 void MediaRouteController::OnDummyMediaStatusUpdated() { |
| 93 MediaStatus status; |
| 94 status.title = "Title from MRC"; |
| 95 status.status = "Status from MRC"; |
| 96 status.can_play_pause = true; |
| 97 status.can_mute = true; |
| 98 status.can_set_volume = true; |
| 99 status.can_seek = true; |
| 100 status.is_paused = true; |
| 101 status.is_muted = true; |
| 102 status.duration = 10000; |
| 103 status.current_time = 5000; |
| 104 status.volume = 0.7; |
| 105 |
| 106 for (MediaRouteStatusObserver* observer : observers_) |
| 107 observer->OnMediaRouteStatusUpdated(status); |
| 108 } |
| 109 |
| 110 } // namespace media_router |
OLD | NEW |