Changeset 156108 in webkit


Ignore:
Timestamp:
Sep 19, 2013 12:06:54 PM (11 years ago)
Author:
eric.carlson@apple.com
Message:

MediaStream API: update NavigatorUserMediaError object to match spec
https://bugs.webkit.org/show_bug.cgi?id=121584

Reviewed by Dean Jackson.

Source/WebCore:

No new tests, updated getusermedia.html.

  • CMakeLists.txt: Add NavigatorUserMediaError.cpp.
  • GNUmakefile.list.am: Ditto.
  • Modules/mediastream/NavigatorUserMediaError.cpp: Added.
  • Modules/mediastream/NavigatorUserMediaError.h: Derive from DOMError, get rid of "message" attribute.
  • Modules/mediastream/NavigatorUserMediaError.idl: Ditto.
  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::UserMediaRequest::create): ASCIILiteral -> AtomicString. Rename constraint parameters.
(WebCore::UserMediaRequest::UserMediaRequest): Rename constraint parameters.
(WebCore::UserMediaRequest::audioConstraints): Return PassRefPtr<> instead of raw ptr.
(WebCore::UserMediaRequest::videoConstraints): Ditto.
(WebCore::UserMediaRequest::ownerDocument): Clean up style.
(WebCore::UserMediaRequest::succeed):
(WebCore::UserMediaRequest::permissionFailure): Renamed from fail.
(WebCore::UserMediaRequest::constraintFailure): Renamed from failConstraint.
(WebCore::UserMediaRequest::callSuccessHandler): New.
(WebCore::UserMediaRequest::callErrorHandler): New.

  • Modules/mediastream/UserMediaRequest.h:
  • WebCore.xcodeproj/project.pbxproj: Add NavigatorUserMediaError.cpp
  • dom/DOMError.h: Make constructor protected.
  • platform/mediastream/MediaStreamSourcesQueryClient.h: Make constraints available.

LayoutTests:

  • fast/mediastream/getusermedia-expected.txt:
  • fast/mediastream/getusermedia.html:
Location:
trunk
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r156107 r156108  
    1 2013-09-19  Zoltan Horvath  <zoltan@webkit.org>
    2 
    3         [CSS Shapes] Fix starting html tag and doctype for shape-inside floats tests
    4         https://bugs.webkit.org/show_bug.cgi?id=121621
    5 
    6         Reviewed by Andreas Kling.
    7 
    8         * fast/shapes/shape-inside/shape-inside-left-float-in-lower-left-triangle-inline-content-expected.html:
    9         * fast/shapes/shape-inside/shape-inside-left-float-in-lower-right-triangle-inline-content-expected.html:
    10         * fast/shapes/shape-inside/shape-inside-left-float-in-lower-right-triangle-inline-content.html:
    11         * fast/shapes/shape-inside/shape-inside-left-float-in-upper-left-triangle-inline-content-expected.html:
    12         * fast/shapes/shape-inside/shape-inside-left-float-in-upper-left-triangle-inline-content.html:
    13         * fast/shapes/shape-inside/shape-inside-left-float-in-upper-right-triangle-inline-content-expected.html:
    14         * fast/shapes/shape-inside/shape-inside-left-float-in-upper-right-triangle-inline-content.html:
     12013-09-19  Eric Carlson  <eric.carlson@apple.com>
     2
     3        MediaStream API: update NavigatorUserMediaError object to match spec
     4        https://bugs.webkit.org/show_bug.cgi?id=121584
     5
     6        Reviewed by Dean Jackson.
     7
     8        * fast/mediastream/getusermedia-expected.txt:
     9        * fast/mediastream/getusermedia.html:
    1510
    16112013-09-19  Bem Jones-Bey  <bjonesbe@adobe.com>
  • trunk/LayoutTests/fast/mediastream/getusermedia-expected.txt

    r139611 r156108  
    2323PASS navigator.webkitGetUserMedia({audio:{mandatory:{'valid_but_unsupported_1':0}, optional:[]}, video:true}, gotStreamInError, error1); did not throw exception.
    2424PASS Error callback called.
     25PASS errorArg.name is "ConstraintNotSatisfiedError"
     26PASS errorArg.constraintName is "valid_but_unsupported_1"
    2527PASS navigator.webkitGetUserMedia({audio:{mandatory:{'valid_and_supported_1':1}, optional:[{'valid_but_unsupported_1':0}]}, video:true}, gotStream5, error); did not throw exception.
    2628PASS Stream generated.
  • trunk/LayoutTests/fast/mediastream/getusermedia.html

    r155410 r156108  
    1111
    1212var stream;
     13var errorArg;
    1314
    1415function error() {
     
    3031}
    3132
    32 function error1() {
     33function error1(e) {
     34    errorArg = e;
    3335    testPassed('Error callback called.');
     36    shouldBeEqualToString('errorArg.name', 'ConstraintNotSatisfiedError');
     37    shouldBeEqualToString('errorArg.constraintName', 'valid_but_unsupported_1');
    3438
    3539    shouldNotThrow("navigator.webkitGetUserMedia({audio:{mandatory:{'valid_and_supported_1':1}, optional:[{'valid_but_unsupported_1':0}]}, video:true}, gotStream5, error);");
  • trunk/Source/WebCore/CMakeLists.txt

    r156102 r156108  
    847847    Modules/mediastream/MediaStreamTrackSourcesRequest.cpp
    848848    Modules/mediastream/NavigatorMediaStream.cpp
     849    Modules/mediastream/NavigatorUserMediaError.cpp
    849850    Modules/mediastream/RTCDTMFSender.cpp
    850851    Modules/mediastream/RTCDTMFToneChangeEvent.cpp
  • trunk/Source/WebCore/ChangeLog

    r156106 r156108  
     12013-09-19  Eric Carlson  <eric.carlson@apple.com>
     2
     3        MediaStream API: update NavigatorUserMediaError object to match spec
     4        https://bugs.webkit.org/show_bug.cgi?id=121584
     5
     6        Reviewed by Dean Jackson.
     7
     8        No new tests, updated getusermedia.html.
     9
     10        * CMakeLists.txt: Add NavigatorUserMediaError.cpp.
     11        * GNUmakefile.list.am: Ditto.
     12
     13        * Modules/mediastream/NavigatorUserMediaError.cpp: Added.
     14        * Modules/mediastream/NavigatorUserMediaError.h: Derive from DOMError, get rid of "message" attribute.
     15        * Modules/mediastream/NavigatorUserMediaError.idl: Ditto.
     16
     17        * Modules/mediastream/UserMediaRequest.cpp:
     18        (WebCore::UserMediaRequest::create): ASCIILiteral -> AtomicString. Rename constraint parameters.
     19        (WebCore::UserMediaRequest::UserMediaRequest): Rename constraint parameters.
     20        (WebCore::UserMediaRequest::audioConstraints): Return PassRefPtr<> instead of raw ptr.
     21        (WebCore::UserMediaRequest::videoConstraints): Ditto.
     22        (WebCore::UserMediaRequest::ownerDocument): Clean up style.
     23        (WebCore::UserMediaRequest::succeed):
     24        (WebCore::UserMediaRequest::permissionFailure): Renamed from fail.
     25        (WebCore::UserMediaRequest::constraintFailure):  Renamed from failConstraint.
     26        (WebCore::UserMediaRequest::callSuccessHandler): New.
     27        (WebCore::UserMediaRequest::callErrorHandler): New.
     28        * Modules/mediastream/UserMediaRequest.h:
     29
     30        * WebCore.xcodeproj/project.pbxproj: Add NavigatorUserMediaError.cpp
     31
     32        * dom/DOMError.h: Make constructor protected.
     33
     34        * platform/mediastream/MediaStreamSourcesQueryClient.h: Make constraints available.
     35
    1362013-09-19  Bem Jones-Bey  <bjonesbe@adobe.com>
    237
  • trunk/Source/WebCore/GNUmakefile.list.am

    r156102 r156108  
    19861986        Source/WebCore/Modules/mediastream/NavigatorMediaStream.cpp \
    19871987        Source/WebCore/Modules/mediastream/NavigatorMediaStream.h \
     1988        Source/WebCore/Modules/mediastream/NavigatorUserMediaError.cpp \
    19881989        Source/WebCore/Modules/mediastream/NavigatorUserMediaError.h \
    19891990        Source/WebCore/Modules/mediastream/NavigatorUserMediaErrorCallback.h \
  • trunk/Source/WebCore/Modules/mediastream/NavigatorUserMediaError.h

    r155579 r156108  
    11/*
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
     3 * Copyright (C) 2013 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    2627#define NavigatorUserMediaError_h
    2728
     29#include "DOMError.h"
    2830#include <wtf/PassRefPtr.h>
    2931#include <wtf/RefCounted.h>
     
    3335namespace WebCore {
    3436
    35 class NavigatorUserMediaError : public RefCounted<NavigatorUserMediaError> {
     37class NavigatorUserMediaError : public DOMError {
    3638public:
    37     static PassRefPtr<NavigatorUserMediaError> create(const String& name, const String& message, const String& constraintName)
     39    static PassRefPtr<NavigatorUserMediaError> create(const String& name, const String& constraintName)
    3840    {
    39         return adoptRef(new NavigatorUserMediaError(name, message, constraintName));
     41        return adoptRef(new NavigatorUserMediaError(name, constraintName));
    4042    }
    4143
    4244    virtual ~NavigatorUserMediaError() { }
    4345
    44     const String& name() const { return m_name; }
    45     const String& message() const { return m_message; }
    4646    const String& constraintName() const { return m_constraintName; }
    4747
     48    static const AtomicString& permissionDeniedErrorName();
     49    static const AtomicString& constraintNotSatisfiedErrorName();
     50
    4851private:
    49     NavigatorUserMediaError(const String& name, const String& message, const String& constraintName)
    50         : m_name(name)
    51         , m_message(message)
     52    NavigatorUserMediaError(const String& name, const String& constraintName)
     53        : DOMError(name)
    5254        , m_constraintName(constraintName)
    5355    {
    5456    }
    5557
    56     String m_name;
    57     String m_message;
    5858    String m_constraintName;
    5959};
  • trunk/Source/WebCore/Modules/mediastream/NavigatorUserMediaError.idl

    r155579 r156108  
    2626    NoInterfaceObject,
    2727    Conditional=MEDIA_STREAM
    28 ] interface NavigatorUserMediaError {
    29     readonly attribute DOMString name;
    30     readonly attribute DOMString message;
     28] interface NavigatorUserMediaError : DOMError {
    3129    readonly attribute DOMString constraintName;
    3230};
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r155881 r156108  
    4545#include "SpaceSplitString.h"
    4646#include "UserMediaController.h"
     47#include <wtf/Functional.h>
     48#include <wtf/MainThread.h>
    4749
    4850namespace WebCore {
     
    6870PassRefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback, ExceptionCode& ec)
    6971{
    70     RefPtr<MediaConstraintsImpl> audio = parseOptions(options, ASCIILiteral("audio"), ec);
     72    ASSERT(successCallback);
     73
     74    RefPtr<MediaConstraintsImpl> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral), ec);
    7175    if (ec)
    7276        return 0;
    7377
    74     RefPtr<MediaConstraintsImpl> video = parseOptions(options, ASCIILiteral("video"), ec);
     78    RefPtr<MediaConstraintsImpl> videoConstraints = parseOptions(options, AtomicString("video", AtomicString::ConstructFromLiteral), ec);
    7579    if (ec)
    7680        return 0;
    7781
    78     if (!audio && !video)
     82    if (!audioConstraints && !videoConstraints)
    7983        return 0;
    8084
    81     return adoptRef(new UserMediaRequest(context, controller, audio.release(), video.release(), successCallback, errorCallback));
    82 }
    83 
    84 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraintsImpl> audio, PassRefPtr<MediaConstraintsImpl> video, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
     85    return adoptRef(new UserMediaRequest(context, controller, audioConstraints.release(), videoConstraints.release(), successCallback, errorCallback));
     86}
     87
     88UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraintsImpl> audioConstraints, PassRefPtr<MediaConstraintsImpl> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
    8589    : ContextDestructionObserver(context)
    86     , m_audio(audio)
    87     , m_video(video)
     90    , m_audioConstraints(audioConstraints)
     91    , m_videoConstraints(videoConstraints)
    8892    , m_controller(controller)
    8993    , m_successCallback(successCallback)
     
    96100}
    97101
    98 bool UserMediaRequest::audio() const
    99 {
    100     return m_audio;
    101 }
    102 
    103 bool UserMediaRequest::video() const
    104 {
    105     return m_video;
    106 }
    107 
    108 MediaConstraints* UserMediaRequest::audioConstraints() const
    109 {
    110     return m_audio.get();
    111 }
    112 
    113 MediaConstraints* UserMediaRequest::videoConstraints() const
    114 {
    115     return m_video.get();
     102PassRefPtr<MediaConstraints> UserMediaRequest::audioConstraints() const
     103{
     104    return m_audioConstraints;
     105}
     106
     107PassRefPtr<MediaConstraints> UserMediaRequest::videoConstraints() const
     108{
     109    return m_videoConstraints;
    116110}
    117111
    118112Document* UserMediaRequest::ownerDocument()
    119113{
    120     if (m_scriptExecutionContext) {
     114    if (m_scriptExecutionContext)
    121115        return toDocument(m_scriptExecutionContext);
    122     }
    123116
    124117    return 0;
     
    145138    MediaStreamTrackVector tracks = stream->getAudioTracks();
    146139    for (MediaStreamTrackVector::iterator iter = tracks.begin(); iter != tracks.end(); ++iter)
    147         (*iter)->component()->source()->setConstraints(m_audio);
     140        (*iter)->component()->source()->setConstraints(m_audioConstraints);
    148141
    149142    tracks = stream->getVideoTracks();
    150143    for (MediaStreamTrackVector::iterator iter = tracks.begin(); iter != tracks.end(); ++iter)
    151         (*iter)->component()->source()->setConstraints(m_video);
     144        (*iter)->component()->source()->setConstraints(m_videoConstraints);
    152145
    153146    m_successCallback->handleEvent(stream.get());
    154147}
    155148
    156 void UserMediaRequest::fail(const String& description)
     149void UserMediaRequest::permissionFailure()
    157150{
    158151    if (!m_scriptExecutionContext)
    159152        return;
    160153
    161     if (m_errorCallback)
    162         m_errorCallback->handleEvent(NavigatorUserMediaError::create(ASCIILiteral("PERMISSION_DENIED"), description, String()).get());
    163 }
    164 
    165 void UserMediaRequest::failConstraint(const String& constraintName, const String& description)
     154    if (!m_errorCallback)
     155        return;
     156   
     157    RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString());
     158    callOnMainThread(bind(&UserMediaRequest::callErrorHandler, this, error.release()));
     159}
     160
     161void UserMediaRequest::constraintFailure(const String& constraintName)
    166162{
    167163    ASSERT(!constraintName.isEmpty());
     
    169165        return;
    170166   
    171     if (m_errorCallback)
    172         m_errorCallback->handleEvent(NavigatorUserMediaError::create(ASCIILiteral("CONSTRAINT_NOT_SATISFIED"), description, constraintName).get());
     167    if (!m_errorCallback)
     168        return;
     169
     170    RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName);
     171    callOnMainThread(bind(&UserMediaRequest::callErrorHandler, this, error.release()));
     172}
     173
     174void UserMediaRequest::callSuccessHandler(PassRefPtr<MediaStream> stream)
     175{
     176    ASSERT(m_successCallback);
     177   
     178    m_successCallback->handleEvent(stream.get());
     179}
     180
     181void UserMediaRequest::callErrorHandler(PassRefPtr<NavigatorUserMediaError> error)
     182{
     183    ASSERT(error);
     184   
     185    m_errorCallback->handleEvent(error.get());
    173186}
    174187
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r155579 r156108  
    4141#include "NavigatorUserMediaSuccessCallback.h"
    4242#include <wtf/PassRefPtr.h>
    43 #include <wtf/RefCounted.h>
    4443#include <wtf/text/WTFString.h>
    4544
     
    5857    ~UserMediaRequest();
    5958
    60     NavigatorUserMediaSuccessCallback* successCallback() const { return m_successCallback.get(); }
    61     NavigatorUserMediaErrorCallback* errorCallback() const { return m_errorCallback.get(); }
    6259    Document* ownerDocument();
    6360
    6461    void start();
    65 
    6662    void succeed(PassRefPtr<MediaStreamDescriptor>);
    67     void fail(const String& description);
    68     void failConstraint(const String& constraintName, const String& description);
    69 
    70     MediaConstraints* audioConstraints() const;
    71     MediaConstraints* videoConstraints() const;
     63    void permissionFailure();
     64    void constraintFailure(const String& constraintName);
    7265
    7366    // MediaStreamSourcesQueryClient
    74     virtual bool audio() const;
    75     virtual bool video() const;
    76     virtual void didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
     67    virtual PassRefPtr<MediaConstraints> audioConstraints() const OVERRIDE;
     68    virtual PassRefPtr<MediaConstraints> videoConstraints() const OVERRIDE;
     69    virtual void didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources) OVERRIDE;
    7770
    7871    // ContextDestructionObserver
     
    8073
    8174private:
    82     UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraintsImpl> audio, PassRefPtr<MediaConstraintsImpl> video, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
     75    UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraintsImpl> audioConstraints, PassRefPtr<MediaConstraintsImpl> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
    8376
    84     RefPtr<MediaConstraintsImpl> m_audio;
    85     RefPtr<MediaConstraintsImpl> m_video;
     77    void callSuccessHandler(PassRefPtr<MediaStream>);
     78    void callErrorHandler(PassRefPtr<NavigatorUserMediaError>);
     79
     80    RefPtr<MediaConstraintsImpl> m_audioConstraints;
     81    RefPtr<MediaConstraintsImpl> m_videoConstraints;
    8682
    8783    UserMediaController* m_controller;
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r156102 r156108  
    8080                06E81ED70AB5D5E900C87837 /* LocalCurrentGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E81ED60AB5D5E900C87837 /* LocalCurrentGraphicsContext.h */; };
    8181                06E81EEC0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06E81EEB0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm */; };
     82                070327F817EA4AAF00CE1318 /* NavigatorUserMediaError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070327F717EA4AAF00CE1318 /* NavigatorUserMediaError.cpp */; };
    8283                070334D31459FFAD008D8D45 /* TrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070334D01459FFAC008D8D45 /* TrackEvent.cpp */; };
    8384                070334D71459FFD5008D8D45 /* TrackBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 070334D61459FFD5008D8D45 /* TrackBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    64436444                06E81ED60AB5D5E900C87837 /* LocalCurrentGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalCurrentGraphicsContext.h; sourceTree = "<group>"; };
    64446445                06E81EEB0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalCurrentGraphicsContext.mm; sourceTree = "<group>"; };
     6446                070327F717EA4AAF00CE1318 /* NavigatorUserMediaError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavigatorUserMediaError.cpp; sourceTree = "<group>"; };
    64456447                070334D01459FFAC008D8D45 /* TrackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackEvent.cpp; sourceTree = "<group>"; };
    64466448                070334D11459FFAC008D8D45 /* TrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrackEvent.h; sourceTree = "<group>"; };
     
    1332813330                                07221B5C17CEC32700848E51 /* NavigatorMediaStream.idl */,
    1332913331                                07221B5D17CEC32700848E51 /* NavigatorUserMediaError.h */,
     13332                                070327F717EA4AAF00CE1318 /* NavigatorUserMediaError.cpp */,
    1333013333                                07221B5E17CEC32700848E51 /* NavigatorUserMediaError.idl */,
    1333113334                                07221B5F17CEC32700848E51 /* NavigatorUserMediaErrorCallback.h */,
     
    2666726670                                A456FA2611AD4A830020B420 /* LabelsNodeList.cpp in Sources */,
    2666826671                                E18772F1126E2629003DD586 /* Language.cpp in Sources */,
     26672                                070327F817EA4AAF00CE1318 /* NavigatorUserMediaError.cpp in Sources */,
    2666926673                                9352084509BD43B900F2038D /* Language.mm in Sources */,
    2667026674                                2917B5611473496C0052C9D0 /* LayerFlushScheduler.cpp in Sources */,
  • trunk/Source/WebCore/dom/DOMError.h

    r118226 r156108  
    4242    const String& name() const { return m_name; }
    4343
    44 private:
     44protected:
    4545    explicit DOMError(const String& name);
    4646
     47private:
    4748    const String m_name;
    4849};
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSourcesQueryClient.h

    r115810 r156108  
    3636
    3737#include "MediaStreamSource.h"
     38#include <wtf/PassRefPtr.h>
     39#include <wtf/RefCounted.h>
    3840
    3941namespace WebCore {
     42
     43class MediaConstraints;
    4044
    4145class MediaStreamSourcesQueryClient : public RefCounted<MediaStreamSourcesQueryClient> {
     
    4347    virtual ~MediaStreamSourcesQueryClient() { }
    4448
    45     virtual bool audio() const = 0;
    46     virtual bool video() const = 0;
     49    virtual PassRefPtr<MediaConstraints> audioConstraints() const = 0;
     50    virtual PassRefPtr<MediaConstraints> videoConstraints() const = 0;
    4751
    4852    virtual void didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources) = 0;
Note: See TracChangeset for help on using the changeset viewer.