diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-24 11:30:15 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-30 12:56:19 +0000 |
commit | 6036726eb981b6c4b42047513b9d3f4ac865daac (patch) | |
tree | 673593e70678e7789766d1f732eb51f613a2703b /chromium/third_party/blink/renderer/modules/mediastream | |
parent | 466052c4e7c052268fd931888cd58961da94c586 (diff) | |
download | qtwebengine-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')
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_; |