diff options
Diffstat (limited to 'chromium/services/media_session/media_controller.cc')
-rw-r--r-- | chromium/services/media_session/media_controller.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/chromium/services/media_session/media_controller.cc b/chromium/services/media_session/media_controller.cc index 4d48b5992f4..19afe2c0dc1 100644 --- a/chromium/services/media_session/media_controller.cc +++ b/chromium/services/media_session/media_controller.cc @@ -49,13 +49,11 @@ void MediaController::ToggleSuspendResume() { } } -void MediaController::AddObserver(mojom::MediaSessionObserverPtr observer) { +void MediaController::AddObserver(mojom::MediaControllerObserverPtr observer) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Flush the new observer with the state. We always flush the metadata as that - // is optional so null is a valid value whereas the session info is required. - if (!session_info_.is_null()) - observer->MediaSessionInfoChanged(session_info_.Clone()); + // Flush the new observer with the current state. + observer->MediaSessionInfoChanged(session_info_.Clone()); observer->MediaSessionMetadataChanged(session_metadata_); observer->MediaSessionActionsChanged(session_actions_); @@ -65,7 +63,7 @@ void MediaController::AddObserver(mojom::MediaSessionObserverPtr observer) { void MediaController::MediaSessionInfoChanged(mojom::MediaSessionInfoPtr info) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - observers_.ForAllPtrs([&info](mojom::MediaSessionObserver* observer) { + observers_.ForAllPtrs([&info](mojom::MediaControllerObserver* observer) { observer->MediaSessionInfoChanged(info.Clone()); }); @@ -76,7 +74,7 @@ void MediaController::MediaSessionMetadataChanged( const base::Optional<MediaMetadata>& metadata) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - observers_.ForAllPtrs([&metadata](mojom::MediaSessionObserver* observer) { + observers_.ForAllPtrs([&metadata](mojom::MediaControllerObserver* observer) { observer->MediaSessionMetadataChanged(metadata); }); @@ -87,7 +85,7 @@ void MediaController::MediaSessionActionsChanged( const std::vector<mojom::MediaSessionAction>& actions) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - observers_.ForAllPtrs([&actions](mojom::MediaSessionObserver* observer) { + observers_.ForAllPtrs([&actions](mojom::MediaControllerObserver* observer) { observer->MediaSessionActionsChanged(actions); }); @@ -131,6 +129,15 @@ bool MediaController::SetMediaSession(mojom::MediaSession* session) { mojom::MediaSessionObserverPtr observer; session_binding_.Bind(mojo::MakeRequest(&observer)); session->AddObserver(std::move(observer)); + } else { + // If we are no longer bound to a session we should flush the observers + // with empty data. + observers_.ForAllPtrs([](mojom::MediaControllerObserver* observer) { + observer->MediaSessionInfoChanged(nullptr); + observer->MediaSessionMetadataChanged(base::nullopt); + observer->MediaSessionActionsChanged( + std::vector<mojom::MediaSessionAction>()); + }); } } |