Changeset 189982 in webkit


Ignore:
Timestamp:
Sep 18, 2015 2:05:37 PM (9 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream] Finish implementing MediaDevices.enumerateDevices
https://bugs.webkit.org/show_bug.cgi?id=149322
<rdar://problem/22750866>

Reviewed by Brent Fulgham.

Source/WebCore:

Test: fast/mediastream/MediaDevices-enumerateDevices.html

  • CMakeLists.txt: Add MediaDevicesRequest.cpp
  • Modules/mediastream/MediaDeviceInfo.h: Add MediaDeviceInfoVector typedef.
  • Modules/mediastream/MediaDevices.cpp:

(WebCore::MediaDevices::enumerateDevices): Use MediaDevicesRequest.

  • Modules/mediastream/MediaDevices.h: EnumerateDevicePromise -> EnumerateDevicesPromise.
  • Modules/mediastream/MediaDevices.idl:
  • Modules/mediastream/MediaDevicesRequest.cpp: Added.

(WebCore::MediaDevicesRequest::create):
(WebCore::MediaDevicesRequest::MediaDevicesRequest):
(WebCore::MediaDevicesRequest::~MediaDevicesRequest):
(WebCore::MediaDevicesRequest::securityOrigin):
(WebCore::MediaDevicesRequest::contextDestroyed):
(WebCore::MediaDevicesRequest::start):
(WebCore::MediaDevicesRequest::didCompleteRequest):
(WebCore::MediaDevicesRequest::requestOrigin):

  • Modules/mediastream/MediaDevicesRequest.h: Added.
  • Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:

(WebCore::MediaStreamTrackSourcesRequest::MediaStreamTrackSourcesRequest):
(WebCore::MediaStreamTrackSourcesRequest::didCompleteRequest):

  • Modules/mediastream/MediaStreamTrackSourcesRequest.h:
  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::UserMediaRequest::enumerateDevices): Deleted.

  • Modules/mediastream/UserMediaRequest.h:
  • WebCore.xcodeproj/project.pbxproj: Add MediaDevicesRequest.cpp
  • platform/mediastream/MediaDevicesPrivate.cpp: Removed.
  • platform/mediastream/MediaDevicesPrivate.h: Removed.
  • platform/mediastream/MediaStreamCreationClient.h:
  • platform/mediastream/MediaStreamTrackSourcesRequestClient.h:

(WebCore::MediaStreamTrackSourcesRequestClient::~MediaStreamTrackSourcesRequestClient):

  • platform/mediastream/mac/AVCaptureDeviceManager.h:
  • platform/mediastream/mac/AVCaptureDeviceManager.mm:

(WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType): Optionally take an

AVCaptureSession instead of always allocating one.

(WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints): Pass the AVCaptureSession

to verifyConstraintsForMediaType.

  • platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:

(WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources):

  • platform/mock/MockRealtimeMediaSourceCenter.cpp:

(WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):

LayoutTests:

  • fast/mediastream/MediaDevices-enumerateDevices-expected.txt: Added.
  • fast/mediastream/MediaDevices-enumerateDevices.html: Added.
Location:
trunk
Files:
4 added
2 deleted
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r189980 r189982  
     12015-09-18  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] Finish implementing MediaDevices.enumerateDevices
     4        https://bugs.webkit.org/show_bug.cgi?id=149322
     5        <rdar://problem/22750866>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        * fast/mediastream/MediaDevices-enumerateDevices-expected.txt: Added.
     10        * fast/mediastream/MediaDevices-enumerateDevices.html: Added.
     11
    1122015-09-18  Jake Nielsen  <jacob_nielsen@apple.com>
    213
  • trunk/Source/WebCore/CMakeLists.txt

    r189969 r189982  
    913913    Modules/mediastream/MediaDeviceInfo.cpp
    914914    Modules/mediastream/MediaDevices.cpp
     915    Modules/mediastream/MediaDevicesRequest.cpp
    915916    Modules/mediastream/MediaSourceStates.cpp
    916917    Modules/mediastream/MediaStream.cpp
     
    22572258    platform/graphics/transforms/TranslateTransformOperation.cpp
    22582259
    2259     platform/mediastream/MediaDevicesPrivate.cpp
    22602260    platform/mediastream/MediaStreamPrivate.cpp
    22612261    platform/mediastream/MediaStreamTrackPrivate.cpp
  • trunk/Source/WebCore/ChangeLog

    r189979 r189982  
     12015-09-18  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] Finish implementing MediaDevices.enumerateDevices
     4        https://bugs.webkit.org/show_bug.cgi?id=149322
     5        <rdar://problem/22750866>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Test: fast/mediastream/MediaDevices-enumerateDevices.html
     10
     11        * CMakeLists.txt: Add MediaDevicesRequest.cpp
     12
     13        * Modules/mediastream/MediaDeviceInfo.h: Add MediaDeviceInfoVector typedef.
     14
     15        * Modules/mediastream/MediaDevices.cpp:
     16        (WebCore::MediaDevices::enumerateDevices): Use MediaDevicesRequest.
     17        * Modules/mediastream/MediaDevices.h: EnumerateDevicePromise -> EnumerateDevicesPromise.
     18        * Modules/mediastream/MediaDevices.idl:
     19
     20        * Modules/mediastream/MediaDevicesRequest.cpp: Added.
     21        (WebCore::MediaDevicesRequest::create):
     22        (WebCore::MediaDevicesRequest::MediaDevicesRequest):
     23        (WebCore::MediaDevicesRequest::~MediaDevicesRequest):
     24        (WebCore::MediaDevicesRequest::securityOrigin):
     25        (WebCore::MediaDevicesRequest::contextDestroyed):
     26        (WebCore::MediaDevicesRequest::start):
     27        (WebCore::MediaDevicesRequest::didCompleteRequest):
     28        (WebCore::MediaDevicesRequest::requestOrigin):
     29        * Modules/mediastream/MediaDevicesRequest.h: Added.
     30
     31        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
     32        (WebCore::MediaStreamTrackSourcesRequest::MediaStreamTrackSourcesRequest):
     33        (WebCore::MediaStreamTrackSourcesRequest::didCompleteRequest):
     34        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
     35
     36        * Modules/mediastream/UserMediaRequest.cpp:
     37        (WebCore::UserMediaRequest::enumerateDevices): Deleted.
     38        * Modules/mediastream/UserMediaRequest.h:
     39
     40        * WebCore.xcodeproj/project.pbxproj: Add MediaDevicesRequest.cpp
     41
     42        * platform/mediastream/MediaDevicesPrivate.cpp: Removed.
     43        * platform/mediastream/MediaDevicesPrivate.h: Removed.
     44
     45        * platform/mediastream/MediaStreamCreationClient.h:
     46        * platform/mediastream/MediaStreamTrackSourcesRequestClient.h:
     47        (WebCore::MediaStreamTrackSourcesRequestClient::~MediaStreamTrackSourcesRequestClient):
     48
     49        * platform/mediastream/mac/AVCaptureDeviceManager.h:
     50        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
     51        (WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType): Optionally take an
     52          AVCaptureSession instead of always allocating one.
     53        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints): Pass the AVCaptureSession
     54          to verifyConstraintsForMediaType.
     55
     56        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
     57        (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources):
     58
     59        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
     60        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):
     61
    1622015-09-18  Chris Dumez  <cdumez@apple.com>
    263
  • trunk/Source/WebCore/Modules/mediastream/MediaDeviceInfo.h

    r186608 r189982  
    3939public:
    4040    static Ref<MediaDeviceInfo> create(ScriptExecutionContext*, const String&, const String&, const String&, const String&);
    41    
    42    
     41
    4342    virtual ~MediaDeviceInfo() { }
    4443   
     
    6160};
    6261
     62typedef Vector<RefPtr<MediaDeviceInfo>> MediaDeviceInfoVector;
     63
    6364}
    6465
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp

    r188356 r189982  
    3636#include "Dictionary.h"
    3737#include "Document.h"
     38#include "MediaDevicesRequest.h"
    3839#include "MediaStream.h"
    3940#include "UserMediaController.h"
     
    6667}
    6768
    68 void MediaDevices::enumerateDevices(EnumerateDevicePromise&& promise, ExceptionCode& ec) const
     69void MediaDevices::enumerateDevices(EnumerateDevicesPromise&& promise, ExceptionCode& ec) const
    6970{
    70     UserMediaRequest::enumerateDevices(document(), WTF::move(promise), ec);
     71    RefPtr<MediaDevicesRequest> request = MediaDevicesRequest::create(document(), WTF::move(promise), ec);
     72    if (request)
     73        request->start();
    7174}
    7275
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.h

    r188356 r189982  
    3636#include "ContextDestructionObserver.h"
    3737#include "JSDOMPromise.h"
     38#include "MediaDeviceInfo.h"
    3839#include "ScriptWrappable.h"
    3940#include <functional>
     
    4546class Dictionary;
    4647class Document;
    47 class MediaDeviceInfo;
    4848class MediaStream;
    4949class NavigatorUserMediaError;
     
    5959
    6060    typedef DOMPromiseWithCallback<RefPtr<MediaStream>, RefPtr<NavigatorUserMediaError>> Promise;
    61     typedef DOMPromiseWithCallback<Vector<RefPtr<MediaDeviceInfo>>, RefPtr<NavigatorUserMediaError>> EnumerateDevicePromise;
     61    typedef DOMPromiseWithCallback<MediaDeviceInfoVector, ExceptionCode> EnumerateDevicesPromise;
     62
    6263    void getUserMedia(const Dictionary&, Promise&&, ExceptionCode&) const;
    63     void enumerateDevices(EnumerateDevicePromise&&, ExceptionCode&) const;
     64    void enumerateDevices(EnumerateDevicesPromise&&, ExceptionCode&) const;
    6465
    6566private:
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.idl

    r185873 r189982  
    3434] interface MediaDevices {
    3535    [RaisesException] Promise getUserMedia(Dictionary options);
     36    [RaisesException] Promise enumerateDevices();
    3637};
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.cpp

    r185101 r189982  
    4949}
    5050
    51 void MediaStreamTrackSourcesRequest::didCompleteRequest(const Vector<RefPtr<TrackSourceInfo>>& requestSourceInfos)
     51void MediaStreamTrackSourcesRequest::didCompleteRequest(const TrackSourceInfoVector& requestSourceInfos)
    5252{
    5353    ASSERT(m_callback);
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.h

    r184940 r189982  
    5050    // MediaStreamTrackSourcesRequestClient
    5151    virtual const String& requestOrigin() const override { return m_origin; }
    52     virtual void didCompleteRequest(const Vector<RefPtr<TrackSourceInfo>>&) override;
     52    virtual void didCompleteRequest(const TrackSourceInfoVector&) override;
    5353
    5454    String m_origin;
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r188493 r189982  
    22 * Copyright (C) 2011 Ericsson AB. All rights reserved.
    33 * Copyright (C) 2012 Google Inc. All rights reserved.
    4  * Copyright (C) 2013 Apple Inc. All rights reserved.
     4 * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
    55 * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
    66 *
     
    4646#include "JSNavigatorUserMediaError.h"
    4747#include "MediaConstraintsImpl.h"
    48 #include "MediaDevicesPrivate.h"
    4948#include "MediaStream.h"
    5049#include "MediaStreamPrivate.h"
     
    7170}
    7271
    73 void UserMediaRequest::enumerateDevices(Document* document, MediaDevices::EnumerateDevicePromise&& promise, ExceptionCode&)
    74 {
    75     RefPtr<MediaDevicesPrivate> deviceClient = MediaDevicesPrivate::create();
    76     RealtimeMediaSourceCenter::singleton().getMediaStreamTrackSources(deviceClient);
    77     promise.resolve(deviceClient->availableMediaDevices(*document));
    78 }
    79    
    8072void UserMediaRequest::start(Document* document, const Dictionary& options, MediaDevices::Promise&& promise, ExceptionCode& ec)
    8173{
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r188385 r189982  
    6060public:
    6161    static void start(Document*, const Dictionary&, MediaDevices::Promise&&, ExceptionCode&);
    62     static void enumerateDevices(Document*, MediaDevices::EnumerateDevicePromise&&, ExceptionCode&);
    6362
    6463    ~UserMediaRequest();
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r189971 r189982  
    165165                073794FD19F5864E00E5A045 /* RTCNotifiersMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */; };
    166166                073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */; };
     167                07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */; };
     168                07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */; };
    167169                073AB4B317F8BACA006E0D6F /* AllVideoCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */; };
    168170                073AB4B717F92ECF006E0D6F /* JSCapabilityRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */; };
     
    644646                150524F61B712FFC00696AA9 /* MediaStreamPrivateAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 150524F21B712FF000696AA9 /* MediaStreamPrivateAVFObjC.h */; };
    645647                150524F71B712FFF00696AA9 /* MediaStreamPrivateAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 150524F31B712FF000696AA9 /* MediaStreamPrivateAVFObjC.mm */; };
    646                 15145B901B3A1CE000662BF7 /* MediaDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 15145B8F1B3A1B3E00662BF7 /* MediaDeviceInfo.h */; };
    647                 152A29B41B4EF5B700B52AE0 /* MediaDevicesPrivate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 152A29B21B4EF59600B52AE0 /* MediaDevicesPrivate.cpp */; };
    648                 152A29B51B4EF5BA00B52AE0 /* MediaDevicesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 152A29B31B4EF59600B52AE0 /* MediaDevicesPrivate.h */; };
     648                15145B901B3A1CE000662BF7 /* MediaDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 15145B8F1B3A1B3E00662BF7 /* MediaDeviceInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
    649649                15739BBA1B42012A00D258C1 /* JSMediaDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15739BB81B42012200D258C1 /* JSMediaDevices.cpp */; };
    650650                15739BBB1B42012D00D258C1 /* JSMediaDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = 15739BB91B42012200D258C1 /* JSMediaDevices.h */; };
     
    73687368                073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCNotifiersMock.cpp; sourceTree = "<group>"; };
    73697369                073794F819F5864E00E5A045 /* RTCNotifiersMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCNotifiersMock.h; sourceTree = "<group>"; };
     7370                07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevicesRequest.cpp; sourceTree = "<group>"; };
     7371                07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaDevicesRequest.h; sourceTree = "<group>"; };
    73707372                073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllVideoCapabilities.h; sourceTree = "<group>"; };
    73717373                073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCapabilityRange.cpp; sourceTree = "<group>"; };
     
    78257827                15145B8F1B3A1B3E00662BF7 /* MediaDeviceInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaDeviceInfo.h; sourceTree = "<group>"; };
    78267828                15145B911B3A1D4C00662BF7 /* MediaDeviceInfo.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaDeviceInfo.idl; sourceTree = "<group>"; };
    7827                 152A29B21B4EF59600B52AE0 /* MediaDevicesPrivate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevicesPrivate.cpp; sourceTree = "<group>"; };
    7828                 152A29B31B4EF59600B52AE0 /* MediaDevicesPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaDevicesPrivate.h; sourceTree = "<group>"; };
    78297829                15739BB81B42012200D258C1 /* JSMediaDevices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaDevices.cpp; sourceTree = "<group>"; };
    78307830                15739BB91B42012200D258C1 /* JSMediaDevices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaDevices.h; sourceTree = "<group>"; };
     
    1483114831                                07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */,
    1483214832                                07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */,
     14833                                07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */,
     14834                                07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */,
    1483314835                                159AE82A1B3A402F0037478B /* MediaDeviceInfo.cpp */,
    1483414836                                15145B8F1B3A1B3E00662BF7 /* MediaDeviceInfo.h */,
     
    1494614948                                0729B14D17CFCCA0004F1D60 /* mac */,
    1494714949                                07221B9917CF0AD400848E51 /* MediaConstraints.h */,
    14948                                 152A29B21B4EF59600B52AE0 /* MediaDevicesPrivate.cpp */,
    14949                                 152A29B31B4EF59600B52AE0 /* MediaDevicesPrivate.h */,
    1495014950                                070F549717F12F6B00169E04 /* MediaStreamConstraintsValidationClient.h */,
    1495114951                                07221BA017CF0AD400848E51 /* MediaStreamCreationClient.h */,
     
    2435724357                                26F0C8A01A2EC3BE002794F8 /* ContentExtensionsBackend.h in Headers */,
    2435824358                                262391361A648CEE007251A3 /* ContentExtensionsDebugging.h in Headers */,
     24359                                07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */,
    2435924360                                51FB67DC1AE6B82F00D06C5A /* ContentExtensionStyleSheet.h in Headers */,
    2436024361                                A149786F1ABAF33800CEF7E4 /* ContentFilter.h in Headers */,
     
    2445524456                                A80E6CFD0A1989CA007FB8C5 /* CSSFontFaceRule.h in Headers */,
    2445624457                                BC64B4D80CB4298A005F2B62 /* CSSFontFaceSource.h in Headers */,
    24457                                 152A29B51B4EF5BA00B52AE0 /* MediaDevicesPrivate.h in Headers */,
    2445824458                                BC64B4DA0CB4298A005F2B62 /* CSSFontFaceSrcValue.h in Headers */,
    2445924459                                83520C7E1A71BFCC006BD2AA /* CSSFontFamily.h in Headers */,
     
    2825128251                                A80E6CFE0A1989CA007FB8C5 /* CSSImageValue.cpp in Sources */,
    2825228252                                A80E6CEB0A1989CA007FB8C5 /* CSSImportRule.cpp in Sources */,
     28253                                07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */,
    2825328254                                A80E6CF00A1989CA007FB8C5 /* CSSInheritedValue.cpp in Sources */,
    2825428255                                A80E6D020A1989CA007FB8C5 /* CSSInitialValue.cpp in Sources */,
     
    2944529446                                BC98A27D0C0C9950004BEBF7 /* JSStyleSheetCustom.cpp in Sources */,
    2944629447                                A84EBD840CB8C97700079609 /* JSStyleSheetList.cpp in Sources */,
    29447                                 152A29B41B4EF5B700B52AE0 /* MediaDevicesPrivate.cpp in Sources */,
    2944829448                                A84EBD780CB8C89200079609 /* JSStyleSheetListCustom.cpp in Sources */,
    2944929449                                E1FF8F64180745D800132674 /* JSSubtleCrypto.cpp in Sources */,
  • trunk/Source/WebCore/platform/mediastream/MediaStreamCreationClient.h

    r187168 r189982  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2929#if ENABLE(MEDIA_STREAM)
    3030
     31#include "MediaDevices.h"
    3132#include "RealtimeMediaSource.h"
    3233#include <wtf/PassRefPtr.h>
  • trunk/Source/WebCore/platform/mediastream/MediaStreamTrackSourcesRequestClient.h

    r186608 r189982  
    8080};
    8181
     82typedef Vector<RefPtr<TrackSourceInfo>> TrackSourceInfoVector;
     83
    8284class MediaStreamTrackSourcesRequestClient : public RefCounted<MediaStreamTrackSourcesRequestClient> {
    8385public:
     
    8587
    8688    virtual const String& requestOrigin() const = 0;
    87     virtual void didCompleteRequest(const Vector<RefPtr<TrackSourceInfo>>&) = 0;
     89    virtual void didCompleteRequest(const TrackSourceInfoVector&) = 0;
    8890
    8991};
     92
    9093
    9194} // namespace WebCore
  • trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h

    r187282 r189982  
    4848    static bool isAvailable();
    4949
    50     Vector<RefPtr<TrackSourceInfo>> getSourcesInfo(const String&);
    51     bool verifyConstraintsForMediaType(RealtimeMediaSource::Type, MediaConstraints*, String&);
     50    TrackSourceInfoVector getSourcesInfo(const String&);
     51    bool verifyConstraintsForMediaType(AVCaptureSession *, RealtimeMediaSource::Type, MediaConstraints*, String&);
    5252    Vector<RefPtr<RealtimeMediaSource>> bestSourcesForTypeAndConstraints(RealtimeMediaSource::Type, PassRefPtr<MediaConstraints>);
    5353    RefPtr<RealtimeMediaSource> sourceWithUID(const String&, RealtimeMediaSource::Type, MediaConstraints*);
  • trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm

    r189913 r189982  
    344344}
    345345
    346 bool AVCaptureDeviceManager::verifyConstraintsForMediaType(RealtimeMediaSource::Type type, MediaConstraints* constraints, String& invalidConstraint)
     346bool AVCaptureDeviceManager::verifyConstraintsForMediaType(AVCaptureSessionType *session, RealtimeMediaSource::Type type, MediaConstraints* constraints, String& invalidConstraint)
    347347{
    348348    if (!isAvailable())
     
    356356    if (mandatoryConstraints.size()) {
    357357
    358         // FIXME: this method should take an AVCaptureDevice and use its AVCaptureSession instead of creating a new one.
    359         RetainPtr<AVCaptureSessionType> session = adoptNS([allocAVCaptureSessionInstance() init]);
     358        RetainPtr<AVCaptureSessionType> captureSession = session ? session : adoptNS([allocAVCaptureSessionInstance() init]);
    360359        for (size_t i = 0; i < mandatoryConstraints.size(); ++i) {
    361360            const MediaConstraint& constraint = mandatoryConstraints[i];
    362             if (!sessionSupportsConstraint(session.get(), type, constraint.m_name, constraint.m_value)) {
     361            if (!sessionSupportsConstraint(captureSession.get(), type, constraint.m_name, constraint.m_value)) {
    363362                invalidConstraint = constraint.m_name;
    364363                return false;
     
    426425        if (captureDevice.m_captureDeviceID != deviceUID)
    427426            continue;
     427
    428428        if (constraints) {
    429429            String invalidConstraints;
    430             AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(type, constraints, invalidConstraints);
     430            AVCaptureSessionType *session = nil;
     431
     432            if (type == RealtimeMediaSource::Video && captureDevice.m_videoAVMediaCaptureSource)
     433                captureDevice.m_videoAVMediaCaptureSource->session();
     434            else if (type == RealtimeMediaSource::Audio && captureDevice.m_audioAVMediaCaptureSource)
     435                captureDevice.m_audioAVMediaCaptureSource->session();
     436            AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(session, type, constraints, invalidConstraints);
     437
    431438            if (!invalidConstraints.isEmpty())
    432439                continue;
     
    435442        AVCaptureDeviceType *device = [AVCaptureDevice deviceWithUniqueID:captureDevice.m_captureDeviceID];
    436443        ASSERT(device);
    437         if (type == RealtimeMediaSource::Type::Audio && !captureDevice.m_audioSourceId.isEmpty()) {
     444        if (type == RealtimeMediaSource::Audio && !captureDevice.m_audioSourceId.isEmpty()) {
    438445            if (!captureDevice.m_audioAVMediaCaptureSource)
    439446                captureDevice.m_audioAVMediaCaptureSource = AVAudioCaptureSource::create(device, captureDevice.m_audioSourceId, constraints);
    440447            return captureDevice.m_audioAVMediaCaptureSource;
    441448        }
    442         if (type == RealtimeMediaSource::Type::Video && !captureDevice.m_videoSourceId.isEmpty()) {
     449        if (type == RealtimeMediaSource::Video && !captureDevice.m_videoSourceId.isEmpty()) {
    443450            if (!captureDevice.m_videoAVMediaCaptureSource)
    444451                captureDevice.m_videoAVMediaCaptureSource = AVVideoCaptureSource::create(device, captureDevice.m_videoSourceId, constraints);
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp

    r187282 r189982  
    6565    if (audioConstraints) {
    6666        String invalidConstraint;
    67         AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
     67        AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(nil, RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
    6868        if (!invalidConstraint.isEmpty()) {
    6969            client->constraintsInvalid(invalidConstraint);
     
    7474    if (videoConstraints) {
    7575        String invalidConstraint;
    76         AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
     76        AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(nil, RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
    7777        if (!invalidConstraint.isEmpty()) {
    7878            client->constraintsInvalid(invalidConstraint);
     
    9696    if (audioConstraints) {
    9797        String invalidConstraint;
    98         AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
     98        AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(nil, RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
    9999        if (!invalidConstraint.isEmpty()) {
    100100            client->failedToCreateStreamWithConstraintsError(invalidConstraint);
     
    111111    if (videoConstraints) {
    112112        String invalidConstraint;
    113         AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
     113        AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(nil, RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
    114114        if (!invalidConstraint.isEmpty()) {
    115115            client->failedToCreateStreamWithConstraintsError(invalidConstraint);
     
    131131    RefPtr<MediaStreamTrackSourcesRequestClient> requestClient = prpClient;
    132132
    133     Vector<RefPtr<TrackSourceInfo>> sources = AVCaptureDeviceManager::singleton().getSourcesInfo(requestClient->requestOrigin());
     133    TrackSourceInfoVector sources = AVCaptureDeviceManager::singleton().getSourcesInfo(requestClient->requestOrigin());
    134134
    135     requestClient->didCompleteRequest(sources);
     135    callOnMainThread([this, requestClient, sources] {
     136        requestClient->didCompleteRequest(sources);
     137    });
     138
    136139    return true;
    137140}
  • trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp

    r187282 r189982  
    199199{
    200200    RefPtr<MediaStreamTrackSourcesRequestClient> requestClient = prpClient;
    201     Vector<RefPtr<TrackSourceInfo>> sources;
     201    TrackSourceInfoVector sources;
    202202
    203203    MockSourceMap& map = mockSourceMap();
Note: See TracChangeset for help on using the changeset viewer.