Commit a4a04ae5 authored by Wojciech Dzierżanowski's avatar Wojciech Dzierżanowski Committed by Chromium LUCI CQ

Handle player_id reuse as bad mojo message

MediaPlayerId objects are supposed to be unique browser-wide. A
well-behaved renederer process will not try to reuse them.

Bug: 1168737
Change-Id: Iaa1d54face4bd475d6df8a00d282a5b88242b735
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2640381Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Commit-Queue: Wojciech Dzierżanowski <wdzierzanowski@opera.com>
Cr-Commit-Position: refs/heads/master@{#845642}
parent 1cba3941
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "ipc/ipc_message_macros.h" #include "ipc/ipc_message_macros.h"
#include "mojo/public/cpp/bindings/message.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/device/public/mojom/wake_lock_context.mojom.h" #include "services/device/public/mojom/wake_lock_context.mojom.h"
#include "services/media_session/public/cpp/media_position.h" #include "services/media_session/public/cpp/media_position.h"
...@@ -582,12 +583,11 @@ void MediaWebContentsObserver::BindMediaPlayerHost( ...@@ -582,12 +583,11 @@ void MediaWebContentsObserver::BindMediaPlayerHost(
void MediaWebContentsObserver::OnMediaPlayerAdded( void MediaWebContentsObserver::OnMediaPlayerAdded(
mojo::PendingRemote<media::mojom::MediaPlayer> player_remote, mojo::PendingRemote<media::mojom::MediaPlayer> player_remote,
MediaPlayerId player_id) { MediaPlayerId player_id) {
if (!media_player_remotes_.contains(player_id)) { if (media_player_remotes_.contains(player_id)) {
media_player_remotes_[player_id] = mojo::ReportBadMessage("Unexpected player_id reuse");
mojo::Remote<media::mojom::MediaPlayer>(); return;
} }
media_player_remotes_[player_id].reset();
media_player_remotes_[player_id].Bind(std::move(player_remote)); media_player_remotes_[player_id].Bind(std::move(player_remote));
media_player_remotes_[player_id].set_disconnect_handler(base::BindOnce( media_player_remotes_[player_id].set_disconnect_handler(base::BindOnce(
[](MediaWebContentsObserver* observer, const MediaPlayerId& player_id) { [](MediaWebContentsObserver* observer, const MediaPlayerId& player_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