Title: [216918] trunk/Source
Revision
216918
Author
commit-qu...@webkit.org
Date
2017-05-16 01:51:50 -0700 (Tue, 16 May 2017)

Log Message

Remove MediaConstraintsData and MediaConstraintsImpl
https://bugs.webkit.org/show_bug.cgi?id=172132

Patch by Youenn Fablet <you...@apple.com> on 2017-05-16
Reviewed by Eric Carlson.

Source/WebCore:

No observable change of behavior.

Removing MediaConstraintsData and MediaConstraintsImpl allows simplifying the code.
Further simplified the code by making MediaConstraints no longer ref counted and now a struct.
Simplified some RealtimeMediaSource subclasses by removing unused MediaConstraints class members.

* CMakeLists.txt: Removing MediaConstraintsImpl.cpp.
* Modules/mediastream/MediaConstraintsImpl.cpp: Removed.
* Modules/mediastream/MediaConstraintsImpl.h: Removed.
* Modules/mediastream/MediaDevices.cpp:
(WebCore::createMediaConstraints):
(WebCore::MediaDevices::getUserMedia):
(WebCore::createMediaConstraintsImpl): Deleted.
* Modules/mediastream/MediaStreamTrack.cpp:
(WebCore::createMediaConstraints):
(WebCore::MediaStreamTrack::applyConstraints):
(WebCore::createMediaConstraintsImpl): Deleted.
* Modules/mediastream/MediaTrackConstraints.cpp:
(WebCore::createMediaConstraints):
(WebCore::createMediaConstraintsImpl): Deleted.
* Modules/mediastream/MediaTrackConstraints.h:
* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::start):
(WebCore::UserMediaRequest::UserMediaRequest):
(WebCore::UserMediaRequest::allow):
* Modules/mediastream/UserMediaRequest.h:
(WebCore::UserMediaRequest::audioConstraints):
(WebCore::UserMediaRequest::videoConstraints):
* WebCore.xcodeproj/project.pbxproj:
* platform/mediastream/MediaConstraints.cpp:
(WebCore::addDefaultVideoConstraints):
(WebCore::MediaConstraints::isConstraintSet):
(WebCore::MediaConstraints::setDefaultVideoConstraints):
* platform/mediastream/MediaConstraints.h:
(WebCore::MediaConstraints::~MediaConstraints): Deleted.
(WebCore::MediaConstraints::MediaConstraints): Deleted.
* platform/mediastream/MediaStreamConstraintsValidationClient.h:
* platform/mediastream/RealtimeMediaSource.cpp:
(WebCore::RealtimeMediaSource::selectSettings):
(WebCore::RealtimeMediaSource::supportsConstraints):
(WebCore::RealtimeMediaSource::applyConstraints):
* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
* platform/mediastream/RealtimeMediaSourceCenter.h:
* platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
(WebCore::RealtimeIncomingAudioSource::supportedConstraints): Deleted.
* platform/mediastream/mac/RealtimeIncomingAudioSource.h:
* platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
(WebCore::RealtimeIncomingVideoSource::supportedConstraints): Deleted.
* platform/mediastream/mac/RealtimeIncomingVideoSource.h:
* platform/mock/MockRealtimeMediaSource.h:
(WebCore::MockRealtimeMediaSource::constraints): Deleted.

Source/WebKit2:

Removing MediaConstraintsData and MediaConstraintsImpl allows simplifying the code.
Further simplified the code by making MediaConstraints no longer ref counted and now a struct.

* Scripts/webkit/messages.py:
(headers_for_type):
* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<MediaConstraints>::encode):
(IPC::ArgumentCoder<MediaConstraints>::decode):
(IPC::ArgumentCoder<MediaConstraintsData>::encode): Deleted.
(IPC::ArgumentCoder<MediaConstraintsData>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
(WebKit::UserMediaCaptureManagerProxy::applyConstraints):
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
* UIProcess/UserMediaPermissionRequestManagerProxy.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
(WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::applyConstraints):

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/CMakeLists.txt (216917 => 216918)


--- trunk/Source/WebCore/CMakeLists.txt	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/CMakeLists.txt	2017-05-16 08:51:50 UTC (rev 216918)
@@ -944,7 +944,6 @@
     Modules/mediasource/VideoPlaybackQuality.cpp
 
     Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp
-    Modules/mediastream/MediaConstraintsImpl.cpp
     Modules/mediastream/MediaDeviceInfo.cpp
     Modules/mediastream/MediaDevices.cpp
     Modules/mediastream/MediaDevicesEnumerationRequest.cpp

Modified: trunk/Source/WebCore/ChangeLog (216917 => 216918)


--- trunk/Source/WebCore/ChangeLog	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/ChangeLog	2017-05-16 08:51:50 UTC (rev 216918)
@@ -1,3 +1,63 @@
+2017-05-16  Youenn Fablet  <you...@apple.com>
+
+        Remove MediaConstraintsData and MediaConstraintsImpl
+        https://bugs.webkit.org/show_bug.cgi?id=172132
+
+        Reviewed by Eric Carlson.
+
+        No observable change of behavior.
+
+        Removing MediaConstraintsData and MediaConstraintsImpl allows simplifying the code.
+        Further simplified the code by making MediaConstraints no longer ref counted and now a struct.
+        Simplified some RealtimeMediaSource subclasses by removing unused MediaConstraints class members.
+
+        * CMakeLists.txt: Removing MediaConstraintsImpl.cpp.
+        * Modules/mediastream/MediaConstraintsImpl.cpp: Removed.
+        * Modules/mediastream/MediaConstraintsImpl.h: Removed.
+        * Modules/mediastream/MediaDevices.cpp:
+        (WebCore::createMediaConstraints):
+        (WebCore::MediaDevices::getUserMedia):
+        (WebCore::createMediaConstraintsImpl): Deleted.
+        * Modules/mediastream/MediaStreamTrack.cpp:
+        (WebCore::createMediaConstraints):
+        (WebCore::MediaStreamTrack::applyConstraints):
+        (WebCore::createMediaConstraintsImpl): Deleted.
+        * Modules/mediastream/MediaTrackConstraints.cpp:
+        (WebCore::createMediaConstraints):
+        (WebCore::createMediaConstraintsImpl): Deleted.
+        * Modules/mediastream/MediaTrackConstraints.h:
+        * Modules/mediastream/UserMediaRequest.cpp:
+        (WebCore::UserMediaRequest::start):
+        (WebCore::UserMediaRequest::UserMediaRequest):
+        (WebCore::UserMediaRequest::allow):
+        * Modules/mediastream/UserMediaRequest.h:
+        (WebCore::UserMediaRequest::audioConstraints):
+        (WebCore::UserMediaRequest::videoConstraints):
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/mediastream/MediaConstraints.cpp:
+        (WebCore::addDefaultVideoConstraints):
+        (WebCore::MediaConstraints::isConstraintSet):
+        (WebCore::MediaConstraints::setDefaultVideoConstraints):
+        * platform/mediastream/MediaConstraints.h:
+        (WebCore::MediaConstraints::~MediaConstraints): Deleted.
+        (WebCore::MediaConstraints::MediaConstraints): Deleted.
+        * platform/mediastream/MediaStreamConstraintsValidationClient.h:
+        * platform/mediastream/RealtimeMediaSource.cpp:
+        (WebCore::RealtimeMediaSource::selectSettings):
+        (WebCore::RealtimeMediaSource::supportsConstraints):
+        (WebCore::RealtimeMediaSource::applyConstraints):
+        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
+        * platform/mediastream/RealtimeMediaSourceCenter.h:
+        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
+        (WebCore::RealtimeIncomingAudioSource::supportedConstraints): Deleted.
+        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
+        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
+        (WebCore::RealtimeIncomingVideoSource::supportedConstraints): Deleted.
+        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
+        * platform/mock/MockRealtimeMediaSource.h:
+        (WebCore::MockRealtimeMediaSource::constraints): Deleted.
+
 2017-05-16  Andy Estes  <aes...@apple.com>
 
         [Cocoa] Tell NEFilterSource about the presenting app's PID

Deleted: trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(MEDIA_STREAM)
-
-#include "MediaConstraintsImpl.h"
-
-namespace WebCore {
-
-static inline void addDefaultVideoConstraints(MediaTrackConstraintSetMap& videoConstraints, bool addFrameRateConstraint, bool addSizeConstraint, bool addFacingModeConstraint)
-{
-    if (addFrameRateConstraint) {
-        DoubleConstraint frameRateConstraint({ }, MediaConstraintType::FrameRate);
-        frameRateConstraint.setIdeal(30);
-        videoConstraints.set(MediaConstraintType::FrameRate, WTFMove(frameRateConstraint));
-    }
-    if (addSizeConstraint) {
-        IntConstraint widthConstraint({ }, MediaConstraintType::Width);
-        widthConstraint.setIdeal(640);
-        videoConstraints.set(MediaConstraintType::Width, WTFMove(widthConstraint));
-
-        IntConstraint heightConstraint({ }, MediaConstraintType::Height);
-        heightConstraint.setIdeal(480);
-        videoConstraints.set(MediaConstraintType::Height, WTFMove(heightConstraint));
-    }
-    if (addFacingModeConstraint) {
-        StringConstraint facingModeConstraint({ }, MediaConstraintType::FacingMode);
-        facingModeConstraint.setIdeal(ASCIILiteral("user"));
-        videoConstraints.set(MediaConstraintType::FacingMode, WTFMove(facingModeConstraint));
-    }
-}
-
-bool MediaConstraintsData::isConstraintSet(std::function<bool(const MediaTrackConstraintSetMap&)>&& callback)
-{
-    if (callback(mandatoryConstraints))
-        return true;
-
-    for (const auto& constraint : advancedConstraints) {
-        if (callback(constraint))
-            return true;
-    }
-    return false;
-}
-
-void MediaConstraintsData::setDefaultVideoConstraints()
-{
-    // 640x480, 30fps, font-facing camera
-    bool hasFrameRateConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
-        return !!constraint.frameRate();
-    });
-
-    bool hasSizeConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
-        return !!constraint.width() || !!constraint.height();
-    });
-
-    bool hasFacingModeConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
-        return !!constraint.facingMode();
-    });
-
-    if (hasFrameRateConstraints && hasSizeConstraints && hasFacingModeConstraints)
-        return;
-
-    addDefaultVideoConstraints(mandatoryConstraints, !hasFrameRateConstraints, !hasSizeConstraints, !hasFacingModeConstraints);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Deleted: trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(MEDIA_STREAM)
-
-#include "ExceptionBase.h"
-#include "MediaConstraints.h"
-#include <wtf/Vector.h>
-
-namespace WebCore {
-
-struct MediaConstraintsData {
-    MediaConstraintsData() = default;
-    MediaConstraintsData(MediaTrackConstraintSetMap&& mandatoryConstraints, Vector<MediaTrackConstraintSetMap>&& advancedConstraints, bool isValid)
-        : mandatoryConstraints(WTFMove(mandatoryConstraints))
-        , advancedConstraints(WTFMove(advancedConstraints))
-        , isValid(isValid)
-    {
-    }
-    MediaConstraintsData(const MediaConstraintsData& constraints, const String& hashSalt)
-        : mandatoryConstraints(constraints.mandatoryConstraints)
-        , advancedConstraints(constraints.advancedConstraints)
-        , deviceIDHashSalt(hashSalt)
-        , isValid(constraints.isValid)
-    {
-    }
-    MediaConstraintsData(const MediaConstraints& constraints)
-        : mandatoryConstraints(constraints.mandatoryConstraints())
-        , advancedConstraints(constraints.advancedConstraints())
-        , deviceIDHashSalt(constraints.deviceIDHashSalt())
-        , isValid(constraints.isValid())
-    {
-    }
-
-    void setDefaultVideoConstraints();
-    bool isConstraintSet(std::function<bool(const MediaTrackConstraintSetMap&)>&&);
-
-    MediaTrackConstraintSetMap mandatoryConstraints;
-    Vector<MediaTrackConstraintSetMap> advancedConstraints;
-    String deviceIDHashSalt;
-    bool isValid { false };
-};
-
-class MediaConstraintsImpl final : public MediaConstraints {
-public:
-    static Ref<MediaConstraintsImpl> create(MediaTrackConstraintSetMap&& mandatoryConstraints, Vector<MediaTrackConstraintSetMap>&& advancedConstraints, bool isValid) { return create(MediaConstraintsData(WTFMove(mandatoryConstraints), WTFMove(advancedConstraints), isValid)); }
-    static Ref<MediaConstraintsImpl> create(MediaConstraintsData&& data) { return adoptRef(*new MediaConstraintsImpl(WTFMove(data))); }
-
-    MediaConstraintsImpl() = default;
-    virtual ~MediaConstraintsImpl() = default;
-
-    const MediaTrackConstraintSetMap& mandatoryConstraints() const final { return m_data.mandatoryConstraints; }
-    const Vector<MediaTrackConstraintSetMap>& advancedConstraints() const final { return m_data.advancedConstraints; }
-    bool isValid() const final { return m_data.isValid; }
-
-    const String& deviceIDHashSalt() const final { return m_data.deviceIDHashSalt; }
-    void setDeviceIDHashSalt(const String& salt) final { m_data.deviceIDHashSalt = salt; }
-
-    const MediaConstraintsData& data() const { return m_data; }
-    void setDefaultVideoConstraints() { m_data.setDefaultVideoConstraints(); }
-
-private:
-    WEBCORE_EXPORT explicit MediaConstraintsImpl(MediaConstraintsData&& data) : m_data(WTFMove(data)) { }
-
-    MediaConstraintsData m_data;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -37,7 +37,6 @@
 #include "Document.h"
 #include "Event.h"
 #include "EventNames.h"
-#include "MediaConstraintsImpl.h"
 #include "MediaDevicesRequest.h"
 #include "MediaTrackSupportedConstraints.h"
 #include "UserMediaRequest.h"
@@ -78,14 +77,16 @@
     return downcast<Document>(scriptExecutionContext());
 }
 
-static Ref<MediaConstraintsImpl> createMediaConstraintsImpl(const Variant<bool, MediaTrackConstraints>& constraints)
+static MediaConstraints createMediaConstraints(const Variant<bool, MediaTrackConstraints>& constraints)
 {
     return WTF::switchOn(constraints,
-        [&] (bool constraints) {
-            return MediaConstraintsImpl::create({ }, { }, constraints);
+        [&] (bool isValid) {
+            MediaConstraints constraints;
+            constraints.isValid = isValid;
+            return constraints;
         },
-        [&] (const MediaTrackConstraints& constraints) {
-            return createMediaConstraintsImpl(constraints);
+        [&] (const MediaTrackConstraints& trackConstraints) {
+            return createMediaConstraints(trackConstraints);
         }
     );
 }
@@ -96,10 +97,10 @@
     if (!document)
         return Exception { INVALID_STATE_ERR };
 
-    auto audioConstraints = createMediaConstraintsImpl(constraints.audio);
-    auto videoConstraints = createMediaConstraintsImpl(constraints.video);
-    if (videoConstraints->isValid())
-        videoConstraints->setDefaultVideoConstraints();
+    auto audioConstraints = createMediaConstraints(constraints.audio);
+    auto videoConstraints = createMediaConstraints(constraints.video);
+    if (videoConstraints.isValid)
+        videoConstraints.setDefaultVideoConstraints();
     return UserMediaRequest::start(*document, WTFMove(audioConstraints), WTFMove(videoConstraints), WTFMove(promise));
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -33,7 +33,7 @@
 #include "Event.h"
 #include "EventNames.h"
 #include "JSOverconstrainedError.h"
-#include "MediaConstraintsImpl.h"
+#include "MediaConstraints.h"
 #include "MediaStream.h"
 #include "MediaStreamPrivate.h"
 #include "NotImplemented.h"
@@ -246,11 +246,14 @@
     return result;
 }
 
-static Ref<MediaConstraintsImpl> createMediaConstraintsImpl(const std::optional<MediaTrackConstraints>& constraints)
+static MediaConstraints createMediaConstraints(const std::optional<MediaTrackConstraints>& constraints)
 {
-    if (!constraints)
-        return MediaConstraintsImpl::create({ }, { }, true);
-    return createMediaConstraintsImpl(constraints.value());
+    if (!constraints) {
+        MediaConstraints validConstraints;
+        validConstraints.isValid = true;
+        return validConstraints;
+    }
+    return createMediaConstraints(constraints.value());
 }
 
 void MediaStreamTrack::applyConstraints(const std::optional<MediaTrackConstraints>& constraints, DOMPromiseDeferred<void>&& promise)
@@ -269,7 +272,7 @@
         weakThis->m_promise->resolve();
         weakThis->m_constraints = constraints.value_or(MediaTrackConstraints { });
     };
-    m_private->applyConstraints(createMediaConstraintsImpl(constraints), WTFMove(successHandler), WTFMove(failureHandler));
+    m_private->applyConstraints(createMediaConstraints(constraints), WTFMove(successHandler), WTFMove(failureHandler));
 }
 
 void MediaStreamTrack::addObserver(Observer& observer)

Modified: trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -27,7 +27,7 @@
 
 #if ENABLE(MEDIA_STREAM)
 
-#include "MediaConstraintsImpl.h"
+#include "MediaConstraints.h"
 
 namespace WebCore {
 
@@ -190,9 +190,13 @@
     return convertAdvancedToInternalForm(optionalVector.value());
 }
 
-Ref<MediaConstraintsImpl> createMediaConstraintsImpl(const MediaTrackConstraints& constraints)
+MediaConstraints createMediaConstraints(const MediaTrackConstraints& trackConstraints)
 {
-    return MediaConstraintsImpl::create(convertToInternalForm(ConstraintSetType::Mandatory, constraints), convertAdvancedToInternalForm(constraints.advanced), true);
+    MediaConstraints constraints;
+    constraints.mandatoryConstraints = convertToInternalForm(ConstraintSetType::Mandatory, trackConstraints);
+    constraints.advancedConstraints = convertAdvancedToInternalForm(trackConstraints.advanced);
+    constraints.isValid = true;
+    return constraints;
 }
 
 }

Modified: trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.h (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/MediaTrackConstraints.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -34,7 +34,7 @@
 
 namespace WebCore {
 
-class MediaConstraintsImpl;
+struct MediaConstraints;
 
 struct ConstrainBooleanParameters {
     std::optional<bool> exact;
@@ -79,7 +79,7 @@
     std::optional<Vector<MediaTrackConstraintSet>> advanced;
 };
 
-Ref<MediaConstraintsImpl> createMediaConstraintsImpl(const MediaTrackConstraints&);
+MediaConstraints createMediaConstraints(const MediaTrackConstraints&);
 
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -42,7 +42,7 @@
 #include "JSMediaStream.h"
 #include "JSOverconstrainedError.h"
 #include "MainFrame.h"
-#include "MediaConstraintsImpl.h"
+#include "MediaConstraints.h"
 #include "RealtimeMediaSourceCenter.h"
 #include "Settings.h"
 #include "UserMediaController.h"
@@ -49,13 +49,13 @@
 
 namespace WebCore {
 
-ExceptionOr<void> UserMediaRequest::start(Document& document, Ref<MediaConstraintsImpl>&& audioConstraints, Ref<MediaConstraintsImpl>&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
+ExceptionOr<void> UserMediaRequest::start(Document& document, MediaConstraints&& audioConstraints, MediaConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
 {
     auto* userMedia = UserMediaController::from(document.page());
     if (!userMedia)
         return Exception { NOT_SUPPORTED_ERR }; // FIXME: Why is it better to return an exception here instead of rejecting the promise as we do just below?
 
-    if (!audioConstraints->isValid() && !videoConstraints->isValid()) {
+    if (!audioConstraints.isValid && !videoConstraints.isValid) {
         promise.reject(TypeError);
         return { };
     }
@@ -64,7 +64,7 @@
     return { };
 }
 
-UserMediaRequest::UserMediaRequest(Document& document, UserMediaController& controller, Ref<MediaConstraintsImpl>&& audioConstraints, Ref<MediaConstraintsImpl>&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
+UserMediaRequest::UserMediaRequest(Document& document, UserMediaController& controller, MediaConstraints&& audioConstraints, MediaConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
     : ContextDestructionObserver(&document)
     , m_audioConstraints(WTFMove(audioConstraints))
     , m_videoConstraints(WTFMove(videoConstraints))
@@ -180,10 +180,10 @@
         m_promise.resolve(stream);
     };
 
-    m_audioConstraints->setDeviceIDHashSalt(String(deviceIdentifierHashSalt));
-    m_videoConstraints->setDeviceIDHashSalt(WTFMove(deviceIdentifierHashSalt));
+    m_audioConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
+    m_videoConstraints.deviceIDHashSalt = WTFMove(deviceIdentifierHashSalt);
 
-    RealtimeMediaSourceCenter::singleton().createMediaStream(WTFMove(callback), m_allowedAudioDeviceUID, m_allowedVideoDeviceUID, &m_audioConstraints.get(), &m_videoConstraints.get());
+    RealtimeMediaSourceCenter::singleton().createMediaStream(WTFMove(callback), m_allowedAudioDeviceUID, m_allowedVideoDeviceUID, &m_audioConstraints, &m_videoConstraints);
 }
 
 void UserMediaRequest::deny(MediaAccessDenialReason reason, const String& invalidConstraint)

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h (216917 => 216918)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -36,10 +36,10 @@
 
 #include "ActiveDOMObject.h"
 #include "JSDOMPromiseDeferred.h"
+#include "MediaConstraints.h"
 
 namespace WebCore {
 
-class MediaConstraintsImpl;
 class MediaStream;
 class SecurityOrigin;
 class UserMediaController;
@@ -46,7 +46,7 @@
 
 class UserMediaRequest : public RefCounted<UserMediaRequest>, private ContextDestructionObserver {
 public:
-    static ExceptionOr<void> start(Document&, Ref<MediaConstraintsImpl>&& audioConstraints, Ref<MediaConstraintsImpl>&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&&);
+    static ExceptionOr<void> start(Document&, MediaConstraints&& audioConstraints, MediaConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&&);
 
     virtual ~UserMediaRequest();
 
@@ -61,8 +61,8 @@
     const Vector<String>& audioDeviceUIDs() const { return m_audioDeviceUIDs; }
     const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
 
-    const MediaConstraintsImpl& audioConstraints() const { return m_audioConstraints; }
-    const MediaConstraintsImpl& videoConstraints() const { return m_videoConstraints; }
+    const MediaConstraints& audioConstraints() const { return m_audioConstraints; }
+    const MediaConstraints& videoConstraints() const { return m_videoConstraints; }
 
     const String& allowedAudioDeviceUID() const { return m_allowedAudioDeviceUID; }
     const String& allowedVideoDeviceUID() const { return m_allowedVideoDeviceUID; }
@@ -72,12 +72,12 @@
     WEBCORE_EXPORT Document* document() const;
 
 private:
-    UserMediaRequest(Document&, UserMediaController&, Ref<MediaConstraintsImpl>&& audioConstraints, Ref<MediaConstraintsImpl>&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&&);
+    UserMediaRequest(Document&, UserMediaController&, MediaConstraints&& audioConstraints, MediaConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&&);
 
     void contextDestroyed() final;
     
-    Ref<MediaConstraintsImpl> m_audioConstraints;
-    Ref<MediaConstraintsImpl> m_videoConstraints;
+    MediaConstraints m_audioConstraints;
+    MediaConstraints m_videoConstraints;
 
     Vector<String> m_videoDeviceUIDs;
     Vector<String> m_audioDeviceUIDs;

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (216917 => 216918)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-05-16 08:51:50 UTC (rev 216918)
@@ -179,7 +179,6 @@
 		07846385145B1B8E00A58DF1 /* JSTrackCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846384145B1B8E00A58DF1 /* JSTrackCustom.h */; };
 		0787C4691BFBDF6F006DCD7F /* JSMediaTrackSupportedConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0787C4671BFBDF6F006DCD7F /* JSMediaTrackSupportedConstraints.cpp */; };
 		0787C46A1BFBDF6F006DCD7F /* JSMediaTrackSupportedConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 0787C4681BFBDF6F006DCD7F /* JSMediaTrackSupportedConstraints.h */; };
-		078E08FE17D14CEE00420AA1 /* MediaConstraintsImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */; };
 		078E08FF17D14CEE00420AA1 /* MediaStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B4C17CEC32700848E51 /* MediaStream.cpp */; };
 		078E090017D14CEE00420AA1 /* MediaStreamEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B4F17CEC32700848E51 /* MediaStreamEvent.cpp */; };
 		078E090117D14CEE00420AA1 /* MediaStreamRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B5217CEC32700848E51 /* MediaStreamRegistry.cpp */; };
@@ -195,7 +194,6 @@
 		078E090C17D14CEE00420AA1 /* RTCSessionDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */; };
 		078E091217D14CEE00420AA1 /* UserMediaController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B8E17CEC32700848E51 /* UserMediaController.cpp */; };
 		078E091317D14CEE00420AA1 /* UserMediaRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221B9017CEC32700848E51 /* UserMediaRequest.cpp */; };
-		078E091417D14D1C00420AA1 /* MediaConstraintsImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		078E091517D14D1C00420AA1 /* MediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B4D17CEC32700848E51 /* MediaStream.h */; };
 		078E091617D14D1C00420AA1 /* MediaStreamEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B5017CEC32700848E51 /* MediaStreamEvent.h */; };
 		078E091717D14D1C00420AA1 /* MediaStreamRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221B5317CEC32700848E51 /* MediaStreamRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -7438,8 +7436,6 @@
 		071E496F1AD5AB5E008A50B4 /* MediaPlaybackTargetMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlaybackTargetMac.h; sourceTree = "<group>"; };
 		0720B09E14D3323500642955 /* GenericEventQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenericEventQueue.cpp; sourceTree = "<group>"; };
 		0720B09F14D3323500642955 /* GenericEventQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericEventQueue.h; sourceTree = "<group>"; };
-		07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaConstraintsImpl.cpp; sourceTree = "<group>"; };
-		07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaConstraintsImpl.h; sourceTree = "<group>"; };
 		07221B4C17CEC32700848E51 /* MediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStream.cpp; sourceTree = "<group>"; };
 		07221B4D17CEC32700848E51 /* MediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStream.h; sourceTree = "<group>"; };
 		07221B4E17CEC32700848E51 /* MediaStream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStream.idl; sourceTree = "<group>"; };
@@ -15961,8 +15957,6 @@
 				93A806121E03B51C008A1F26 /* DoubleRange.idl */,
 				93A806131E03B51C008A1F26 /* LongRange.h */,
 				93A806141E03B51C008A1F26 /* LongRange.idl */,
-				07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */,
-				07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */,
 				159AE82A1B3A402F0037478B /* MediaDeviceInfo.cpp */,
 				15145B8F1B3A1B3E00662BF7 /* MediaDeviceInfo.h */,
 				15145B911B3A1D4C00662BF7 /* MediaDeviceInfo.idl */,
@@ -28405,7 +28399,6 @@
 				5CBC8DAD1AAA302200E1C803 /* MediaAccessibilitySoftLink.h in Headers */,
 				931BCC611124DFCB00BE70DD /* MediaCanStartListener.h in Headers */,
 				078E093A17D16E1C00420AA1 /* MediaConstraints.h in Headers */,
-				078E091417D14D1C00420AA1 /* MediaConstraintsImpl.h in Headers */,
 				417253AB1354BBBC00360F2A /* MediaControlElements.h in Headers */,
 				DEBCCDD416646EAF00A452E1 /* MediaControlElementTypes.h in Headers */,
 				CDF65CC8145B1E7500C4C7AA /* MediaController.h in Headers */,
@@ -32418,7 +32411,6 @@
 				49E911C60EF86D47009D0CAF /* MatrixTransformOperation.cpp in Sources */,
 				5CBC8DAC1AAA302200E1C803 /* MediaAccessibilitySoftLink.cpp in Sources */,
 				1BE5BFC21D515715001666D9 /* MediaConstraints.cpp in Sources */,
-				078E08FE17D14CEE00420AA1 /* MediaConstraintsImpl.cpp in Sources */,
 				417253AA1354BBBC00360F2A /* MediaControlElements.cpp in Sources */,
 				DEBCCDD516646EB200A452E1 /* MediaControlElementTypes.cpp in Sources */,
 				CD27F6E7145770D30078207D /* MediaController.cpp in Sources */,

Modified: trunk/Source/WebCore/platform/mediastream/MediaConstraints.cpp (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/MediaConstraints.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/MediaConstraints.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -340,6 +340,62 @@
     return !size();
 }
 
+static inline void addDefaultVideoConstraints(MediaTrackConstraintSetMap& videoConstraints, bool addFrameRateConstraint, bool addSizeConstraint, bool addFacingModeConstraint)
+{
+    if (addFrameRateConstraint) {
+        DoubleConstraint frameRateConstraint({ }, MediaConstraintType::FrameRate);
+        frameRateConstraint.setIdeal(30);
+        videoConstraints.set(MediaConstraintType::FrameRate, WTFMove(frameRateConstraint));
+    }
+    if (addSizeConstraint) {
+        IntConstraint widthConstraint({ }, MediaConstraintType::Width);
+        widthConstraint.setIdeal(640);
+        videoConstraints.set(MediaConstraintType::Width, WTFMove(widthConstraint));
+        
+        IntConstraint heightConstraint({ }, MediaConstraintType::Height);
+        heightConstraint.setIdeal(480);
+        videoConstraints.set(MediaConstraintType::Height, WTFMove(heightConstraint));
+    }
+    if (addFacingModeConstraint) {
+        StringConstraint facingModeConstraint({ }, MediaConstraintType::FacingMode);
+        facingModeConstraint.setIdeal(ASCIILiteral("user"));
+        videoConstraints.set(MediaConstraintType::FacingMode, WTFMove(facingModeConstraint));
+    }
 }
 
+bool MediaConstraints::isConstraintSet(std::function<bool(const MediaTrackConstraintSetMap&)>&& callback)
+{
+    if (callback(mandatoryConstraints))
+        return true;
+    
+    for (const auto& constraint : advancedConstraints) {
+        if (callback(constraint))
+            return true;
+    }
+    return false;
+}
+
+void MediaConstraints::setDefaultVideoConstraints()
+{
+    // 640x480, 30fps, font-facing camera
+    bool hasFrameRateConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
+        return !!constraint.frameRate();
+    });
+    
+    bool hasSizeConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
+        return !!constraint.width() || !!constraint.height();
+    });
+    
+    bool hasFacingModeConstraints = isConstraintSet([](const MediaTrackConstraintSetMap& constraint) {
+        return !!constraint.facingMode();
+    });
+    
+    if (hasFrameRateConstraints && hasSizeConstraints && hasFacingModeConstraints)
+        return;
+    
+    addDefaultVideoConstraints(mandatoryConstraints, !hasFrameRateConstraints, !hasSizeConstraints, !hasFacingModeConstraints);
+}
+    
+}
+
 #endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/platform/mediastream/MediaConstraints.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/MediaConstraints.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/MediaConstraints.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -35,9 +35,10 @@
 
 #include "RealtimeMediaSourceSupportedConstraints.h"
 #include <cstdlib>
+#include <wtf/Vector.h>
 
 namespace WebCore {
-
+    
 class MediaConstraint {
 public:
     enum class DataType { None, Integer, Double, Boolean, String };
@@ -803,21 +804,16 @@
 #endif
 };
 
-class MediaConstraints : public RefCounted<MediaConstraints> {
-public:
-    virtual ~MediaConstraints() { }
+struct MediaConstraints {
+    void setDefaultVideoConstraints();
+    bool isConstraintSet(std::function<bool(const MediaTrackConstraintSetMap&)>&&);
 
-    virtual const MediaTrackConstraintSetMap& mandatoryConstraints() const = 0;
-    virtual const Vector<MediaTrackConstraintSetMap>& advancedConstraints() const = 0;
-    virtual bool isValid() const = 0;
-
-    virtual const String& deviceIDHashSalt() const = 0;
-    virtual void setDeviceIDHashSalt(const String&) = 0;
-
-protected:
-    MediaConstraints() { }
+    MediaTrackConstraintSetMap mandatoryConstraints;
+    Vector<MediaTrackConstraintSetMap> advancedConstraints;
+    String deviceIDHashSalt;
+    bool isValid { false };
 };
-
+    
 } // namespace WebCore
 
 #define SPECIALIZE_TYPE_TRAITS_MEDIACONSTRAINT(ConstraintType, predicate) \

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamConstraintsValidationClient.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamConstraintsValidationClient.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamConstraintsValidationClient.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -23,8 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef MediaStreamConstraintsValidationClient_h
-#define MediaStreamConstraintsValidationClient_h
+#pragma once
 
 #if ENABLE(MEDIA_STREAM)
 
@@ -33,8 +32,6 @@
 
 namespace WebCore {
 
-class MediaConstraints;
-
 class MediaStreamConstraintsValidationClient : public RefCounted<MediaStreamConstraintsValidationClient> {
 public:
     virtual ~MediaStreamConstraintsValidationClient() { }
@@ -46,5 +43,3 @@
 } // namespace WebCore
 
 #endif // ENABLE(MEDIA_STREAM)
-
-#endif // MediaStreamConstraintsValidationClient_h

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -526,12 +526,12 @@
 
     failedConstraint = emptyString();
 
-    // Check width, height, and frame rate separately, because while they may be supported individually the combination may not be supported.
+    // Check width, height and frame rate jointly, because while they may be supported individually the combination may not be supported.
     double distance = std::numeric_limits<double>::infinity();
-    if (!supportsSizeAndFrameRate(constraints.mandatoryConstraints().width(), constraints.mandatoryConstraints().height(), constraints.mandatoryConstraints().frameRate(), failedConstraint, m_fitnessScore))
+    if (!supportsSizeAndFrameRate(constraints.mandatoryConstraints.width(), constraints.mandatoryConstraints.height(), constraints.mandatoryConstraints.frameRate(), failedConstraint, m_fitnessScore))
         return false;
 
-    constraints.mandatoryConstraints().filter([&](const MediaConstraint& constraint) {
+    constraints.mandatoryConstraints.filter([&](const MediaConstraint& constraint) {
         if (!supportsConstraint(constraint))
             return false;
 
@@ -548,9 +548,9 @@
                 return false;
 
             ASSERT(constraint.isString());
-            ASSERT(!constraints.deviceIDHashSalt().isEmpty());
+            ASSERT(!constraints.deviceIDHashSalt.isEmpty());
 
-            auto hashedID = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(m_persistentID, constraints.deviceIDHashSalt());
+            auto hashedID = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(m_persistentID, constraints.deviceIDHashSalt);
             double constraintDistance = downcast<StringConstraint>(constraint).fitnessDistance(hashedID);
             if (std::isinf(constraintDistance)) {
                 failedConstraint = constraint.name();
@@ -587,7 +587,7 @@
     //     values of properties as exact.
     Vector<std::pair<double, MediaTrackConstraintSetMap>> supportedConstraints;
 
-    for (const auto& advancedConstraint : constraints.advancedConstraints()) {
+    for (const auto& advancedConstraint : constraints.advancedConstraints) {
         double constraintDistance = 0;
         bool supported = false;
 
@@ -697,7 +697,7 @@
 
 bool RealtimeMediaSource::supportsConstraints(const MediaConstraints& constraints, String& invalidConstraint)
 {
-    ASSERT(constraints.isValid());
+    ASSERT(constraints.isValid);
 
     FlattenedConstraint candidates;
     if (!selectSettings(constraints, candidates, invalidConstraint, SelectType::ForSupportsConstraints))
@@ -759,7 +759,7 @@
 
 std::optional<std::pair<String, String>> RealtimeMediaSource::applyConstraints(const MediaConstraints& constraints)
 {
-    ASSERT(constraints.isValid());
+    ASSERT(constraints.isValid);
 
     FlattenedConstraint candidates;
     String failedConstraint;

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -230,11 +230,11 @@
 
         String invalidConstraint;
         CaptureSourceOrError sourceOrError;
-        if (device.type() == CaptureDevice::DeviceType::Video && videoConstraints.isValid()) {
+        if (device.type() == CaptureDevice::DeviceType::Video && videoConstraints.isValid) {
             auto sourceOrError = videoFactory().createVideoCaptureSource(device.persistentId(), nullptr);
             if (sourceOrError && sourceOrError.captureSource->supportsConstraints(videoConstraints, invalidConstraint))
                 videoDeviceInfo.append({sourceOrError.captureSource->fitnessScore(), device.persistentId()});
-        } else if (device.type() == CaptureDevice::DeviceType::Audio && audioConstraints.isValid()) {
+        } else if (device.type() == CaptureDevice::DeviceType::Audio && audioConstraints.isValid) {
             auto sourceOrError = audioFactory().createAudioCaptureSource(device.persistentId(), nullptr);
             if (sourceOrError && sourceOrError.captureSource->supportsConstraints(audioConstraints, invalidConstraint))
                 audioDeviceInfo.append({sourceOrError.captureSource->fitnessScore(), device.persistentId()});
@@ -244,7 +244,7 @@
             firstInvalidConstraint = invalidConstraint;
     }
 
-    if ((audioConstraints.isValid() && audioDeviceInfo.isEmpty()) || (videoConstraints.isValid() && videoDeviceInfo.isEmpty())) {
+    if ((audioConstraints.isValid && audioDeviceInfo.isEmpty()) || (videoConstraints.isValid && videoDeviceInfo.isEmpty())) {
         invalidHandler(firstInvalidConstraint);
         return;
     }

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -44,11 +44,12 @@
 
 class CaptureDevice;
 class CaptureDeviceManager;
-class MediaConstraints;
 class RealtimeMediaSourceSettings;
 class RealtimeMediaSourceSupportedConstraints;
 class TrackSourceInfo;
 
+struct MediaConstraints;
+    
 class RealtimeMediaSourceCenter {
 public:
     virtual ~RealtimeMediaSourceCenter();

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -144,11 +144,6 @@
     return m_currentSettings;
 }
 
-RealtimeMediaSourceSupportedConstraints& RealtimeIncomingAudioSource::supportedConstraints()
-{
-    return m_supportedConstraints;
-}
-
 AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
 {
     if (!m_audioSourceProvider) {

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -64,14 +64,9 @@
     const RealtimeMediaSourceCapabilities& capabilities() const final;
     const RealtimeMediaSourceSettings& settings() const final;
 
-    MediaConstraints& constraints() { return *m_constraints.get(); }
-    RealtimeMediaSourceSupportedConstraints& supportedConstraints();
-
     AudioSourceProvider* audioSourceProvider() final;
 
     RealtimeMediaSourceSettings m_currentSettings;
-    RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
-    RefPtr<MediaConstraints> m_constraints;
     rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
 
     RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -209,11 +209,6 @@
     return m_currentSettings;
 }
 
-RealtimeMediaSourceSupportedConstraints& RealtimeIncomingVideoSource::supportedConstraints()
-{
-    return m_supportedConstraints;
-}
-
 } // namespace WebCore
 
 #endif // USE(LIBWEBRTC)

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -61,9 +61,6 @@
     const RealtimeMediaSourceCapabilities& capabilities() const final;
     const RealtimeMediaSourceSettings& settings() const final;
 
-    MediaConstraints& constraints() { return *m_constraints.get(); }
-    RealtimeMediaSourceSupportedConstraints& supportedConstraints();
-
     void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation);
 
     bool applySize(const IntSize&) final { return true; }
@@ -75,8 +72,6 @@
 
     RefPtr<Image> m_currentImage;
     RealtimeMediaSourceSettings m_currentSettings;
-    RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
-    RefPtr<MediaConstraints> m_constraints;
     rtc::scoped_refptr<webrtc::VideoTrackInterface> m_videoTrack;
     RetainPtr<CMSampleBufferRef> m_buffer;
     PixelBufferConformerCV m_conformer;

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h (216917 => 216918)


--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -68,7 +68,6 @@
     const RealtimeMediaSourceCapabilities& capabilities() const override;
     const RealtimeMediaSourceSettings& settings() const override;
 
-    MediaConstraints& constraints() { return *m_constraints.get(); }
     RealtimeMediaSourceSupportedConstraints& supportedConstraints();
 
     unsigned deviceIndex() { return m_deviceIndex; }
@@ -84,7 +83,6 @@
     RealtimeMediaSourceSettings m_currentSettings;
     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
     std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
-    RefPtr<MediaConstraints> m_constraints;
     unsigned m_deviceIndex { 0 };
 };
 

Modified: trunk/Source/WebKit2/ChangeLog (216917 => 216918)


--- trunk/Source/WebKit2/ChangeLog	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/ChangeLog	2017-05-16 08:51:50 UTC (rev 216918)
@@ -1,3 +1,38 @@
+2017-05-16  Youenn Fablet  <you...@apple.com>
+
+        Remove MediaConstraintsData and MediaConstraintsImpl
+        https://bugs.webkit.org/show_bug.cgi?id=172132
+
+        Reviewed by Eric Carlson.
+
+        Removing MediaConstraintsData and MediaConstraintsImpl allows simplifying the code.
+        Further simplified the code by making MediaConstraints no longer ref counted and now a struct.
+
+        * Scripts/webkit/messages.py:
+        (headers_for_type):
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<MediaConstraints>::encode):
+        (IPC::ArgumentCoder<MediaConstraints>::decode):
+        (IPC::ArgumentCoder<MediaConstraintsData>::encode): Deleted.
+        (IPC::ArgumentCoder<MediaConstraintsData>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
+        (WebKit::UserMediaCaptureManagerProxy::applyConstraints):
+        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
+        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
+        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
+        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
+        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
+        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::applyConstraints):
+
 2017-05-16  Michael Catanzaro  <mcatanz...@igalia.com>
 
         [SOUP] Remove LATEST_RECORD_VERSION from GnuTLS priority string

Modified: trunk/Source/WebKit2/Scripts/webkit/messages.py (216917 => 216918)


--- trunk/Source/WebKit2/Scripts/webkit/messages.py	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/Scripts/webkit/messages.py	2017-05-16 08:51:50 UTC (rev 216918)
@@ -360,7 +360,7 @@
         'WebCore::Highlight': ['<WebCore/InspectorOverlay.h>'],
         'WebCore::KeyframeValueList': ['<WebCore/GraphicsLayer.h>'],
         'WebCore::KeypressCommand': ['<WebCore/KeyboardEvent.h>'],
-        'WebCore::MediaConstraintsData': ['<WebCore/MediaConstraintsImpl.h>'],
+        'WebCore::MediaConstraints': ['<WebCore/MediaConstraints.h>'],
         'WebCore::PasteboardImage': ['<WebCore/Pasteboard.h>'],
         'WebCore::PasteboardURL': ['<WebCore/Pasteboard.h>'],
         'WebCore::PasteboardWebContent': ['<WebCore/Pasteboard.h>'],

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp (216917 => 216918)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -102,7 +102,7 @@
 
 #if ENABLE(MEDIA_STREAM)
 #include <WebCore/CaptureDevice.h>
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #endif
 
 using namespace WebCore;
@@ -2389,7 +2389,7 @@
 }
 
 #if ENABLE(MEDIA_STREAM)
-void ArgumentCoder<MediaConstraintsData>::encode(Encoder& encoder, const WebCore::MediaConstraintsData& constraint)
+void ArgumentCoder<MediaConstraints>::encode(Encoder& encoder, const WebCore::MediaConstraints& constraint)
 {
     encoder << constraint.mandatoryConstraints
         << constraint.advancedConstraints
@@ -2397,7 +2397,7 @@
         << constraint.isValid;
 }
 
-bool ArgumentCoder<MediaConstraintsData>::decode(Decoder& decoder, WebCore::MediaConstraintsData& constraints)
+bool ArgumentCoder<MediaConstraints>::decode(Decoder& decoder, WebCore::MediaConstraints& constraints)
 {
     return decoder.decode(constraints.mandatoryConstraints)
         && decoder.decode(constraints.advancedConstraints)

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h (216917 => 216918)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -162,7 +162,7 @@
 #if ENABLE(MEDIA_STREAM)
 namespace WebCore {
 class CaptureDevice;
-struct MediaConstraintsData;
+struct MediaConstraints;
 }
 #endif
 
@@ -640,9 +640,9 @@
 #endif
 
 #if ENABLE(MEDIA_STREAM)
-template<> struct ArgumentCoder<WebCore::MediaConstraintsData> {
-    static void encode(Encoder&, const WebCore::MediaConstraintsData&);
-    static bool decode(Decoder&, WebCore::MediaConstraintsData&);
+template<> struct ArgumentCoder<WebCore::MediaConstraints> {
+    static void encode(Encoder&, const WebCore::MediaConstraints&);
+    static bool decode(Decoder&, WebCore::MediaConstraints&);
 };
 
 template<> struct ArgumentCoder<WebCore::CaptureDevice> {

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -33,7 +33,7 @@
 #include "WebCoreArgumentCoders.h"
 #include "WebProcessProxy.h"
 #include <WebCore/CARingBuffer.h>
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #include <WebCore/RealtimeMediaSourceCenter.h>
 #include <WebCore/WebAudioBufferList.h>
 #include <wtf/UniqueRef.h>
@@ -125,16 +125,15 @@
     m_process.removeMessageReceiver(Messages::UserMediaCaptureManagerProxy::messageReceiverName());
 }
 
-void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::RealtimeMediaSource::Type type, const MediaConstraintsData& constraintsData, bool& succeeded, String& invalidConstraints, WebCore::RealtimeMediaSourceSettings& settings)
+void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::RealtimeMediaSource::Type type, const MediaConstraints& constraints, bool& succeeded, String& invalidConstraints, WebCore::RealtimeMediaSourceSettings& settings)
 {
     CaptureSourceOrError sourceOrError;
-    auto constraints = MediaConstraintsImpl::create(MediaConstraintsData(constraintsData));
     switch (type) {
     case WebCore::RealtimeMediaSource::Type::Audio:
-        sourceOrError = RealtimeMediaSourceCenter::singleton().audioFactory().createAudioCaptureSource(deviceID, constraints.ptr());
+        sourceOrError = RealtimeMediaSourceCenter::singleton().audioFactory().createAudioCaptureSource(deviceID, &constraints);
         break;
     case WebCore::RealtimeMediaSource::Type::Video:
-        sourceOrError = RealtimeMediaSourceCenter::singleton().videoFactory().createVideoCaptureSource(deviceID, constraints.ptr());
+        sourceOrError = RealtimeMediaSourceCenter::singleton().videoFactory().createVideoCaptureSource(deviceID, &constraints);
         break;
     case WebCore::RealtimeMediaSource::Type::None:
         ASSERT_NOT_REACHED();
@@ -185,9 +184,8 @@
         iter->value->source().setEnabled(enabled);
 }
 
-void UserMediaCaptureManagerProxy::applyConstraints(uint64_t id, const WebCore::MediaConstraintsData& constraintsData)
+void UserMediaCaptureManagerProxy::applyConstraints(uint64_t id, const WebCore::MediaConstraints& constraints)
 {
-    auto constraints = MediaConstraintsImpl::create(MediaConstraintsData(constraintsData));
     auto iter = m_proxies.find(id);
     if (iter == m_proxies.end())
         return;

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -49,13 +49,13 @@
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
     void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;
 
-    void createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::RealtimeMediaSource::Type, const WebCore::MediaConstraintsData&, bool& succeeded, String& invalidConstraints, WebCore::RealtimeMediaSourceSettings&);
+    void createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::RealtimeMediaSource::Type, const WebCore::MediaConstraints&, bool& succeeded, String& invalidConstraints, WebCore::RealtimeMediaSourceSettings&);
     void startProducingData(uint64_t);
     void stopProducingData(uint64_t);
     void capabilities(uint64_t, WebCore::RealtimeMediaSourceCapabilities&);
     void setMuted(uint64_t, bool);
     void setEnabled(uint64_t, bool);
-    void applyConstraints(uint64_t, const WebCore::MediaConstraintsData&);
+    void applyConstraints(uint64_t, const WebCore::MediaConstraints&);
 
     class SourceProxy;
     friend class SourceProxy;

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in	2017-05-16 08:51:50 UTC (rev 216918)
@@ -22,11 +22,11 @@
 # THE POSSIBILITY OF SUCH DAMAGE.
 
 messages -> UserMediaCaptureManagerProxy {
-    CreateMediaSourceForCaptureDeviceWithConstraints(uint64_t id, String deviceID, WebCore::RealtimeMediaSource::Type type, struct WebCore::MediaConstraintsData constraints) -> (bool success, String invalidConstraints, WebCore::RealtimeMediaSourceSettings settings)
+    CreateMediaSourceForCaptureDeviceWithConstraints(uint64_t id, String deviceID, WebCore::RealtimeMediaSource::Type type, struct WebCore::MediaConstraints constraints) -> (bool success, String invalidConstraints, WebCore::RealtimeMediaSourceSettings settings)
     StartProducingData(uint64_t id)
     StopProducingData(uint64_t id)
     Capabilities(uint64_t id) -> (WebCore::RealtimeMediaSourceCapabilities capabilities)
     SetMuted(uint64_t id, bool muted)
     SetEnabled(uint64_t id, bool enabled)
-    ApplyConstraints(uint64_t id, struct WebCore::MediaConstraintsData constraints)
+    ApplyConstraints(uint64_t id, struct WebCore::MediaConstraints constraints)
 }

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -26,7 +26,7 @@
 #include "WebPageMessages.h"
 #include "WebPageProxy.h"
 #include "WebProcessProxy.h"
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #include <WebCore/MockRealtimeMediaSourceCenter.h>
 #include <WebCore/RealtimeMediaSource.h>
 #include <WebCore/SecurityOriginData.h>
@@ -251,7 +251,7 @@
         m_rejectionTimer.startOneShot(Seconds(mimimumDelayBeforeReplying + randomNumber()));
 }
 
-void UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraintsData& audioConstraintsData, const WebCore::MediaConstraintsData& videoConstraintsData)
+void UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints)
 {
 #if ENABLE(MEDIA_STREAM)
     auto invalidHandler = [this, userMediaID](const String& invalidConstraint) {
@@ -306,12 +306,11 @@
         return;
     }
 
-    auto validateConstraintsHandler = [this, userMediaID, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), audioConstraintsData, videoConstraintsData](String&& deviceIdentifierHashSalt) mutable {
+    auto validateConstraintsHandler = [this, userMediaID, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), audioConstraints = WebCore::MediaConstraints(audioConstraints), videoConstraints = WebCore::MediaConstraints(videoConstraints)](String&& deviceIdentifierHashSalt) mutable {
         syncWithWebCorePrefs();
-
-        auto audioConstraints = MediaConstraintsImpl::create(MediaConstraintsData(audioConstraintsData, deviceIdentifierHashSalt));
-        auto videoConstraints = MediaConstraintsImpl::create(MediaConstraintsData(videoConstraintsData, deviceIdentifierHashSalt));
-
+        
+        audioConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
+        videoConstraints.deviceIDHashSalt = WTFMove(deviceIdentifierHashSalt);
         RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), audioConstraints, videoConstraints);
     };
 
@@ -335,8 +334,8 @@
     UNUSED_PARAM(frameID);
     UNUSED_PARAM(userMediaDocumentOriginIdentifier);
     UNUSED_PARAM(topLevelDocumentOriginIdentifier);
-    UNUSED_PARAM(audioConstraintsData);
-    UNUSED_PARAM(videoConstraintsData);
+    UNUSED_PARAM(audioConstraints);
+    UNUSED_PARAM(videoConstraints);
 #endif
 }
 

Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -29,7 +29,7 @@
 
 namespace WebCore {
 class CaptureDevice;
-struct MediaConstraintsData;
+struct MediaConstraints;
 class SecurityOrigin;
 };
 
@@ -65,7 +65,7 @@
 
     void invalidatePendingRequests();
 
-    void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraintsData& audioConstraintsData, const WebCore::MediaConstraintsData& videoConstraintsData);
+    void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints);
 
     void userMediaAccessWasGranted(uint64_t, const String& audioDeviceUID, const String& videoDeviceUID);
     void userMediaAccessWasDenied(uint64_t, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -182,7 +182,7 @@
 #endif
 
 #if ENABLE(MEDIA_STREAM)
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #endif
 
 // This controls what strategy we use for mouse wheel coalescing.
@@ -5744,19 +5744,19 @@
 }
 #endif
 
-void WebPageProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraintsData& audioConstraintsData, const WebCore::MediaConstraintsData& videoConstraintsData)
+void WebPageProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints)
 {
 #if ENABLE(MEDIA_STREAM)
     MESSAGE_CHECK(m_process->webFrame(frameID));
 
-    userMediaPermissionRequestManager().requestUserMediaPermissionForFrame(userMediaID, frameID, userMediaDocumentOriginIdentifier, topLevelDocumentOriginIdentifier, audioConstraintsData, videoConstraintsData);
+    userMediaPermissionRequestManager().requestUserMediaPermissionForFrame(userMediaID, frameID, userMediaDocumentOriginIdentifier, topLevelDocumentOriginIdentifier, audioConstraints, videoConstraints);
 #else
     UNUSED_PARAM(userMediaID);
     UNUSED_PARAM(frameID);
     UNUSED_PARAM(userMediaDocumentOriginIdentifier);
     UNUSED_PARAM(topLevelDocumentOriginIdentifier);
-    UNUSED_PARAM(audioConstraintsData);
-    UNUSED_PARAM(videoConstraintsData);
+    UNUSED_PARAM(audioConstraints);
+    UNUSED_PARAM(videoConstraints);
 #endif
 }
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2017-05-16 08:51:50 UTC (rev 216918)
@@ -164,7 +164,7 @@
 struct DictionaryPopupInfo;
 struct ExceptionDetails;
 struct FileChooserSettings;
-struct MediaConstraintsData;
+struct MediaConstraints;
 struct SecurityOriginData;
 struct TextAlternativeWithRange;
 struct TextCheckingResult;
@@ -1313,7 +1313,7 @@
 #if ENABLE(MEDIA_STREAM)
     UserMediaPermissionRequestManagerProxy& userMediaPermissionRequestManager();
 #endif
-    void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraintsData& audioConstraints, const WebCore::MediaConstraintsData& videoConstraints);
+    void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints);
     void enumerateMediaDevicesForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier);
 
     void runModal();

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (216917 => 216918)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in	2017-05-16 08:51:50 UTC (rev 216918)
@@ -268,7 +268,7 @@
     
 #if ENABLE(MEDIA_STREAM)
     # MediaSteam messages
-    RequestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, struct WebCore::MediaConstraintsData audioConstraintsData, struct WebCore::MediaConstraintsData videoConstraintsData)
+    RequestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier, struct WebCore::MediaConstraints audioConstraints, struct WebCore::MediaConstraints videoConstraints)
     EnumerateMediaDevicesForFrame(uint64_t userMediaID, uint64_t frameID, String userMediaDocumentOriginIdentifier, String topLevelDocumentOriginIdentifier)
 #endif
 

Modified: trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp (216917 => 216918)


--- trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -29,7 +29,7 @@
 #include <WebCore/Document.h>
 #include <WebCore/Frame.h>
 #include <WebCore/FrameLoader.h>
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #include <WebCore/SecurityOrigin.h>
 #include <WebCore/SecurityOriginData.h>
 
@@ -105,7 +105,7 @@
 
     SecurityOrigin* topLevelDocumentOrigin = request.topLevelDocumentOrigin();
     String topLevelDocumentOriginString = topLevelDocumentOrigin ? SecurityOriginData::fromSecurityOrigin(*topLevelDocumentOrigin).databaseIdentifier() : emptyString();
-    m_page.send(Messages::WebPageProxy::RequestUserMediaPermissionForFrame(requestID, webFrame->frameID(), SecurityOriginData::fromSecurityOrigin(*request.userMediaDocumentOrigin()).databaseIdentifier(), topLevelDocumentOriginString, request.audioConstraints().data(), request.videoConstraints().data()));
+    m_page.send(Messages::WebPageProxy::RequestUserMediaPermissionForFrame(requestID, webFrame->frameID(), SecurityOriginData::fromSecurityOrigin(*request.userMediaDocumentOrigin()).databaseIdentifier(), topLevelDocumentOriginString, request.audioConstraints(), request.videoConstraints()));
 }
 
 void UserMediaPermissionRequestManager::cancelUserMediaRequest(UserMediaRequest& request)

Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp (216917 => 216918)


--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp	2017-05-16 08:03:02 UTC (rev 216917)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp	2017-05-16 08:51:50 UTC (rev 216918)
@@ -35,7 +35,7 @@
 #include "WebProcess.h"
 #include "WebProcessCreationParameters.h"
 #include <WebCore/CaptureDevice.h>
-#include <WebCore/MediaConstraintsImpl.h>
+#include <WebCore/MediaConstraints.h>
 #include <WebCore/RealtimeMediaSourceCenter.h>
 #include <WebCore/WebAudioBufferList.h>
 #include <WebCore/WebAudioSourceProviderAVFObjC.h>
@@ -279,12 +279,7 @@
 
 void UserMediaCaptureManager::applyConstraints(uint64_t id, const WebCore::MediaConstraints& constraints)
 {
-    MediaConstraintsData constraintsData;
-    constraintsData.mandatoryConstraints = constraints.mandatoryConstraints();
-    constraintsData.advancedConstraints = constraints.advancedConstraints();
-    constraintsData.isValid = constraints.isValid();
-
-    m_process.send(Messages::UserMediaCaptureManagerProxy::ApplyConstraints(id, constraintsData), 0);
+    m_process.send(Messages::UserMediaCaptureManagerProxy::ApplyConstraints(id, constraints), 0);
 }
 
 void UserMediaCaptureManager::applyConstraintsSucceeded(uint64_t id, const WebCore::RealtimeMediaSourceSettings& settings)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to