OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 13 matching lines...) Expand all Loading... |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "modules/mediasource/WebKitMediaSource.h" | 32 #include "modules/mediasource/WebKitMediaSource.h" |
33 | 33 |
34 #include "bindings/v8/ExceptionState.h" | 34 #include "core/dom/ExceptionCodePlaceholder.h" |
35 #include "bindings/v8/ExceptionStatePlaceholder.h" | |
36 #include "core/dom/ExceptionCode.h" | |
37 #include "core/html/TimeRanges.h" | 35 #include "core/html/TimeRanges.h" |
38 #include "core/platform/ContentType.h" | 36 #include "core/platform/ContentType.h" |
39 #include "core/platform/MIMETypeRegistry.h" | 37 #include "core/platform/MIMETypeRegistry.h" |
40 #include "core/platform/graphics/SourceBufferPrivate.h" | 38 #include "core/platform/graphics/SourceBufferPrivate.h" |
41 #include "modules/mediasource/MediaSourceRegistry.h" | 39 #include "modules/mediasource/MediaSourceRegistry.h" |
42 #include "wtf/Uint8Array.h" | 40 #include "wtf/Uint8Array.h" |
43 | 41 |
44 namespace WebCore { | 42 namespace WebCore { |
45 | 43 |
46 PassRefPtr<WebKitMediaSource> WebKitMediaSource::create(ScriptExecutionContext*
context) | 44 PassRefPtr<WebKitMediaSource> WebKitMediaSource::create(ScriptExecutionContext*
context) |
(...skipping 15 matching lines...) Expand all Loading... |
62 { | 60 { |
63 return m_sourceBuffers.get(); | 61 return m_sourceBuffers.get(); |
64 } | 62 } |
65 | 63 |
66 WebKitSourceBufferList* WebKitMediaSource::activeSourceBuffers() | 64 WebKitSourceBufferList* WebKitMediaSource::activeSourceBuffers() |
67 { | 65 { |
68 // FIXME(91649): support track selection | 66 // FIXME(91649): support track selection |
69 return m_activeSourceBuffers.get(); | 67 return m_activeSourceBuffers.get(); |
70 } | 68 } |
71 | 69 |
72 WebKitSourceBuffer* WebKitMediaSource::addSourceBuffer(const String& type, Excep
tionState& es) | 70 WebKitSourceBuffer* WebKitMediaSource::addSourceBuffer(const String& type, Excep
tionCode& ec) |
73 { | 71 { |
74 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour
ce.html#dom-addsourcebuffer | 72 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour
ce.html#dom-addsourcebuffer |
75 // 1. If type is null or an empty then throw an InvalidAccessError exception
and | 73 // 1. If type is null or an empty then throw an InvalidAccessError exception
and |
76 // abort these steps. | 74 // abort these steps. |
77 if (type.isNull() || type.isEmpty()) { | 75 if (type.isNull() || type.isEmpty()) { |
78 es.throwDOMException(InvalidAccessError); | 76 ec = InvalidAccessError; |
79 return 0; | 77 return 0; |
80 } | 78 } |
81 | 79 |
82 // 2. If type contains a MIME type that is not supported ..., then throw a | 80 // 2. If type contains a MIME type that is not supported ..., then throw a |
83 // NotSupportedError exception and abort these steps. | 81 // NotSupportedError exception and abort these steps. |
84 if (!isTypeSupported(type)) { | 82 if (!isTypeSupported(type)) { |
85 es.throwDOMException(NotSupportedError); | 83 ec = NotSupportedError; |
86 return 0; | 84 return 0; |
87 } | 85 } |
88 | 86 |
89 // 4. If the readyState attribute is not in the "open" state then throw an | 87 // 4. If the readyState attribute is not in the "open" state then throw an |
90 // InvalidStateError exception and abort these steps. | 88 // InvalidStateError exception and abort these steps. |
91 if (!isOpen()) { | 89 if (!isOpen()) { |
92 es.throwDOMException(InvalidStateError); | 90 ec = InvalidStateError; |
93 return 0; | 91 return 0; |
94 } | 92 } |
95 | 93 |
96 // 5. Create a new SourceBuffer object and associated resources. | 94 // 5. Create a new SourceBuffer object and associated resources. |
97 ContentType contentType(type); | 95 ContentType contentType(type); |
98 Vector<String> codecs = contentType.codecs(); | 96 Vector<String> codecs = contentType.codecs(); |
99 OwnPtr<SourceBufferPrivate> sourceBufferPrivate = createSourceBufferPrivate(
contentType.type(), codecs, es); | 97 OwnPtr<SourceBufferPrivate> sourceBufferPrivate = createSourceBufferPrivate(
contentType.type(), codecs, ec); |
100 if (!sourceBufferPrivate) | 98 if (!sourceBufferPrivate) |
101 return 0; | 99 return 0; |
102 | 100 |
103 RefPtr<WebKitSourceBuffer> buffer = WebKitSourceBuffer::create(sourceBufferP
rivate.release(), this); | 101 RefPtr<WebKitSourceBuffer> buffer = WebKitSourceBuffer::create(sourceBufferP
rivate.release(), this); |
104 // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that
object. | 102 // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that
object. |
105 m_sourceBuffers->add(buffer); | 103 m_sourceBuffers->add(buffer); |
106 m_activeSourceBuffers->add(buffer); | 104 m_activeSourceBuffers->add(buffer); |
107 // 7. Return the new object to the caller. | 105 // 7. Return the new object to the caller. |
108 return buffer.get(); | 106 return buffer.get(); |
109 } | 107 } |
110 | 108 |
111 void WebKitMediaSource::removeSourceBuffer(WebKitSourceBuffer* buffer, Exception
State& es) | 109 void WebKitMediaSource::removeSourceBuffer(WebKitSourceBuffer* buffer, Exception
Code& ec) |
112 { | 110 { |
113 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour
ce.html#dom-removesourcebuffer | 111 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour
ce.html#dom-removesourcebuffer |
114 // 1. If sourceBuffer is null then throw an InvalidAccessError exception and | 112 // 1. If sourceBuffer is null then throw an InvalidAccessError exception and |
115 // abort these steps. | 113 // abort these steps. |
116 if (!buffer) { | 114 if (!buffer) { |
117 es.throwDOMException(InvalidAccessError); | 115 ec = InvalidAccessError; |
118 return; | 116 return; |
119 } | 117 } |
120 | 118 |
121 // 2. If sourceBuffers is empty then throw an InvalidStateError exception an
d | 119 // 2. If sourceBuffers is empty then throw an InvalidStateError exception an
d |
122 // abort these steps. | 120 // abort these steps. |
123 if (isClosed() || !m_sourceBuffers->length()) { | 121 if (isClosed() || !m_sourceBuffers->length()) { |
124 es.throwDOMException(InvalidStateError); | 122 ec = InvalidStateError; |
125 return; | 123 return; |
126 } | 124 } |
127 | 125 |
128 // 3. If sourceBuffer specifies an object that is not in sourceBuffers then | 126 // 3. If sourceBuffer specifies an object that is not in sourceBuffers then |
129 // throw a NotFoundError exception and abort these steps. | 127 // throw a NotFoundError exception and abort these steps. |
130 // 6. Remove sourceBuffer from sourceBuffers and fire a removesourcebuffer e
vent | 128 // 6. Remove sourceBuffer from sourceBuffers and fire a removesourcebuffer e
vent |
131 // on that object. | 129 // on that object. |
132 if (!m_sourceBuffers->remove(buffer)) { | 130 if (!m_sourceBuffers->remove(buffer)) { |
133 es.throwDOMException(NotFoundError); | 131 ec = NotFoundError; |
134 return; | 132 return; |
135 } | 133 } |
136 | 134 |
137 // 7. Destroy all resources for sourceBuffer. | 135 // 7. Destroy all resources for sourceBuffer. |
138 m_activeSourceBuffers->remove(buffer); | 136 m_activeSourceBuffers->remove(buffer); |
139 | 137 |
140 // 4. Remove track information from audioTracks, videoTracks, and textTracks
for all tracks | 138 // 4. Remove track information from audioTracks, videoTracks, and textTracks
for all tracks |
141 // associated with sourceBuffer and fire a simple event named change on the
modified lists. | 139 // associated with sourceBuffer and fire a simple event named change on the
modified lists. |
142 // FIXME(91649): support track selection | 140 // FIXME(91649): support track selection |
143 | 141 |
(...skipping 19 matching lines...) Expand all Loading... |
163 if (isOpen()) { | 161 if (isOpen()) { |
164 scheduleEvent(eventNames().webkitsourceopenEvent); | 162 scheduleEvent(eventNames().webkitsourceopenEvent); |
165 return; | 163 return; |
166 } | 164 } |
167 } | 165 } |
168 | 166 |
169 Vector<RefPtr<TimeRanges> > WebKitMediaSource::activeRanges() const | 167 Vector<RefPtr<TimeRanges> > WebKitMediaSource::activeRanges() const |
170 { | 168 { |
171 Vector<RefPtr<TimeRanges> > activeRanges(m_activeSourceBuffers->length()); | 169 Vector<RefPtr<TimeRanges> > activeRanges(m_activeSourceBuffers->length()); |
172 for (size_t i = 0; i < m_activeSourceBuffers->length(); ++i) | 170 for (size_t i = 0; i < m_activeSourceBuffers->length(); ++i) |
173 activeRanges[i] = m_activeSourceBuffers->item(i)->buffered(ASSERT_NO_EXC
EPTION_STATE); | 171 activeRanges[i] = m_activeSourceBuffers->item(i)->buffered(ASSERT_NO_EXC
EPTION); |
174 | 172 |
175 return activeRanges; | 173 return activeRanges; |
176 } | 174 } |
177 | 175 |
178 bool WebKitMediaSource::isTypeSupported(const String& type) | 176 bool WebKitMediaSource::isTypeSupported(const String& type) |
179 { | 177 { |
180 // Section 2.1 isTypeSupported() method steps. | 178 // Section 2.1 isTypeSupported() method steps. |
181 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.
html#widl-MediaSource-isTypeSupported-boolean-DOMString-type | 179 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.
html#widl-MediaSource-isTypeSupported-boolean-DOMString-type |
182 // 1. If type is an empty string, then return false. | 180 // 1. If type is an empty string, then return false. |
183 if (type.isNull() || type.isEmpty()) | 181 if (type.isNull() || type.isEmpty()) |
(...skipping 12 matching lines...) Expand all Loading... |
196 // 6. Return true. | 194 // 6. Return true. |
197 return MIMETypeRegistry::isSupportedMediaSourceMIMEType(contentType.type(),
codecs); | 195 return MIMETypeRegistry::isSupportedMediaSourceMIMEType(contentType.type(),
codecs); |
198 } | 196 } |
199 | 197 |
200 const AtomicString& WebKitMediaSource::interfaceName() const | 198 const AtomicString& WebKitMediaSource::interfaceName() const |
201 { | 199 { |
202 return eventNames().interfaceForWebKitMediaSource; | 200 return eventNames().interfaceForWebKitMediaSource; |
203 } | 201 } |
204 | 202 |
205 } // namespace WebCore | 203 } // namespace WebCore |
OLD | NEW |