Changeset 157068 in webkit


Ignore:
Timestamp:
Oct 7, 2013 4:48:19 PM (11 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream API] update MediaStreamTrack object to match spec
https://bugs.webkit.org/show_bug.cgi?id=121940

Reviewed by Jer Noble.

Source/WebCore:

No new tests, existing test updated.

Add new source files to the project:

  • CMakeLists.txt:
  • DerivedSources.make:
  • GNUmakefile.list.am:
  • WebCore.xcodeproj/project.pbxproj:

New capability dictionary objects:

  • Modules/mediastream/AllAudioCapabilities.h: Added.
  • Modules/mediastream/AllAudioCapabilities.idl: Added.
  • Modules/mediastream/AllVideoCapabilities.h: Added.
  • Modules/mediastream/AllVideoCapabilities.idl: Added.
  • Modules/mediastream/AudioStreamTrack.cpp:

(WebCore::AudioStreamTrack::create): New version that takes a MediaStreamTrack*.

  • Modules/mediastream/AudioStreamTrack.h:

New object for a capability range:

  • Modules/mediastream/CapabilityRange.cpp: Added.
  • Modules/mediastream/CapabilityRange.h: Added.
  • Modules/mediastream/CapabilityRange.idl: Added.
  • Modules/mediastream/MediaConstraintsImpl.h: Make initialize() public.

New object for the current states for a media source.

  • Modules/mediastream/MediaSourceStates.cpp: Added.
  • Modules/mediastream/MediaSourceStates.h: Added.
  • Modules/mediastream/MediaSourceStates.idl: Added.

Don't call the media stream center to notify it when the state of other
objects change.

  • Modules/mediastream/MediaStream.cpp:

(WebCore::processTrack): Remove the stream source duplication hack.
(WebCore::createFromSourceVectors):
(WebCore::MediaStream::MediaStream):
(WebCore::MediaStream::addTrack):
(WebCore::MediaStream::removeTrack):

  • Modules/mediastream/MediaStream.h:

New object for the capabilities of a source.

  • Modules/mediastream/MediaStreamCapabilities.cpp: Added.
  • Modules/mediastream/MediaStreamCapabilities.h: Added.
  • Modules/mediastream/MediaStreamCapabilities.idl: Added.

Update interface to match spec.

  • Modules/mediastream/MediaStreamTrack.cpp:

(WebCore::MediaStreamTrack::MediaStreamTrack): Define a copy constructor to use in clone().
(WebCore::MediaStreamTrack::setSource): Call removeObserver if the track already has a source.

Initialize m_muted from new source's muted state.

(WebCore::MediaStreamTrack::id): Allow source to provide ID as the spec suggests.
(WebCore::MediaStreamTrack::setEnabled): Add some spec text to clarify logic. Always call

source->setEnabled, it can figure out if nothing needs to be done.

(WebCore::MediaStreamTrack::muted): Don't call the stream center when muted changes, the

source can take care of notifying interested parties.

(WebCore::MediaStreamTrack::readonly): New.
(WebCore::MediaStreamTrack::remote): New.
(WebCore::MediaStreamTrack::constraints): New.
(WebCore::MediaStreamTrack::states): New.
(WebCore::MediaStreamTrack::capabilities): New.
(WebCore::MediaStreamTrack::applyConstraints): New.
(WebCore::MediaStreamTrack::clone): New.
(WebCore::MediaStreamTrack::stopProducingData): New.
(WebCore::MediaStreamTrack::sourceStateChanged): Renamed from sourceChangedState.
(WebCore::MediaStreamTrack::sourceMutedChanged): New.
(WebCore::MediaStreamTrack::sourceEnabledChanged): New.
(WebCore::MediaStreamTrack::configureTrackRendering): New.
(WebCore::MediaStreamTrack::stopped): New.
(WebCore::MediaStreamTrack::stop): Call stopProducingData.
(WebCore::MediaStreamTrack::scheduleEventDispatch): New.
(WebCore::MediaStreamTrack::dispatchQueuedEvents): New.

  • Modules/mediastream/MediaStreamTrack.h:
  • Modules/mediastream/MediaStreamTrack.idl:
  • Modules/mediastream/MediaTrackConstraint.cpp: Added.
  • Modules/mediastream/MediaTrackConstraint.h: Added.
  • Modules/mediastream/MediaTrackConstraint.idl: Added.

Add empty classes/IDL for track constraint objects.

  • Modules/mediastream/MediaTrackConstraintSet.cpp: Added.
  • Modules/mediastream/MediaTrackConstraintSet.h: Added.
  • Modules/mediastream/MediaTrackConstraintSet.idl: Added.
  • Modules/mediastream/MediaTrackConstraints.cpp: Added.
  • Modules/mediastream/MediaTrackConstraints.h: Added.
  • Modules/mediastream/MediaTrackConstraints.idl: Added.
  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::UserMediaRequest::callSuccessHandler): Don't call the stream center, the

stream can take care of notifying interested parties.

Add a constructor and create() that take a MediaStreamTrack*.

  • Modules/mediastream/VideoStreamTrack.cpp:

(WebCore::VideoStreamTrack::create):
(WebCore::VideoStreamTrack::VideoStreamTrack):

  • Modules/mediastream/VideoStreamTrack.h:

Create a MediaStreamSource subclass for WebAudio

  • Modules/webaudio/AudioContext.cpp:

(WebCore::AudioContext::createMediaStreamSource): Call isAudioStreamSource instead

of checking deviceID.

  • Modules/webaudio/MediaStreamAudioDestinationNode.cpp:

(WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Create a

MediaStreamAudioSource instead of a MediaStreamSource.

  • Modules/webaudio/MediaStreamAudioDestinationNode.h:
  • Modules/webaudio/MediaStreamAudioSource.cpp: Added.
  • Modules/webaudio/MediaStreamAudioSource.h: Added.

(WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):

Add new generated files.

  • bindings/js/JSMediaSourceStatesCustom.cpp: Added.
  • bindings/js/JSMediaStreamCapabilitiesCustom.cpp: Added.
  • dom/EventNames.h: Defined 'overconstrained' event.
  • platform/mediastream/MediaStreamCenter.h: Get rid of all of the methods nobody uses.

It isn't clear that they are necessary, and we can add them back if/when we need them.

  • platform/mediastream/MediaStreamDescriptor.cpp:

(WebCore::MediaStreamDescriptor::~MediaStreamDescriptor): Clear the all source streams.
(WebCore::MediaStreamDescriptor::removeSource): Clear the source stream.

  • platform/mediastream/MediaStreamDescriptor.h:

Make MediaStreamSource an abstract base class, and remove everyting WebAudio-specific
to MediaStreamAudioSource.

  • platform/mediastream/MediaStreamSource.cpp:

(WebCore::MediaStreamSource::MediaStreamSource): Remove readyState and requiresConsumer

parameters. Create new UUID for id if non was passed.

(WebCore::MediaStreamSource::reset): Reset internal state to just-constructed. Used for testing.
(WebCore::MediaStreamSource::setReadyState): sourceChangedState -> sourceStateChanged.
(WebCore::MediaStreamSource::setStream): Remove the ASSERT that check for a source being

added to a new stream. This is still a problem, but it is required for testing and will
be fixed as a part of bug 121954.

(WebCore::MediaStreamSource::setConstraints): Added.
(WebCore::MediaStreamSource::setMuted): Notify observers when muted changes.
(WebCore::MediaStreamSource::setEnabled): Notify observers when enabled changes.
(WebCore::MediaStreamSource::readonly): New.
(WebCore::MediaStreamSource::stop): New. Set state to Ended when all of the observers has

stopped.

  • platform/mediastream/MediaStreamSource.h:

Define platform versions of the Capabilities classes.

  • platform/mediastream/MediaStreamSourceCapabilities.h: Added.

Update the non-functional platform stream centers for the API changes.

  • platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
  • platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
  • platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
  • platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
  • platform/mediastream/mac/MediaStreamCenterMac.cpp:
  • platform/mediastream/mac/MediaStreamCenterMac.h:

Update the Mock stream center for the API changes. Add a concrete mock MediaStreamSource
subclass.

  • platform/mock/MockMediaStreamCenter.cpp:

(WebCore::MockSource::MockSource): New, the mock media stream source.
(WebCore::MockSource::~MockSource):
(WebCore::MockSource::capabilities):
(WebCore::MockSource::states):
(WebCore::mockSourceMap):
(WebCore::mockAudioSourceID):
(WebCore::mockVideoSourceID):
(WebCore::initializeMockSources): Create one audio and one video mock source.
(WebCore::MockMediaStreamCenter::registerMockMediaStreamCenter): Call initializeMockSources.
(WebCore::MockMediaStreamCenter::createMediaStream): Use the already allocated mock media

sources.

(WebCore::MockMediaStreamCenter::getMediaStreamTrackSources): Ditto.

  • platform/mock/MockMediaStreamCenter.h:

LayoutTests:

  • fast/mediastream/MediaStreamTrack-expected.txt:
  • fast/mediastream/MediaStreamTrack.html:
  • fast/mediastream/MediaStreamTrack-getSources-expected.txt:
  • fast/mediastream/MediaStreamTrack-getSources.html:
Location:
trunk
Files:
27 added
38 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r157055 r157068  
     12013-10-07  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream API] update MediaStreamTrack object to match spec
     4        https://bugs.webkit.org/show_bug.cgi?id=121940
     5
     6        Reviewed by Jer Noble.
     7
     8        * fast/mediastream/MediaStreamTrack-expected.txt:
     9        * fast/mediastream/MediaStreamTrack.html:
     10        * fast/mediastream/MediaStreamTrack-getSources-expected.txt:
     11        * fast/mediastream/MediaStreamTrack-getSources.html:
     12
    1132013-10-07  Jer Noble  <jer.noble@apple.com>
    214
  • trunk/LayoutTests/fast/mediastream/MediaStreamTrack-expected.txt

    r139849 r157068  
    55
    66PASS getUserMedia succeeded.
     7
     8videoTrack = mediaStream.getVideoTracks()[0]
    79PASS track.readyState is "live"
    8 PASS Track onmute callback succeeded.
    9 PASS track.readyState is "muted"
    10 PASS Track onunmute callback succeeded.
     10checking track.capabilities()
     11  sourceId
     12    0 : 239c24b0-2b15-11e3-8224-0800200c9a66
     13  sourceType
     14    0 : camera
     15    1 : microphone
     16  width
     17   min : 320
     18   max : 1920
     19   supported : true
     20  height
     21   min : 240
     22   max : 1080
     23   supported : true
     24  frameRate
     25   min : 15
     26   max : 60
     27   supported : true
     28  aspectRatio
     29   min : 1.3333333730697632
     30   max : 1.7777777910232544
     31   supported : true
     32  facingMode
     33    0 : user
     34    1 : environment
     35checking track.states()
     36PASS states.sourceId is capabilities.sourceId[0]
     37PASS states.sourceType is "camera"
     38  width : 1920
     39  height : 1080
     40  frameRate : 30
     41  aspectRatio : 1.7777777910232544
     42  facingMode : user
     43
     44audioTrack = mediaStream.getAudioTracks()[0]
    1145PASS track.readyState is "live"
     46checking track.capabilities()
     47  sourceId
     48    0 : 239c24b1-2b15-11e3-8224-0800200c9a66
     49  volume
     50   min : 0
     51   max : 100
     52   supported : true
     53checking track.states()
     54PASS states.sourceId is capabilities.sourceId[0]
     55PASS states.sourceType is "microphone"
     56  volume : 50
     57
     58videoTrack2 = videoTrack.clone()
     59PASS track.readyState is "live"
     60checking track.capabilities()
     61  sourceId
     62    0 : 239c24b0-2b15-11e3-8224-0800200c9a66
     63  sourceType
     64    0 : camera
     65    1 : microphone
     66  width
     67   min : 320
     68   max : 1920
     69   supported : true
     70  height
     71   min : 240
     72   max : 1080
     73   supported : true
     74  frameRate
     75   min : 15
     76   max : 60
     77   supported : true
     78  aspectRatio
     79   min : 1.3333333730697632
     80   max : 1.7777777910232544
     81   supported : true
     82  facingMode
     83    0 : user
     84    1 : environment
     85checking track.states()
     86PASS states.sourceId is capabilities.sourceId[0]
     87PASS states.sourceType is "camera"
     88  width : 1920
     89  height : 1080
     90  frameRate : 30
     91  aspectRatio : 1.7777777910232544
     92  facingMode : user
     93PASS videoTrack.id is not videoTrack2.id
     94PASS videoTrack.kind is videoTrack2.kind
     95PASS videoTrack.label is videoTrack2.label
     96PASS videoTrack.muted is videoTrack2.muted
     97PASS videoTrack.enabled is videoTrack2.enabled
     98PASS videoTrack.readyState is videoTrack2.readyState
     99
     100videoTrack.stop()
    12101PASS Track onended callback succeeded.
    13 PASS track.readyState is "ended"
     102PASS videoTrack.readyState is "ended"
     103
    14104PASS successfullyParsed is true
    15105
  • trunk/LayoutTests/fast/mediastream/MediaStreamTrack-getSources-expected.txt

    r156554 r157068  
    88PASS MediaStreamTrack.getSources(gotSources1); did not throw exception.
    99PASS callback called.
    10 sources1[0].sourceId = "Mock_audio_device_ID"
     10sources1[0].sourceId = "239c24b1-2b15-11e3-8224-0800200c9a66"
    1111sources1[0].label = "Mock audio device"
    1212sources1[0].kind = "audio"
    13 sources1[1].sourceId = "Mock_video_device_ID"
     13sources1[1].sourceId = "239c24b0-2b15-11e3-8224-0800200c9a66"
    1414sources1[1].label = "Mock video device"
    1515sources1[1].kind = "video"
  • trunk/LayoutTests/fast/mediastream/MediaStreamTrack.html

    r155410 r157068  
    11<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
    22<html>
    3 <head>
    4 <script src="../../resources/js-test-pre.js"></script>
    5 </head>
    6 <body>
    7 <p id="description"></p>
    8 <div id="console"></div>
    9 <script>
    10 description("Tests MediaStreamTrack callbacks.");
     3    <head>
     4        <script src="../../resources/js-test-pre.js"></script>
     5        <script>
     6            var mediaStream;
     7            var videoTrack;
     8            var videoTrack2;
     9            var audioTrack;
     10           
     11            function error()
     12            {
     13                testFailed('Stream generation failed.');
     14                finishJSTest();
     15            }
    1116
    12 // Note that the below behaviour doesn't reflect how it works outside of LayoutTests.
    13 // The underlying mock is modified to trigger the events when certain functions are called.
    14 // This modified behaviour allows us to test the MediaStreamTrack class properly.
     17            function getUserMedia(constraints, callback)
     18            {
     19                try {
     20                    navigator.webkitGetUserMedia(constraints, callback, error);
     21                } catch (e) {
     22                    testFailed('webkitGetUserMedia threw exception :' + e);
     23                    finishJSTest();
     24                }
     25            }
     26           
     27            function onTrackEnded()
     28            {
     29                testPassed('Track onended callback succeeded.');
     30                shouldBeEqualToString('videoTrack.readyState', 'ended');
     31                debug("");
     32                finishJSTest();
     33            }
    1534
    16 var stream;
    17 var track;
     35            function onTrackStarted()
     36            {
     37                testPassed('Track onstarted callback succeeded.');
     38                shouldBeEqualToString('videoTrack.readyState', 'live');
     39            }
    1840
    19 function error() {
    20     testFailed('Stream generation failed.');
    21     finishJSTest();
    22 }
     41            function onTrackOverConstrained()
     42            {
     43                testPassed('Track onoverconstrained callback succeeded.');
     44                finishJSTest();
     45            }
    2346
    24 function getUserMedia(constraints, callback) {
    25     try {
    26         navigator.webkitGetUserMedia(constraints, callback, error);
    27     } catch (e) {
    28         testFailed('webkitGetUserMedia threw exception :' + e);
    29         finishJSTest();
    30     }
    31 }
     47            function onTrackUnmute()
     48            {
     49                testPassed('Track onunmute callback succeeded.');
     50                shouldBeEqualToString('videoTrack.readyState', 'live');
     51                videoTrack.stop();
     52            }
    3253
    33 function onTrackEnded() {
    34     testPassed('Track onended callback succeeded.');
     54            function onTrackMute()
     55            {
     56                testPassed('Track onmute callback succeeded.');
     57                shouldBeEqual('videoTrack.muted', true);
     58            }
    3559
    36     shouldBeEqualToString('track.readyState', 'ended');
     60            function logCapabilityRange(name, range)
     61            {
     62                debug("  " + name);
     63                debug("   min : " + range.min);
     64                debug("   max : " + range.max);
     65                debug("   supported : " + range.supported);
     66            }
    3767
    38     finishJSTest();
    39 }
     68            function logCapabilityList(name, list)
     69            {
     70                debug("  " + name);
     71                for (i = 0; i < list.length; i++)
     72                debug("    " + i + " : " + list[i]);
     73            }
    4074
    41 function onTrackUnmute() {
    42     testPassed('Track onunmute callback succeeded.');
     75            function checkCapabilities(track)
     76            {
     77                debug("checking track.capabilities()");
     78                capabilities = track.capabilities();
     79                logCapabilityList("sourceId", capabilities.sourceId);
     80                if (track.kind == "video") {
     81                    logCapabilityList("sourceType", capabilities.sourceType);
     82                    logCapabilityRange("width", capabilities.width);
     83                    logCapabilityRange("height", capabilities.height);
     84                    logCapabilityRange("frameRate", capabilities.frameRate);
     85                    logCapabilityRange("aspectRatio", capabilities.aspectRatio);
     86                    logCapabilityList("facingMode", capabilities.facingMode);
     87                } else
     88                    logCapabilityRange("volume", capabilities.volume);
     89            }
    4390
    44     shouldBeEqualToString('track.readyState', 'live');
     91            function checkStates(track)
     92            {
     93                debug("checking track.states()");
     94                capabilities = track.capabilities();
     95                states = track.states();
     96                shouldBe('states.sourceId', 'capabilities.sourceId[0]');
     97                if (track.kind == "video") {
     98                    shouldBeEqualToString('states.sourceType', 'camera');
     99                    debug("  width : " + states.width);
     100                    debug("  height : " + states.height);
     101                    debug("  frameRate : " + states.frameRate);
     102                    debug("  aspectRatio : " + states.aspectRatio);
     103                    debug("  facingMode : " + states.facingMode);
     104                } else {
     105                    shouldBeEqualToString('states.sourceType', 'microphone');
     106                    debug("  volume : " + states.volume);
     107                }
     108            }
     109           
     110            function checkTrack(t)
     111            {
     112                track = t;
     113                shouldBeEqualToString('track.readyState', 'live');
     114                checkCapabilities(track);
     115                checkStates(track);
     116            }
    45117
    46     stream.stop();
    47 }
     118            function gotStream(stream)
     119            {
     120                mediaStream = stream;
     121                testPassed('getUserMedia succeeded.');
     122           
     123                debug("");
     124                evalAndLog("videoTrack = mediaStream.getVideoTracks()[0]");
     125                checkTrack(videoTrack);
    48126
    49 function onTrackMute() {
    50     testPassed('Track onmute callback succeeded.');
     127                debug("");
     128                evalAndLog("audioTrack = mediaStream.getAudioTracks()[0]");
     129                checkTrack(audioTrack);
    51130
    52     shouldBeEqualToString('track.readyState', 'muted');
     131                videoTrack.onmute = onTrackMute;
     132                videoTrack.onunmute = onTrackUnmute;
     133                videoTrack.onended = onTrackEnded;
     134                videoTrack.onstarted = onTrackStarted;
     135                videoTrack.onoverconstrained = onTrackOverConstrained;
     136           
     137                debug("");
     138                evalAndLog("videoTrack2 = videoTrack.clone()");
     139                checkTrack(videoTrack2);
     140                shouldNotBe('videoTrack.id', 'videoTrack2.id');
     141                shouldBe('videoTrack.kind', 'videoTrack2.kind');
     142                shouldBe('videoTrack.label', 'videoTrack2.label');
     143                shouldBe('videoTrack.muted', 'videoTrack2.muted');
     144                shouldBe('videoTrack.enabled', 'videoTrack2.enabled');
     145                shouldBe('videoTrack.readyState', 'videoTrack2.readyState');
    53146
    54     track.enabled = true;
    55 }
     147                debug("");
     148                evalAndLog("videoTrack.stop()");
     149            }
    56150
    57 function gotStream(s) {
    58     testPassed('getUserMedia succeeded.');
     151            function start()
     152            {
     153                description("Tests MediaStreamTrack callbacks.");
     154               
     155                // Note that the below behaviour doesn't reflect how it works outside of LayoutTests.
     156                // The underlying mock is modified to trigger the events when certain functions are called.
     157                // This modified behaviour allows us to test the MediaStreamTrack class properly.
     158                getUserMedia({audio:true, video:true}, gotStream);
     159            }
    59160
    60     stream = s;
    61     track = stream.getVideoTracks()[0];
    62 
    63     shouldBeEqualToString('track.readyState', 'live');
    64 
    65     track.onunmute = onTrackUnmute;
    66     track.onmute = onTrackMute;
    67     track.onended = onTrackEnded;
    68 
    69     track.enabled = false;
    70 }
    71 
    72 getUserMedia({audio:true, video:true}, gotStream);
    73 
    74 window.jsTestIsAsync = true;
    75 window.successfullyParsed = true;
    76 </script>
    77 <script src="../../resources/js-test-post.js"></script>
    78 </body>
     161            window.jsTestIsAsync = true;
     162            window.successfullyParsed = true;
     163        </script>
     164    </head>
     165    <body onload="start()">
     166        <p id="description"></p>
     167        <div id="console"></div>
     168        <script src="../../resources/js-test-post.js"></script>
     169    </body>
    79170</html>
  • trunk/Source/WebCore/CMakeLists.txt

    r157054 r157068  
    187187    Modules/mediasource/WebKitSourceBufferList.idl
    188188
     189    Modules/mediastream/AllAudioCapabilities.idl
     190    Modules/mediastream/AllVideoCapabilities.idl
    189191    Modules/mediastream/AudioStreamTrack.idl
     192    Modules/mediastream/CapabilityRange.idl
     193    Modules/mediastream/MediaSourceStates.idl
    190194    Modules/mediastream/MediaStream.idl
     195    Modules/mediastream/MediaStreamCapabilities.idl
    191196    Modules/mediastream/MediaStreamEvent.idl
    192197    Modules/mediastream/MediaStreamTrack.idl
    193198    Modules/mediastream/MediaStreamTrackEvent.idl
    194199    Modules/mediastream/MediaStreamTrackSourcesCallback.idl
     200    Modules/mediastream/MediaTrackConstraint.idl
     201    Modules/mediastream/MediaTrackConstraintSet.idl
     202    Modules/mediastream/MediaTrackConstraints.idl
    195203    Modules/mediastream/NavigatorMediaStream.idl
    196204    Modules/mediastream/NavigatorUserMediaError.idl
     
    787795
    788796    Modules/mediastream/AudioStreamTrack.cpp
     797    Modules/mediastream/CapabilityRange.cpp
    789798    Modules/mediastream/MediaConstraintsImpl.cpp
     799    Modules/mediastream/MediaSourceStates.cpp
    790800    Modules/mediastream/MediaStream.cpp
     801    Modules/mediastream/MediaStreamCapabilities.cpp
    791802    Modules/mediastream/MediaStreamEvent.cpp
    792803    Modules/mediastream/MediaStreamRegistry.cpp
     
    794805    Modules/mediastream/MediaStreamTrackEvent.cpp
    795806    Modules/mediastream/MediaStreamTrackSourcesRequest.cpp
     807    Modules/mediastream/MediaTrackConstraint.cpp
     808    Modules/mediastream/MediaTrackConstraintSet.cpp
     809    Modules/mediastream/MediaTrackConstraints.cpp
    796810    Modules/mediastream/NavigatorMediaStream.cpp
    797811    Modules/mediastream/NavigatorUserMediaError.cpp
     
    864878    Modules/webaudio/MediaElementAudioSourceNode.cpp
    865879    Modules/webaudio/MediaStreamAudioDestinationNode.cpp
     880    Modules/webaudio/MediaStreamAudioSource.cpp
    866881    Modules/webaudio/MediaStreamAudioSourceNode.cpp
    867882    Modules/webaudio/OfflineAudioCompletionEvent.cpp
  • trunk/Source/WebCore/ChangeLog

    r157065 r157068  
     12013-10-07  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream API] update MediaStreamTrack object to match spec
     4        https://bugs.webkit.org/show_bug.cgi?id=121940
     5
     6        Reviewed by Jer Noble.
     7
     8        No new tests, existing test updated.
     9
     10        Add new source files to the project:
     11        * CMakeLists.txt:
     12        * DerivedSources.make:
     13        * GNUmakefile.list.am:
     14        * WebCore.xcodeproj/project.pbxproj:
     15
     16        New capability dictionary objects:
     17        * Modules/mediastream/AllAudioCapabilities.h: Added.
     18        * Modules/mediastream/AllAudioCapabilities.idl: Added.
     19        * Modules/mediastream/AllVideoCapabilities.h: Added.
     20        * Modules/mediastream/AllVideoCapabilities.idl: Added.
     21
     22        * Modules/mediastream/AudioStreamTrack.cpp:
     23        (WebCore::AudioStreamTrack::create): New version that takes a MediaStreamTrack*.
     24        * Modules/mediastream/AudioStreamTrack.h:
     25
     26        New object for a capability range:
     27        * Modules/mediastream/CapabilityRange.cpp: Added.
     28        * Modules/mediastream/CapabilityRange.h: Added.
     29        * Modules/mediastream/CapabilityRange.idl: Added.
     30
     31        * Modules/mediastream/MediaConstraintsImpl.h: Make initialize() public.
     32
     33        New object for the current states for a media source.
     34        * Modules/mediastream/MediaSourceStates.cpp: Added.
     35        * Modules/mediastream/MediaSourceStates.h: Added.
     36        * Modules/mediastream/MediaSourceStates.idl: Added.
     37
     38        Don't call the media stream center to notify it when the state of other
     39        objects change.
     40        * Modules/mediastream/MediaStream.cpp:
     41        (WebCore::processTrack): Remove the stream source duplication hack.
     42        (WebCore::createFromSourceVectors):
     43        (WebCore::MediaStream::MediaStream):
     44        (WebCore::MediaStream::addTrack):
     45        (WebCore::MediaStream::removeTrack):
     46        * Modules/mediastream/MediaStream.h:
     47
     48        New object for the capabilities of a source.
     49        * Modules/mediastream/MediaStreamCapabilities.cpp: Added.
     50        * Modules/mediastream/MediaStreamCapabilities.h: Added.
     51        * Modules/mediastream/MediaStreamCapabilities.idl: Added.
     52
     53        Update interface to match spec.
     54        * Modules/mediastream/MediaStreamTrack.cpp:
     55        (WebCore::MediaStreamTrack::MediaStreamTrack): Define a copy constructor to use in clone().
     56        (WebCore::MediaStreamTrack::setSource): Call removeObserver if the track already has a source.
     57            Initialize m_muted from new source's muted state.
     58        (WebCore::MediaStreamTrack::id): Allow source to provide ID as the spec suggests.
     59        (WebCore::MediaStreamTrack::setEnabled): Add some spec text to clarify logic. Always call
     60            source->setEnabled, it can figure out if nothing needs to be done.
     61        (WebCore::MediaStreamTrack::muted): Don't call the stream center when muted changes, the
     62            source can take care of notifying interested parties.
     63        (WebCore::MediaStreamTrack::readonly): New.
     64        (WebCore::MediaStreamTrack::remote): New.
     65        (WebCore::MediaStreamTrack::constraints): New.
     66        (WebCore::MediaStreamTrack::states): New.
     67        (WebCore::MediaStreamTrack::capabilities): New.
     68        (WebCore::MediaStreamTrack::applyConstraints): New.
     69        (WebCore::MediaStreamTrack::clone): New.
     70        (WebCore::MediaStreamTrack::stopProducingData): New.
     71        (WebCore::MediaStreamTrack::sourceStateChanged): Renamed from sourceChangedState.
     72        (WebCore::MediaStreamTrack::sourceMutedChanged): New.
     73        (WebCore::MediaStreamTrack::sourceEnabledChanged): New.
     74        (WebCore::MediaStreamTrack::configureTrackRendering): New.
     75        (WebCore::MediaStreamTrack::stopped): New.
     76        (WebCore::MediaStreamTrack::stop): Call stopProducingData.
     77        (WebCore::MediaStreamTrack::scheduleEventDispatch): New.
     78        (WebCore::MediaStreamTrack::dispatchQueuedEvents): New.
     79        * Modules/mediastream/MediaStreamTrack.h:
     80        * Modules/mediastream/MediaStreamTrack.idl:
     81
     82        * Modules/mediastream/MediaTrackConstraint.cpp: Added.
     83        * Modules/mediastream/MediaTrackConstraint.h: Added.
     84        * Modules/mediastream/MediaTrackConstraint.idl: Added.
     85
     86        // Add empty classes/IDL for track constraint objects.
     87        * Modules/mediastream/MediaTrackConstraintSet.cpp: Added.
     88        * Modules/mediastream/MediaTrackConstraintSet.h: Added.
     89        * Modules/mediastream/MediaTrackConstraintSet.idl: Added.
     90        * Modules/mediastream/MediaTrackConstraints.cpp: Added.
     91        * Modules/mediastream/MediaTrackConstraints.h: Added.
     92        * Modules/mediastream/MediaTrackConstraints.idl: Added.
     93
     94        * Modules/mediastream/UserMediaRequest.cpp:
     95        (WebCore::UserMediaRequest::callSuccessHandler): Don't call the stream center, the
     96            stream can take care of notifying interested parties.
     97
     98        // Add a constructor and create() that take a MediaStreamTrack*.
     99        * Modules/mediastream/VideoStreamTrack.cpp:
     100        (WebCore::VideoStreamTrack::create):
     101        (WebCore::VideoStreamTrack::VideoStreamTrack):
     102        * Modules/mediastream/VideoStreamTrack.h:
     103
     104        // Create a MediaStreamSource subclass for WebAudio
     105        * Modules/webaudio/AudioContext.cpp:
     106        (WebCore::AudioContext::createMediaStreamSource): Call isAudioStreamSource instead
     107            of checking deviceID.
     108        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
     109        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Create a
     110            MediaStreamAudioSource instead of a MediaStreamSource.
     111        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
     112        * Modules/webaudio/MediaStreamAudioSource.cpp: Added.
     113        * Modules/webaudio/MediaStreamAudioSource.h: Added.
     114        (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
     115
     116        // Add new generated files.
     117        * bindings/js/JSMediaSourceStatesCustom.cpp: Added.
     118        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp: Added.
     119
     120        * dom/EventNames.h: Defined 'overconstrained' event.
     121
     122        * platform/mediastream/MediaStreamCenter.h: Get rid of all of the methods nobody uses.
     123            It isn't clear that they are necessary, and we can add them back if/when we need them.
     124
     125        * platform/mediastream/MediaStreamDescriptor.cpp:
     126        (WebCore::MediaStreamDescriptor::~MediaStreamDescriptor): Clear the all source streams.
     127        (WebCore::MediaStreamDescriptor::removeSource): Clear the source stream.
     128        * platform/mediastream/MediaStreamDescriptor.h:
     129
     130        // Make MediaStreamSource an abstract base class, and remove everyting WebAudio-specific
     131        //  to MediaStreamAudioSource.
     132        * platform/mediastream/MediaStreamSource.cpp:
     133        (WebCore::MediaStreamSource::MediaStreamSource): Remove readyState and requiresConsumer
     134            parameters. Create new UUID for id if non was passed.
     135        (WebCore::MediaStreamSource::reset): Reset internal state to just-constructed. Used for testing.
     136        (WebCore::MediaStreamSource::setReadyState): sourceChangedState -> sourceStateChanged.
     137        (WebCore::MediaStreamSource::setStream): Remove the ASSERT that check for a source being
     138            added to a new stream. This is still a problem, but it is required for testing and will
     139            be fixed as a part of bug 121954.
     140        (WebCore::MediaStreamSource::setConstraints): Added.
     141        (WebCore::MediaStreamSource::setMuted): Notify observers when muted changes.
     142        (WebCore::MediaStreamSource::setEnabled): Notify observers when enabled changes.
     143        (WebCore::MediaStreamSource::readonly): New.
     144        (WebCore::MediaStreamSource::stop): New. Set state to Ended when all of the observers has
     145            stopped.
     146        * platform/mediastream/MediaStreamSource.h:
     147
     148        // Define platform versions of the Capabilities classes.
     149        * platform/mediastream/MediaStreamSourceCapabilities.h: Added.
     150
     151        // Update the non-functional platform stream centers for the API changes.
     152        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
     153        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
     154        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
     155        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
     156        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
     157        * platform/mediastream/mac/MediaStreamCenterMac.h:
     158
     159        // Update the Mock stream center for the API changes. Add a concrete mock MediaStreamSource
     160        //  subclass.
     161        * platform/mock/MockMediaStreamCenter.cpp:
     162        (WebCore::MockSource::MockSource): New, the mock media stream source.
     163        (WebCore::MockSource::~MockSource):
     164        (WebCore::MockSource::capabilities):
     165        (WebCore::MockSource::states):
     166        (WebCore::mockSourceMap):
     167        (WebCore::mockAudioSourceID):
     168        (WebCore::mockVideoSourceID):
     169        (WebCore::initializeMockSources): Create one audio and one video mock source.
     170        (WebCore::MockMediaStreamCenter::registerMockMediaStreamCenter): Call initializeMockSources.
     171        (WebCore::MockMediaStreamCenter::createMediaStream): Use the already allocated mock media
     172            sources.
     173        (WebCore::MockMediaStreamCenter::getMediaStreamTrackSources): Ditto.
     174        * platform/mock/MockMediaStreamCenter.h:
     175
    11762013-10-07  Andreas Kling  <akling@apple.com>
    2177
  • trunk/Source/WebCore/DerivedSources.make

    r157054 r157068  
    102102    $(WebCore)/Modules/mediasource/SourceBuffer.idl \
    103103    $(WebCore)/Modules/mediasource/SourceBufferList.idl \
     104        $(WebCore)/Modules/mediastream/AllVideoCapabilities.idl \
     105        $(WebCore)/Modules/mediastream/AllAudioCapabilities.idl \
    104106        $(WebCore)/Modules/mediastream/AudioStreamTrack.idl \
     107    $(WebCore)/Modules/mediastream/CapabilityRange.idl \
     108    $(WebCore)/Modules/mediastream/MediaSourceStates.idl \
    105109        $(WebCore)/Modules/mediastream/MediaStream.idl \
     110        $(WebCore)/Modules/mediastream/MediaStreamCapabilities.idl \
    106111    $(WebCore)/Modules/mediastream/MediaStreamEvent.idl \
    107112    $(WebCore)/Modules/mediastream/MediaStreamTrack.idl \
    108113    $(WebCore)/Modules/mediastream/MediaStreamTrackEvent.idl \
    109114    $(WebCore)/Modules/mediastream/MediaStreamTrackSourcesCallback.idl \
     115    $(WebCore)/Modules/mediastream/MediaTrackConstraint.idl \
     116    $(WebCore)/Modules/mediastream/MediaTrackConstraints.idl \
     117    $(WebCore)/Modules/mediastream/MediaTrackConstraintSet.idl \
    110118    $(WebCore)/Modules/mediastream/NavigatorMediaStream.idl \
    111119    $(WebCore)/Modules/mediastream/NavigatorUserMediaError.idl \
  • trunk/Source/WebCore/GNUmakefile.list.am

    r157054 r157068  
    3232        DerivedSources/WebCore/JSAbstractWorker.cpp \
    3333        DerivedSources/WebCore/JSAbstractWorker.h \
     34        DerivedSources/WebCore/JSAllAudioCapabilities.cpp \
     35        DerivedSources/WebCore/JSAllAudioCapabilities.h \
     36        DerivedSources/WebCore/JSAllVideoCapabilities.cpp \
     37        DerivedSources/WebCore/JSAllVideoCapabilities.h \
    3438        DerivedSources/WebCore/JSAttr.cpp \
    3539        DerivedSources/WebCore/JSAttr.h \
     
    8892        DerivedSources/WebCore/JSCanvasRenderingContext.cpp \
    8993        DerivedSources/WebCore/JSCanvasRenderingContext.h \
     94        DerivedSources/WebCore/JSCapabilityRange.cpp \
     95        DerivedSources/WebCore/JSCapabilityRange.h \
    9096        DerivedSources/WebCore/JSCDATASection.cpp \
    9197        DerivedSources/WebCore/JSCDATASection.h \
     
    463469        DerivedSources/WebCore/JSWebKitMediaSource.cpp \
    464470        DerivedSources/WebCore/JSWebKitMediaSource.h \
     471        DerivedSources/WebCore/JSMediaSourceStates.cpp \
     472        DerivedSources/WebCore/JSMediaSourceStates.h \
    465473        DerivedSources/WebCore/JSMediaStream.cpp \
    466474        DerivedSources/WebCore/JSMediaStream.h \
     
    469477        DerivedSources/WebCore/JSMediaStreamAudioDestinationNode.cpp \
    470478        DerivedSources/WebCore/JSMediaStreamAudioDestinationNode.h \
     479        DerivedSources/WebCore/JSMediaStreamCapabilities.cpp \
     480        DerivedSources/WebCore/JSMediaStreamCapabilities.h \
    471481        DerivedSources/WebCore/JSMediaStreamEvent.cpp \
    472482        DerivedSources/WebCore/JSMediaStreamEvent.h \
     
    481491        DerivedSources/WebCore/JSMediaQueryListListener.cpp \
    482492        DerivedSources/WebCore/JSMediaQueryListListener.h \
     493        DerivedSources/WebCore/JSMediaTrackConstraint.cpp \
     494        DerivedSources/WebCore/JSMediaTrackConstraint.h \
     495        DerivedSources/WebCore/JSMediaTrackConstraints.cpp \
     496        DerivedSources/WebCore/JSMediaTrackConstraints.h \
     497        DerivedSources/WebCore/JSMediaTrackConstraintSet.cpp \
     498        DerivedSources/WebCore/JSMediaTrackConstraintSet.h \
    483499        DerivedSources/WebCore/JSMessageChannel.cpp \
    484500        DerivedSources/WebCore/JSMessageChannel.h \
     
    11871203        $(WebCore)/Modules/mediasource/WebKitSourceBuffer.idl \
    11881204        $(WebCore)/Modules/mediasource/WebKitSourceBufferList.idl \
     1205        $(WebCore)/Modules/mediastream/AllVideoCapabilities.idl \
     1206        $(WebCore)/Modules/mediastream/AllAudioCapabilities.idl \
    11891207        $(WebCore)/Modules/mediastream/AudioStreamTrack.idl \
     1208        $(WebCore)/Modules/mediastream/CapabilityRange.idl \
     1209        $(WebCore)/Modules/mediastream/MediaSourceStates.idl \
    11901210        $(WebCore)/Modules/mediastream/MediaStream.idl \
     1211        $(WebCore)/Modules/mediastream/MediaStreamCapabilities.idl \
    11911212        $(WebCore)/Modules/mediastream/MediaStreamEvent.idl \
    11921213        $(WebCore)/Modules/mediastream/MediaStreamTrack.idl \
    11931214        $(WebCore)/Modules/mediastream/MediaStreamTrackEvent.idl \
    11941215        $(WebCore)/Modules/mediastream/MediaStreamTrackSourcesCallback.idl \
     1216        $(WebCore)/Modules/mediastream/MediaTrackConstraint.idl \
     1217        $(WebCore)/Modules/mediastream/MediaTrackConstraints.idl \
     1218        $(WebCore)/Modules/mediastream/MediaTrackConstraintSet.idl \
    11951219        $(WebCore)/Modules/mediastream/NavigatorMediaStream.idl \
    11961220        $(WebCore)/Modules/mediastream/NavigatorUserMediaError.idl \
     
    18461870        Source/WebCore/Modules/mediasource/WebKitSourceBufferList.cpp \
    18471871        Source/WebCore/Modules/mediasource/WebKitSourceBufferList.h \
     1872        Source/WebCore/Modules/mediastream/AllAudioCapabilities.h \
     1873        Source/WebCore/Modules/mediastream/AllVideoCapabilities.h \
    18481874        Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp \
    18491875        Source/WebCore/Modules/mediastream/AudioStreamTrack.h \
     1876        Source/WebCore/Modules/mediastream/CapabilityRange.cpp \
     1877        Source/WebCore/Modules/mediastream/CapabilityRange.h \
    18501878        Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp \
    18511879        Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h \
     1880        Source/WebCore/Modules/mediastream/MediaSourceStates.cpp \
     1881        Source/WebCore/Modules/mediastream/MediaSourceStates.h \
    18521882        Source/WebCore/Modules/mediastream/MediaStream.cpp \
    18531883        Source/WebCore/Modules/mediastream/MediaStream.h \
     1884        Source/WebCore/Modules/mediastream/MediaStreamCapabilities.cpp \
     1885        Source/WebCore/Modules/mediastream/MediaStreamCapabilities.h \
    18541886        Source/WebCore/Modules/mediastream/MediaStreamEvent.cpp \
    18551887        Source/WebCore/Modules/mediastream/MediaStreamEvent.h \
     
    18631895        Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.cpp \
    18641896        Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.h \
     1897        Source/WebCore/Modules/mediastream/MediaTrackConstraint.cpp \
     1898        Source/WebCore/Modules/mediastream/MediaTrackConstraint.h \
     1899        Source/WebCore/Modules/mediastream/MediaTrackConstraintSet.cpp \
     1900        Source/WebCore/Modules/mediastream/MediaTrackConstraintSet.h \
     1901        Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp \
     1902        Source/WebCore/Modules/mediastream/MediaTrackConstraints.h \
    18651903        Source/WebCore/Modules/mediastream/NavigatorMediaStream.cpp \
    18661904        Source/WebCore/Modules/mediastream/NavigatorMediaStream.h \
     
    20082046        Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp \
    20092047        Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.h \
     2048        Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp \
     2049        Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h \
    20102050        Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp \
    20112051        Source/WebCore/Modules/webaudio/OfflineAudioContext.h \
     
    23132353        Source/WebCore/bindings/js/JSMainThreadExecState.h \
    23142354        Source/WebCore/bindings/js/JSMediaListCustom.h \
     2355        Source/WebCore/bindings/js/JSMediaSourceStatesCustom.cpp \
    23152356        Source/WebCore/bindings/js/JSMessageChannelCustom.cpp \
    23162357        Source/WebCore/bindings/js/JSMessageEventCustom.cpp \
     
    53375378        Source/WebCore/platform/mediastream/MediaStreamSource.cpp \
    53385379        Source/WebCore/platform/mediastream/MediaStreamSource.h \
     5380        Source/WebCore/platform/mediastream/MediaStreamSourceCapabilities.h \
    53395381        Source/WebCore/platform/mediastream/MediaStreamTrackSourcesRequestClient.h \
    53405382        Source/WebCore/platform/mediastream/RTCConfiguration.h \
  • trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp

    r156488 r157068  
    3636namespace WebCore {
    3737
    38 PassRefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, const Dictionary& audioConstraints)
     38RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, const Dictionary& audioConstraints)
    3939{
    40     RefPtr<AudioStreamTrack> track = adoptRef(new AudioStreamTrack(context, 0, &audioConstraints));
    41     return track.release();
     40    return adoptRef(new AudioStreamTrack(context, 0, &audioConstraints));
    4241}
    4342
    44 PassRefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)
     43RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)
    4544{
    46     RefPtr<AudioStreamTrack> track = adoptRef(new AudioStreamTrack(context, source, 0));
    47     return track.release();
     45    return adoptRef(new AudioStreamTrack(context, source, 0));
     46}
     47
     48RefPtr<AudioStreamTrack> AudioStreamTrack::create(MediaStreamTrack* track)
     49{
     50    return adoptRef(new AudioStreamTrack(track));
    4851}
    4952
    5053AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* audioConstraints)
    5154    : MediaStreamTrack(context, source, audioConstraints)
     55{
     56}
     57
     58AudioStreamTrack::AudioStreamTrack(MediaStreamTrack* track)
     59    : MediaStreamTrack(track)
    5260{
    5361}
  • trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.h

    r157030 r157068  
    3030
    3131#include "MediaStreamTrack.h"
     32#include <wtf/RefCounted.h>
    3233#include <wtf/Vector.h>
    33 #include <wtf/RefCounted.h>
    3434
    3535namespace WebCore {
     
    4040class AudioStreamTrack FINAL : public MediaStreamTrack {
    4141public:
    42     static PassRefPtr<AudioStreamTrack> create(ScriptExecutionContext*, const Dictionary&);
    43     static PassRefPtr<AudioStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);
     42    static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, const Dictionary&);
     43    static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);
     44    static RefPtr<AudioStreamTrack> create(MediaStreamTrack*);
    4445
    4546    virtual ~AudioStreamTrack() { }
     
    4950private:
    5051    AudioStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);
     52    explicit AudioStreamTrack(MediaStreamTrack*);
    5153};
    5254
  • trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h

    r129764 r157068  
    4646    static PassRefPtr<MediaConstraintsImpl> create();
    4747    static PassRefPtr<MediaConstraintsImpl> create(const Dictionary&, ExceptionCode&);
     48
    4849    virtual ~MediaConstraintsImpl();
     50    bool initialize(const Dictionary&);
    4951
    5052    virtual void getMandatoryConstraints(Vector<MediaConstraint>&) const OVERRIDE;
     
    5658private:
    5759    MediaConstraintsImpl() { }
    58     bool initialize(const Dictionary&);
    5960
    6061    HashMap<String, String> m_mandatoryConstraints;
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp

    r156488 r157068  
    5757
    5858    MediaStreamSource* source = track->source();
    59     if (!containsSource(sourceVector, source)) {
    60         if (source->stream()) {
    61             // FIXME: this should not be necessary because tracks and streams must be able to share sources, but our code
    62             // currenlty assumes each source is attached to just one track.
    63             // https://bugs.webkit.org/show_bug.cgi?id=121954
    64             sourceVector.append(MediaStreamSource::create(source->id(), source->type(), source->name(), source->readyState(), source->requiresAudioConsumer()).get());
    65         } else
    66             sourceVector.append(source);
    67     }
     59    if (!containsSource(sourceVector, source))
     60        sourceVector.append(source);
    6861}
    6962
     
    7164{
    7265    RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(audioSources, videoSources);
    73     MediaStreamCenter::shared().didCreateMediaStream(descriptor.get());
    74 
    7566    return MediaStream::create(context, descriptor.release());
    7667}
     
    122113    , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
    123114{
     115    ASSERT(m_descriptor);
    124116    m_descriptor->setClient(this);
    125117
     
    157149        return;
    158150
    159     MediaStreamCenter::shared().didStopLocalMediaStream(descriptor());
    160151    setEnded();
    161152}
     
    185176        break;
    186177    }
    187 
    188     MediaStreamCenter::shared().didAddMediaStreamTrack(track->source());
    189178}
    190179
     
    224213    if (!m_audioTracks.size() && !m_videoTracks.size())
    225214        setEnded();
    226 
    227     MediaStreamCenter::shared().didRemoveMediaStreamTrack(track->source());
    228215}
    229216
  • trunk/Source/WebCore/Modules/mediastream/MediaStream.h

    r156719 r157068  
    8686
    8787    // ContextDestructionObserver
    88     virtual void contextDestroyed() OVERRIDE;
     88    virtual void contextDestroyed() OVERRIDE FINAL;
    8989
    9090private:
    91     // MediaStreamDescriptorClient
    92     virtual void trackDidEnd() OVERRIDE;
    93     virtual void streamDidEnd() OVERRIDE;
    94    
    9591    // EventTarget
    96     virtual void refEventTarget() OVERRIDE { ref(); }
    97     virtual void derefEventTarget() OVERRIDE { deref(); }
     92    virtual void refEventTarget() OVERRIDE FINAL { ref(); }
     93    virtual void derefEventTarget() OVERRIDE FINAL { deref(); }
    9894
    9995    // MediaStreamDescriptorClient
    100     virtual void addRemoteSource(MediaStreamSource*) OVERRIDE;
    101     virtual void removeRemoteSource(MediaStreamSource*) OVERRIDE;
     96    virtual void trackDidEnd() OVERRIDE FINAL;
     97    virtual void streamDidEnd() OVERRIDE FINAL;
     98    virtual void addRemoteSource(MediaStreamSource*) OVERRIDE FINAL;
     99    virtual void removeRemoteSource(MediaStreamSource*) OVERRIDE FINAL;
    102100
    103101    void scheduleDispatchEvent(PassRefPtr<Event>);
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp

    r156488 r157068  
    3030#if ENABLE(MEDIA_STREAM)
    3131
     32#include "AllAudioCapabilities.h"
     33#include "AllVideoCapabilities.h"
     34#include "AudioStreamTrack.h"
    3235#include "Dictionary.h"
    3336#include "Event.h"
    3437#include "ExceptionCode.h"
     38#include "MediaConstraintsImpl.h"
     39#include "MediaSourceStates.h"
    3540#include "MediaStream.h"
    3641#include "MediaStreamCenter.h"
     
    3843#include "MediaStreamTrackSourcesCallback.h"
    3944#include "MediaStreamTrackSourcesRequest.h"
     45#include "MediaTrackConstraints.h"
     46#include "NotImplemented.h"
    4047#include "UUID.h"
     48#include "VideoStreamTrack.h"
     49#include <wtf/Functional.h>
    4150#include <wtf/NeverDestroyed.h>
    4251
     
    4554MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary*)
    4655    : ActiveDOMObject(context)
    47     , m_source(source)
     56    , m_source(0)
    4857    , m_readyState(MediaStreamSource::New)
    4958    , m_stopped(false)
    5059    , m_enabled(true)
    5160    , m_muted(false)
     61    , m_eventDispatchScheduled(false)
    5262{
    5363    suspendIfNeeded();
    54     if (m_source) {
    55         m_source->addObserver(this);
    56         m_muted = m_source->muted();
    57     }
     64    if (source)
     65        setSource(source);
     66}
     67
     68MediaStreamTrack::MediaStreamTrack(MediaStreamTrack* other)
     69    : ActiveDOMObject(other->scriptExecutionContext())
     70{
     71    suspendIfNeeded();
     72
     73    // When the clone() method is invoked, the user agent must run the following steps:
     74    // 1. Let trackClone be a newly constructed MediaStreamTrack object.
     75    // 2. Initialize trackClone's id attribute to a newly generated value.
     76    m_id = createCanonicalUUIDString();
     77
     78    // 3. Let trackClone inherit this track's underlying source, kind, label and enabled attributes.
     79    setSource(other->source());
     80    m_readyState = m_source ? m_source->readyState() : MediaStreamSource::New;
     81    m_enabled = other->enabled();
     82
     83    // Note: the "clone" steps don't say anything about 'muted', but 4.3.1 says:
     84    // For a newly created MediaStreamTrack object, the following applies. The track is always enabled
     85    // unless stated otherwise (for examlpe when cloned) and the muted state reflects the state of the
     86    // source at the time the track is created.
     87    m_muted = other->muted();
     88
     89    m_eventDispatchScheduled =false;
     90    m_stopped = other->stopped();
    5891}
    5992
     
    85118void MediaStreamTrack::setSource(MediaStreamSource* source)
    86119{
    87     ASSERT(source == m_source || !m_source);
     120    ASSERT(!source || !m_source);
     121
     122    if (m_source)
     123        m_source->removeObserver(this);
     124
     125    if (source) {
     126        source->addObserver(this);
     127        m_muted = source->muted();
     128    }
     129
    88130    m_source = source;
    89131}
     
    93135    if (!m_id.isEmpty())
    94136        return m_id;
    95 
    96     if (!m_source)
    97         return emptyString();
    98 
    99     const String& id = m_source->id();
    100     if (!id.isEmpty())
    101         return id;
    102137
    103138    // The spec says:
     
    105140    //   specifies how the track id must be initialized, the user agent must generate a globally
    106141    //   unique identifier string and initialize the object's id attribute to that string.
    107     // so generate a UUID if the source doesn't have an ID.
     142    if (m_source && m_source->useIDForTrackID())
     143        return m_source->id();
     144
    108145    m_id = createCanonicalUUIDString();
    109146    return m_id;
     
    126163    if (m_stopped)
    127164        return;
    128    
     165
     166    // 4.3.3.1
     167    // ... after a MediaStreamTrack is disassociated from its track, its enabled attribute still
     168    // changes value when set; it just doesn't do anything with that new value.
    129169    m_enabled = enabled;
    130170
    131     if (!m_source || enabled == m_source->enabled())
     171    if (!m_source)
    132172        return;
    133173
    134174    m_source->setEnabled(enabled);
    135 
    136     if (m_source->stream()->ended())
    137         return;
    138 
    139     MediaStreamCenter::shared().didSetMediaStreamTrackEnabled(m_source.get());
     175}
     176
     177bool MediaStreamTrack::muted() const
     178{
     179    if (m_stopped || !m_source)
     180        return false;
     181
     182    return m_source->muted();
     183}
     184
     185bool MediaStreamTrack::readonly() const
     186{
     187    if (m_stopped || !m_source)
     188        return true;
     189
     190    return m_source->readonly();
     191}
     192
     193bool MediaStreamTrack::remote() const
     194{
     195    if (!m_source)
     196        return false;
     197
     198    return m_source->remote();
    140199}
    141200
     
    172231}
    173232
     233RefPtr<MediaTrackConstraints> MediaStreamTrack::constraints() const
     234{
     235    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=122428
     236    notImplemented();
     237    return 0;
     238}
     239
     240RefPtr<MediaSourceStates> MediaStreamTrack::states() const
     241{
     242    if (!m_source)
     243        return 0;
     244   
     245    return MediaSourceStates::create(m_source->states());
     246}
     247
     248RefPtr<MediaStreamCapabilities> MediaStreamTrack::capabilities() const
     249{
     250    if (!m_source)
     251        return 0;
     252
     253    return MediaStreamCapabilities::create(m_source->capabilities());
     254}
     255
     256void MediaStreamTrack::applyConstraints(const Dictionary& constraints)
     257{
     258    // FIXME: apply the new constraints to the track
     259    // https://bugs.webkit.org/show_bug.cgi?id=122428
     260    m_constraints->initialize(constraints);
     261}
     262
     263RefPtr<MediaStreamTrack> MediaStreamTrack::clone()
     264{
     265    if (m_source && m_source->type() == MediaStreamSource::Audio)
     266        return AudioStreamTrack::create(this);
     267
     268    return VideoStreamTrack::create(this);
     269}
     270
     271void MediaStreamTrack::stopProducingData()
     272{
     273    if (m_stopped || !m_source)
     274        return;
     275
     276    // Set m_stopped before stopping the source because that may result in a call to sourceChangedState
     277    // and we only want to dispatch the 'ended' event if necessary.
     278    m_stopped = true;
     279    m_source->stop();
     280
     281    if (m_readyState != MediaStreamSource::Ended)
     282        scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false));
     283}
     284
    174285bool MediaStreamTrack::ended() const
    175286{
     
    177288}
    178289
    179 void MediaStreamTrack::sourceChangedState()
     290void MediaStreamTrack::sourceStateChanged()
    180291{
    181292    if (m_stopped)
     
    186297
    187298    if (m_readyState >= MediaStreamSource::Live && oldReadyState == MediaStreamSource::New)
    188         dispatchEvent(Event::create(eventNames().startedEvent, false, false));
     299        scheduleEventDispatch(Event::create(eventNames().startedEvent, false, false));
    189300    if (m_readyState == MediaStreamSource::Ended && oldReadyState != MediaStreamSource::Ended)
    190         dispatchEvent(Event::create(eventNames().endedEvent, false, false));
    191 
    192     if (m_muted == m_source->muted())
    193         return;
    194 
    195     m_muted = m_source->muted();
     301        scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false));
     302}
     303   
     304void MediaStreamTrack::sourceMutedChanged()
     305{
     306    if (m_stopped)
     307        return;
     308
     309    bool muted = m_source->muted();
     310    if (m_muted == muted)
     311        return;
     312
     313    m_muted = muted;
    196314    if (m_muted)
    197         dispatchEvent(Event::create(eventNames().muteEvent, false, false));
     315        scheduleEventDispatch(Event::create(eventNames().muteEvent, false, false));
    198316    else
    199         dispatchEvent(Event::create(eventNames().unmuteEvent, false, false));
     317        scheduleEventDispatch(Event::create(eventNames().unmuteEvent, false, false));
     318
     319    configureTrackRendering();
     320}
     321
     322void MediaStreamTrack::sourceEnabledChanged()
     323{
     324    if (m_stopped)
     325        return;
     326   
     327    // media from the source only flows when a MediaStreamTrack object is both unmuted and enabled
     328    configureTrackRendering();
     329}
     330
     331void MediaStreamTrack::configureTrackRendering()
     332{
     333    if (m_stopped)
     334        return;
     335
     336    // 4.3.1
     337    // ... media from the source only flows when a MediaStreamTrack object is both unmuted and enabled
     338}
     339
     340bool MediaStreamTrack::stopped()
     341{
     342    return m_stopped;
    200343}
    201344
     
    212355void MediaStreamTrack::stop()
    213356{
    214     m_stopped = true;
     357    stopProducingData();
     358}
     359
     360void MediaStreamTrack::scheduleEventDispatch(PassRefPtr<Event> event)
     361{
     362    {
     363        MutexLocker locker(m_mutex);
     364        m_scheduledEvents.append(event);
     365        if (m_eventDispatchScheduled)
     366            return;
     367        m_eventDispatchScheduled = true;
     368    }
     369
     370    callOnMainThread(bind(&MediaStreamTrack::dispatchQueuedEvents, this));
     371}
     372
     373void MediaStreamTrack::dispatchQueuedEvents()
     374{
     375    Vector<RefPtr<Event>> events;
     376    {
     377        MutexLocker locker(m_mutex);
     378        m_eventDispatchScheduled = false;
     379        events.swap(m_scheduledEvents);
     380    }
     381    if (!scriptExecutionContext())
     382        return;
     383
     384    for (auto it = events.begin(); it != events.end(); ++it)
     385        dispatchEvent((*it).release());
     386
     387    events.clear();
    215388}
    216389
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h

    r157030 r157068  
    4242
    4343class Dictionary;
    44 class MediaConstraints;
     44class MediaConstraintsImpl;
     45class MediaSourceStates;
    4546class MediaStreamTrackSourcesCallback;
     47class MediaStreamCapabilities;
     48class MediaTrackConstraints;
    4649
    4750class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer {
     
    5558    bool enabled() const;
    5659    void setEnabled(bool);
    57    
     60
     61    bool muted() const;
     62    bool readonly() const;
     63    bool remote() const;
     64
    5865    const AtomicString& readyState() const;
    5966
    6067    static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&);
    6168
    62     MediaStreamSource* source() const { return m_source.get(); }
    63     void setSource(MediaStreamSource*);
     69    RefPtr<MediaTrackConstraints> constraints() const;
     70    RefPtr<MediaSourceStates> states() const;
     71    RefPtr<MediaStreamCapabilities> capabilities() const;
     72    void applyConstraints(const Dictionary&);
     73
     74    RefPtr<MediaStreamTrack> clone();
     75    void stopProducingData();
    6476
    6577    DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
    6678    DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute);
     79    DEFINE_ATTRIBUTE_EVENT_LISTENER(started);
    6780    DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
     81    DEFINE_ATTRIBUTE_EVENT_LISTENER(overconstrained);
     82
     83    MediaStreamSource* source() const { return m_source.get(); }
     84    void setSource(MediaStreamSource*);
    6885
    6986    bool ended() const;
     
    7390    virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE FINAL { return ActiveDOMObject::scriptExecutionContext(); }
    7491
    75     // ActiveDOMObject
    76     virtual void stop() OVERRIDE FINAL;
    77 
    7892    using RefCounted<MediaStreamTrack>::ref;
    7993    using RefCounted<MediaStreamTrack>::deref;
    8094
    8195protected:
     96    explicit MediaStreamTrack(MediaStreamTrack*);
    8297    MediaStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);
    8398
    8499private:
     100
     101    void configureTrackRendering();
    85102    void trackDidEnd();
     103    void scheduleEventDispatch(PassRefPtr<Event>);
     104    void dispatchQueuedEvents();
     105
     106    // ActiveDOMObject
     107    virtual void stop() OVERRIDE FINAL;
    86108
    87109    // EventTarget
     
    90112
    91113    // MediaStreamSourceObserver
    92     virtual void sourceChangedState() OVERRIDE FINAL;
     114    virtual void sourceStateChanged() OVERRIDE FINAL;
     115    virtual void sourceMutedChanged() OVERRIDE FINAL;
     116    virtual void sourceEnabledChanged() OVERRIDE FINAL;
     117    virtual bool stopped() OVERRIDE FINAL;
     118
     119    Vector<RefPtr<Event>> m_scheduledEvents;
    93120
    94121    RefPtr<MediaStreamSource> m_source;
    95     RefPtr<MediaConstraints> m_constraints;
     122    RefPtr<MediaConstraintsImpl> m_constraints;
    96123    MediaStreamSource::ReadyState m_readyState;
    97124    mutable String m_id;
     125    Mutex m_mutex;
    98126
    99127    bool m_stopped;
    100128    bool m_enabled;
    101129    bool m_muted;
     130    bool m_eventDispatchScheduled;
    102131};
    103132
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl

    r157001 r157068  
    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
     
    2324 */
    2425
     26enum MediaStreamTrackState { "new", "live", "ended" };
     27
    2528[
    2629    Conditional=MEDIA_STREAM,
     
    3437    readonly attribute DOMString label;
    3538             attribute boolean enabled;
    36 
    37     readonly attribute DOMString readyState;
    38 
     39    readonly attribute boolean muted;
    3940    attribute EventListener onmute;
    4041    attribute EventListener onunmute;
     42    readonly attribute boolean _readonly;
     43    readonly attribute boolean remote;
     44    readonly attribute MediaStreamTrackState readyState;
     45    attribute EventListener onstarted;
    4146    attribute EventListener onended;
    4247
    4348    [CallWith=ScriptExecutionContext, RaisesException] static void getSources(MediaStreamTrackSourcesCallback callback);
     49
     50    MediaTrackConstraints constraints();
     51
     52    MediaSourceStates states();
     53
     54    MediaStreamCapabilities capabilities(); // returns either AllVideoCapabilities or AllAudioCapabilities
     55
     56    void applyConstraints(Dictionary constraints);
     57
     58    attribute EventListener onoverconstrained;
     59    MediaStreamTrack clone();
     60    [ImplementedAs=stopProducingData] void stop();
    4461
    4562    // EventTarget interface
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r156473 r157068  
    174174        (*iter)->source()->setConstraints(m_videoConstraints);
    175175
    176     MediaStreamCenter::shared().didCreateMediaStream(streamDescriptor.get());
    177176    m_successCallback->handleEvent(stream.get());
    178177}
  • trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.cpp

    r156488 r157068  
    3636namespace WebCore {
    3737
    38 PassRefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints)
     38RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints)
    3939{
    4040    RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, 0, &videoConstraints));
     
    4242}
    4343
    44 PassRefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)
     44RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)
    4545{
    4646    RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, source, 0));
     
    4848}
    4949
     50RefPtr<VideoStreamTrack> VideoStreamTrack::create(MediaStreamTrack* track)
     51{
     52    return adoptRef(new VideoStreamTrack(track));
     53}
     54
    5055VideoStreamTrack::VideoStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* videoConstraints)
    5156    : MediaStreamTrack(context, source, videoConstraints)
     57{
     58}
     59
     60VideoStreamTrack::VideoStreamTrack(MediaStreamTrack* track)
     61    : MediaStreamTrack(track)
    5262{
    5363}
  • trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.h

    r157030 r157068  
    3030
    3131#include "MediaStreamTrack.h"
     32#include <wtf/RefCounted.h>
    3233#include <wtf/Vector.h>
    33 #include <wtf/RefCounted.h>
    3434
    3535namespace WebCore {
     
    4040class VideoStreamTrack FINAL : public MediaStreamTrack {
    4141public:
    42     static PassRefPtr<VideoStreamTrack> create(ScriptExecutionContext*, const Dictionary&);
    43     static PassRefPtr<VideoStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);
     42    static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, const Dictionary&);
     43    static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);
     44    static RefPtr<VideoStreamTrack> create(MediaStreamTrack*);
    4445
    4546    virtual ~VideoStreamTrack() { }
     
    4950private:
    5051    VideoStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);
     52    explicit VideoStreamTrack(MediaStreamTrack*);
    5153};
    5254
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp

    r156600 r157068  
    6464#include "MediaStream.h"
    6565#include "MediaStreamAudioDestinationNode.h"
     66#include "MediaStreamAudioSource.h"
    6667#include "MediaStreamAudioSourceNode.h"
    6768#endif
     
    421422    for (size_t i = 0; i < audioTracks.size(); ++i) {
    422423        RefPtr<MediaStreamTrack> localAudio = audioTracks[i];
    423         MediaStreamSource* source = localAudio->source();
    424         if (!source->deviceId().isEmpty()) {
    425             destination()->enableInput(source->deviceId());
    426             provider = destination()->localAudioInputProvider();
    427             break;
    428         }
     424        if (!localAudio->source()->isAudioStreamSource())
     425            continue;
     426
     427        MediaStreamAudioSource* source = static_cast<MediaStreamAudioSource*>(localAudio->source());
     428        ASSERT(!source->deviceId().isEmpty());
     429        destination()->enableInput(source->deviceId());
     430        provider = destination()->localAudioInputProvider();
     431        break;
    429432    }
    430433
     
    734737{
    735738    ASSERT(isAudioThread());
    736  
     739
    737740    // At the beginning of every render quantum, try to update the internal rendering graph state (from main thread changes).
    738741    // It's OK if the tryLock() fails, we'll just take slightly longer to pick up the changes.
     
    753756{
    754757    ASSERT(isAudioThread());
    755  
    756     // Must use a tryLock() here too.  Don't worry, the lock will very rarely be contended and this method is called frequently.
     758
     759    // Must use a tryLock() here too. Don't worry, the lock will very rarely be contended and this method is called frequently.
    757760    // The worst that can happen is that there will be some nodes which will take slightly longer than usual to be deleted or removed
    758761    // from the render graph (in which case they'll render silence).
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp

    r156473 r157068  
    3232#include "AudioNodeInput.h"
    3333#include "MediaStream.h"
    34 #include "MediaStreamCenter.h"
     34#include "MediaStreamAudioSource.h"
    3535#include "RTCPeerConnectionHandler.h"
    36 #include "UUID.h"
    3736#include <wtf/Locker.h>
    3837
     
    5049    setNodeType(NodeTypeMediaStreamAudioDestination);
    5150
    52     m_source = MediaStreamSource::create(ASCIILiteral("WebAudio-") + createCanonicalUUIDString(), MediaStreamSource::Audio, "MediaStreamAudioDestinationNode", MediaStreamSource::Live, true);
     51    m_source = MediaStreamAudioSource::create();
    5352    MediaStreamSourceVector audioSources;
    5453    audioSources.append(m_source);
    55     MediaStreamSourceVector videoSources;
    56     m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, videoSources));
    57     MediaStreamCenter::shared().didCreateMediaStream(m_stream->descriptor());
     54    m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, MediaStreamSourceVector()));
    5855
    5956    m_source->setAudioFormat(numberOfChannels, context->sampleRate());
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.h

    r149817 r157068  
    3737
    3838class AudioContext;
     39class MediaStreamAudioSource;
    3940
    4041class MediaStreamAudioDestinationNode : public AudioBasicInspectorNode {
     
    6263
    6364    RefPtr<MediaStream> m_stream;
    64     RefPtr<MediaStreamSource> m_source;
     65    RefPtr<MediaStreamAudioSource> m_source;
    6566    RefPtr<AudioBus> m_mixBus;
    6667};
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r157054 r157068  
    8585                070334D9145A006F008D8D45 /* TrackBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070334D8145A006F008D8D45 /* TrackBase.cpp */; };
    8686                070334E9145A1F36008D8D45 /* JSTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070334E8145A1F35008D8D45 /* JSTrackCustom.cpp */; };
     87                070584FD17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
     88                070584FF17F9F05E005F2BCB /* CapabilityRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */; };
     89                0705850217FA10D0005F2BCB /* JSAllVideoCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */; };
     90                0705850317FA10D0005F2BCB /* JSAllVideoCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */; };
     91                0705850817FA4689005F2BCB /* AllAudioCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850517FA4689005F2BCB /* AllAudioCapabilities.h */; };
     92                0705850B17FA4827005F2BCB /* MediaStreamCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */; };
     93                0705851217FA7107005F2BCB /* JSMediaStreamCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */; };
     94                0705851317FA7107005F2BCB /* JSMediaStreamCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */; };
     95                0705851517FB0EEA005F2BCB /* MediaStreamCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */; };
     96                0705851717FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */; };
     97                0705851A17FB44B4005F2BCB /* JSAllAudioCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */; };
     98                0705851B17FB44B4005F2BCB /* JSAllAudioCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */; };
     99                0705852117FDC140005F2BCB /* MediaTrackConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */; };
     100                0705852317FDC140005F2BCB /* MediaTrackConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */; };
     101                0705852417FDC140005F2BCB /* MediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852017FDC140005F2BCB /* MediaTrackConstraints.h */; };
     102                0705852917FDE02C005F2BCB /* MediaTrackConstraintSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */; };
     103                0705853117FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */; };
     104                0705853217FDE6D9005F2BCB /* JSMediaTrackConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */; };
     105                0705853317FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */; };
     106                0705853417FDE6D9005F2BCB /* JSMediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */; };
     107                0705853517FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */; };
     108                0705853617FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */; };
     109                0705853817FE044F005F2BCB /* MediaTrackConstraintSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */; };
     110                0705853A17FE0770005F2BCB /* MediaTrackConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */; };
    87111                0707568B142262D600414161 /* HTMLTrackElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07075688142262D600414161 /* HTMLTrackElement.cpp */; };
    88112                0707568C142262D600414161 /* HTMLTrackElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 07075689142262D600414161 /* HTMLTrackElement.h */; };
     
    120144                07367DDF172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07367DDD172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h */; };
    121145                07367DE0172CA68200D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07367DDE172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm */; };
     146                073AB4B317F8BACA006E0D6F /* AllVideoCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */; };
     147                073AB4B717F92ECF006E0D6F /* JSCapabilityRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */; };
     148                073AB4B817F92ECF006E0D6F /* JSCapabilityRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */; };
    122149                073BE34017D17E01002BD431 /* JSNavigatorMediaStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073BE33E17D17E01002BD431 /* JSNavigatorMediaStream.cpp */; };
    123150                073BE34117D17E01002BD431 /* JSNavigatorMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 073BE33F17D17E01002BD431 /* JSNavigatorMediaStream.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    146173                076970871463AD8700F502CF /* TextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 076970851463AD8700F502CF /* TextTrackList.h */; };
    147174                076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */; };
     175                0783228418013ED800999E0C /* MediaStreamAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */; };
     176                0783228518013ED800999E0C /* MediaStreamAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783228318013ED800999E0C /* MediaStreamAudioSource.h */; };
    148177                07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */; };
    149178                07846343145B151A00A58DF1 /* JSTrackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846341145B151A00A58DF1 /* JSTrackEvent.h */; };
     
    277306                07C59B6317F4D1BF000FBCBB /* MockMediaStreamCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */; };
    278307                07C59B6417F4D1C4000FBCBB /* MockMediaStreamCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */; };
     308                07C59B6817F784BA000FBCBB /* MediaSourceStates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */; };
     309                07C59B6917F784BA000FBCBB /* MediaSourceStates.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B6617F784BA000FBCBB /* MediaSourceStates.h */; };
     310                07C59B6E17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */; };
     311                07C59B7117F79C7C000FBCBB /* JSMediaSourceStates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */; };
     312                07C59B7217F79C7C000FBCBB /* JSMediaSourceStates.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */; };
     313                07C59B7617F7D0DB000FBCBB /* CapabilityRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B7417F7D09D000FBCBB /* CapabilityRange.h */; };
    279314                07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    280315                07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; };
     
    64156450                070334D8145A006F008D8D45 /* TrackBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackBase.cpp; sourceTree = "<group>"; };
    64166451                070334E8145A1F35008D8D45 /* JSTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackCustom.cpp; sourceTree = "<group>"; };
     6452                070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamSourceCapabilities.h; sourceTree = "<group>"; };
     6453                070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CapabilityRange.cpp; sourceTree = "<group>"; };
     6454                0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAllVideoCapabilities.cpp; sourceTree = "<group>"; };
     6455                0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAllVideoCapabilities.h; sourceTree = "<group>"; };
     6456                0705850517FA4689005F2BCB /* AllAudioCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllAudioCapabilities.h; sourceTree = "<group>"; };
     6457                0705850617FA4689005F2BCB /* AllAudioCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AllAudioCapabilities.idl; sourceTree = "<group>"; };
     6458                0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamCapabilities.h; sourceTree = "<group>"; };
     6459                0705850E17FA6FB1005F2BCB /* MediaStreamCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStreamCapabilities.idl; sourceTree = "<group>"; };
     6460                0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStreamCapabilities.cpp; sourceTree = "<group>"; };
     6461                0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaStreamCapabilities.h; sourceTree = "<group>"; };
     6462                0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamCapabilities.cpp; sourceTree = "<group>"; };
     6463                0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStreamCapabilitiesCustom.cpp; sourceTree = "<group>"; };
     6464                0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAllAudioCapabilities.cpp; sourceTree = "<group>"; };
     6465                0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAllAudioCapabilities.h; sourceTree = "<group>"; };
     6466                0705851C17FDB23C005F2BCB /* MediaTrackConstraints.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaTrackConstraints.idl; sourceTree = "<group>"; };
     6467                0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraint.h; sourceTree = "<group>"; };
     6468                0705851E17FDC140005F2BCB /* MediaTrackConstraint.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaTrackConstraint.idl; sourceTree = "<group>"; };
     6469                0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraints.cpp; sourceTree = "<group>"; };
     6470                0705852017FDC140005F2BCB /* MediaTrackConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraints.h; sourceTree = "<group>"; };
     6471                0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraintSet.h; sourceTree = "<group>"; };
     6472                0705852717FDE02B005F2BCB /* MediaTrackConstraintSet.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaTrackConstraintSet.idl; sourceTree = "<group>"; };
     6473                0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraint.cpp; sourceTree = "<group>"; };
     6474                0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraint.h; sourceTree = "<group>"; };
     6475                0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraints.cpp; sourceTree = "<group>"; };
     6476                0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraints.h; sourceTree = "<group>"; };
     6477                0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraintSet.cpp; sourceTree = "<group>"; };
     6478                0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraintSet.h; sourceTree = "<group>"; };
     6479                0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraintSet.cpp; sourceTree = "<group>"; };
     6480                0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraint.cpp; sourceTree = "<group>"; };
    64176481                07075688142262D600414161 /* HTMLTrackElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLTrackElement.cpp; sourceTree = "<group>"; };
    64186482                07075689142262D600414161 /* HTMLTrackElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTrackElement.h; sourceTree = "<group>"; };
     
    65506614                07367DDD172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InbandTextTrackPrivateLegacyAVFObjC.h; path = objc/InbandTextTrackPrivateLegacyAVFObjC.h; sourceTree = "<group>"; };
    65516615                07367DDE172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InbandTextTrackPrivateLegacyAVFObjC.mm; path = objc/InbandTextTrackPrivateLegacyAVFObjC.mm; sourceTree = "<group>"; };
     6616                073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllVideoCapabilities.h; sourceTree = "<group>"; };
     6617                073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCapabilityRange.cpp; sourceTree = "<group>"; };
     6618                073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCapabilityRange.h; sourceTree = "<group>"; };
    65526619                073BE33E17D17E01002BD431 /* JSNavigatorMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorMediaStream.cpp; sourceTree = "<group>"; };
    65536620                073BE33F17D17E01002BD431 /* JSNavigatorMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNavigatorMediaStream.h; sourceTree = "<group>"; };
     
    65766643                076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = "<group>"; };
    65776644                076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = "<group>"; };
     6645                0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamAudioSource.cpp; sourceTree = "<group>"; };
     6646                0783228318013ED800999E0C /* MediaStreamAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamAudioSource.h; sourceTree = "<group>"; };
    65786647                07846340145B151A00A58DF1 /* JSTrackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEvent.cpp; sourceTree = "<group>"; };
    65796648                07846341145B151A00A58DF1 /* JSTrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTrackEvent.h; sourceTree = "<group>"; };
     
    66406709                07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MockMediaStreamCenter.cpp; path = mock/MockMediaStreamCenter.cpp; sourceTree = "<group>"; };
    66416710                07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MockMediaStreamCenter.h; path = mock/MockMediaStreamCenter.h; sourceTree = "<group>"; };
     6711                07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSourceStates.cpp; sourceTree = "<group>"; };
     6712                07C59B6617F784BA000FBCBB /* MediaSourceStates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSourceStates.h; sourceTree = "<group>"; };
     6713                07C59B6717F784BA000FBCBB /* MediaSourceStates.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaSourceStates.idl; sourceTree = "<group>"; };
     6714                07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaSourceStatesCustom.cpp; sourceTree = "<group>"; };
     6715                07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaSourceStates.cpp; sourceTree = "<group>"; };
     6716                07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaSourceStates.h; sourceTree = "<group>"; };
     6717                07C59B7317F7D09D000FBCBB /* AllVideoCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AllVideoCapabilities.idl; sourceTree = "<group>"; };
     6718                07C59B7417F7D09D000FBCBB /* CapabilityRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CapabilityRange.h; sourceTree = "<group>"; };
     6719                07C59B7517F7D09D000FBCBB /* CapabilityRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CapabilityRange.idl; sourceTree = "<group>"; };
    66426720                07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; };
    66436721                07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; };
     
    1321013288                        isa = PBXGroup;
    1321113289                        children = (
     13290                                0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */,
     13291                                0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */,
     13292                                0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */,
     13293                                0705852717FDE02B005F2BCB /* MediaTrackConstraintSet.idl */,
     13294                                0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */,
     13295                                0705851E17FDC140005F2BCB /* MediaTrackConstraint.idl */,
     13296                                0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */,
     13297                                0705852017FDC140005F2BCB /* MediaTrackConstraints.h */,
     13298                                0705851C17FDB23C005F2BCB /* MediaTrackConstraints.idl */,
     13299                                0705850517FA4689005F2BCB /* AllAudioCapabilities.h */,
     13300                                0705850617FA4689005F2BCB /* AllAudioCapabilities.idl */,
     13301                                070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */,
     13302                                073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */,
     13303                                07C59B7317F7D09D000FBCBB /* AllVideoCapabilities.idl */,
     13304                                07C59B7417F7D09D000FBCBB /* CapabilityRange.h */,
     13305                                07C59B7517F7D09D000FBCBB /* CapabilityRange.idl */,
     13306                                07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */,
     13307                                07C59B6617F784BA000FBCBB /* MediaSourceStates.h */,
     13308                                07C59B6717F784BA000FBCBB /* MediaSourceStates.idl */,
    1321213309                                07C59B4D17F4AC15000FBCBB /* AudioStreamTrack.cpp */,
    1321313310                                07C59B4E17F4AC15000FBCBB /* AudioStreamTrack.h */,
     
    1321613313                                07C59B5117F4AC15000FBCBB /* VideoStreamTrack.h */,
    1321713314                                07C59B5217F4AC15000FBCBB /* VideoStreamTrack.idl */,
     13315                                0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */,
     13316                                0705850E17FA6FB1005F2BCB /* MediaStreamCapabilities.idl */,
     13317                                0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */,
    1321813318                                07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */,
    1321913319                                07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */,
     
    1331413414                                07221B9E17CF0AD400848E51 /* MediaStreamSource.cpp */,
    1331513415                                07221B9F17CF0AD400848E51 /* MediaStreamSource.h */,
     13416                                070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */,
    1331613417                                076306E217E22A43005A7C4E /* MediaStreamTrackSourcesRequestClient.h */,
    1331713418                                07221BA117CF0AD400848E51 /* RTCConfiguration.h */,
     
    1336113462                        isa = PBXGroup;
    1336213463                        children = (
     13464                                0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */,
     13465                                0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */,
     13466                                0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */,
     13467                                0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */,
     13468                                0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */,
     13469                                0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */,
     13470                                0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */,
     13471                                0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */,
     13472                                07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */,
     13473                                07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */,
    1336313474                                07C59B5917F4B208000FBCBB /* JSAudioStreamTrack.cpp */,
    1336413475                                07C59B5A17F4B208000FBCBB /* JSAudioStreamTrack.h */,
     
    1918019291                        isa = PBXGroup;
    1918119292                        children = (
     19293                                0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */,
     19294                                07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */,
    1918219295                                BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */,
    1918319296                                FDEAAAEF12B02EE400DCF33B /* JSAudioBufferSourceNodeCustom.cpp */,
     
    1977619889                        isa = PBXGroup;
    1977719890                        children = (
     19891                                0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */,
     19892                                0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */,
     19893                                0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */,
     19894                                0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */,
     19895                                073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */,
     19896                                073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */,
    1977819897                                CD9DE17217AAC74C00EA386D /* JSMediaSource.cpp */,
    1977919898                                CD9DE17317AAC74C00EA386D /* JSMediaSource.h */,
     
    2102321142                        isa = PBXGroup;
    2102421143                        children = (
     21144                                0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */,
     21145                                0783228318013ED800999E0C /* MediaStreamAudioSource.h */,
    2102521146                                FD315FF312B0267600C1A359 /* AnalyserNode.cpp */,
    2102621147                                FD315FF412B0267600C1A359 /* AnalyserNode.h */,
     
    2142021541                                FDE2D55B159E66EB00DCCCF8 /* AudioIOCallback.h in Headers */,
    2142121542                                FD31601012B0267600C1A359 /* AudioListener.h in Headers */,
     21543                                0705852417FDC140005F2BCB /* MediaTrackConstraints.h in Headers */,
    2142221544                                FD31601312B0267600C1A359 /* AudioNode.h in Headers */,
    2142321545                                FD31601612B0267600C1A359 /* AudioNodeInput.h in Headers */,
     
    2158221704                                2DF2E9D5166E39750035BEF2 /* ConsoleAPITypes.h in Headers */,
    2158321705                                41F0618E0F5F069800A07EAC /* ConsoleMessage.h in Headers */,
     21706                                073AB4B317F8BACA006E0D6F /* AllVideoCapabilities.h in Headers */,
    2158421707                                BCE5644E137A34D6007D2934 /* ConsoleTypes.h in Headers */,
    2158521708                                A818721C0977D3C0005826D9 /* ContainerNode.h in Headers */,
     
    2173821861                                F55B3DB61251F12D003EF269 /* DateInputType.h in Headers */,
    2173921862                                453EB637159C570400001BB7 /* DateTimeFormat.h in Headers */,
     21863                                0705850317FA10D0005F2BCB /* JSAllVideoCapabilities.h in Headers */,
    2174021864                                F55B3DB81251F12D003EF269 /* DateTimeInputType.h in Headers */,
    2174121865                                F55B3DBA1251F12D003EF269 /* DateTimeLocalInputType.h in Headers */,
     
    2175121875                                FD31603112B0267600C1A359 /* DelayProcessor.h in Headers */,
    2175221876                                1C4C8F660AD8655D009475CE /* DeleteButton.h in Headers */,
     21877                                0705853217FDE6D9005F2BCB /* JSMediaTrackConstraint.h in Headers */,
    2175321878                                1C4C8F020AD85D87009475CE /* DeleteButtonController.h in Headers */,
    2175421879                                93309DDF099E64920056E581 /* DeleteFromTextNodeCommand.h in Headers */,
     
    2179221917                                14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */,
    2179321918                                BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */,
     21919                                0705852917FDE02C005F2BCB /* MediaTrackConstraintSet.h in Headers */,
    2179421920                                4A4F48AA16B0DFC000EDBB29 /* DocumentRuleSets.h in Headers */,
    2179521921                                AD6E71AD1668899D00320C13 /* DocumentSharedObjectPool.h in Headers */,
     
    2194622072                                85E711AD0AC5D5350053270F /* DOMHTMLHeadElementInternal.h in Headers */,
    2194722073                                85183B440AA6926100F19FA3 /* DOMHTMLHeadingElement.h in Headers */,
     22074                                0705853617FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h in Headers */,
    2194822075                                85E711AE0AC5D5350053270F /* DOMHTMLHeadingElementInternal.h in Headers */,
    2194922076                                85ECBEF10AA7626900544F0B /* DOMHTMLHRElement.h in Headers */,
     
    2205822185                                85E711D40AC5D5350053270F /* DOMNotationInternal.h in Headers */,
    2205922186                                856C8AE40A912649005C687B /* DOMObject.h in Headers */,
     22187                                0705851317FA7107005F2BCB /* JSMediaStreamCapabilities.h in Headers */,
    2206022188                                BC53DA601143141A000D817E /* DOMObjectHashTableMap.h in Headers */,
    2206122189                                85C7F5D00AAFB8D9004014DD /* DOMOverflowEvent.h in Headers */,
     
    2250422632                                977B387A122883E900B81FF8 /* HTMLViewSourceParser.h in Headers */,
    2250522633                                514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */,
     22634                                073AB4B817F92ECF006E0D6F /* JSCapabilityRange.h in Headers */,
    2250622635                                514C76730CE923A1007EF3CD /* HTTPParsers.h in Headers */,
    2250722636                                375CD232119D43C800A2A859 /* Hyphenation.h in Headers */,
     
    2260922738                                F3D4C47912E07663003DA150 /* InspectorDOMDebuggerAgent.h in Headers */,
    2261022739                                7A74ECBB101839A600BF939E /* InspectorDOMStorageAgent.h in Headers */,
     22740                                0705853417FDE6D9005F2BCB /* JSMediaTrackConstraints.h in Headers */,
    2261122741                                578DA20E1520EB8C006141C1 /* InspectorFrontend.h in Headers */,
    2261222742                                227777601345DEA9008EA455 /* InspectorFrontendChannel.h in Headers */,
     
    2307323203                                B2FA3DDD0AB75A6F000E5AC4 /* JSSVGPathSegMovetoAbs.h in Headers */,
    2307423204                                B2FA3DDF0AB75A6F000E5AC4 /* JSSVGPathSegMovetoRel.h in Headers */,
     23205                                0705852117FDC140005F2BCB /* MediaTrackConstraint.h in Headers */,
    2307523206                                B2FA3DE10AB75A6F000E5AC4 /* JSSVGPatternElement.h in Headers */,
    2307623207                                8542A7950AE5C94100DF58DF /* JSSVGPoint.h in Headers */,
     
    2355923690                                439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */,
    2356023691                                439046E612DA25E800AF80A2 /* RenderMathMLSquareRoot.h in Headers */,
     23692                                0783228518013ED800999E0C /* MediaStreamAudioSource.h in Headers */,
    2356123693                                439046E812DA25E800AF80A2 /* RenderMathMLScripts.h in Headers */,
    2356223694                                439046EA12DA25E800AF80A2 /* RenderMathMLUnderOver.h in Headers */,
     
    2357923711                                BCA846D70DC67A350026C309 /* RenderReplica.h in Headers */,
    2358023712                                1479FAEE109AE37500DED655 /* RenderRuby.h in Headers */,
     23713                                0705850817FA4689005F2BCB /* AllAudioCapabilities.h in Headers */,
    2358123714                                1479FAF0109AE37500DED655 /* RenderRubyBase.h in Headers */,
    2358223715                                1479FAF2109AE37500DED655 /* RenderRubyRun.h in Headers */,
     
    2366123794                                E4295FA412B0614E00D1ACE0 /* ResourceLoadPriority.h in Headers */,
    2366223795                                D0CE58F9125E4CC200F3F199 /* ResourceLoadScheduler.h in Headers */,
     23796                                07C59B7617F7D0DB000FBCBB /* CapabilityRange.h in Headers */,
    2366323797                                8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */,
    2366423798                                7EE6846D12D26E3800E79415 /* ResourceRequest.h in Headers */,
     
    2397024104                                B22279B10D00BF220071B782 /* SVGDescElement.h in Headers */,
    2397124105                                B5B7A17117C10AC000E4AA0A /* ElementData.h in Headers */,
     24106                                0705850B17FA4827005F2BCB /* MediaStreamCapabilities.h in Headers */,
    2397224107                                B22279B40D00BF220071B782 /* SVGDocument.h in Headers */,
    2397324108                                B28C6A280D00C44800334AA4 /* SVGDocumentExtensions.h in Headers */,
     
    2404424179                                B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */,
    2404524180                                B2227A390D00BF220071B782 /* SVGLinearGradientElement.h in Headers */,
     24181                                07C59B6917F784BA000FBCBB /* MediaSourceStates.h in Headers */,
    2404624182                                B2227A3C0D00BF220071B782 /* SVGLineElement.h in Headers */,
    2404724183                                0810764412828556007C63BA /* SVGListProperty.h in Headers */,
     
    2423324369                                49E912AE0EFAC906009D0CAF /* TimingFunction.h in Headers */,
    2423424370                                070334D71459FFD5008D8D45 /* TrackBase.h in Headers */,
     24371                                070584FD17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h in Headers */,
    2423524372                                BE88E0C21715CE2600658D98 /* TrackListBase.h in Headers */,
    2423624373                                CD3A495F17A9D01B00274E42 /* MediaSource.h in Headers */,
     
    2428624423                                E4C91A0E1802343100A17F6D /* TextPaintStyle.h in Headers */,
    2428724424                                BEF29EEC1715DD0900C4B4C9 /* VideoTrackPrivate.h in Headers */,
     24425                                0705851B17FB44B4005F2BCB /* JSAllAudioCapabilities.h in Headers */,
    2428824426                                CEF418CF1179678C009D112C /* ViewportArguments.h in Headers */,
    2428924427                                3FFFF9AE159D9B060020BBD5 /* ViewportStyleResolver.h in Headers */,
     
    2447524613                                83C1D429178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h in Headers */,
    2447624614                                83C1D42A178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h in Headers */,
     24615                                07C59B7217F79C7C000FBCBB /* JSMediaSourceStates.h in Headers */,
    2447724616                                83C1D42B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h in Headers */,
    2447824617                                83C1D42C178D5AB500141E68 /* SVGPathSegCurvetoQuadraticRel.h in Headers */,
     
    2496025099                                FDC54F041399B0DA008D9117 /* BiquadFilterNode.cpp in Sources */,
    2496125100                                FD31602612B0267600C1A359 /* BiquadProcessor.cpp in Sources */,
     25101                                070584FF17F9F05E005F2BCB /* CapabilityRange.cpp in Sources */,
    2496225102                                A89943290B42338800D7C802 /* BitmapImage.cpp in Sources */,
    2496325103                                377A3A9015EFCE9B0059F5C7 /* BitmapImageCG.cpp in Sources */,
     
    2526325403                                8518DCEA0A9CC80D0091B7A6 /* DOMDOMImplementation.mm in Sources */,
    2526425404                                52CCA9E915E3F64C0053C77F /* DOMDOMNamedFlowCollection.mm in Sources */,
     25405                                0783228418013ED800999E0C /* MediaStreamAudioSource.cpp in Sources */,
    2526525406                                2D9A247315B9C2D100D34527 /* DOMDOMSecurityPolicy.mm in Sources */,
    2526625407                                7694565C1214DB630007CBAE /* DOMDOMTokenList.mm in Sources */,
     
    2528325424                                078E090417D14CEE00420AA1 /* NavigatorMediaStream.cpp in Sources */,
    2528425425                                85ECBEEE0AA7626900544F0B /* DOMHTMLBaseFontElement.mm in Sources */,
     25426                                07C59B6817F784BA000FBCBB /* MediaSourceStates.cpp in Sources */,
    2528525427                                859A9C4A0AA5E3BD00B694B2 /* DOMHTMLBodyElement.mm in Sources */,
    2528625428                                85183B430AA6926100F19FA3 /* DOMHTMLBRElement.mm in Sources */,
     
    2529025432                                078E090017D14CEE00420AA1 /* MediaStreamEvent.cpp in Sources */,
    2529125433                                F5C041E40FFCA96D00839D4A /* DOMHTMLDataListElement.mm in Sources */,
     25434                                0705852317FDC140005F2BCB /* MediaTrackConstraints.cpp in Sources */,
    2529225435                                D359D792129CA3C00006E5D2 /* DOMHTMLDetailsElement.mm in Sources */,
    2529325436                                85BA4D0C0AA688680088052D /* DOMHTMLDirectoryElement.mm in Sources */,
     
    2574125884                                51E1ECC00C91C90400DC255B /* IconRecord.cpp in Sources */,
    2574225885                                45099C411370A7800058D513 /* IconURL.cpp in Sources */,
     25886                                0705851517FB0EEA005F2BCB /* MediaStreamCapabilities.cpp in Sources */,
    2574325887                                C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */,
    2574425888                                9712A5C515004EDA0048AF10 /* IDBDatabaseCallbacksImpl.cpp in Sources */,
     
    2574825892                                9712A5FE15004EDA0048AF10 /* IDBVersionChangeEvent.cpp in Sources */,
    2574925893                                1A71D57B0F33819000F9CE4E /* IdentifierRep.cpp in Sources */,
     25894                                0705853117FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp in Sources */,
    2575025895                                5913A24113D49EBA00F5B05C /* IdentifiersFactory.cpp in Sources */,
    2575125896                                C3CF17A415B0063F00276D39 /* IdTargetObserver.cpp in Sources */,
     
    2591726062                                E10B93C30B73C291003ED890 /* JSCustomXPathNSResolver.cpp in Sources */,
    2591826063                                1AE82F8F0CAAFA9D002237AE /* JSDatabase.cpp in Sources */,
     26064                                07C59B6E17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp in Sources */,
    2591926065                                B59DD69A119029E5007E9684 /* JSDatabaseCallback.cpp in Sources */,
    2592026066                                B58CEB6A11913607002A6790 /* JSDatabaseSync.cpp in Sources */,
     
    2604526191                                1AE2AA300A1CDAB400B42B25 /* JSHTMLHRElement.cpp in Sources */,
    2604626192                                1A85B18F0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp in Sources */,
     26193                                0705853817FE044F005F2BCB /* MediaTrackConstraintSet.cpp in Sources */,
    2604726194                                BC4918C80BFEA050009D6316 /* JSHTMLIFrameElement.cpp in Sources */,
    2604826195                                1AE2AA970A1CDD2D00B42B25 /* JSHTMLImageElement.cpp in Sources */,
     
    2616126308                                9001788012E0370700648462 /* JSOESStandardDerivatives.cpp in Sources */,
    2616226309                                6EBF0E7612A9868800DB1709 /* JSOESTextureFloat.cpp in Sources */,
     26310                                0705853A17FE0770005F2BCB /* MediaTrackConstraint.cpp in Sources */,
    2616326311                                A31C4E5216E02B08002F7957 /* JSOESTextureHalfFloat.cpp in Sources */,
    2616426312                                77A17AA612F28B2A004E02F6 /* JSOESVertexArrayObject.cpp in Sources */,
     
    2650326651                                BC7FA6200D1F0CBD00DB22A9 /* LiveNodeList.cpp in Sources */,
    2650426652                                078E091017D14CEE00420AA1 /* RTCStatsResponse.cpp in Sources */,
     26653                                0705850217FA10D0005F2BCB /* JSAllVideoCapabilities.cpp in Sources */,
    2650526654                                9759E93E14EF1CF80026A2DD /* LoadableTextTrack.cpp in Sources */,
    2650626655                                656D37330ADBA5DE00A4554D /* LoaderNSURLExtras.mm in Sources */,
     
    2651526664                                BCE1C41C0D982981003B02F2 /* Location.cpp in Sources */,
    2651626665                                078E090817D14CEE00420AA1 /* RTCDTMFToneChangeEvent.cpp in Sources */,
     26666                                0705851A17FB44B4005F2BCB /* JSAllAudioCapabilities.cpp in Sources */,
    2651726667                                A8239E0009B3CF8A00B60641 /* Logging.cpp in Sources */,
    2651826668                                1402645E0AFDC19B005919E2 /* LoggingMac.mm in Sources */,
     
    2658126731                                C6F08FBC1430FE8F00685849 /* MutationRecord.cpp in Sources */,
    2658226732                                52B6C9C515E3F4DF00690B05 /* NamedFlowCollection.cpp in Sources */,
     26733                                0705853317FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp in Sources */,
    2658326734                                BCF34A3711A231CD00C71804 /* NamedNodeMap.cpp in Sources */,
    2658426735                                A81872240977D3C0005826D9 /* NameNodeList.cpp in Sources */,
     
    2684126992                                7EE6846B12D26E3800E79415 /* ResourceErrorCF.cpp in Sources */,
    2684226993                                514C76500CE9234E007EF3CD /* ResourceErrorMac.mm in Sources */,
     26994                                0705851217FA7107005F2BCB /* JSMediaStreamCapabilities.cpp in Sources */,
    2684326995                                514C76780CE923A1007EF3CD /* ResourceHandle.cpp in Sources */,
    2684426996                                7EE6846C12D26E3800E79415 /* ResourceHandleCFNet.cpp in Sources */,
     
    2714227294                                B22279C70D00BF220071B782 /* SVGFEBlendElement.cpp in Sources */,
    2714327295                                B22279CA0D00BF220071B782 /* SVGFEColorMatrixElement.cpp in Sources */,
     27296                                0705853517FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp in Sources */,
    2714427297                                B22279CD0D00BF220071B782 /* SVGFEComponentTransferElement.cpp in Sources */,
    2714527298                                B22279D00D00BF220071B782 /* SVGFECompositeElement.cpp in Sources */,
     
    2720427357                                B2227A400D00BF220071B782 /* SVGLocatable.cpp in Sources */,
    2720527358                                B2227A430D00BF220071B782 /* SVGMarkerElement.cpp in Sources */,
     27359                                0705851717FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp in Sources */,
    2720627360                                B2227A460D00BF220071B782 /* SVGMaskElement.cpp in Sources */,
    2720727361                                B2227A4A0D00BF220071B782 /* SVGMetadataElement.cpp in Sources */,
     
    2726727421                                8485228A1190173C006EDC7F /* SVGVKernElement.cpp in Sources */,
    2726827422                                B2227AF50D00BF220071B782 /* SVGZoomAndPan.cpp in Sources */,
     27423                                073AB4B717F92ECF006E0D6F /* JSCapabilityRange.cpp in Sources */,
    2726927424                                B2E4EC970D00C22B00432643 /* SVGZoomEvent.cpp in Sources */,
    2727027425                                E180811216FCF42F00B80D07 /* SynchronousLoaderClient.cpp in Sources */,
     
    2744727602                                97AABD1D14FA09D5007457AE /* WebSocketChannel.cpp in Sources */,
    2744827603                                4A38BF5014FE1C0900612512 /* WebSocketDeflateFramer.cpp in Sources */,
     27604                                07C59B7117F79C7C000FBCBB /* JSMediaSourceStates.cpp in Sources */,
    2744927605                                97AABD2014FA09D5007457AE /* WebSocketDeflater.cpp in Sources */,
    2745027606                                97AABD2214FA09D5007457AE /* WebSocketExtensionDispatcher.cpp in Sources */,
  • trunk/Source/WebCore/dom/EventNames.h

    r156473 r157068  
    239239    macro(signalingstatechange) \
    240240    macro(removetrack) \
     241    macro(overconstrained) \
    241242    macro(mute) \
    242243    macro(unmute) \
  • trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp

    r156473 r157068  
    6868}
    6969
    70 void MediaStreamCenter::endLocalMediaStream(MediaStreamDescriptor* streamDescriptor)
    71 {
    72     streamDescriptor->setEnded();
    73 }
    74 
    7570} // namespace WebCore
    7671
  • trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h

    r156473 r157068  
    3535#if ENABLE(MEDIA_STREAM)
    3636
     37#include "MediaStreamSource.h"
    3738#include <wtf/PassRefPtr.h>
    3839#include <wtf/text/WTFString.h>
     
    4445class MediaStreamCreationClient;
    4546class MediaStreamDescriptor;
    46 class MediaStreamSource;
     47class MediaStreamSourceCapabilities;
    4748class MediaStreamTrackSourcesRequestClient;
     49
     50struct MediaStreamSourceStates;
    4851
    4952class MediaStreamCenter {
     
    6063    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) = 0;
    6164
    62     virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) = 0;
    63 
    64     virtual bool didAddMediaStreamTrack(MediaStreamSource*) = 0;
    65     virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) = 0;
    66 
    67     virtual void didStopLocalMediaStream(MediaStreamDescriptor*) = 0;
    68     virtual void didCreateMediaStream(MediaStreamDescriptor*) = 0;
    69 
    7065protected:
    7166    MediaStreamCenter();
  • trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp

    r156473 r157068  
    3636#include "MediaStreamDescriptor.h"
    3737
     38#include "MediaStreamCenter.h"
    3839#include "MediaStreamSource.h"
    3940#include "UUID.h"
     
    4647{
    4748    return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioSources, videoSources));
     49}
     50
     51MediaStreamDescriptor::~MediaStreamDescriptor()
     52{
     53    for (size_t i = 0; i < m_audioStreamSources.size(); i++)
     54        m_audioStreamSources[i]->setStream(0);
     55   
     56    for (size_t i = 0; i < m_videoStreamSources.size(); i++)
     57        m_videoStreamSources[i]->setStream(0);
    4858}
    4959
     
    6878    case MediaStreamSource::Audio:
    6979        pos = m_audioStreamSources.find(source);
    70         if (pos != notFound)
    71             m_audioStreamSources.remove(pos);
     80        if (pos == notFound)
     81            return;
     82        m_audioStreamSources.remove(pos);
    7283        break;
    7384    case MediaStreamSource::Video:
    7485        pos = m_videoStreamSources.find(source);
    75         if (pos != notFound)
    76             m_videoStreamSources.remove(pos);
     86        if (pos == notFound)
     87            return;
     88        m_videoStreamSources.remove(pos);
    7789        break;
    7890    }
     91
     92    source->setStream(0);
    7993}
    8094
  • trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h

    r156473 r157068  
    5353class MediaStreamDescriptor : public RefCounted<MediaStreamDescriptor> {
    5454public:
     55    static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
    5556
    56     static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
     57    virtual ~MediaStreamDescriptor();
    5758
    5859    MediaStreamDescriptorClient* client() const { return m_client; }
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.cpp

    r156473 r157068  
    11/*
    22 * Copyright (C) 2012 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
     
    3536#include "MediaStreamSource.h"
    3637
    37 #include "AudioDestinationConsumer.h"
     38#include "MediaStreamCenter.h"
     39#include "MediaStreamSourceCapabilities.h"
     40#include "UUID.h"
     41
    3842#include <wtf/PassOwnPtr.h>
    3943
    4044namespace WebCore {
    4145
    42 PassRefPtr<MediaStreamSource> MediaStreamSource::create(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer)
    43 {
    44     return adoptRef(new MediaStreamSource(id, type, name, readyState, requiresConsumer));
    45 }
    46 
    47 MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer)
     46MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name)
    4847    : m_id(id)
    4948    , m_type(type)
    5049    , m_name(name)
    51     , m_readyState(readyState)
     50    , m_readyState(New)
    5251    , m_stream(0)
    53     , m_requiresConsumer(requiresConsumer)
    5452    , m_enabled(true)
    5553    , m_muted(false)
     54    , m_readonly(false)
     55    , m_remote(false)
    5656{
     57    if (!m_id.isEmpty())
     58        return;
     59   
     60    m_id = createCanonicalUUIDString();
     61}
     62
     63void MediaStreamSource::reset()
     64{
     65    m_readyState = New;
     66    m_stream = 0;
     67    m_enabled = true;
     68    m_muted = false;
     69    m_readonly = false;
     70    m_remote = false;
    5771}
    5872
     
    6478    m_readyState = readyState;
    6579    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
    66         (*i)->sourceChangedState();
     80        (*i)->sourceStateChanged();
    6781}
    6882
     
    8195void MediaStreamSource::setStream(MediaStreamDescriptor* stream)
    8296{
    83     ASSERT(!m_stream && stream);
     97    // FIXME: A source should not need to know about its stream(s). This will be fixed as a part of
     98    // https://bugs.webkit.org/show_bug.cgi?id=121954
    8499    m_stream = stream;
     100}
     101
     102MediaConstraints* MediaStreamSource::constraints() const
     103{
     104    // FIXME: While this returns
     105    // https://bugs.webkit.org/show_bug.cgi?id=122428
     106    return m_constraints.get();
     107}
     108   
     109void MediaStreamSource::setConstraints(PassRefPtr<MediaConstraints> constraints)
     110{
     111    m_constraints = constraints;
    85112}
    86113
     
    91118
    92119    m_muted = muted;
     120
     121    if (m_readyState == Ended)
     122        return;
     123
    93124    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
    94         (*i)->sourceChangedState();
     125        (*i)->sourceMutedChanged();
    95126}
    96127
    97 void MediaStreamSource::addAudioConsumer(PassRefPtr<AudioDestinationConsumer> consumer)
     128void MediaStreamSource::setEnabled(bool enabled)
    98129{
    99     ASSERT(m_requiresConsumer);
    100     MutexLocker locker(m_audioConsumersLock);
    101     m_audioConsumers.append(consumer);
     130    if (m_enabled == enabled)
     131        return;
     132   
     133    m_enabled = enabled;
     134
     135    if (m_readyState == Ended)
     136        return;
     137   
     138    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
     139        (*i)->sourceEnabledChanged();
    102140}
    103141
    104 bool MediaStreamSource::removeAudioConsumer(AudioDestinationConsumer* consumer)
     142bool MediaStreamSource::readonly() const
    105143{
    106     ASSERT(m_requiresConsumer);
    107     MutexLocker locker(m_audioConsumersLock);
    108     size_t pos = m_audioConsumers.find(consumer);
    109     if (pos != notFound) {
    110         m_audioConsumers.remove(pos);
    111         return true;
    112     }
    113     return false;
     144    // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-_readonly
     145    // If the track (audio or video) is backed by a read-only source such as a file, or the track source
     146    // is a local microphone or camera, but is shared so that this track cannot modify any of the source's
     147    // settings, the readonly attribute must return the value true. Otherwise, it must return the value false.
     148    return m_readonly;
    114149}
    115150
    116 void MediaStreamSource::setAudioFormat(size_t numberOfChannels, float sampleRate)
     151void MediaStreamSource::stop()
    117152{
    118     ASSERT(m_requiresConsumer);
    119     MutexLocker locker(m_audioConsumersLock);
    120     for (Vector<RefPtr<AudioDestinationConsumer> >::iterator it = m_audioConsumers.begin(); it != m_audioConsumers.end(); ++it)
    121         (*it)->setFormat(numberOfChannels, sampleRate);
    122 }
     153    for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) {
     154        if (!(*i)->stopped())
     155            return;
     156    }
    123157
    124 void MediaStreamSource::consumeAudio(AudioBus* bus, size_t numberOfFrames)
    125 {
    126     ASSERT(m_requiresConsumer);
    127     MutexLocker locker(m_audioConsumersLock);
    128     for (Vector<RefPtr<AudioDestinationConsumer> >::iterator it = m_audioConsumers.begin(); it != m_audioConsumers.end(); ++it)
    129         (*it)->consumeAudio(bus, numberOfFrames);
     158    // There are no more consumers of this source's data, shut it down as appropriate.
     159    setReadyState(Ended);
     160
     161    // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-stop-void
     162    // If the data is being generated from a live source (e.g., a microphone or camera), then the user
     163    // agent should remove any active "on-air" indicator for that source. If the data is being
     164    // generated from a prerecorded source (e.g. a video file), any remaining content in the file is ignored.
    130165}
    131166
  • trunk/Source/WebCore/platform/mediastream/MediaStreamSource.h

    r156473 r157068  
    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.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    3738#include "AudioDestinationConsumer.h"
    3839#include "MediaConstraints.h"
     40#include "MediaStreamSourceCapabilities.h"
    3941#include <wtf/RefCounted.h>
    4042#include <wtf/Vector.h>
     
    4446
    4547class AudioBus;
     48class MediaConstraints;
    4649class MediaStreamDescriptor;
     50struct MediaStreamSourceStates;
    4751
    4852class MediaStreamSource : public RefCounted<MediaStreamSource> {
     
    5155    public:
    5256        virtual ~Observer() { }
    53         virtual void sourceChangedState() = 0;
     57        virtual void sourceStateChanged() = 0;
     58        virtual void sourceMutedChanged() = 0;
     59        virtual void sourceEnabledChanged() = 0;
     60        virtual bool stopped() = 0;
    5461    };
    5562
     
    5764    enum ReadyState { New = 0, Live = 1, Ended = 2 };
    5865
    59     static PassRefPtr<MediaStreamSource> create(const String& id, Type, const String& name, ReadyState = New, bool requiresConsumer = false);
     66    virtual ~MediaStreamSource() { }
     67
     68    virtual bool isAudioStreamSource() const { return false; }
     69    virtual bool useIDForTrackID() const { return false; }
     70
     71    void reset();
    6072
    6173    const String& id() const { return m_id; }
    62 
    6374    Type type() const { return m_type; }
    6475    const String& name() const { return m_name; }
    6576
     77    virtual RefPtr<MediaStreamSourceCapabilities> capabilities() const = 0;
     78    virtual const MediaStreamSourceStates& states() = 0;
     79   
    6680    void setReadyState(ReadyState);
    6781    ReadyState readyState() const { return m_readyState; }
     
    7084    void removeObserver(Observer*);
    7185
    72     void setConstraints(PassRefPtr<MediaConstraints> constraints) { m_constraints = constraints; }
    73     MediaConstraints* constraints() const { return m_constraints.get(); }
    74 
    75     const String& deviceId() const { return m_deviceId; }
    76     void setDeviceId(const String& deviceId) { m_deviceId = deviceId; }
     86    void setConstraints(PassRefPtr<MediaConstraints>);
     87    MediaConstraints* constraints() const;
    7788
    7889    bool enabled() const { return m_enabled; }
    79     void setEnabled(bool enabled) { m_enabled = enabled; }
     90    void setEnabled(bool);
    8091
    8192    bool muted() const { return m_muted; }
    8293    void setMuted(bool);
    83    
    84     void setAudioFormat(size_t numberOfChannels, float sampleRate);
    85     void consumeAudio(AudioBus*, size_t numberOfFrames);
     94
     95    bool readonly() const;
     96    void setReadonly(bool readonly) { m_readonly = readonly; }
     97
     98    bool remote() const { return m_remote; }
     99    void setRemote(bool remote) { m_remote = remote; }
     100
     101    void stop();
    86102
    87103    MediaStreamDescriptor* stream() const { return m_stream; }
    88104    void setStream(MediaStreamDescriptor*);
    89 
    90     bool requiresAudioConsumer() const { return m_requiresConsumer; }
    91     void addAudioConsumer(PassRefPtr<AudioDestinationConsumer>);
    92     bool removeAudioConsumer(AudioDestinationConsumer*);
    93     const Vector<RefPtr<AudioDestinationConsumer> >& audioConsumers() const { return m_audioConsumers; }
     105   
     106protected:
     107    MediaStreamSource(const String& id, Type, const String& name);
    94108
    95109private:
    96     MediaStreamSource(const String& id, Type, const String& name, ReadyState, bool requiresConsumer);
    97 
    98110    String m_id;
    99111    Type m_type;
    100112    String m_name;
    101113    ReadyState m_readyState;
    102     String m_deviceId;
    103114    Vector<Observer*> m_observers;
    104     Mutex m_audioConsumersLock;
    105     Vector<RefPtr<AudioDestinationConsumer>> m_audioConsumers;
    106115    RefPtr<MediaConstraints> m_constraints;
    107116    MediaStreamDescriptor* m_stream;
     117    MediaStreamSourceStates m_states;
    108118
    109     bool m_requiresConsumer;
    110119    bool m_enabled;
    111120    bool m_muted;
     121    bool m_readonly;
     122    bool m_remote;
    112123};
    113124
  • trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp

    r156473 r157068  
    3636#include "MediaStreamCenterBlackBerry.h"
    3737
     38#include "MediaStreamCreationClient.h"
    3839#include "MediaStreamDescriptor.h"
    39 #include "MediaStreamSourcesQueryClient.h"
     40#include "MediaStreamTrackSourcesRequestClient.h"
     41#include "NotImplemented.h"
    4042#include <wtf/MainThread.h>
    4143
     
    7375}
    7476
    75 void MediaStreamCenterBlackBerry::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    76 {
    77     notImplemented();
    78 }
    79 
    80 bool MediaStreamCenterBlackBerry::didAddMediaStreamTrack(MediaStreamSource*)
    81 {
    82     notImplemented();
    83     return false;
    84 }
    85 
    86 bool MediaStreamCenterBlackBerry::didRemoveMediaStreamTrack(MediaStreamSource*)
    87 {
    88     notImplemented();
    89     return false;
    90 }
    91 
    92 void MediaStreamCenterBlackBerry::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    93 {
    94     endLocalMediaStream(stream);
    95 }
    96 
    97 void MediaStreamCenterBlackBerry::didCreateMediaStream(MediaStreamDescriptor*)
    98 {
    99     notImplemented();
    100 }
    101 
    10277} // namespace WebCore
    10378
  • trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h

    r156473 r157068  
    5151    ~MediaStreamCenterBlackBerry();
    5252
    53     // MediaStreamCenter
    5453    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5554    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5655    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    57     virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
    58     virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    59     virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    60     virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    61     virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6256};
    6357
  • trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp

    r156575 r157068  
    3636#include "MediaStreamCenterGStreamer.h"
    3737
     38#include "MediaStreamCreationClient.h"
    3839#include "MediaStreamDescriptor.h"
     40#include "MediaStreamSourceCapabilities.h"
     41#include "MediaStreamSourceStates.h"
     42#include "MediaStreamTrackSourcesRequestClient.h"
    3943#include "NotImplemented.h"
    4044#include <wtf/MainThread.h>
     
    7377}
    7478
    75 void MediaStreamCenterGStreamer::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    76 {
    77     notImplemented();
    78 }
    79 
    80 bool MediaStreamCenterGStreamer::didAddMediaStreamTrack(MediaStreamSource*)
    81 {
    82     notImplemented();
    83     return false;
    84 }
    85 
    86 bool MediaStreamCenterGStreamer::didRemoveMediaStreamTrack(MediaStreamSource*)
    87 {
    88     notImplemented();
    89     return false;
    90 }
    91 
    92 void MediaStreamCenterGStreamer::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    93 {
    94     endLocalMediaStream(stream);
    95 }
    96 
    97 void MediaStreamCenterGStreamer::didCreateMediaStream(MediaStreamDescriptor*)
    98 {
    99     notImplemented();
    100 }
    101 
    10279} // namespace WebCore
    10380
  • trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h

    r156473 r157068  
    5151    ~MediaStreamCenterGStreamer();
    5252
    53     // MediaStreamCenter
    5453    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5554    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5655    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    57     virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
    58     virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    59     virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    60     virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    61     virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6256};
    6357
  • trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.cpp

    r156473 r157068  
    7474}
    7575
    76 void MediaStreamCenterMac::didSetMediaStreamTrackEnabled(MediaStreamSource*)
    77 {
    78     notImplemented();
    79 }
    80 
    81 bool MediaStreamCenterMac::didAddMediaStreamTrack(MediaStreamSource*)
    82 {
    83     notImplemented();
    84     return false;
    85 }
    86 
    87 bool MediaStreamCenterMac::didRemoveMediaStreamTrack(MediaStreamSource*)
    88 {
    89     notImplemented();
    90     return false;
    91 }
    92 
    93 void MediaStreamCenterMac::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    94 {
    95     endLocalMediaStream(stream);
    96 }
    97 
    98 void MediaStreamCenterMac::didCreateMediaStream(MediaStreamDescriptor*)
    99 {
    100     notImplemented();
    101 }
    102 
    10376} // namespace WebCore
    10477
  • trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.h

    r156473 r157068  
    3636#include "MediaStreamCenter.h"
    3737
     38#include "MediaStreamSource.h"
    3839#include <wtf/PassRefPtr.h>
    3940#include <wtf/text/WTFString.h>
    4041
    4142namespace WebCore {
    42 
    43 class MediaStreamDescriptor;
    44 class MediaStreamSource;
    45 class MediaStreamSourcesQueryClient;
    4643
    4744class MediaStreamCenterMac FINAL : public MediaStreamCenter {
     
    5047    ~MediaStreamCenterMac();
    5148
    52     // MediaStreamCenter
    5349    virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5450    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    5551    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    56     virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
    57     virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    58     virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    59     virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    60     virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
    6152};
    6253
  • trunk/Source/WebCore/platform/mock/MockMediaStreamCenter.cpp

    r156554 r157068  
    3333#include "MediaStreamCreationClient.h"
    3434#include "MediaStreamDescriptor.h"
     35#include "MediaStreamSource.h"
     36#include "MediaStreamSourceCapabilities.h"
    3537#include "MediaStreamTrack.h"
    3638#include "MediaStreamTrackSourcesRequestClient.h"
    37 #include "NotImplemented.h"
     39#include <wtf/NeverDestroyed.h>
    3840
    3941namespace WebCore {
     42
     43class MockSource : public MediaStreamSource {
     44public:
     45    MockSource(const AtomicString& id, const AtomicString& name, MediaStreamSource::Type type)
     46        : MediaStreamSource(id, type, name)
     47    {
     48    }
     49
     50    virtual ~MockSource() { }
     51
     52    virtual RefPtr<MediaStreamSourceCapabilities> capabilities() const { return m_capabilities; }
     53    virtual const MediaStreamSourceStates& states() { return m_currentStates; }
     54
     55    RefPtr<MediaStreamSourceCapabilities> m_capabilities;
     56    MediaStreamSourceStates m_currentStates;
     57};
     58   
     59typedef HashMap<String, RefPtr<MockSource>> MockSourceMap;
     60
     61static MockSourceMap& mockSourceMap()
     62{
     63    DEFINE_STATIC_LOCAL(MockSourceMap, mockSourceMap, ());
     64    return mockSourceMap;
     65}
     66
     67static const AtomicString& mockAudioSourceID()
     68{
     69    static NeverDestroyed<AtomicString> id("239c24b1-2b15-11e3-8224-0800200c9a66", AtomicString::ConstructFromLiteral);
     70    return id;
     71}
     72
     73static const AtomicString& mockVideoSourceID()
     74{
     75    static NeverDestroyed<AtomicString> id("239c24b0-2b15-11e3-8224-0800200c9a66", AtomicString::ConstructFromLiteral);
     76    return id;
     77}
     78
     79static void initializeMockSources()
     80{
     81    RefPtr<MockSource> mockSource1 = adoptRef(new MockSource(mockVideoSourceID(), "Mock video device", MediaStreamSource::Video));
     82    mockSource1->m_capabilities = MediaStreamSourceCapabilities::create();
     83    mockSource1->m_capabilities->setSourceId(mockSource1->id());
     84    mockSource1->m_capabilities->addSourceType(MediaStreamSourceStates::Camera);
     85    mockSource1->m_capabilities->addSourceType(MediaStreamSourceStates::Microphone);
     86    mockSource1->m_capabilities->addFacingMode(MediaStreamSourceStates::User);
     87    mockSource1->m_capabilities->addFacingMode(MediaStreamSourceStates::Environment);
     88    mockSource1->m_capabilities->setWidthRange(MediaStreamSourceCapabilityRange(320UL, 1920UL, true));
     89    mockSource1->m_capabilities->setHeightRange(MediaStreamSourceCapabilityRange(240UL, 1080UL, true));
     90    mockSource1->m_capabilities->setFrameRateRange(MediaStreamSourceCapabilityRange(15.0f, 60.0f, true));
     91    mockSource1->m_capabilities->setAspectRatioRange(MediaStreamSourceCapabilityRange(4 / 3.0f, 16 / 9.0f, true));
     92    mockSource1->m_capabilities->setVolumeRange(MediaStreamSourceCapabilityRange(10UL, 90UL, true));
     93
     94    mockSource1->m_currentStates.sourceType = MediaStreamSourceStates::Camera;
     95    mockSource1->m_currentStates.sourceId = mockSource1->id();
     96    mockSource1->m_currentStates.facingMode = MediaStreamSourceStates::User;
     97    mockSource1->m_currentStates.width = 1920;
     98    mockSource1->m_currentStates.height = 1080;
     99    mockSource1->m_currentStates.frameRate = 30;
     100    mockSource1->m_currentStates.aspectRatio = 16 / 9.0f;
     101    mockSource1->m_currentStates.volume = 70;
     102    mockSourceMap().add(mockSource1->id(), mockSource1.release());
     103
     104    RefPtr<MockSource> mockSource2 = adoptRef(new MockSource(mockAudioSourceID(), "Mock audio device", MediaStreamSource::Audio));
     105    mockSource2->m_capabilities = MediaStreamSourceCapabilities::create();
     106    mockSource2->m_capabilities->setSourceId(mockSource2->id());
     107    mockSource2->m_capabilities->setVolumeRange(MediaStreamSourceCapabilityRange(0UL, 100UL, true));
     108
     109    mockSource2->m_currentStates.sourceType = MediaStreamSourceStates::Microphone;
     110    mockSource2->m_currentStates.sourceId = mockSource2->id();
     111    mockSource2->m_currentStates.volume = 50;
     112    mockSourceMap().add(mockSource2->id(), mockSource2.release());
     113}
     114
     115void MockMediaStreamCenter::registerMockMediaStreamCenter()
     116{
     117    DEFINE_STATIC_LOCAL(MockMediaStreamCenter, center, ());
     118    static bool registered = false;
     119    if (!registered) {
     120        registered = true;
     121        MediaStreamCenter::setSharedStreamCenter(&center);
     122        initializeMockSources();
     123    }
     124}
    40125
    41126static bool isSupportedMockConstraint(const String& constraintName)
     
    76161}
    77162
    78 void MockMediaStreamCenter::registerMockMediaStreamCenter()
    79 {
    80     DEFINE_STATIC_LOCAL(MockMediaStreamCenter, center, ());
    81     static bool registered = false;
    82     if (!registered) {
    83         registered = true;
    84         MediaStreamCenter::setSharedStreamCenter(&center);
    85     }
    86 }
    87 
    88163void MockMediaStreamCenter::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints)
    89164{
     
    119194    Vector<RefPtr<MediaStreamSource>> audioSources;
    120195    Vector<RefPtr<MediaStreamSource>> videoSources;
     196    MockSourceMap& map = mockSourceMap();
    121197
    122198    if (audioConstraints) {
     
    128204
    129205        if (audioConstraints) {
    130             RefPtr<MediaStreamSource> audioSource = MediaStreamSource::create(emptyString(), MediaStreamSource::Audio, "Mock audio device");
     206            MockSourceMap::iterator it = map.find(mockAudioSourceID());
     207            ASSERT(it != map.end());
     208
     209            RefPtr<MediaStreamSource> audioSource = it->value;
     210            audioSource->reset();
    131211            audioSource->setReadyState(MediaStreamSource::Live);
    132212            audioSources.append(audioSource.release());
     
    142222
    143223        if (videoConstraints) {
    144             RefPtr<MediaStreamSource> videoSource = MediaStreamSource::create(emptyString(), MediaStreamSource::Video, "Mock video device");
     224            MockSourceMap::iterator it = map.find(mockVideoSourceID());
     225            ASSERT(it != map.end());
     226
     227            RefPtr<MediaStreamSource> videoSource = it->value;
     228            videoSource->reset();
    145229            videoSource->setReadyState(MediaStreamSource::Live);
    146230            videoSources.append(videoSource.release());
     
    154238{
    155239    RefPtr<MediaStreamTrackSourcesRequestClient> requestClient = prpClient;
    156     Vector<RefPtr<TrackSourceInfo>> sources(2);
    157 
    158     sources[0] = TrackSourceInfo::create("Mock_audio_device_ID", TrackSourceInfo::Audio, "Mock audio device");
    159     sources[1] = TrackSourceInfo::create("Mock_video_device_ID", TrackSourceInfo::Video, "Mock video device");
     240    Vector<RefPtr<TrackSourceInfo>> sources;
     241
     242    MockSourceMap& map = mockSourceMap();
     243    MockSourceMap::iterator end = map.end();
     244    for (MockSourceMap::iterator it = map.begin(); it != end; ++it) {
     245        MockSource* source = it->value.get();
     246
     247        sources.append(TrackSourceInfo::create(source->id(), source->type() == MediaStreamSource::Video ? TrackSourceInfo::Video : TrackSourceInfo::Audio, source->name()));
     248    }
    160249
    161250    requestClient->didCompleteRequest(sources);
     
    163252}
    164253
    165 void MockMediaStreamCenter::didSetMediaStreamTrackEnabled(MediaStreamSource* source)
    166 {
    167     source->setReadyState(MediaStreamSource::Live);
    168 }
    169 
    170 bool MockMediaStreamCenter::didAddMediaStreamTrack(MediaStreamSource*)
    171 {
    172     return true;
    173 }
    174 
    175 bool MockMediaStreamCenter::didRemoveMediaStreamTrack(MediaStreamSource*)
    176 {
    177     return true;
    178 }
    179 
    180 void MockMediaStreamCenter::didStopLocalMediaStream(MediaStreamDescriptor* stream)
    181 {
    182     endLocalMediaStream(stream);
    183 }
    184 
    185 void MockMediaStreamCenter::didCreateMediaStream(MediaStreamDescriptor*)
    186 {
    187 }
    188 
    189254} // namespace WebCore
    190255
  • trunk/Source/WebCore/platform/mock/MockMediaStreamCenter.h

    r156522 r157068  
    4141    virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints);
    4242    virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE;
    43     virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;
    44     virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    45     virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;
    46     virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;
    47     virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;
    4843
    4944private:
Note: See TracChangeset for help on using the changeset viewer.