Title: [218530] trunk/Source
Revision
218530
Author
da...@apple.com
Date
2017-06-19 21:18:47 -0700 (Mon, 19 Jun 2017)

Log Message

Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime
https://bugs.webkit.org/show_bug.cgi?id=173527

Reviewed by Sam Weinig.

Source/WebCore:

* CMakeLists.txt: Removed MediaDevicesRequest.cpp.

* Modules/mediastream/MediaDeviceInfo.cpp:
(WebCore::MediaDeviceInfo::MediaDeviceInfo): Removed unneeded ScriptExecutionContext.
(WebCore::MediaDeviceInfo::create): Ditto.
* Modules/mediastream/MediaDeviceInfo.h: Removed unnecessary derivation from
ContextDestructionObserver and ScriptExecutionContext arguments. Also removed
unused MediaDeviceInfoVector typedef.
* Modules/mediastream/MediaDeviceInfo.idl: Added ImplementationLacksVTable.

* Modules/mediastream/MediaDevices.cpp:
(WebCore::MediaDevices::enumerateDevices): Call MediaDevicesEnumerationRequest
directly here instead of going through MediaDevicesRequest.

* Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Moved code from
MediaDevicesRequest in here. Put the typical counts at the top of the file.
(WebCore::MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest):
Marked inline and changed to take a DOM promise directly rather than having
a separate class do the mapping to DOM promises.
(WebCore::MediaDevicesEnumerationRequest::start): Replaced the create function
with this. The caller doesn't actually keep a reference to the object.
Added a FIXME about the behavior, not new, where we neither resolve nor reject
the promise if there is no page object present. Updated to use the new version
of UserMediaController::from.
(WebCore::MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest):
Added a FIXME about the issue that we don't resolve or reject the promise if
the client drops the last reference to the request without calling setDeviceInfo.
(WebCore::MediaDevicesEnumerationRequest::document): Added. Private helper.
Returns nullptr if the request is no longer active.
(WebCore::MediaDevicesEnumerationRequest::frame): Added. For use by a caller
that was getting to the frame. Uses the document function so it will return
nullptr if the request is no longer active.
(WebCore::MediaDevicesEnumerationRequest::userMediaDocumentOrigin): Changed
to do the work using the document function.
(WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Ditto.
(WebCore::MediaDevicesEnumerationRequest::contextDestroyed): Simplified. We
now can simply set a boolean when the context is destroyed, so there are no
side effects and the code is simpler.
(WebCore::removeAtypicalDevices): Renamed and tightened up the code a bit.
(WebCore::MediaDevicesEnumerationRequest::setDeviceInfo): Moved the code
here from MediaDevicesEnumerationRequest to pass the devices along.

* Modules/mediastream/MediaDevicesEnumerationRequest.h: Made the
ContextDestructionObserver use private inheritance. Cut down the includes
and removed various unneeded functions.

* Modules/mediastream/MediaDevicesRequest.cpp: Removed.
* Modules/mediastream/MediaDevicesRequest.h: Removed.

* Modules/mediastream/UserMediaController.cpp:
(WebCore::UserMediaController::UserMediaController): Use reference rather
than pointer for the client.
(WebCore::UserMediaController::~UserMediaController): Ditto.
(WebCore::provideUserMediaTo): Ditto.

* Modules/mediastream/UserMediaController.h:
Changed constructor to take a refeference, removed client function, and
changed data member to be a reference rather than a pointer.
(WebCore::UserMediaController::from): Take and return a reference rather
than taking a pointer that is checked for null.
(WebCore::UserMediaController::requestUserMediaAccess): Use reference.
(WebCore::UserMediaController::cancelUserMediaAccessRequest): Ditto.
(WebCore::UserMediaController::enumerateMediaDevices): Ditto.
(WebCore::UserMediaController::cancelMediaDevicesEnumerationRequest): Ditto.

* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::start): Updated to use the new version
of UserMediaController::from.

* WebCore.xcodeproj/project.pbxproj: Updated for file removals.

* testing/Internals.cpp: Removed unneeded include of UserMediaController.h.

Source/WebKit2:

* UIProcess/API/C/WKUserMediaPermissionCheck.h: Fixed incorrect file name in comment.

* WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
(WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices): Use the new frame
function from MediaDevicesEnumerationRequest rather than finding the frame with our
own code.

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/CMakeLists.txt (218529 => 218530)


--- trunk/Source/WebCore/CMakeLists.txt	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/CMakeLists.txt	2017-06-20 04:18:47 UTC (rev 218530)
@@ -964,7 +964,6 @@
     Modules/mediastream/MediaDeviceInfo.cpp
     Modules/mediastream/MediaDevices.cpp
     Modules/mediastream/MediaDevicesEnumerationRequest.cpp
-    Modules/mediastream/MediaDevicesRequest.cpp
     Modules/mediastream/MediaEndpointPeerConnection.cpp
     Modules/mediastream/MediaEndpointSessionDescription.cpp
     Modules/mediastream/MediaStream.cpp

Modified: trunk/Source/WebCore/ChangeLog (218529 => 218530)


--- trunk/Source/WebCore/ChangeLog	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/ChangeLog	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,3 +1,83 @@
+2017-06-19  Darin Adler  <da...@apple.com>
+
+        Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime
+        https://bugs.webkit.org/show_bug.cgi?id=173527
+
+        Reviewed by Sam Weinig.
+
+        * CMakeLists.txt: Removed MediaDevicesRequest.cpp.
+
+        * Modules/mediastream/MediaDeviceInfo.cpp:
+        (WebCore::MediaDeviceInfo::MediaDeviceInfo): Removed unneeded ScriptExecutionContext.
+        (WebCore::MediaDeviceInfo::create): Ditto.
+        * Modules/mediastream/MediaDeviceInfo.h: Removed unnecessary derivation from
+        ContextDestructionObserver and ScriptExecutionContext arguments. Also removed
+        unused MediaDeviceInfoVector typedef.
+        * Modules/mediastream/MediaDeviceInfo.idl: Added ImplementationLacksVTable.
+
+        * Modules/mediastream/MediaDevices.cpp:
+        (WebCore::MediaDevices::enumerateDevices): Call MediaDevicesEnumerationRequest
+        directly here instead of going through MediaDevicesRequest.
+
+        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Moved code from
+        MediaDevicesRequest in here. Put the typical counts at the top of the file.
+        (WebCore::MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest):
+        Marked inline and changed to take a DOM promise directly rather than having
+        a separate class do the mapping to DOM promises.
+        (WebCore::MediaDevicesEnumerationRequest::start): Replaced the create function
+        with this. The caller doesn't actually keep a reference to the object.
+        Added a FIXME about the behavior, not new, where we neither resolve nor reject
+        the promise if there is no page object present. Updated to use the new version
+        of UserMediaController::from.
+        (WebCore::MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest):
+        Added a FIXME about the issue that we don't resolve or reject the promise if
+        the client drops the last reference to the request without calling setDeviceInfo.
+        (WebCore::MediaDevicesEnumerationRequest::document): Added. Private helper.
+        Returns nullptr if the request is no longer active.
+        (WebCore::MediaDevicesEnumerationRequest::frame): Added. For use by a caller
+        that was getting to the frame. Uses the document function so it will return
+        nullptr if the request is no longer active.
+        (WebCore::MediaDevicesEnumerationRequest::userMediaDocumentOrigin): Changed
+        to do the work using the document function.
+        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Ditto.
+        (WebCore::MediaDevicesEnumerationRequest::contextDestroyed): Simplified. We
+        now can simply set a boolean when the context is destroyed, so there are no
+        side effects and the code is simpler.
+        (WebCore::removeAtypicalDevices): Renamed and tightened up the code a bit.
+        (WebCore::MediaDevicesEnumerationRequest::setDeviceInfo): Moved the code
+        here from MediaDevicesEnumerationRequest to pass the devices along.
+
+        * Modules/mediastream/MediaDevicesEnumerationRequest.h: Made the
+        ContextDestructionObserver use private inheritance. Cut down the includes
+        and removed various unneeded functions.
+
+        * Modules/mediastream/MediaDevicesRequest.cpp: Removed.
+        * Modules/mediastream/MediaDevicesRequest.h: Removed.
+
+        * Modules/mediastream/UserMediaController.cpp:
+        (WebCore::UserMediaController::UserMediaController): Use reference rather
+        than pointer for the client.
+        (WebCore::UserMediaController::~UserMediaController): Ditto.
+        (WebCore::provideUserMediaTo): Ditto.
+
+        * Modules/mediastream/UserMediaController.h:
+        Changed constructor to take a refeference, removed client function, and
+        changed data member to be a reference rather than a pointer.
+        (WebCore::UserMediaController::from): Take and return a reference rather
+        than taking a pointer that is checked for null.
+        (WebCore::UserMediaController::requestUserMediaAccess): Use reference.
+        (WebCore::UserMediaController::cancelUserMediaAccessRequest): Ditto.
+        (WebCore::UserMediaController::enumerateMediaDevices): Ditto.
+        (WebCore::UserMediaController::cancelMediaDevicesEnumerationRequest): Ditto.
+
+        * Modules/mediastream/UserMediaRequest.cpp:
+        (WebCore::UserMediaRequest::start): Updated to use the new version
+        of UserMediaController::from.
+
+        * WebCore.xcodeproj/project.pbxproj: Updated for file removals.
+
+        * testing/Internals.cpp: Removed unneeded include of UserMediaController.h.
+
 2017-06-19  Sam Weinig  <s...@webkit.org>
 
         [WebIDL] Move Touch related bindings in Document to their own IDL file

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,9 +30,8 @@
 
 namespace WebCore {
 
-inline MediaDeviceInfo::MediaDeviceInfo(ScriptExecutionContext* context, const String& label, const String& deviceId, const String& groupId, Kind kind)
-    : ContextDestructionObserver(context)
-    , m_label(label)
+inline MediaDeviceInfo::MediaDeviceInfo(const String& label, const String& deviceId, const String& groupId, Kind kind)
+    : m_label(label)
     , m_deviceId(deviceId)
     , m_groupId(groupId)
     , m_kind(kind)
@@ -39,9 +38,9 @@
 {
 }
 
-Ref<MediaDeviceInfo> MediaDeviceInfo::create(ScriptExecutionContext* context, const String& label, const String& deviceId, const String& groupId, Kind kind)
+Ref<MediaDeviceInfo> MediaDeviceInfo::create(const String& label, const String& deviceId, const String& groupId, Kind kind)
 {
-    return adoptRef(*new MediaDeviceInfo(context, label, deviceId, groupId, kind));
+    return adoptRef(*new MediaDeviceInfo(label, deviceId, groupId, kind));
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.h (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.h	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.h	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,17 +27,16 @@
 
 #if ENABLE(MEDIA_STREAM)
 
-#include "ContextDestructionObserver.h"
 #include "ScriptWrappable.h"
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-class MediaDeviceInfo : public RefCounted<MediaDeviceInfo>, public ScriptWrappable, private ContextDestructionObserver {
+class MediaDeviceInfo : public RefCounted<MediaDeviceInfo>, public ScriptWrappable {
 public:
     enum class Kind { Audioinput, Audiooutput, Videoinput };
 
-    static Ref<MediaDeviceInfo> create(ScriptExecutionContext*, const String&, const String&, const String&, Kind);
+    static Ref<MediaDeviceInfo> create(const String& label, const String& deviceId, const String& groupId, Kind);
 
     const String& label() const { return m_label; }
     const String& deviceId() const { return m_deviceId; }
@@ -45,7 +44,7 @@
     Kind kind() const { return m_kind; }
 
 private:
-    MediaDeviceInfo(ScriptExecutionContext*, const String&, const String&, const String&, Kind);
+    MediaDeviceInfo(const String& label, const String& deviceId, const String& groupId, Kind);
 
     const String m_label;
     const String m_deviceId;
@@ -53,8 +52,6 @@
     const Kind m_kind;
 };
 
-typedef Vector<RefPtr<MediaDeviceInfo>> MediaDeviceInfoVector;
-
 }
 
 #endif

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.idl (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.idl	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.idl	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,5 @@
 /*
-* Copyright (C) 2015 Apple Inc. All rights reserved.
+* Copyright (C) 2015-2017 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
@@ -25,6 +25,7 @@
 
 [
     Conditional=MEDIA_STREAM,
+    ImplementationLacksVTable,
     JSGenerateToJSObject,
 ] interface MediaDeviceInfo {
     readonly attribute DOMString deviceId;

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -37,7 +37,7 @@
 #include "Document.h"
 #include "Event.h"
 #include "EventNames.h"
-#include "MediaDevicesRequest.h"
+#include "MediaDevicesEnumerationRequest.h"
 #include "MediaTrackSupportedConstraints.h"
 #include "UserMediaRequest.h"
 #include <wtf/RandomNumber.h>
@@ -109,7 +109,7 @@
     auto* document = this->document();
     if (!document)
         return;
-    MediaDevicesRequest::create(*document, WTFMove(promise))->start();
+    MediaDevicesEnumerationRequest::start(*document, WTFMove(promise));
 }
 
 MediaTrackSupportedConstraints MediaDevices::getSupportedConstraints()

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,77 +29,143 @@
 
 #if ENABLE(MEDIA_STREAM)
 
-#include "CaptureDevice.h"
 #include "Document.h"
-#include "MainFrame.h"
-#include "SecurityOrigin.h"
+#include "JSMediaDeviceInfo.h"
+#include "RealtimeMediaSourceCenter.h"
 #include "UserMediaController.h"
 
+#if PLATFORM(COCOA)
+#define REMOVE_ATYPICAL_DEVICES 1
+#else
+#define REMOVE_ATYPICAL_DEVICES 0
+#endif
+
+#if PLATFORM(COCOA)
+const int typicalMicrophoneCount = 1;
+#endif
+
+#if PLATFORM(IOS)
+const int typicalCameraCount = 2;
+#endif
+
+#if PLATFORM(MAC)
+const int typicalCameraCount = 1;
+#endif
+
 namespace WebCore {
 
-Ref<MediaDevicesEnumerationRequest> MediaDevicesEnumerationRequest::create(Document& document, CompletionHandler&& completionHandler)
+inline MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest(Document& document, Promise&& promise)
+    : ContextDestructionObserver(&document)
+    , m_promise(WTFMove(promise))
 {
-    return adoptRef(*new MediaDevicesEnumerationRequest(document, WTFMove(completionHandler)));
 }
 
-MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest(ScriptExecutionContext& context, CompletionHandler&& completionHandler)
-    : ContextDestructionObserver(&context)
-    , m_completionHandler(WTFMove(completionHandler))
+void MediaDevicesEnumerationRequest::start(Document& document, Promise&& promise)
 {
+    auto* page = document.page();
+    if (!page) {
+        // FIXME: Should we resolve or reject the promise here instead of leaving the website waiting?
+        return;
+    }
+
+    UserMediaController::from(*page).enumerateMediaDevices(adoptRef(*new MediaDevicesEnumerationRequest(document, WTFMove(promise))));
 }
 
 MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest()
 {
+    // We will get here with m_isActive true if the client drops the request without ever calling setDeviceInfo.
+    // FIXME: Should we resolve or reject the promise in that case instead of leaving the website waiting?
 }
 
-SecurityOrigin* MediaDevicesEnumerationRequest::userMediaDocumentOrigin() const
+Document* MediaDevicesEnumerationRequest::document()
 {
-    if (!scriptExecutionContext())
-        return nullptr;
+    return m_promise ? downcast<Document>(scriptExecutionContext()) : nullptr;
+}
 
-    return scriptExecutionContext()->securityOrigin();
+Frame* MediaDevicesEnumerationRequest::frame()
+{
+    auto* document = this->document();
+    return document ? document->frame() : nullptr;
 }
 
-SecurityOrigin* MediaDevicesEnumerationRequest::topLevelDocumentOrigin() const
+SecurityOrigin* MediaDevicesEnumerationRequest::userMediaDocumentOrigin()
 {
-    if (!scriptExecutionContext())
-        return nullptr;
+    auto* document = this->document();
+    return document ? &document->securityOrigin() : nullptr;
+}
 
-    return &scriptExecutionContext()->topOrigin();
+SecurityOrigin* MediaDevicesEnumerationRequest::topLevelDocumentOrigin()
+{
+    auto* document = this->document();
+    return document ? &document->topOrigin() : nullptr;
 }
 
 void MediaDevicesEnumerationRequest::contextDestroyed()
 {
-    // Calling cancel() may destroy ourselves.
-    Ref<MediaDevicesEnumerationRequest> protectedThis(*this);
+    // FIXME: Should we be calling UserMediaController::cancelMediaDevicesEnumerationRequest here?
+    // If not, then why does that function exist? If we decide that we want to call that cancel
+    // function here, then there may be a problem, because it's hard to get from the document to
+    // the page to the user media controller while the document is being destroyed.
 
-    cancel();
+    m_promise = std::nullopt;
     ContextDestructionObserver::contextDestroyed();
 }
 
-void MediaDevicesEnumerationRequest::start()
+#if REMOVE_ATYPICAL_DEVICES
+
+// To reduce the value of media devices for fingerprinting, filter devices that go beyond the typical number.
+static inline void removeAtypicalDevices(Vector<RefPtr<MediaDeviceInfo>>& devices)
 {
-    ASSERT(scriptExecutionContext());
+    int cameraCount = 0;
+    int microphoneCount = 0;
+    devices.removeAllMatching([&cameraCount, &microphoneCount] (const RefPtr<MediaDeviceInfo>& device) {
+        if (device->kind() == MediaDeviceInfo::Kind::Videoinput && ++cameraCount > typicalCameraCount)
+            return true;
+        if (device->kind() == MediaDeviceInfo::Kind::Audioinput && ++microphoneCount > typicalMicrophoneCount)
+            return true;
+        return false;
+    });
+}
 
-    auto& document = downcast<Document>(*scriptExecutionContext());
-    auto* controller = UserMediaController::from(document.page());
-    if (!controller)
+#endif
+
+void MediaDevicesEnumerationRequest::setDeviceInfo(const Vector<CaptureDevice>& captureDevices, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess)
+{
+    if (!m_promise)
         return;
+    auto promise = WTFMove(m_promise.value());
+    ASSERT(!m_promise);
 
-    Ref<MediaDevicesEnumerationRequest> protectedThis(*this);
-    controller->enumerateMediaDevices(*this);
-}
+    auto& document = downcast<Document>(*scriptExecutionContext());
 
-void MediaDevicesEnumerationRequest::cancel()
-{
-    m_completionHandler = nullptr;
-}
+    // Policy about including some of the more sensitive information about capture devices.
+    bool includeLabels = originHasPersistentAccess || document.hasHadActiveMediaStreamTrack();
+#if REMOVE_ATYPICAL_DEVICES
+    bool includeAtypicalDevices = includeLabels;
+#endif
 
-void MediaDevicesEnumerationRequest::setDeviceInfo(const Vector<CaptureDevice>& deviceList, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess)
-{
-    if (m_completionHandler)
-        m_completionHandler(deviceList, deviceIdentifierHashSalt, originHasPersistentAccess);
-    m_completionHandler = nullptr;
+    Vector<RefPtr<MediaDeviceInfo>> devices;
+
+    document.setDeviceIDHashSalt(deviceIdentifierHashSalt);
+
+    for (auto& captureDevice : captureDevices) {
+        auto id = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(captureDevice.persistentId(), deviceIdentifierHashSalt);
+        if (id.isEmpty())
+            continue;
+
+        auto label = includeLabels ? captureDevice.label() : emptyString();
+        auto groupId = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(captureDevice.groupId(), deviceIdentifierHashSalt);
+        auto deviceType = captureDevice.type() == CaptureDevice::DeviceType::Audio ? MediaDeviceInfo::Kind::Audioinput : MediaDeviceInfo::Kind::Videoinput;
+
+        devices.append(MediaDeviceInfo::create(label, id, groupId, deviceType));
+    }
+
+#if REMOVE_ATYPICAL_DEVICES
+    if (!includeAtypicalDevices)
+        removeAtypicalDevices(devices);
+#endif
+
+    promise.resolve(devices);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.h (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.h	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.h	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -28,41 +28,34 @@
 
 #if ENABLE(MEDIA_STREAM)
 
-#include "ActiveDOMObject.h"
-#include <wtf/Function.h>
-#include <wtf/text/WTFString.h>
+#include "JSDOMPromiseDeferred.h"
 
 namespace WebCore {
 
 class CaptureDevice;
-class Document;
+class Frame;
+class MediaDeviceInfo;
 class SecurityOrigin;
 
-class MediaDevicesEnumerationRequest final : public ContextDestructionObserver, public RefCounted<MediaDevicesEnumerationRequest> {
+class MediaDevicesEnumerationRequest final : public RefCounted<MediaDevicesEnumerationRequest>, private ContextDestructionObserver {
 public:
-    using CompletionHandler = WTF::Function<void(const Vector<CaptureDevice>&, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess)>;
+    using Promise = DOMPromiseDeferred<IDLSequence<IDLInterface<MediaDeviceInfo>>>;
+    static void start(Document&, Promise&&);
 
-    static Ref<MediaDevicesEnumerationRequest> create(Document&, CompletionHandler&&);
-
     virtual ~MediaDevicesEnumerationRequest();
 
-    void start();
-    void cancel();
-
-    bool wasCanceled() const { return !m_completionHandler; }
-
     WEBCORE_EXPORT void setDeviceInfo(const Vector<CaptureDevice>&, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess);
 
-    WEBCORE_EXPORT SecurityOrigin* userMediaDocumentOrigin() const;
-    WEBCORE_EXPORT SecurityOrigin* topLevelDocumentOrigin() const;
+    WEBCORE_EXPORT Frame* frame();
+    WEBCORE_EXPORT SecurityOrigin* userMediaDocumentOrigin();
+    WEBCORE_EXPORT SecurityOrigin* topLevelDocumentOrigin();
 
 private:
-    MediaDevicesEnumerationRequest(ScriptExecutionContext&, CompletionHandler&&);
-
-    // ContextDestructionObserver
+    MediaDevicesEnumerationRequest(Document&, Promise&&);
+    Document* document();
     void contextDestroyed() final;
 
-    CompletionHandler m_completionHandler;
+    std::optional<Promise> m_promise;
 };
 
 } // namespace WebCore

Deleted: trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2015-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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``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 APPLE INC. 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"
-#include "MediaDevicesRequest.h"
-
-#if ENABLE(MEDIA_STREAM)
-
-#include "CaptureDevice.h"
-#include "Document.h"
-#include "Frame.h"
-#include "JSMediaDeviceInfo.h"
-#include "MediaDevicesEnumerationRequest.h"
-#include "RealtimeMediaSourceCenter.h"
-#include "SecurityOrigin.h"
-#include "UserMediaController.h"
-#include <wtf/MainThread.h>
-#include <wtf/SHA1.h>
-
-namespace WebCore {
-
-inline MediaDevicesRequest::MediaDevicesRequest(Document& document, MediaDevices::EnumerateDevicesPromise&& promise)
-    : ContextDestructionObserver(&document)
-    , m_promise(WTFMove(promise))
-{
-}
-
-Ref<MediaDevicesRequest> MediaDevicesRequest::create(Document& document, MediaDevices::EnumerateDevicesPromise&& promise)
-{
-    return adoptRef(*new MediaDevicesRequest(document, WTFMove(promise)));
-}
-
-MediaDevicesRequest::~MediaDevicesRequest()
-{
-    // This should only get destroyed after the enumeration request has completed or has been canceled.
-    ASSERT(!m_enumerationRequest || m_enumerationRequest->wasCanceled());
-}
-
-SecurityOrigin* MediaDevicesRequest::securityOrigin() const
-{
-    if (scriptExecutionContext())
-        return scriptExecutionContext()->securityOrigin();
-
-    return nullptr;
-}
-
-void MediaDevicesRequest::contextDestroyed()
-{
-    // The call to m_enumerationRequest->cancel() might delete this.
-    auto protectedThis = makeRef(*this);
-
-    if (m_enumerationRequest) {
-        m_enumerationRequest->cancel();
-        m_enumerationRequest = nullptr;
-    }
-    ContextDestructionObserver::contextDestroyed();
-}
-
-void MediaDevicesRequest::filterDeviceList(Vector<RefPtr<MediaDeviceInfo>>& devices)
-{
-#if !PLATFORM(COCOA)
-    UNUSED_PARAM(devices);
-#else
-
-#if PLATFORM(IOS)
-    static const int defaultCameraCount = 2;
-#endif
-#if PLATFORM(MAC)
-    static const int defaultCameraCount = 1;
-#endif
-    static const int defaultMicrophoneCount = 1;
-
-    int cameraCount = 0;
-    int microphoneCount = 0;
-    devices.removeAllMatching([&](const RefPtr<MediaDeviceInfo>& device) -> bool {
-        if (device->kind() == MediaDeviceInfo::Kind::Videoinput && ++cameraCount > defaultCameraCount)
-            return true;
-        if (device->kind() == MediaDeviceInfo::Kind::Audioinput && ++microphoneCount > defaultMicrophoneCount)
-            return true;
-
-        return false;
-    });
-
-#endif
-}
-
-void MediaDevicesRequest::start()
-{
-    // This lambda keeps |this| alive until the request completes or is canceled.
-    auto completion = [this, protectedThis = makeRef(*this)] (const Vector<CaptureDevice>& captureDevices, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess) mutable {
-
-        m_enumerationRequest = nullptr;
-
-        if (!scriptExecutionContext())
-            return;
-
-        Document& document = downcast<Document>(*scriptExecutionContext());
-        document.setDeviceIDHashSalt(deviceIdentifierHashSalt);
-
-        Vector<RefPtr<MediaDeviceInfo>> devices;
-        for (auto& deviceInfo : captureDevices) {
-            auto label = emptyString();
-            if (originHasPersistentAccess || document.hasHadActiveMediaStreamTrack())
-                label = deviceInfo.label();
-
-            auto id = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(deviceInfo.persistentId(), deviceIdentifierHashSalt);
-            if (id.isEmpty())
-                continue;
-
-            auto groupId = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(deviceInfo.groupId(), deviceIdentifierHashSalt);
-            auto deviceType = deviceInfo.type() == CaptureDevice::DeviceType::Audio ? MediaDeviceInfo::Kind::Audioinput : MediaDeviceInfo::Kind::Videoinput;
-            devices.append(MediaDeviceInfo::create(scriptExecutionContext(), label, id, groupId, deviceType));
-        }
-
-        if (!originHasPersistentAccess && !document.hasHadActiveMediaStreamTrack())
-            filterDeviceList(devices);
-
-        callOnMainThread([protectedThis = makeRef(*this), devices = WTFMove(devices)]() mutable {
-            protectedThis->m_promise.resolve(devices);
-        });
-    };
-
-    m_enumerationRequest = MediaDevicesEnumerationRequest::create(*downcast<Document>(scriptExecutionContext()), WTFMove(completion));
-    m_enumerationRequest->start();
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Deleted: trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.h (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.h	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.h	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015-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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``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 APPLE INC. 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 "MediaDevices.h"
-
-namespace WebCore {
-
-class Document;
-class MediaDevicesEnumerationRequest;
-class SecurityOrigin;
-
-class MediaDevicesRequest : public RefCounted<MediaDevicesRequest>, private ContextDestructionObserver {
-public:
-    static Ref<MediaDevicesRequest> create(Document&, MediaDevices::EnumerateDevicesPromise&&);
-
-    virtual ~MediaDevicesRequest();
-
-    void start();
-
-    SecurityOrigin* securityOrigin() const;
-
-private:
-    MediaDevicesRequest(Document&, MediaDevices::EnumerateDevicesPromise&&);
-
-    void contextDestroyed() final;
-
-    void filterDeviceList(Vector<RefPtr<MediaDeviceInfo>>&);
-
-    MediaDevices::EnumerateDevicesPromise m_promise;
-    RefPtr<MediaDevicesRequest> m_protector;
-    RefPtr<MediaDevicesEnumerationRequest> m_enumerationRequest;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -36,7 +37,7 @@
     return "UserMediaController";
 }
 
-UserMediaController::UserMediaController(UserMediaClient* client)
+inline UserMediaController::UserMediaController(UserMediaClient& client)
     : m_client(client)
 {
 }
@@ -43,12 +44,12 @@
 
 UserMediaController::~UserMediaController()
 {
-    m_client->pageDestroyed();
+    m_client.pageDestroyed();
 }
 
 void provideUserMediaTo(Page* page, UserMediaClient* client)
 {
-    UserMediaController::provideTo(page, UserMediaController::supplementName(), std::make_unique<UserMediaController>(client));
+    UserMediaController::provideTo(page, UserMediaController::supplementName(), std::make_unique<UserMediaController>(*client));
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaController.h (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaController.h	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaController.h	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -36,11 +36,9 @@
 
 class UserMediaController : public Supplement<Page> {
 public:
-    explicit UserMediaController(UserMediaClient*);
+    explicit UserMediaController(UserMediaClient&);
     ~UserMediaController();
 
-    UserMediaClient* client() const { return m_client; }
-
     void requestUserMediaAccess(UserMediaRequest&);
     void cancelUserMediaAccessRequest(UserMediaRequest&);
 
@@ -48,30 +46,30 @@
     void cancelMediaDevicesEnumerationRequest(MediaDevicesEnumerationRequest&);
 
     WEBCORE_EXPORT static const char* supplementName();
-    static UserMediaController* from(Page* page) { return static_cast<UserMediaController*>(Supplement<Page>::from(page, supplementName())); }
+    static UserMediaController& from(Page& page) { return *static_cast<UserMediaController*>(Supplement<Page>::from(&page, supplementName())); }
 
 private:
-    UserMediaClient* m_client;
+    UserMediaClient& m_client;
 };
 
 inline void UserMediaController::requestUserMediaAccess(UserMediaRequest& request)
 {
-    m_client->requestUserMediaAccess(request);
+    m_client.requestUserMediaAccess(request);
 }
 
 inline void UserMediaController::cancelUserMediaAccessRequest(UserMediaRequest& request)
 {
-    m_client->cancelUserMediaAccessRequest(request);
+    m_client.cancelUserMediaAccessRequest(request);
 }
 
 inline void UserMediaController::enumerateMediaDevices(MediaDevicesEnumerationRequest& request)
 {
-    m_client->enumerateMediaDevices(request);
+    m_client.enumerateMediaDevices(request);
 }
 
 inline void UserMediaController::cancelMediaDevicesEnumerationRequest(MediaDevicesEnumerationRequest& request)
 {
-    m_client->cancelMediaDevicesEnumerationRequest(request);
+    m_client.cancelMediaDevicesEnumerationRequest(request);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (218529 => 218530)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -52,8 +52,8 @@
 
 ExceptionOr<void> UserMediaRequest::start(Document& document, MediaConstraints&& audioConstraints, MediaConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
 {
-    auto* userMedia = UserMediaController::from(document.page());
-    if (!userMedia)
+    auto* page = document.page();
+    if (!page)
         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) {
@@ -61,7 +61,7 @@
         return { };
     }
 
-    adoptRef(*new UserMediaRequest(document, *userMedia, WTFMove(audioConstraints), WTFMove(videoConstraints), WTFMove(promise)))->start();
+    adoptRef(*new UserMediaRequest(document, UserMediaController::from(*page), WTFMove(audioConstraints), WTFMove(videoConstraints), WTFMove(promise)))->start();
     return { };
 }
 

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (218529 => 218530)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-06-20 04:18:47 UTC (rev 218530)
@@ -140,8 +140,6 @@
 		073794FA19F5864E00E5A045 /* RTCDataChannelHandlerMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F419F5864E00E5A045 /* RTCDataChannelHandlerMock.h */; };
 		073794FD19F5864E00E5A045 /* RTCNotifiersMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */; };
 		073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */; };
-		07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */; };
-		07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		073B87661E4385AC0071C0EC /* AudioSampleBufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073B87621E43859D0071C0EC /* AudioSampleBufferList.cpp */; };
 		073B87671E4385AC0071C0EC /* AudioSampleBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 073B87631E43859D0071C0EC /* AudioSampleBufferList.h */; };
 		073B87681E4385AC0071C0EC /* AudioSampleDataSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 073B87641E43859D0071C0EC /* AudioSampleDataSource.mm */; };
@@ -7599,8 +7597,6 @@
 		073794F419F5864E00E5A045 /* RTCDataChannelHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCDataChannelHandlerMock.h; sourceTree = "<group>"; };
 		073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCNotifiersMock.cpp; sourceTree = "<group>"; };
 		073794F819F5864E00E5A045 /* RTCNotifiersMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCNotifiersMock.h; sourceTree = "<group>"; };
-		07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevicesRequest.cpp; sourceTree = "<group>"; };
-		07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaDevicesRequest.h; sourceTree = "<group>"; };
 		073B87561E40DCE50071C0EC /* AudioStreamDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioStreamDescription.h; sourceTree = "<group>"; };
 		073B87571E40DCFD0071C0EC /* CAAudioStreamDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioStreamDescription.cpp; sourceTree = "<group>"; };
 		073B87581E40DCFD0071C0EC /* CAAudioStreamDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioStreamDescription.h; sourceTree = "<group>"; };
@@ -16132,8 +16128,6 @@
 				5EA725CF1ACABCD900EAD17B /* MediaDevices.idl */,
 				07ABEF6B1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp */,
 				07ABEF6D1D8A1C7600F21972 /* MediaDevicesEnumerationRequest.h */,
-				07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */,
-				07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */,
 				5E16A2E21BFA64FB0029A21E /* MediaEndpointPeerConnection.cpp */,
 				5E16A2E31BFA64FB0029A21E /* MediaEndpointPeerConnection.h */,
 				5E4EAB021D07164C0006A184 /* MediaEndpointSessionDescription.cpp */,
@@ -28709,7 +28703,6 @@
 				15145B901B3A1CE000662BF7 /* MediaDeviceInfo.h in Headers */,
 				5EA725D31ACABD4700EAD17B /* MediaDevices.h in Headers */,
 				07ABEF6E1D8A1C7600F21972 /* MediaDevicesEnumerationRequest.h in Headers */,
-				07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */,
 				97205AB81239291000B17380 /* MediaDocument.h in Headers */,
 				FD6F252D13F5EF0E0065165F /* MediaElementAudioSourceNode.h in Headers */,
 				07FE99DD18807A7D00256648 /* MediaElementSession.h in Headers */,
@@ -32748,7 +32741,6 @@
 				159AE82B1B3A402F0037478B /* MediaDeviceInfo.cpp in Sources */,
 				5EA725D21ACABD4700EAD17B /* MediaDevices.cpp in Sources */,
 				07ABEF6C1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp in Sources */,
-				07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */,
 				97205AB71239291000B17380 /* MediaDocument.cpp in Sources */,
 				FD6F252C13F5EF0E0065165F /* MediaElementAudioSourceNode.cpp in Sources */,
 				07FE99DC18807A7D00256648 /* MediaElementSession.cpp in Sources */,

Modified: trunk/Source/WebCore/testing/Internals.cpp (218529 => 218530)


--- trunk/Source/WebCore/testing/Internals.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebCore/testing/Internals.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -137,12 +137,8 @@
 #include "TreeScope.h"
 #include "TypeConversions.h"
 #include "UserGestureIndicator.h"
-#include "UserMediaController.h"
 #include "ViewportArguments.h"
 #include "WebCoreJSClientData.h"
-#if ENABLE(WEBGL)
-#include "WebGLRenderingContext.h"
-#endif
 #include "WorkerThread.h"
 #include "WritingDirection.h"
 #include "XMLHttpRequest.h"
@@ -189,6 +185,10 @@
 #include "TimeRanges.h"
 #endif
 
+#if ENABLE(WEBGL)
+#include "WebGLRenderingContext.h"
+#endif
+
 #if ENABLE(SPEECH_SYNTHESIS)
 #include "DOMWindowSpeechSynthesis.h"
 #include "PlatformSpeechSynthesizerMock.h"

Modified: trunk/Source/WebKit2/ChangeLog (218529 => 218530)


--- trunk/Source/WebKit2/ChangeLog	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebKit2/ChangeLog	2017-06-20 04:18:47 UTC (rev 218530)
@@ -1,3 +1,17 @@
+2017-06-19  Darin Adler  <da...@apple.com>
+
+        Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime
+        https://bugs.webkit.org/show_bug.cgi?id=173527
+
+        Reviewed by Sam Weinig.
+
+        * UIProcess/API/C/WKUserMediaPermissionCheck.h: Fixed incorrect file name in comment.
+
+        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
+        (WebKit::UserMediaPermissionRequestManager::enumerateMediaDevices): Use the new frame
+        function from MediaDevicesEnumerationRequest rather than finding the frame with our
+        own code.
+
 2017-06-19  Chris Dumez  <cdu...@apple.com>
 
         Regression(r217570): com.apple.WebKit.Networking crash at com.apple.WebKit: WebKit::ChildProcess::didReceiveInvalidMessage (Breaks 32-bit apps)
@@ -167,6 +181,8 @@
         * WebProcess/cocoa/UserMediaCaptureManager.cpp:
         (WebKit::UserMediaCaptureManager::Source::setStorage):
 
+        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp: Removed unneeded include of UserMediaController.h.
+
 2017-06-19  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] Move GTK+ API files that could be shared to glib dirs

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionCheck.h (218529 => 218530)


--- trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionCheck.h	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKUserMediaPermissionCheck.h	2017-06-20 04:18:47 UTC (rev 218530)
@@ -41,4 +41,4 @@
 }
 #endif
 
-#endif /* WKMediaDevicesRequest_h */
+#endif /* WKUserMediaPermissionCheck_h */

Modified: trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp (218529 => 218530)


--- trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -168,9 +168,7 @@
 
 void UserMediaPermissionRequestManager::enumerateMediaDevices(MediaDevicesEnumerationRequest& request)
 {
-    auto* document = downcast<Document>(request.scriptExecutionContext());
-    auto* frame = document ? document->frame() : nullptr;
-
+    auto* frame = request.frame();
     if (!frame) {
         request.setDeviceInfo(Vector<CaptureDevice>(), emptyString(), false);
         return;

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebUserMediaClient.cpp (218529 => 218530)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebUserMediaClient.cpp	2017-06-20 03:25:45 UTC (rev 218529)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebUserMediaClient.cpp	2017-06-20 04:18:47 UTC (rev 218530)
@@ -24,7 +24,6 @@
 
 #include "UserMediaPermissionRequestManager.h"
 #include "WebPage.h"
-#include <WebCore/UserMediaController.h>
 #include <WebCore/UserMediaRequest.h>
 
 using namespace WebCore;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to