summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/mediastream
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-24 11:30:15 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-30 12:56:19 +0000
commit6036726eb981b6c4b42047513b9d3f4ac865daac (patch)
tree673593e70678e7789766d1f732eb51f613a2703b /chromium/third_party/blink/renderer/modules/mediastream
parent466052c4e7c052268fd931888cd58961da94c586 (diff)
downloadqtwebengine-chromium-6036726eb981b6c4b42047513b9d3f4ac865daac.tar.gz
BASELINE: Update Chromium to 70.0.3538.78
Change-Id: Ie634710bf039e26c1957f4ae45e101bd4c434ae7 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/mediastream')
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/BUILD.gn2
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc6
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc15
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_devices.h5
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_stream.cc2
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_stream_track.cc6
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.idl2
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.cc33
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.h31
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.idl12
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/user_media_client.cc6
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/user_media_request.cc72
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/user_media_request.h4
13 files changed, 158 insertions, 38 deletions
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/BUILD.gn b/chromium/third_party/blink/renderer/modules/mediastream/BUILD.gn
index eac66d37de2..0503186677f 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/BUILD.gn
+++ b/chromium/third_party/blink/renderer/modules/mediastream/BUILD.gn
@@ -30,6 +30,8 @@ blink_modules_sources("mediastream") {
"media_stream_track_content_hint.h",
"media_stream_track_event.cc",
"media_stream_track_event.h",
+ "navigator_display_media.cc",
+ "navigator_display_media.h",
"navigator_media_stream.cc",
"navigator_media_stream.h",
"navigator_user_media.cc",
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc b/chromium/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
index dc8304c11cf..068058a8acb 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_constraints_impl.cc
@@ -231,12 +231,12 @@ static bool Parse(const Dictionary& constraints_dictionary,
if (!ok || optional_constraints.IsUndefinedOrNull())
return false;
- size_t number_of_constraints;
+ uint32_t number_of_constraints;
ok = optional_constraints.length(number_of_constraints);
if (!ok)
return false;
- for (size_t i = 0; i < number_of_constraints; ++i) {
+ for (uint32_t i = 0; i < number_of_constraints; ++i) {
Dictionary constraint;
ok = optional_constraints.Get(i, constraint);
if (!ok || constraint.IsUndefinedOrNull())
@@ -827,7 +827,7 @@ LongOrConstrainLongRange ConvertLong(const LongConstraint& input,
NakedValueDisposition naked_treatment) {
LongOrConstrainLongRange output_union;
if (UseNakedNumeric(input, naked_treatment)) {
- output_union.SetLong(GetNakedValue<long>(input, naked_treatment));
+ output_union.SetLong(GetNakedValue<uint32_t>(input, naked_treatment));
} else if (!input.IsEmpty()) {
ConstrainLongRange output;
if (input.HasExact())
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
index 0d835761e04..03a93fb8a5c 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -20,7 +20,6 @@
#include "third_party/blink/renderer/modules/mediastream/media_stream_constraints.h"
#include "third_party/blink/renderer/modules/mediastream/navigator_media_stream.h"
#include "third_party/blink/renderer/modules/mediastream/user_media_controller.h"
-#include "third_party/blink/renderer/modules/mediastream/user_media_request.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
@@ -105,6 +104,16 @@ ScriptPromise MediaDevices::enumerateDevices(ScriptState* script_state) {
ScriptPromise MediaDevices::getUserMedia(ScriptState* script_state,
const MediaStreamConstraints& options,
ExceptionState& exception_state) {
+ return SendUserMediaRequest(script_state,
+ WebUserMediaRequest::MediaType::kUserMedia,
+ options, exception_state);
+}
+
+ScriptPromise MediaDevices::SendUserMediaRequest(
+ ScriptState* script_state,
+ WebUserMediaRequest::MediaType media_type,
+ const MediaStreamConstraints& options,
+ ExceptionState& exception_state) {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
PromiseResolverCallbacks* callbacks =
PromiseResolverCallbacks::Create(resolver);
@@ -121,7 +130,7 @@ ScriptPromise MediaDevices::getUserMedia(ScriptState* script_state,
MediaErrorState error_state;
UserMediaRequest* request = UserMediaRequest::Create(
- document, user_media, options, callbacks, error_state);
+ document, user_media, media_type, options, callbacks, error_state);
if (!request) {
DCHECK(error_state.HadException());
if (error_state.CanGenerateException()) {
@@ -224,7 +233,7 @@ void MediaDevices::DispatchScheduledEvent() {
events.swap(scheduled_events_);
for (const auto& event : events)
- DispatchEvent(event);
+ DispatchEvent(*event);
}
void MediaDevices::StartObserving() {
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.h b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.h
index 00171c23913..b8a99e5e3d6 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.h
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.h
@@ -13,6 +13,7 @@
#include "third_party/blink/renderer/core/dom/pausable_object.h"
#include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/blink/renderer/modules/mediastream/media_device_info.h"
+#include "third_party/blink/renderer/modules/mediastream/user_media_request.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/async_method_runner.h"
#include "third_party/blink/renderer/platform/heap/heap_allocator.h"
@@ -44,6 +45,10 @@ class MODULES_EXPORT MediaDevices final
ScriptPromise getUserMedia(ScriptState*,
const MediaStreamConstraints&,
ExceptionState&);
+ ScriptPromise SendUserMediaRequest(ScriptState*,
+ WebUserMediaRequest::MediaType,
+ const MediaStreamConstraints&,
+ ExceptionState&);
// EventTarget overrides.
const AtomicString& InterfaceName() const override;
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_stream.cc b/chromium/third_party/blink/renderer/modules/mediastream/media_stream.cc
index 99bea50b140..d48dfc7daa1 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_stream.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_stream.cc
@@ -492,7 +492,7 @@ void MediaStream::ScheduledEventTimerFired(TimerBase*) {
HeapVector<Member<Event>>::iterator it = events.begin();
for (; it != events.end(); ++it)
- DispatchEvent((*it).Release());
+ DispatchEvent(*it->Release());
events.clear();
}
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track.cc b/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
index 3f8ac81c741..666ef98d3a4 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
@@ -581,14 +581,14 @@ void MediaStreamTrack::SourceChangedState() {
switch (ready_state_) {
case MediaStreamSource::kReadyStateLive:
component_->SetMuted(false);
- DispatchEvent(Event::Create(EventTypeNames::unmute));
+ DispatchEvent(*Event::Create(EventTypeNames::unmute));
break;
case MediaStreamSource::kReadyStateMuted:
component_->SetMuted(true);
- DispatchEvent(Event::Create(EventTypeNames::mute));
+ DispatchEvent(*Event::Create(EventTypeNames::mute));
break;
case MediaStreamSource::kReadyStateEnded:
- DispatchEvent(Event::Create(EventTypeNames::ended));
+ DispatchEvent(*Event::Create(EventTypeNames::ended));
PropagateTrackEnded();
break;
}
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.idl b/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.idl
index c333f0e9f77..cd35bda184a 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.idl
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_stream_track_content_hint.idl
@@ -7,5 +7,5 @@
ImplementedAs=MediaStreamTrackContentHint,
RuntimeEnabled=MediaStreamTrackContentHint
] partial interface MediaStreamTrack {
- attribute DOMString contentHint;
+ [Measure] attribute DOMString contentHint;
};
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.cc b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.cc
new file mode 100644
index 00000000000..a78d87f61ee
--- /dev/null
+++ b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.cc
@@ -0,0 +1,33 @@
+// Copyright 2018 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_display_media.h"
+
+#include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/modules/mediastream/media_devices.h"
+#include "third_party/blink/renderer/modules/mediastream/navigator_user_media.h"
+
+namespace blink {
+
+ScriptPromise NavigatorDisplayMedia::getDisplayMedia(
+ ScriptState* script_state,
+ Navigator& navigator,
+ const MediaStreamConstraints& options,
+ ExceptionState& exception_state) {
+ MediaDevices* const media_devices =
+ NavigatorUserMedia::mediaDevices(navigator);
+ if (!media_devices) {
+ return ScriptPromise::RejectWithDOMException(
+ script_state, DOMException::Create(DOMExceptionCode::kNotSupportedError,
+ "Current frame is detached."));
+ }
+
+ return media_devices->SendUserMediaRequest(
+ script_state, WebUserMediaRequest::MediaType::kDisplayMedia, options,
+ exception_state);
+}
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.h b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.h
new file mode 100644
index 00000000000..ab22babc8e8
--- /dev/null
+++ b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.h
@@ -0,0 +1,31 @@
+// Copyright 2018 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_DISPLAY_MEDIA_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_NAVIGATOR_DISPLAY_MEDIA_H_
+
+#include "third_party/blink/renderer/platform/wtf/allocator.h"
+
+#include "third_party/blink/renderer/core/frame/navigator.h"
+
+namespace blink {
+
+class ExceptionState;
+class MediaStreamConstraints;
+class ScriptPromise;
+class ScriptState;
+
+class NavigatorDisplayMedia {
+ STATIC_ONLY(NavigatorDisplayMedia);
+
+ public:
+ static ScriptPromise getDisplayMedia(ScriptState*,
+ Navigator&,
+ const MediaStreamConstraints&,
+ ExceptionState&);
+};
+
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_NAVIGATOR_DISPLAY_MEDIA_H_
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.idl b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.idl
new file mode 100644
index 00000000000..8afdc7e3710
--- /dev/null
+++ b/chromium/third_party/blink/renderer/modules/mediastream/navigator_display_media.idl
@@ -0,0 +1,12 @@
+// Copyright 2018 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.
+
+// https://w3c.github.io/mediacapture-screen-share/
+[
+ ImplementedAs = NavigatorDisplayMedia,
+ RuntimeEnabled = GetDisplayMedia
+] partial interface Navigator {
+ [CallWith = ScriptState, RaisesException] Promise<MediaStream>
+ getDisplayMedia(optional MediaStreamConstraints constraints);
+};
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/user_media_client.cc b/chromium/third_party/blink/renderer/modules/mediastream/user_media_client.cc
index 2d824337fd0..68eb294ad3c 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/user_media_client.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/user_media_client.cc
@@ -46,10 +46,10 @@ UserMediaClient::UserMediaClient(WebUserMediaClient* client)
void UserMediaClient::RequestUserMedia(UserMediaRequest* request) {
if (client_) {
client_->RequestUserMedia(request);
- } else {
- request->Fail(WebUserMediaRequest::Error::kNotSupported,
- "User Media support is disabled");
+ return;
}
+ request->Fail(WebUserMediaRequest::Error::kNotSupported,
+ "User Media support is disabled");
}
void UserMediaClient::CancelUserMediaRequest(UserMediaRequest* request) {
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.cc b/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.cc
index 71c2aa70a0d..03c2b2a3c38 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.cc
@@ -362,6 +362,7 @@ class UserMediaRequest::V8Callbacks final : public UserMediaRequest::Callbacks {
UserMediaRequest* UserMediaRequest::Create(
ExecutionContext* context,
UserMediaController* controller,
+ WebUserMediaRequest::MediaType media_type,
const MediaStreamConstraints& options,
Callbacks* callbacks,
MediaErrorState& error_state) {
@@ -375,6 +376,30 @@ UserMediaRequest* UserMediaRequest::Create(
if (error_state.HadException())
return nullptr;
+ if (media_type == WebUserMediaRequest::MediaType::kDisplayMedia) {
+ // TODO(emircan): Support constraints after the spec change.
+ // https://w3c.github.io/mediacapture-screen-share/#constraints
+ // 5.2 Constraining Display Surface Selection
+ // The getDisplayMedia function does not permit the use of constraints for
+ // selection of a source as described in the getUserMedia() algorithm.
+ // Prior to invoking the getUserMedia() algorithm, if either of the video
+ // and audio attributes are set to a MediaTrackConstraints value (as
+ // opposed to being absent or set to a Boolean value), reject the promise
+ // with a InvalidAccessError and abort.
+ if (options.audio().IsMediaTrackConstraints() ||
+ options.video().IsMediaTrackConstraints()) {
+ error_state.ThrowDOMException(
+ DOMExceptionCode::kInvalidAccessError,
+ "getDisplayMedia() does not permit the use of constraints.");
+ return nullptr;
+ }
+ // TODO(emircan): Enable when audio capture is supported.
+ if (!options.audio().IsNull() && options.audio().GetAsBoolean()) {
+ error_state.ThrowTypeError("Audio is not supported");
+ return nullptr;
+ }
+ }
+
if (audio.IsNull() && video.IsNull()) {
error_state.ThrowTypeError(
"At least one of audio and video must be requested");
@@ -386,7 +411,8 @@ UserMediaRequest* UserMediaRequest::Create(
if (!video.IsNull())
CountVideoConstraintUses(context, video);
- return new UserMediaRequest(context, controller, audio, video, callbacks);
+ return new UserMediaRequest(context, controller, media_type, audio, video,
+ callbacks);
}
UserMediaRequest* UserMediaRequest::Create(
@@ -396,23 +422,27 @@ UserMediaRequest* UserMediaRequest::Create(
V8NavigatorUserMediaSuccessCallback* success_callback,
V8NavigatorUserMediaErrorCallback* error_callback,
MediaErrorState& error_state) {
- return Create(context, controller, options,
- V8Callbacks::Create(success_callback, error_callback),
+ return Create(context, controller, WebUserMediaRequest::MediaType::kUserMedia,
+ options, V8Callbacks::Create(success_callback, error_callback),
error_state);
}
UserMediaRequest* UserMediaRequest::CreateForTesting(
const WebMediaConstraints& audio,
const WebMediaConstraints& video) {
- return new UserMediaRequest(nullptr, nullptr, audio, video, nullptr);
+ return new UserMediaRequest(nullptr, nullptr,
+ WebUserMediaRequest::MediaType::kUserMedia, audio,
+ video, nullptr);
}
UserMediaRequest::UserMediaRequest(ExecutionContext* context,
UserMediaController* controller,
+ WebUserMediaRequest::MediaType media_type,
WebMediaConstraints audio,
WebMediaConstraints video,
Callbacks* callbacks)
: ContextLifecycleObserver(context),
+ media_type_(media_type),
audio_(audio),
video_(video),
should_disable_hardware_noise_suppression_(
@@ -432,6 +462,10 @@ UserMediaRequest::UserMediaRequest(ExecutionContext* context,
UserMediaRequest::~UserMediaRequest() = default;
+WebUserMediaRequest::MediaType UserMediaRequest::MediaRequestType() const {
+ return media_type_;
+}
+
bool UserMediaRequest::Audio() const {
return !audio_.IsNull();
}
@@ -463,27 +497,19 @@ bool UserMediaRequest::IsSecureContextUse(String& error_message) {
// Feature policy deprecation messages.
if (Audio()) {
- if (RuntimeEnabledFeatures::FeaturePolicyForPermissionsEnabled()) {
- if (!document->GetFrame()->IsFeatureEnabled(
- mojom::FeaturePolicyFeature::kMicrophone)) {
- UseCounter::Count(
- document, WebFeature::kMicrophoneDisabledByFeaturePolicyEstimate);
- }
- } else {
- Deprecation::CountDeprecationFeaturePolicy(
- *document, mojom::FeaturePolicyFeature::kMicrophone);
+ if (!document->GetFrame()->IsFeatureEnabled(
+ mojom::FeaturePolicyFeature::kMicrophone,
+ ReportOptions::kReportOnFailure)) {
+ UseCounter::Count(
+ document, WebFeature::kMicrophoneDisabledByFeaturePolicyEstimate);
}
}
if (Video()) {
- if (RuntimeEnabledFeatures::FeaturePolicyForPermissionsEnabled()) {
- if (!document->GetFrame()->IsFeatureEnabled(
- mojom::FeaturePolicyFeature::kCamera)) {
- UseCounter::Count(document,
- WebFeature::kCameraDisabledByFeaturePolicyEstimate);
- }
- } else {
- Deprecation::CountDeprecationFeaturePolicy(
- *document, mojom::FeaturePolicyFeature::kCamera);
+ if (!document->GetFrame()->IsFeatureEnabled(
+ mojom::FeaturePolicyFeature::kCamera,
+ ReportOptions::kReportOnFailure)) {
+ UseCounter::Count(document,
+ WebFeature::kCameraDisabledByFeaturePolicyEstimate);
}
}
@@ -526,14 +552,12 @@ void UserMediaRequest::Succeed(MediaStreamDescriptor* stream_descriptor) {
MediaStreamTrackVector audio_tracks = stream->getAudioTracks();
for (MediaStreamTrackVector::iterator iter = audio_tracks.begin();
iter != audio_tracks.end(); ++iter) {
- (*iter)->Component()->Source()->SetConstraints(audio_);
(*iter)->SetConstraints(audio_);
}
MediaStreamTrackVector video_tracks = stream->getVideoTracks();
for (MediaStreamTrackVector::iterator iter = video_tracks.begin();
iter != video_tracks.end(); ++iter) {
- (*iter)->Component()->Source()->SetConstraints(video_);
(*iter)->SetConstraints(video_);
}
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.h b/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.h
index 21c2f14a731..4809285a8e2 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.h
+++ b/chromium/third_party/blink/renderer/modules/mediastream/user_media_request.h
@@ -73,6 +73,7 @@ class MODULES_EXPORT UserMediaRequest final
static UserMediaRequest* Create(ExecutionContext*,
UserMediaController*,
+ WebUserMediaRequest::MediaType media_type,
const MediaStreamConstraints& options,
Callbacks*,
MediaErrorState&);
@@ -94,6 +95,7 @@ class MODULES_EXPORT UserMediaRequest final
void FailConstraint(const String& constraint_name, const String& message);
void Fail(WebUserMediaRequest::Error name, const String& message);
+ WebUserMediaRequest::MediaType MediaRequestType() const;
bool Audio() const;
bool Video() const;
WebMediaConstraints AudioConstraints() const;
@@ -115,10 +117,12 @@ class MODULES_EXPORT UserMediaRequest final
private:
UserMediaRequest(ExecutionContext*,
UserMediaController*,
+ WebUserMediaRequest::MediaType media_type,
WebMediaConstraints audio,
WebMediaConstraints video,
Callbacks*);
+ WebUserMediaRequest::MediaType media_type_;
WebMediaConstraints audio_;
WebMediaConstraints video_;
bool should_disable_hardware_noise_suppression_;