Commit bce50fa2 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Migrate MediaStream and related classes to the new Mojo types

This CL converts implementations of media_device.mojom and related classes.
Major changes are as below,

 - Change MediaDevicesListenerPtr with PendingRemote or Remote
 - Change BindingSet with ReceiverSet
 - Change Binding with Receiver

Bug: 955171
Change-Id: I7b441d04659ace82ba10ab8b51e0d8039c467670
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1760835Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarRaymes Khoury <raymes@chromium.org>
Commit-Queue: Kinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#690273}
parent 3e6aeeec
......@@ -170,7 +170,7 @@ void MediaDevicesDispatcherHost::AddMediaDevicesListener(
bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
blink::mojom::MediaDevicesListenerPtr listener) {
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (!subscribe_audio_input && !subscribe_video_input &&
......
......@@ -56,7 +56,8 @@ class CONTENT_EXPORT MediaDevicesDispatcherHost
bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
blink::mojom::MediaDevicesListenerPtr listener) override;
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener)
override;
private:
using GetVideoInputDeviceFormatsCallback =
......
......@@ -31,7 +31,8 @@
#include "media/base/media_switches.h"
#include "media/capture/video/fake_video_capture_device_factory.h"
#include "media/capture/video/video_capture_system_impl.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/origin.h"
......@@ -71,14 +72,15 @@ class MockMediaDevicesListener : public blink::mojom::MediaDevicesListener {
void(blink::MediaDeviceType,
const blink::WebMediaDeviceInfoArray&));
blink::mojom::MediaDevicesListenerPtr CreateInterfacePtrAndBind() {
blink::mojom::MediaDevicesListenerPtr listener;
bindings_.AddBinding(this, mojo::MakeRequest(&listener));
mojo::PendingRemote<blink::mojom::MediaDevicesListener>
CreatePendingRemoteAndBind() {
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener;
receivers_.Add(this, listener.InitWithNewPipeAndPassReceiver());
return listener;
}
private:
mojo::BindingSet<blink::mojom::MediaDevicesListener> bindings_;
mojo::ReceiverSet<blink::mojom::MediaDevicesListener> receivers_;
};
} // namespace
......@@ -369,7 +371,7 @@ class MediaDevicesDispatcherHostTest : public testing::TestWithParam<GURL> {
type == blink::MEDIA_DEVICE_TYPE_AUDIO_INPUT,
type == blink::MEDIA_DEVICE_TYPE_VIDEO_INPUT,
type == blink::MEDIA_DEVICE_TYPE_AUDIO_OUTPUT,
device_change_listener.CreateInterfacePtrAndBind());
device_change_listener.CreatePendingRemoteAndBind());
blink::WebMediaDeviceInfoArray changed_devices;
EXPECT_CALL(device_change_listener, OnDevicesChanged(type, _))
.WillRepeatedly(SaveArg<1>(&changed_devices));
......
......@@ -281,11 +281,11 @@ MediaDevicesManager::SubscriptionRequest::SubscriptionRequest(
int render_process_id,
int render_frame_id,
const BoolDeviceTypes& subscribe_types,
blink::mojom::MediaDevicesListenerPtr listener)
mojo::Remote<blink::mojom::MediaDevicesListener> listener)
: render_process_id(render_process_id),
render_frame_id(render_frame_id),
subscribe_types(subscribe_types),
listener(std::move(listener)) {}
listener_(std::move(listener)) {}
MediaDevicesManager::SubscriptionRequest::SubscriptionRequest(
SubscriptionRequest&&) = default;
......@@ -450,13 +450,13 @@ uint32_t MediaDevicesManager::SubscribeDeviceChangeNotifications(
int render_process_id,
int render_frame_id,
const BoolDeviceTypes& subscribe_types,
blink::mojom::MediaDevicesListenerPtr listener) {
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
StartMonitoring();
uint32_t subscription_id = ++last_subscription_id_;
blink::mojom::MediaDevicesListenerPtr media_devices_listener =
std::move(listener);
media_devices_listener.set_connection_error_handler(
mojo::Remote<blink::mojom::MediaDevicesListener> media_devices_listener;
media_devices_listener.Bind(std::move(listener));
media_devices_listener.set_disconnect_handler(
base::BindOnce(&MediaDevicesManager::UnsubscribeDeviceChangeNotifications,
weak_factory_.GetWeakPtr(), subscription_id));
subscriptions_.emplace(
......@@ -1143,7 +1143,7 @@ void MediaDevicesManager::NotifyDeviceChange(
return;
const SubscriptionRequest& request = it->second;
request.listener->OnDevicesChanged(
request.listener_->OnDevicesChanged(
type, TranslateMediaDeviceInfoArray(has_permission, salt_and_origin,
device_infos));
}
......
......@@ -22,6 +22,8 @@
#include "media/audio/audio_device_description.h"
#include "media/capture/video/video_capture_device_descriptor.h"
#include "media/capture/video_capture_types.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/common/mediastream/media_devices.h"
#include "third_party/blink/public/mojom/mediastream/media_devices.mojom.h"
......@@ -109,7 +111,7 @@ class CONTENT_EXPORT MediaDevicesManager
int render_process_id,
int render_frame_id,
const BoolDeviceTypes& subscribe_types,
blink::mojom::MediaDevicesListenerPtr listener);
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener);
void UnsubscribeDeviceChangeNotifications(uint32_t subscription_id);
// Tries to start device monitoring. If successful, enables caching of
......@@ -160,10 +162,11 @@ class CONTENT_EXPORT MediaDevicesManager
struct EnumerationRequest;
struct SubscriptionRequest {
SubscriptionRequest(int render_process_id,
int render_frame_id,
const BoolDeviceTypes& subscribe_types,
blink::mojom::MediaDevicesListenerPtr listener);
SubscriptionRequest(
int render_process_id,
int render_frame_id,
const BoolDeviceTypes& subscribe_types,
mojo::Remote<blink::mojom::MediaDevicesListener> listener);
SubscriptionRequest(SubscriptionRequest&&);
~SubscriptionRequest();
......@@ -172,7 +175,7 @@ class CONTENT_EXPORT MediaDevicesManager
int render_process_id;
int render_frame_id;
BoolDeviceTypes subscribe_types;
blink::mojom::MediaDevicesListenerPtr listener;
mojo::Remote<blink::mojom::MediaDevicesListener> listener_;
};
// Class containing the state of each spawned enumeration. This state is
......
......@@ -25,7 +25,8 @@
#include "media/audio/test_audio_thread.h"
#include "media/capture/video/fake_video_capture_device_factory.h"
#include "media/capture/video/video_capture_system_impl.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
......@@ -190,14 +191,15 @@ class MockMediaDevicesListener : public blink::mojom::MediaDevicesListener {
void(blink::MediaDeviceType,
const blink::WebMediaDeviceInfoArray&));
blink::mojom::MediaDevicesListenerPtr CreateInterfacePtrAndBind() {
blink::mojom::MediaDevicesListenerPtr listener;
bindings_.AddBinding(this, mojo::MakeRequest(&listener));
mojo::PendingRemote<blink::mojom::MediaDevicesListener>
CreateInterfacePtrAndBind() {
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener;
receivers_.Add(this, listener.InitWithNewPipeAndPassReceiver());
return listener;
}
private:
mojo::BindingSet<blink::mojom::MediaDevicesListener> bindings_;
mojo::ReceiverSet<blink::mojom::MediaDevicesListener> receivers_;
};
class MockMediaDevicesManagerClient {
......
......@@ -15,6 +15,7 @@
#include "content/renderer/pepper/renderer_ppapi_host_impl.h"
#include "content/renderer/render_frame_impl.h"
#include "media/media_buildflags.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "ppapi/shared_impl/ppb_device_ref_shared.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
......@@ -123,9 +124,9 @@ size_t PepperMediaDeviceManager::StartMonitoringDevices(
bool subscribe_audio_output = type == PP_DEVICETYPE_DEV_AUDIOOUTPUT;
CHECK(subscribe_audio_input || subscribe_video_input ||
subscribe_audio_output);
blink::mojom::MediaDevicesListenerPtr listener;
mojo::PendingRemote<blink::mojom::MediaDevicesListener> listener;
size_t subscription_id =
bindings_.AddBinding(this, mojo::MakeRequest(&listener));
receivers_.Add(this, listener.InitWithNewPipeAndPassReceiver());
GetMediaDevicesDispatcher()->AddMediaDevicesListener(
subscribe_audio_input, subscribe_video_input, subscribe_audio_output,
std::move(listener));
......@@ -144,7 +145,7 @@ void PepperMediaDeviceManager::StopMonitoringDevices(PP_DeviceType_Dev type,
[subscription_id](const Subscription& subscription) {
return subscription.first == subscription_id;
});
bindings_.RemoveBinding(subscription_id);
receivers_.Remove(subscription_id);
}
int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type,
......
......@@ -15,7 +15,7 @@
#include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_frame_observer_tracker.h"
#include "content/renderer/pepper/pepper_device_enumeration_host_helper.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "ppapi/c/pp_instance.h"
#include "third_party/blink/public/common/mediastream/media_devices.h"
#include "third_party/blink/public/mojom/mediastream/media_devices.mojom.h"
......@@ -118,7 +118,7 @@ class PepperMediaDeviceManager
blink::mojom::MediaStreamDispatcherHostPtr dispatcher_host_;
blink::mojom::MediaDevicesDispatcherHostPtr media_devices_dispatcher_;
mojo::BindingSet<blink::mojom::MediaDevicesListener> bindings_;
mojo::ReceiverSet<blink::mojom::MediaDevicesListener> receivers_;
DISALLOW_COPY_AND_ASSIGN(PepperMediaDeviceManager);
};
......
......@@ -110,7 +110,7 @@ interface MediaDevicesDispatcherHost {
AddMediaDevicesListener(bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
MediaDevicesListener listener);
pending_remote<MediaDevicesListener> listener);
};
// This object lives in the renderer process and is used by the browser process
......
......@@ -6,6 +6,7 @@
#include <utility>
#include "mojo/public/cpp/bindings/remote.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h"
......@@ -58,7 +59,7 @@ class PromiseResolverCallbacks final : public UserMediaRequest::Callbacks {
} // namespace
MediaDevices::MediaDevices(ExecutionContext* context)
: ContextLifecycleObserver(context), stopped_(false), binding_(this) {}
: ContextLifecycleObserver(context), stopped_(false) {}
MediaDevices::~MediaDevices() = default;
......@@ -183,8 +184,8 @@ void MediaDevices::RemovedEventListener(
}
bool MediaDevices::HasPendingActivity() const {
DCHECK(stopped_ || binding_.is_bound() == HasEventListeners());
return binding_.is_bound();
DCHECK(stopped_ || receiver_.is_bound() == HasEventListeners());
return receiver_.is_bound();
}
void MediaDevices::ContextDestroyed(ExecutionContext*) {
......@@ -233,25 +234,23 @@ void MediaDevices::DispatchScheduledEvents() {
}
void MediaDevices::StartObserving() {
if (binding_.is_bound() || stopped_)
if (receiver_.is_bound() || stopped_)
return;
Document* document = To<Document>(GetExecutionContext());
if (!document || !document->GetFrame())
return;
mojom::blink::MediaDevicesListenerPtr listener;
binding_.Bind(mojo::MakeRequest(&listener));
GetDispatcherHost(document->GetFrame())
->AddMediaDevicesListener(true /* audio input */, true /* video input */,
true /* audio output */, std::move(listener));
true /* audio output */,
receiver_.BindNewPipeAndPassRemote());
}
void MediaDevices::StopObserving() {
if (!binding_.is_bound())
if (!receiver_.is_bound())
return;
binding_.Close();
receiver_.reset();
}
void MediaDevices::Dispose() {
......@@ -344,12 +343,12 @@ void MediaDevices::OnDispatcherHostConnectionError() {
std::move(connection_error_test_callback_).Run();
}
const mojom::blink::MediaDevicesDispatcherHostPtr&
const mojo::Remote<mojom::blink::MediaDevicesDispatcherHost>&
MediaDevices::GetDispatcherHost(LocalFrame* frame) {
if (!dispatcher_host_) {
frame->GetInterfaceProvider().GetInterface(
mojo::MakeRequest(&dispatcher_host_));
dispatcher_host_.set_connection_error_handler(
dispatcher_host_.BindNewPipeAndPassReceiver());
dispatcher_host_.set_disconnect_handler(
WTF::Bind(&MediaDevices::OnDispatcherHostConnectionError,
WrapWeakPersistent(this)));
}
......@@ -358,9 +357,10 @@ MediaDevices::GetDispatcherHost(LocalFrame* frame) {
}
void MediaDevices::SetDispatcherHostForTesting(
mojom::blink::MediaDevicesDispatcherHostPtr dispatcher_host) {
dispatcher_host_ = std::move(dispatcher_host);
dispatcher_host_.set_connection_error_handler(
mojo::PendingRemote<mojom::blink::MediaDevicesDispatcherHost>
dispatcher_host) {
dispatcher_host_.Bind(std::move(dispatcher_host));
dispatcher_host_.set_disconnect_handler(
WTF::Bind(&MediaDevices::OnDispatcherHostConnectionError,
WrapWeakPersistent(this)));
}
......
......@@ -6,7 +6,8 @@
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_DEVICES_H_
#include "base/callback.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/mediastream/media_devices.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h"
......@@ -73,7 +74,8 @@ class MODULES_EXPORT MediaDevices final
using EnumerateDevicesTestCallback =
base::OnceCallback<void(const MediaDeviceInfoVector&)>;
void SetDispatcherHostForTesting(mojom::blink::MediaDevicesDispatcherHostPtr);
void SetDispatcherHostForTesting(
mojo::PendingRemote<mojom::blink::MediaDevicesDispatcherHost>);
void SetEnumerateDevicesCallbackForTesting(
EnumerateDevicesTestCallback test_callback) {
......@@ -111,16 +113,16 @@ class MODULES_EXPORT MediaDevices final
Vector<mojom::blink::VideoInputDeviceCapabilitiesPtr>,
Vector<mojom::blink::AudioInputDeviceCapabilitiesPtr>);
void OnDispatcherHostConnectionError();
const mojom::blink::MediaDevicesDispatcherHostPtr& GetDispatcherHost(
LocalFrame*);
const mojo::Remote<mojom::blink::MediaDevicesDispatcherHost>&
GetDispatcherHost(LocalFrame*);
bool stopped_;
// Async runner may be null when there is no valid execution context.
// No async work may be posted in this scenario.
TaskHandle dispatch_scheduled_events_task_handle_;
HeapVector<Member<Event>> scheduled_events_;
mojom::blink::MediaDevicesDispatcherHostPtr dispatcher_host_;
mojo::Binding<mojom::blink::MediaDevicesListener> binding_;
mojo::Remote<mojom::blink::MediaDevicesDispatcherHost> dispatcher_host_;
mojo::Receiver<mojom::blink::MediaDevicesListener> receiver_{this};
HeapHashSet<Member<ScriptPromiseResolver>> requests_;
EnumerateDevicesTestCallback enumerate_devices_test_callback_;
......
......@@ -7,7 +7,8 @@
#include <memory>
#include <utility>
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
......@@ -34,7 +35,7 @@ const char kFakeAudioOutputDeviceId1[] = "fake_audio_output 1";
class MockMediaDevicesDispatcherHost
: public mojom::blink::MediaDevicesDispatcherHost {
public:
MockMediaDevicesDispatcherHost() : binding_(this) {}
MockMediaDevicesDispatcherHost() {}
void EnumerateDevices(bool request_audio_input,
bool request_video_input,
......@@ -139,23 +140,27 @@ class MockMediaDevicesDispatcherHost
bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
mojom::blink::MediaDevicesListenerPtr listener) override {
listener_ = std::move(listener);
mojo::PendingRemote<mojom::blink::MediaDevicesListener> listener)
override {
listener_.Bind(std::move(listener));
}
mojom::blink::MediaDevicesDispatcherHostPtr CreateInterfacePtrAndBind() {
mojom::blink::MediaDevicesDispatcherHostPtr ptr;
binding_.Bind(mojo::MakeRequest(&ptr));
return ptr;
mojo::PendingRemote<mojom::blink::MediaDevicesDispatcherHost>
CreatePendingRemoteAndBind() {
mojo::PendingRemote<mojom::blink::MediaDevicesDispatcherHost> remote;
receiver_.Bind(remote.InitWithNewPipeAndPassReceiver());
return remote;
}
void CloseBinding() { binding_.Close(); }
void CloseBinding() { receiver_.reset(); }
mojom::blink::MediaDevicesListenerPtr& listener() { return listener_; }
mojo::Remote<mojom::blink::MediaDevicesListener>& listener() {
return listener_;
}
private:
mojom::blink::MediaDevicesListenerPtr listener_;
mojo::Binding<mojom::blink::MediaDevicesDispatcherHost> binding_;
mojo::Remote<mojom::blink::MediaDevicesListener> listener_;
mojo::Receiver<mojom::blink::MediaDevicesDispatcherHost> receiver_{this};
};
class PromiseObserver {
......@@ -220,7 +225,7 @@ class MediaDevicesTest : public testing::Test {
if (!media_devices_) {
media_devices_ = MakeGarbageCollected<MediaDevices>(context);
media_devices_->SetDispatcherHostForTesting(
dispatcher_host_->CreateInterfacePtrAndBind());
dispatcher_host_->CreatePendingRemoteAndBind());
}
return media_devices_;
}
......@@ -254,7 +259,7 @@ class MediaDevicesTest : public testing::Test {
device_changed_ = false;
}
mojom::blink::MediaDevicesListenerPtr& listener() {
mojo::Remote<mojom::blink::MediaDevicesListener>& listener() {
return dispatcher_host_->listener();
}
......@@ -420,7 +425,7 @@ TEST_F(MediaDevicesTest, ObserveDeviceChangeEvent) {
media_devices->StartObserving();
platform()->RunUntilIdle();
EXPECT_TRUE(listener());
listener().set_connection_error_handler(WTF::Bind(
listener().set_disconnect_handler(WTF::Bind(
&MediaDevicesTest::OnListenerConnectionError, WTF::Unretained(this)));
// Simulate a device change.
......
......@@ -257,7 +257,8 @@ class MockMediaDevicesDispatcherHost
bool subscribe_audio_input,
bool subscribe_video_input,
bool subscribe_audio_output,
blink::mojom::blink::MediaDevicesListenerPtr listener) override {
mojo::PendingRemote<blink::mojom::blink::MediaDevicesListener> listener)
override {
NOTREACHED();
}
......
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