Commit 64f9f05a authored by Noah Rose Ledesma's avatar Noah Rose Ledesma Committed by Commit Bot

Create IPC messages for when audio output device changing is disabled

This change adds IPC message declarations, senders, and receivers for
communicating between the renderer and browser that audio device
changing is no longer possible.

When the audio output device cannot be changed, the Global Media
Controls UI should not display a device picker. This change is a part
of a series of changes for appropriately hiding this UI.

Bug: 1120620
Change-Id: Ib5610fa95d56f284e1957c59bd4f098112c1a81a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2368285
Commit-Queue: Noah Rose Ledesma <noahrose@google.com>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#802305}
parent c4799ee8
......@@ -242,6 +242,9 @@ bool MediaWebContentsObserver::OnMessageReceived(
OnPictureInPictureAvailabilityChanged)
IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnAudioOutputSinkChanged,
OnAudioOutputSinkChanged);
IPC_MESSAGE_HANDLER(
MediaPlayerDelegateHostMsg_OnAudioOutputSinkChangingDisabled,
OnAudioOutputSinkChangingDisabled)
IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnBufferUnderflow,
OnBufferUnderflow)
IPC_MESSAGE_UNHANDLED(handled = false)
......@@ -433,6 +436,13 @@ void MediaWebContentsObserver::OnReceivedTranslatedDeviceId(
MediaPlayerId(render_frame_host, delegate_id), raw_device_id);
}
void MediaWebContentsObserver::OnAudioOutputSinkChangingDisabled(
RenderFrameHost* render_frame_host,
int delegate_id) {
session_controllers_manager_.OnAudioOutputSinkChangingDisabled(
MediaPlayerId(render_frame_host, delegate_id));
}
void MediaWebContentsObserver::OnBufferUnderflow(
RenderFrameHost* render_frame_host,
int delegate_id) {
......
......@@ -156,6 +156,8 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
void OnAudioOutputSinkChanged(RenderFrameHost* render_frame_host,
int delegate_id,
std::string hashed_device_id);
void OnAudioOutputSinkChangingDisabled(RenderFrameHost* render_frame_host,
int delegate_id);
void OnBufferUnderflow(RenderFrameHost* render_frame_host, int delegate_id);
device::mojom::WakeLock* GetAudioWakeLock();
......
......@@ -166,6 +166,8 @@ void MediaSessionController::OnAudioOutputSinkChanged(
media_session_->OnAudioOutputSinkIdChanged();
}
void MediaSessionController::OnAudioOutputSinkChangingDisabled() {}
bool MediaSessionController::IsMediaSessionNeeded() const {
if (!is_playback_in_progress_)
return false;
......
......@@ -81,6 +81,9 @@ class CONTENT_EXPORT MediaSessionController
// Called when the audio output device has changed.
void OnAudioOutputSinkChanged(const std::string& raw_device_id);
// Called when the ability to switch audio output devices has been disabled.
void OnAudioOutputSinkChangingDisabled();
private:
bool IsMediaSessionNeeded() const;
......
......@@ -122,6 +122,15 @@ void MediaSessionControllersManager::OnAudioOutputSinkChanged(
controller->OnAudioOutputSinkChanged(raw_device_id);
}
void MediaSessionControllersManager::OnAudioOutputSinkChangingDisabled(
const MediaPlayerId& id) {
if (!IsMediaSessionEnabled())
return;
MediaSessionController* const controller = FindOrCreateController(id);
controller->OnAudioOutputSinkChangingDisabled();
}
MediaSessionController* MediaSessionControllersManager::FindOrCreateController(
const MediaPlayerId& id) {
auto it = controllers_map_.find(id);
......
......@@ -77,6 +77,10 @@ class CONTENT_EXPORT MediaSessionControllersManager {
void OnAudioOutputSinkChanged(const MediaPlayerId& id,
const std::string& raw_device_id);
// Called when the ability to switch audio output devices for the player |id|
// has been disabled.
void OnAudioOutputSinkChangingDisabled(const MediaPlayerId& id);
private:
using ControllersMap =
std::map<MediaPlayerId, std::unique_ptr<MediaSessionController>>;
......
......@@ -128,6 +128,10 @@ IPC_MESSAGE_ROUTED2(MediaPlayerDelegateHostMsg_OnAudioOutputSinkChanged,
int /* delegate_id, distinguishes instances */,
std::string /* hashed_device_id */)
IPC_MESSAGE_ROUTED1(
MediaPlayerDelegateHostMsg_OnAudioOutputSinkChangingDisabled,
int /* delegate_id, distinguishes instances */)
IPC_MESSAGE_ROUTED1(MediaPlayerDelegateHostMsg_OnBufferUnderflow,
int /* delegate_id, distinguishes instances */)
......
......@@ -230,7 +230,10 @@ void RendererWebMediaPlayerDelegate::DidAudioOutputSinkChange(
}
void RendererWebMediaPlayerDelegate::DidDisableAudioOutputSinkChanges(
int delegate_id) {}
int delegate_id) {
Send(new MediaPlayerDelegateHostMsg_OnAudioOutputSinkChangingDisabled(
routing_id(), delegate_id));
}
void RendererWebMediaPlayerDelegate::DidBufferUnderflow(int player_id) {
Send(new MediaPlayerDelegateHostMsg_OnBufferUnderflow(routing_id(),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment