Commit 8076c45d authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Merge NavigatorUserMedia into MediaDevices

Bug: 1147612
Change-Id: If2ee105a33a04edca62b3777f93d963b04962d7b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2523495
Commit-Queue: Nate Chapin <japhet@chromium.org>
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826522}
parent ec27848d
...@@ -74,8 +74,6 @@ blink_modules_sources("mediastream") { ...@@ -74,8 +74,6 @@ blink_modules_sources("mediastream") {
"media_stream_video_track_underlying_source.h", "media_stream_video_track_underlying_source.h",
"navigator_media_stream.cc", "navigator_media_stream.cc",
"navigator_media_stream.h", "navigator_media_stream.h",
"navigator_user_media.cc",
"navigator_user_media.h",
"overconstrained_error.cc", "overconstrained_error.cc",
"overconstrained_error.h", "overconstrained_error.h",
"processed_local_audio_source.cc", "processed_local_audio_source.cc",
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/modules/mediastream/identifiability_metrics.h" #include "third_party/blink/renderer/modules/mediastream/identifiability_metrics.h"
#include "third_party/blink/renderer/modules/mediastream/input_device_info.h" #include "third_party/blink/renderer/modules/mediastream/input_device_info.h"
#include "third_party/blink/renderer/modules/mediastream/media_error_state.h" #include "third_party/blink/renderer/modules/mediastream/media_error_state.h"
...@@ -64,10 +65,23 @@ class PromiseResolverCallbacks final : public UserMediaRequest::Callbacks { ...@@ -64,10 +65,23 @@ class PromiseResolverCallbacks final : public UserMediaRequest::Callbacks {
} // namespace } // namespace
MediaDevices::MediaDevices(ExecutionContext* context) const char MediaDevices::kSupplementName[] = "MediaDevices";
: ExecutionContextLifecycleObserver(context),
MediaDevices* MediaDevices::mediaDevices(Navigator& navigator) {
MediaDevices* supplement =
Supplement<Navigator>::From<MediaDevices>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<MediaDevices>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
MediaDevices::MediaDevices(Navigator& navigator)
: Supplement<Navigator>(navigator),
ExecutionContextLifecycleObserver(navigator.DomWindow()),
stopped_(false), stopped_(false),
receiver_(this, context) {} receiver_(this, navigator.DomWindow()) {}
MediaDevices::~MediaDevices() = default; MediaDevices::~MediaDevices() = default;
...@@ -420,6 +434,7 @@ void MediaDevices::Trace(Visitor* visitor) const { ...@@ -420,6 +434,7 @@ void MediaDevices::Trace(Visitor* visitor) const {
visitor->Trace(receiver_); visitor->Trace(receiver_);
visitor->Trace(scheduled_events_); visitor->Trace(scheduled_events_);
visitor->Trace(requests_); visitor->Trace(requests_);
Supplement<Navigator>::Trace(visitor);
EventTargetWithInlineData::Trace(visitor); EventTargetWithInlineData::Trace(visitor);
ExecutionContextLifecycleObserver::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor);
} }
......
...@@ -18,11 +18,13 @@ ...@@ -18,11 +18,13 @@
#include "third_party/blink/renderer/platform/heap/heap_allocator.h" #include "third_party/blink/renderer/platform/heap/heap_allocator.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink { namespace blink {
class ExceptionState; class ExceptionState;
class LocalFrame; class LocalFrame;
class Navigator;
class MediaStreamConstraints; class MediaStreamConstraints;
class MediaTrackSupportedConstraints; class MediaTrackSupportedConstraints;
class ScriptPromise; class ScriptPromise;
...@@ -32,12 +34,15 @@ class ScriptState; ...@@ -32,12 +34,15 @@ class ScriptState;
class MODULES_EXPORT MediaDevices final class MODULES_EXPORT MediaDevices final
: public EventTargetWithInlineData, : public EventTargetWithInlineData,
public ActiveScriptWrappable<MediaDevices>, public ActiveScriptWrappable<MediaDevices>,
public Supplement<Navigator>,
public ExecutionContextLifecycleObserver, public ExecutionContextLifecycleObserver,
public mojom::blink::MediaDevicesListener { public mojom::blink::MediaDevicesListener {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
explicit MediaDevices(ExecutionContext*); static const char kSupplementName[];
static MediaDevices* mediaDevices(Navigator&);
explicit MediaDevices(Navigator&);
~MediaDevices() override; ~MediaDevices() override;
ScriptPromise enumerateDevices(ScriptState*, ExceptionState&); ScriptPromise enumerateDevices(ScriptState*, ExceptionState&);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_stream_constraints.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_stream_constraints.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/testing/null_execution_context.h" #include "third_party/blink/renderer/core/testing/null_execution_context.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support.h" #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
...@@ -166,9 +167,9 @@ class MediaDevicesTest : public testing::Test { ...@@ -166,9 +167,9 @@ class MediaDevicesTest : public testing::Test {
dispatcher_host_ = std::make_unique<MockMediaDevicesDispatcherHost>(); dispatcher_host_ = std::make_unique<MockMediaDevicesDispatcherHost>();
} }
MediaDevices* GetMediaDevices(ExecutionContext* context) { MediaDevices* GetMediaDevices(LocalDOMWindow& window) {
if (!media_devices_) { if (!media_devices_) {
media_devices_ = MakeGarbageCollected<MediaDevices>(context); media_devices_ = MakeGarbageCollected<MediaDevices>(*window.navigator());
media_devices_->SetDispatcherHostForTesting( media_devices_->SetDispatcherHostForTesting(
dispatcher_host_->CreatePendingRemoteAndBind()); dispatcher_host_->CreatePendingRemoteAndBind());
} }
...@@ -239,7 +240,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) { ...@@ -239,7 +240,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) {
V8TestingScope scope; V8TestingScope scope;
MediaStreamConstraints* constraints = MediaStreamConstraints::Create(); MediaStreamConstraints* constraints = MediaStreamConstraints::Create();
ScriptPromise promise = ScriptPromise promise =
GetMediaDevices(scope.GetExecutionContext()) GetMediaDevices(scope.GetWindow())
->getUserMedia(scope.GetScriptState(), constraints, ->getUserMedia(scope.GetScriptState(), constraints,
scope.GetExceptionState()); scope.GetExceptionState());
ASSERT_TRUE(promise.IsEmpty()); ASSERT_TRUE(promise.IsEmpty());
...@@ -251,7 +252,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) { ...@@ -251,7 +252,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) {
TEST_F(MediaDevicesTest, EnumerateDevices) { TEST_F(MediaDevicesTest, EnumerateDevices) {
V8TestingScope scope; V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext()); auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting( media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this))); WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
ScriptPromise promise = media_devices->enumerateDevices( ScriptPromise promise = media_devices->enumerateDevices(
...@@ -304,7 +305,7 @@ TEST_F(MediaDevicesTest, EnumerateDevices) { ...@@ -304,7 +305,7 @@ TEST_F(MediaDevicesTest, EnumerateDevices) {
TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) { TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) {
V8TestingScope scope; V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext()); auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting( media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this))); WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
media_devices->SetConnectionErrorCallbackForTesting( media_devices->SetConnectionErrorCallbackForTesting(
...@@ -326,7 +327,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) { ...@@ -326,7 +327,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) {
TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) { TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) {
V8TestingScope scope; V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext()); auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting( media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this))); WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
media_devices->SetConnectionErrorCallbackForTesting( media_devices->SetConnectionErrorCallbackForTesting(
...@@ -348,7 +349,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) { ...@@ -348,7 +349,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) {
TEST_F(MediaDevicesTest, ObserveDeviceChangeEvent) { TEST_F(MediaDevicesTest, ObserveDeviceChangeEvent) {
V8TestingScope scope; V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext()); auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetDeviceChangeCallbackForTesting( media_devices->SetDeviceChangeCallbackForTesting(
WTF::Bind(&MediaDevicesTest::OnDevicesChanged, WTF::Unretained(this))); WTF::Bind(&MediaDevicesTest::OnDevicesChanged, WTF::Unretained(this)));
EXPECT_FALSE(listener()); EXPECT_FALSE(listener());
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/mediastream/navigator_user_media.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/modules/mediastream/media_devices.h"
namespace blink {
NavigatorUserMedia::NavigatorUserMedia(Navigator& navigator)
: Supplement<Navigator>(navigator),
media_devices_(
MakeGarbageCollected<MediaDevices>(navigator.DomWindow())) {}
const char NavigatorUserMedia::kSupplementName[] = "NavigatorUserMedia";
NavigatorUserMedia& NavigatorUserMedia::From(Navigator& navigator) {
NavigatorUserMedia* supplement =
Supplement<Navigator>::From<NavigatorUserMedia>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorUserMedia>(navigator);
ProvideTo(navigator, supplement);
}
return *supplement;
}
MediaDevices* NavigatorUserMedia::GetMediaDevices() {
return media_devices_;
}
MediaDevices* NavigatorUserMedia::mediaDevices(Navigator& navigator) {
return NavigatorUserMedia::From(navigator).GetMediaDevices();
}
void NavigatorUserMedia::Trace(Visitor* visitor) const {
visitor->Trace(media_devices_);
Supplement<Navigator>::Trace(visitor);
}
} // namespace blink
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_NAVIGATOR_USER_MEDIA_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_NAVIGATOR_USER_MEDIA_H_
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class Navigator;
class MediaDevices;
class NavigatorUserMedia final : public GarbageCollected<NavigatorUserMedia>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static MediaDevices* mediaDevices(Navigator&);
explicit NavigatorUserMedia(Navigator&);
void Trace(Visitor*) const override;
private:
MediaDevices* GetMediaDevices();
static NavigatorUserMedia& From(Navigator&);
Member<MediaDevices> media_devices_;
};
} // namespace blink
#endif
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// https://w3c.github.io/mediacapture-main/#navigatorusermedia // https://w3c.github.io/mediacapture-main/#navigatorusermedia
[ [
ImplementedAs=NavigatorUserMedia ImplementedAs=MediaDevices
] partial interface Navigator { ] partial interface Navigator {
[SameObject, SecureContext] readonly attribute MediaDevices mediaDevices; [SameObject, SecureContext] readonly attribute MediaDevices mediaDevices;
}; };
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