12013-10-06 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 NOBODY (OOPS!).
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