| 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
|
| index 372d33a7ca859377dd76c959e81767e8139fea1c..0fd4f8a574473438b4cd741239623aab3714e372 100644
|
| --- a/chrome/browser/media/router/mojo/media_route_controller.cc
|
| +++ b/chrome/browser/media/router/mojo/media_route_controller.cc
|
| @@ -6,6 +6,8 @@
|
|
|
| #include <utility>
|
|
|
| +#include "chrome/browser/media/router/media_router.h"
|
| +
|
| namespace media_router {
|
|
|
| MediaRouteController::Observer::Observer(
|
| @@ -20,7 +22,6 @@ MediaRouteController::Observer::~Observer() {
|
| }
|
|
|
| void MediaRouteController::Observer::InvalidateController() {
|
| - controller_->RemoveObserver(this);
|
| controller_ = nullptr;
|
| OnControllerInvalidated();
|
| }
|
| @@ -29,52 +30,87 @@ void MediaRouteController::Observer::OnControllerInvalidated() {}
|
|
|
| MediaRouteController::MediaRouteController(
|
| const MediaRoute::Id& route_id,
|
| - mojom::MediaControllerPtr media_controller)
|
| - : route_id_(route_id), media_controller_(std::move(media_controller)) {
|
| - DCHECK(media_controller_.is_bound());
|
| - media_controller_.set_connection_error_handler(
|
| - base::Bind(&MediaRouteController::Invalidate, base::Unretained(this)));
|
| + mojom::MediaControllerPtr mojo_media_controller,
|
| + MediaRouter* media_router)
|
| + : route_id_(route_id),
|
| + mojo_media_controller_(std::move(mojo_media_controller)),
|
| + media_router_(media_router),
|
| + binding_(this) {
|
| + DCHECK(mojo_media_controller_.is_bound());
|
| + DCHECK(media_router);
|
| + mojo_media_controller_.set_connection_error_handler(base::Bind(
|
| + &MediaRouteController::OnMojoConnectionError, base::Unretained(this)));
|
| }
|
|
|
| void MediaRouteController::Play() {
|
| - media_controller_->Play();
|
| + DCHECK(is_valid_);
|
| + mojo_media_controller_->Play();
|
| }
|
|
|
| void MediaRouteController::Pause() {
|
| - media_controller_->Pause();
|
| + DCHECK(is_valid_);
|
| + mojo_media_controller_->Pause();
|
| }
|
|
|
| void MediaRouteController::Seek(base::TimeDelta time) {
|
| - media_controller_->Seek(time);
|
| + DCHECK(is_valid_);
|
| + mojo_media_controller_->Seek(time);
|
| }
|
|
|
| void MediaRouteController::SetMute(bool mute) {
|
| - media_controller_->SetMute(mute);
|
| + DCHECK(is_valid_);
|
| + mojo_media_controller_->SetMute(mute);
|
| }
|
|
|
| void MediaRouteController::SetVolume(float volume) {
|
| - media_controller_->SetVolume(volume);
|
| + DCHECK(is_valid_);
|
| + mojo_media_controller_->SetVolume(volume);
|
| }
|
|
|
| void MediaRouteController::OnMediaStatusUpdated(const MediaStatus& status) {
|
| + DCHECK(is_valid_);
|
| for (Observer& observer : observers_)
|
| observer.OnMediaStatusUpdated(status);
|
| }
|
|
|
| void MediaRouteController::Invalidate() {
|
| + is_valid_ = false;
|
| + binding_.Close();
|
| + mojo_media_controller_.reset();
|
| for (Observer& observer : observers_)
|
| observer.InvalidateController();
|
| // |this| is deleted here!
|
| }
|
|
|
| -MediaRouteController::~MediaRouteController() {}
|
| +mojom::MediaStatusObserverPtr MediaRouteController::BindObserverPtr() {
|
| + DCHECK(is_valid_);
|
| + DCHECK(!binding_.is_bound());
|
| + mojom::MediaStatusObserverPtr observer_ptr =
|
| + binding_.CreateInterfacePtrAndBind();
|
| + binding_.set_connection_error_handler(base::Bind(
|
| + &MediaRouteController::OnMojoConnectionError, base::Unretained(this)));
|
| +
|
| + return observer_ptr;
|
| +}
|
| +
|
| +MediaRouteController::~MediaRouteController() {
|
| + if (is_valid_)
|
| + media_router_->DetachRouteController(route_id_, this);
|
| +}
|
|
|
| void MediaRouteController::AddObserver(Observer* observer) {
|
| + DCHECK(is_valid_);
|
| observers_.AddObserver(observer);
|
| }
|
|
|
| void MediaRouteController::RemoveObserver(Observer* observer) {
|
| + DCHECK(is_valid_);
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| +void MediaRouteController::OnMojoConnectionError() {
|
| + media_router_->DetachRouteController(route_id_, this);
|
| + Invalidate();
|
| +}
|
| +
|
| } // namespace media_router
|
|
|