Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: Source/modules/mediasource/MediaSourceBase.cpp

Issue 61603006: Remove MediaSourcePrivate/SourceBufferPrivate (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/modules/mediasource/MediaSourceBase.h ('k') | Source/modules/mediasource/SourceBuffer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 18 matching lines...) Expand all
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "modules/mediasource/MediaSourceBase.h" 32 #include "modules/mediasource/MediaSourceBase.h"
33 33
34 #include "bindings/v8/ExceptionState.h" 34 #include "bindings/v8/ExceptionState.h"
35 #include "bindings/v8/ExceptionStatePlaceholder.h" 35 #include "bindings/v8/ExceptionStatePlaceholder.h"
36 #include "core/dom/ExceptionCode.h" 36 #include "core/dom/ExceptionCode.h"
37 #include "core/events/Event.h" 37 #include "core/events/Event.h"
38 #include "core/events/GenericEventQueue.h" 38 #include "core/events/GenericEventQueue.h"
39 #include "core/platform/graphics/SourceBufferPrivate.h" 39 #include "core/html/TimeRanges.h"
40 #include "modules/mediasource/MediaSourceRegistry.h" 40 #include "modules/mediasource/MediaSourceRegistry.h"
41 #include "platform/Logging.h" 41 #include "platform/Logging.h"
42 #include "platform/TraceEvent.h" 42 #include "platform/TraceEvent.h"
43 #include "public/platform/WebMediaSource.h"
44 #include "public/platform/WebSourceBuffer.h"
43 #include "wtf/text/WTFString.h" 45 #include "wtf/text/WTFString.h"
44 46
47 using blink::WebMediaSource;
48 using blink::WebSourceBuffer;
49
45 namespace WebCore { 50 namespace WebCore {
46 51
47 MediaSourceBase::MediaSourceBase(ExecutionContext* context) 52 MediaSourceBase::MediaSourceBase(ExecutionContext* context)
48 : ActiveDOMObject(context) 53 : ActiveDOMObject(context)
49 , m_readyState(closedKeyword()) 54 , m_readyState(closedKeyword())
50 , m_asyncEventQueue(GenericEventQueue::create(this)) 55 , m_asyncEventQueue(GenericEventQueue::create(this))
51 , m_attachedElement(0) 56 , m_attachedElement(0)
52 { 57 {
53 } 58 }
54 59
(...skipping 12 matching lines...) Expand all
67 DEFINE_STATIC_LOCAL(const AtomicString, closed, ("closed", AtomicString::Con structFromLiteral)); 72 DEFINE_STATIC_LOCAL(const AtomicString, closed, ("closed", AtomicString::Con structFromLiteral));
68 return closed; 73 return closed;
69 } 74 }
70 75
71 const AtomicString& MediaSourceBase::endedKeyword() 76 const AtomicString& MediaSourceBase::endedKeyword()
72 { 77 {
73 DEFINE_STATIC_LOCAL(const AtomicString, ended, ("ended", AtomicString::Const ructFromLiteral)); 78 DEFINE_STATIC_LOCAL(const AtomicString, ended, ("ended", AtomicString::Const ructFromLiteral));
74 return ended; 79 return ended;
75 } 80 }
76 81
77 void MediaSourceBase::setPrivateAndOpen(PassOwnPtr<MediaSourcePrivate> mediaSour cePrivate) 82 void MediaSourceBase::setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource> webMed iaSource)
78 { 83 {
79 TRACE_EVENT_ASYNC_END0("media", "MediaSourceBase::attachToElement", this); 84 TRACE_EVENT_ASYNC_END0("media", "MediaSourceBase::attachToElement", this);
80 ASSERT(mediaSourcePrivate); 85 ASSERT(webMediaSource);
81 ASSERT(!m_private); 86 ASSERT(!m_webMediaSource);
82 ASSERT(m_attachedElement); 87 ASSERT(m_attachedElement);
83 m_private = mediaSourcePrivate; 88 m_webMediaSource = webMediaSource;
84 setReadyState(openKeyword()); 89 setReadyState(openKeyword());
85 } 90 }
86 91
87 void MediaSourceBase::addedToRegistry() 92 void MediaSourceBase::addedToRegistry()
88 { 93 {
89 setPendingActivity(this); 94 setPendingActivity(this);
90 } 95 }
91 96
92 void MediaSourceBase::removedFromRegistry() 97 void MediaSourceBase::removedFromRegistry()
93 { 98 {
94 unsetPendingActivity(this); 99 unsetPendingActivity(this);
95 } 100 }
96 101
97 double MediaSourceBase::duration() const 102 double MediaSourceBase::duration() const
98 { 103 {
99 return isClosed() ? std::numeric_limits<float>::quiet_NaN() : m_private->dur ation(); 104 return isClosed() ? std::numeric_limits<float>::quiet_NaN() : m_webMediaSour ce->duration();
100 } 105 }
101 106
102 PassRefPtr<TimeRanges> MediaSourceBase::buffered() const 107 PassRefPtr<TimeRanges> MediaSourceBase::buffered() const
103 { 108 {
104 // Implements MediaSource algorithm for HTMLMediaElement.buffered. 109 // Implements MediaSource algorithm for HTMLMediaElement.buffered.
105 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#htmlmediaelement-extensions 110 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#htmlmediaelement-extensions
106 Vector<RefPtr<TimeRanges> > ranges = activeRanges(); 111 Vector<RefPtr<TimeRanges> > ranges = activeRanges();
107 112
108 // 1. If activeSourceBuffers.length equals 0 then return an empty TimeRanges object and abort these steps. 113 // 1. If activeSourceBuffers.length equals 0 then return an empty TimeRanges object and abort these steps.
109 if (ranges.isEmpty()) 114 if (ranges.isEmpty())
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 return; 155 return;
151 } 156 }
152 if (!isOpen()) { 157 if (!isOpen()) {
153 es.throwUninformativeAndGenericDOMException(InvalidStateError); 158 es.throwUninformativeAndGenericDOMException(InvalidStateError);
154 return; 159 return;
155 } 160 }
156 161
157 // Synchronously process duration change algorithm to enforce any required 162 // Synchronously process duration change algorithm to enforce any required
158 // seek is started prior to returning. 163 // seek is started prior to returning.
159 m_attachedElement->durationChanged(duration); 164 m_attachedElement->durationChanged(duration);
160 m_private->setDuration(duration); 165 m_webMediaSource->setDuration(duration);
161 } 166 }
162 167
163 168
164 void MediaSourceBase::setReadyState(const AtomicString& state) 169 void MediaSourceBase::setReadyState(const AtomicString& state)
165 { 170 {
166 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK eyword()); 171 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK eyword());
167 172
168 AtomicString oldState = readyState(); 173 AtomicString oldState = readyState();
169 LOG(Media, "MediaSourceBase::setReadyState() %p : %s -> %s", this, oldState. string().ascii().data(), state.string().ascii().data()); 174 LOG(Media, "MediaSourceBase::setReadyState() %p : %s -> %s", this, oldState. string().ascii().data(), state.string().ascii().data());
170 175
171 if (state == closedKeyword()) { 176 if (state == closedKeyword()) {
172 m_private.clear(); 177 m_webMediaSource.clear();
173 m_attachedElement = 0; 178 m_attachedElement = 0;
174 } 179 }
175 180
176 if (oldState == state) 181 if (oldState == state)
177 return; 182 return;
178 183
179 m_readyState = state; 184 m_readyState = state;
180 185
181 onReadyStateChange(oldState, state); 186 onReadyStateChange(oldState, state);
182 } 187 }
183 188
184 void MediaSourceBase::endOfStream(const AtomicString& error, ExceptionState& es) 189 void MediaSourceBase::endOfStream(const AtomicString& error, ExceptionState& es)
185 { 190 {
186 DEFINE_STATIC_LOCAL(const AtomicString, network, ("network", AtomicString::C onstructFromLiteral)); 191 DEFINE_STATIC_LOCAL(const AtomicString, network, ("network", AtomicString::C onstructFromLiteral));
187 DEFINE_STATIC_LOCAL(const AtomicString, decode, ("decode", AtomicString::Con structFromLiteral)); 192 DEFINE_STATIC_LOCAL(const AtomicString, decode, ("decode", AtomicString::Con structFromLiteral));
188 193
189 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour ce.html#dom-endofstream 194 // 3.1 http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-sour ce.html#dom-endofstream
190 // 1. If the readyState attribute is not in the "open" state then throw an 195 // 1. If the readyState attribute is not in the "open" state then throw an
191 // InvalidStateError exception and abort these steps. 196 // InvalidStateError exception and abort these steps.
192 if (!isOpen()) { 197 if (!isOpen()) {
193 es.throwUninformativeAndGenericDOMException(InvalidStateError); 198 es.throwUninformativeAndGenericDOMException(InvalidStateError);
194 return; 199 return;
195 } 200 }
196 201
197 MediaSourcePrivate::EndOfStreamStatus eosStatus = MediaSourcePrivate::EosNoE rror; 202 WebMediaSource::EndOfStreamStatus eosStatus = WebMediaSource::EndOfStreamSta tusNoError;
198 203
199 if (error.isNull() || error.isEmpty()) { 204 if (error.isNull() || error.isEmpty()) {
200 eosStatus = MediaSourcePrivate::EosNoError; 205 eosStatus = WebMediaSource::EndOfStreamStatusNoError;
201 } else if (error == network) { 206 } else if (error == network) {
202 eosStatus = MediaSourcePrivate::EosNetworkError; 207 eosStatus = WebMediaSource::EndOfStreamStatusNetworkError;
203 } else if (error == decode) { 208 } else if (error == decode) {
204 eosStatus = MediaSourcePrivate::EosDecodeError; 209 eosStatus = WebMediaSource::EndOfStreamStatusDecodeError;
205 } else { 210 } else {
206 es.throwUninformativeAndGenericDOMException(InvalidAccessError); 211 es.throwUninformativeAndGenericDOMException(InvalidAccessError);
207 return; 212 return;
208 } 213 }
209 214
210 // 2. Change the readyState attribute value to "ended". 215 // 2. Change the readyState attribute value to "ended".
211 setReadyState(endedKeyword()); 216 setReadyState(endedKeyword());
212 m_private->markEndOfStream(eosStatus); 217 m_webMediaSource->markEndOfStream(eosStatus);
213 } 218 }
214 219
215 bool MediaSourceBase::isOpen() const 220 bool MediaSourceBase::isOpen() const
216 { 221 {
217 return readyState() == openKeyword(); 222 return readyState() == openKeyword();
218 } 223 }
219 224
220 bool MediaSourceBase::isClosed() const 225 bool MediaSourceBase::isClosed() const
221 { 226 {
222 return readyState() == closedKeyword(); 227 return readyState() == closedKeyword();
(...skipping 15 matching lines...) Expand all
238 m_attachedElement = element; 243 m_attachedElement = element;
239 return true; 244 return true;
240 } 245 }
241 246
242 void MediaSourceBase::openIfInEndedState() 247 void MediaSourceBase::openIfInEndedState()
243 { 248 {
244 if (m_readyState != endedKeyword()) 249 if (m_readyState != endedKeyword())
245 return; 250 return;
246 251
247 setReadyState(openKeyword()); 252 setReadyState(openKeyword());
248 m_private->unmarkEndOfStream(); 253 m_webMediaSource->unmarkEndOfStream();
249 } 254 }
250 255
251 bool MediaSourceBase::hasPendingActivity() const 256 bool MediaSourceBase::hasPendingActivity() const
252 { 257 {
253 return m_private || m_asyncEventQueue->hasPendingEvents() 258 return m_webMediaSource || m_asyncEventQueue->hasPendingEvents()
254 || ActiveDOMObject::hasPendingActivity(); 259 || ActiveDOMObject::hasPendingActivity();
255 } 260 }
256 261
257 void MediaSourceBase::stop() 262 void MediaSourceBase::stop()
258 { 263 {
259 m_asyncEventQueue->close(); 264 m_asyncEventQueue->close();
260 if (!isClosed()) 265 if (!isClosed())
261 setReadyState(closedKeyword()); 266 setReadyState(closedKeyword());
262 m_private.clear(); 267 m_webMediaSource.clear();
263 } 268 }
264 269
265 PassOwnPtr<SourceBufferPrivate> MediaSourceBase::createSourceBufferPrivate(const String& type, const MediaSourcePrivate::CodecsArray& codecs, ExceptionState& es ) 270 PassOwnPtr<WebSourceBuffer> MediaSourceBase::createWebSourceBuffer(const String& type, const Vector<String>& codecs, ExceptionState& es)
266 { 271 {
267 OwnPtr<SourceBufferPrivate> sourceBufferPrivate; 272 WebSourceBuffer* webSourceBuffer = 0;
268 switch (m_private->addSourceBuffer(type, codecs, &sourceBufferPrivate)) { 273 switch (m_webMediaSource->addSourceBuffer(type, codecs, &webSourceBuffer)) {
269 case MediaSourcePrivate::Ok: { 274 case WebMediaSource::AddStatusOk:
270 return sourceBufferPrivate.release(); 275 return adoptPtr(webSourceBuffer);
271 } 276 case WebMediaSource::AddStatusNotSupported:
adamk 2013/11/12 20:59:19 Can you add ASSERT(!webSourceBuffer) here and...
philipj_slow 2013/11/12 22:13:46 Done.
272 case MediaSourcePrivate::NotSupported:
273 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type 277 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type
274 // Step 2: If type contains a MIME type ... that is not supported with t he types 278 // Step 2: If type contains a MIME type ... that is not supported with t he types
275 // specified for the other SourceBuffer objects in sourceBuffers, then t hrow 279 // specified for the other SourceBuffer objects in sourceBuffers, then t hrow
276 // a NotSupportedError exception and abort these steps. 280 // a NotSupportedError exception and abort these steps.
277 es.throwUninformativeAndGenericDOMException(NotSupportedError); 281 es.throwUninformativeAndGenericDOMException(NotSupportedError);
278 return nullptr; 282 return nullptr;
279 case MediaSourcePrivate::ReachedIdLimit: 283 case WebMediaSource::AddStatusReachedIdLimit:
adamk 2013/11/12 20:59:19 ...here too? That gives us back some of the safety
philipj_slow 2013/11/12 22:13:46 Done.
280 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type 284 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type
281 // Step 3: If the user agent can't handle any more SourceBuffer objects then throw 285 // Step 3: If the user agent can't handle any more SourceBuffer objects then throw
282 // a QuotaExceededError exception and abort these steps. 286 // a QuotaExceededError exception and abort these steps.
283 es.throwUninformativeAndGenericDOMException(QuotaExceededError); 287 es.throwUninformativeAndGenericDOMException(QuotaExceededError);
284 return nullptr; 288 return nullptr;
285 } 289 }
286 290
287 ASSERT_NOT_REACHED(); 291 ASSERT_NOT_REACHED();
288 return nullptr; 292 return nullptr;
289 } 293 }
(...skipping 12 matching lines...) Expand all
302 { 306 {
303 return ActiveDOMObject::executionContext(); 307 return ActiveDOMObject::executionContext();
304 } 308 }
305 309
306 URLRegistry& MediaSourceBase::registry() const 310 URLRegistry& MediaSourceBase::registry() const
307 { 311 {
308 return MediaSourceRegistry::registry(); 312 return MediaSourceRegistry::registry();
309 } 313 }
310 314
311 } 315 }
OLDNEW
« no previous file with comments | « Source/modules/mediasource/MediaSourceBase.h ('k') | Source/modules/mediasource/SourceBuffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698