Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1273)

Unified Diff: chrome/browser/media/router/mojo/media_route_controller.cc

Issue 2728543009: [Media Router] Custom Controls 2 - add MediaRouter::GetRouteController() (Closed)
Patch Set: Combine CreateMRController and SetMRStatusObserver Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698