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") {
"media_stream_video_track_underlying_source.h",
"navigator_media_stream.cc",
"navigator_media_stream.h",
"navigator_user_media.cc",
"navigator_user_media.h",
"overconstrained_error.cc",
"overconstrained_error.h",
"processed_local_audio_source.cc",
......
......@@ -21,6 +21,7 @@
#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/identifiability_metrics.h"
#include "third_party/blink/renderer/modules/mediastream/input_device_info.h"
#include "third_party/blink/renderer/modules/mediastream/media_error_state.h"
......@@ -64,10 +65,23 @@ class PromiseResolverCallbacks final : public UserMediaRequest::Callbacks {
} // namespace
MediaDevices::MediaDevices(ExecutionContext* context)
: ExecutionContextLifecycleObserver(context),
const char MediaDevices::kSupplementName[] = "MediaDevices";
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),
receiver_(this, context) {}
receiver_(this, navigator.DomWindow()) {}
MediaDevices::~MediaDevices() = default;
......@@ -420,6 +434,7 @@ void MediaDevices::Trace(Visitor* visitor) const {
visitor->Trace(receiver_);
visitor->Trace(scheduled_events_);
visitor->Trace(requests_);
Supplement<Navigator>::Trace(visitor);
EventTargetWithInlineData::Trace(visitor);
ExecutionContextLifecycleObserver::Trace(visitor);
}
......
......@@ -18,11 +18,13 @@
#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/scheduler/public/post_cancellable_task.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class ExceptionState;
class LocalFrame;
class Navigator;
class MediaStreamConstraints;
class MediaTrackSupportedConstraints;
class ScriptPromise;
......@@ -32,12 +34,15 @@ class ScriptState;
class MODULES_EXPORT MediaDevices final
: public EventTargetWithInlineData,
public ActiveScriptWrappable<MediaDevices>,
public Supplement<Navigator>,
public ExecutionContextLifecycleObserver,
public mojom::blink::MediaDevicesListener {
DEFINE_WRAPPERTYPEINFO();
public:
explicit MediaDevices(ExecutionContext*);
static const char kSupplementName[];
static MediaDevices* mediaDevices(Navigator&);
explicit MediaDevices(Navigator&);
~MediaDevices() override;
ScriptPromise enumerateDevices(ScriptState*, ExceptionState&);
......
......@@ -15,6 +15,7 @@
#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/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/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
......@@ -166,9 +167,9 @@ class MediaDevicesTest : public testing::Test {
dispatcher_host_ = std::make_unique<MockMediaDevicesDispatcherHost>();
}
MediaDevices* GetMediaDevices(ExecutionContext* context) {
MediaDevices* GetMediaDevices(LocalDOMWindow& window) {
if (!media_devices_) {
media_devices_ = MakeGarbageCollected<MediaDevices>(context);
media_devices_ = MakeGarbageCollected<MediaDevices>(*window.navigator());
media_devices_->SetDispatcherHostForTesting(
dispatcher_host_->CreatePendingRemoteAndBind());
}
......@@ -239,7 +240,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) {
V8TestingScope scope;
MediaStreamConstraints* constraints = MediaStreamConstraints::Create();
ScriptPromise promise =
GetMediaDevices(scope.GetExecutionContext())
GetMediaDevices(scope.GetWindow())
->getUserMedia(scope.GetScriptState(), constraints,
scope.GetExceptionState());
ASSERT_TRUE(promise.IsEmpty());
......@@ -251,7 +252,7 @@ TEST_F(MediaDevicesTest, GetUserMediaCanBeCalled) {
TEST_F(MediaDevicesTest, EnumerateDevices) {
V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext());
auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
ScriptPromise promise = media_devices->enumerateDevices(
......@@ -304,7 +305,7 @@ TEST_F(MediaDevicesTest, EnumerateDevices) {
TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) {
V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext());
auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
media_devices->SetConnectionErrorCallbackForTesting(
......@@ -326,7 +327,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesAfterConnectionError) {
TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) {
V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext());
auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetEnumerateDevicesCallbackForTesting(
WTF::Bind(&MediaDevicesTest::DevicesEnumerated, WTF::Unretained(this)));
media_devices->SetConnectionErrorCallbackForTesting(
......@@ -348,7 +349,7 @@ TEST_F(MediaDevicesTest, EnumerateDevicesBeforeConnectionError) {
TEST_F(MediaDevicesTest, ObserveDeviceChangeEvent) {
V8TestingScope scope;
auto* media_devices = GetMediaDevices(scope.GetExecutionContext());
auto* media_devices = GetMediaDevices(scope.GetWindow());
media_devices->SetDeviceChangeCallbackForTesting(
WTF::Bind(&MediaDevicesTest::OnDevicesChanged, WTF::Unretained(this)));
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 @@
// https://w3c.github.io/mediacapture-main/#navigatorusermedia
[
ImplementedAs=NavigatorUserMedia
ImplementedAs=MediaDevices
] partial interface Navigator {
[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