| OLD | NEW |
| 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 28 matching lines...) Expand all Loading... |
| 39 #include "core/html/HTMLMediaElement.h" | 39 #include "core/html/HTMLMediaElement.h" |
| 40 #include "core/html/TimeRanges.h" | 40 #include "core/html/TimeRanges.h" |
| 41 #include "modules/mediasource/MediaSourceRegistry.h" | 41 #include "modules/mediasource/MediaSourceRegistry.h" |
| 42 #include "platform/ContentType.h" | 42 #include "platform/ContentType.h" |
| 43 #include "platform/Logging.h" | 43 #include "platform/Logging.h" |
| 44 #include "platform/MIMETypeRegistry.h" | 44 #include "platform/MIMETypeRegistry.h" |
| 45 #include "platform/RuntimeEnabledFeatures.h" | 45 #include "platform/RuntimeEnabledFeatures.h" |
| 46 #include "platform/TraceEvent.h" | 46 #include "platform/TraceEvent.h" |
| 47 #include "public/platform/WebMediaSource.h" | 47 #include "public/platform/WebMediaSource.h" |
| 48 #include "public/platform/WebSourceBuffer.h" | 48 #include "public/platform/WebSourceBuffer.h" |
| 49 #include "wtf/PtrUtil.h" | |
| 50 #include "wtf/text/CString.h" | 49 #include "wtf/text/CString.h" |
| 51 #include <memory> | |
| 52 | 50 |
| 53 using blink::WebMediaSource; | 51 using blink::WebMediaSource; |
| 54 using blink::WebSourceBuffer; | 52 using blink::WebSourceBuffer; |
| 55 | 53 |
| 56 #define MSLOG DVLOG(3) | 54 #define MSLOG DVLOG(3) |
| 57 | 55 |
| 58 namespace blink { | 56 namespace blink { |
| 59 | 57 |
| 60 static bool throwExceptionIfClosedOrUpdating(bool isOpen, bool isUpdating, Excep
tionState& exceptionState) | 58 static bool throwExceptionIfClosedOrUpdating(bool isOpen, bool isUpdating, Excep
tionState& exceptionState) |
| 61 { | 59 { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 // 4. If the readyState attribute is not in the "open" state then throw an | 141 // 4. If the readyState attribute is not in the "open" state then throw an |
| 144 // InvalidStateError exception and abort these steps. | 142 // InvalidStateError exception and abort these steps. |
| 145 if (!isOpen()) { | 143 if (!isOpen()) { |
| 146 logAndThrowDOMException(exceptionState, InvalidStateError, "The MediaSou
rce's readyState is not 'open'."); | 144 logAndThrowDOMException(exceptionState, InvalidStateError, "The MediaSou
rce's readyState is not 'open'."); |
| 147 return 0; | 145 return 0; |
| 148 } | 146 } |
| 149 | 147 |
| 150 // 5. Create a new SourceBuffer object and associated resources. | 148 // 5. Create a new SourceBuffer object and associated resources. |
| 151 ContentType contentType(type); | 149 ContentType contentType(type); |
| 152 String codecs = contentType.parameter("codecs"); | 150 String codecs = contentType.parameter("codecs"); |
| 153 std::unique_ptr<WebSourceBuffer> webSourceBuffer = createWebSourceBuffer(con
tentType.type(), codecs, exceptionState); | 151 OwnPtr<WebSourceBuffer> webSourceBuffer = createWebSourceBuffer(contentType.
type(), codecs, exceptionState); |
| 154 | 152 |
| 155 if (!webSourceBuffer) { | 153 if (!webSourceBuffer) { |
| 156 DCHECK(exceptionState.code() == NotSupportedError || exceptionState.code
() == QuotaExceededError); | 154 DCHECK(exceptionState.code() == NotSupportedError || exceptionState.code
() == QuotaExceededError); |
| 157 // 2. If type contains a MIME type that is not supported ..., then throw
a NotSupportedError exception and abort these steps. | 155 // 2. If type contains a MIME type that is not supported ..., then throw
a NotSupportedError exception and abort these steps. |
| 158 // 3. If the user agent can't handle any more SourceBuffer objects then
throw a QuotaExceededError exception and abort these steps | 156 // 3. If the user agent can't handle any more SourceBuffer objects then
throw a QuotaExceededError exception and abort these steps |
| 159 return 0; | 157 return 0; |
| 160 } | 158 } |
| 161 | 159 |
| 162 SourceBuffer* buffer = SourceBuffer::create(std::move(webSourceBuffer), this
, m_asyncEventQueue.get()); | 160 SourceBuffer* buffer = SourceBuffer::create(std::move(webSourceBuffer), this
, m_asyncEventQueue.get()); |
| 163 // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that
object. | 161 // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that
object. |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 DEFINE_TRACE(MediaSource) | 278 DEFINE_TRACE(MediaSource) |
| 281 { | 279 { |
| 282 visitor->trace(m_asyncEventQueue); | 280 visitor->trace(m_asyncEventQueue); |
| 283 visitor->trace(m_attachedElement); | 281 visitor->trace(m_attachedElement); |
| 284 visitor->trace(m_sourceBuffers); | 282 visitor->trace(m_sourceBuffers); |
| 285 visitor->trace(m_activeSourceBuffers); | 283 visitor->trace(m_activeSourceBuffers); |
| 286 EventTargetWithInlineData::trace(visitor); | 284 EventTargetWithInlineData::trace(visitor); |
| 287 ActiveDOMObject::trace(visitor); | 285 ActiveDOMObject::trace(visitor); |
| 288 } | 286 } |
| 289 | 287 |
| 290 void MediaSource::setWebMediaSourceAndOpen(std::unique_ptr<WebMediaSource> webMe
diaSource) | 288 void MediaSource::setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource> webMediaSo
urce) |
| 291 { | 289 { |
| 292 TRACE_EVENT_ASYNC_END0("media", "MediaSource::attachToElement", this); | 290 TRACE_EVENT_ASYNC_END0("media", "MediaSource::attachToElement", this); |
| 293 DCHECK(webMediaSource); | 291 DCHECK(webMediaSource); |
| 294 DCHECK(!m_webMediaSource); | 292 DCHECK(!m_webMediaSource); |
| 295 DCHECK(m_attachedElement); | 293 DCHECK(m_attachedElement); |
| 296 m_webMediaSource = std::move(webMediaSource); | 294 m_webMediaSource = std::move(webMediaSource); |
| 297 setReadyState(openKeyword()); | 295 setReadyState(openKeyword()); |
| 298 } | 296 } |
| 299 | 297 |
| 300 void MediaSource::addedToRegistry() | 298 void MediaSource::addedToRegistry() |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 } | 570 } |
| 573 | 571 |
| 574 void MediaSource::stop() | 572 void MediaSource::stop() |
| 575 { | 573 { |
| 576 m_asyncEventQueue->close(); | 574 m_asyncEventQueue->close(); |
| 577 if (!isClosed()) | 575 if (!isClosed()) |
| 578 setReadyState(closedKeyword()); | 576 setReadyState(closedKeyword()); |
| 579 m_webMediaSource.reset(); | 577 m_webMediaSource.reset(); |
| 580 } | 578 } |
| 581 | 579 |
| 582 std::unique_ptr<WebSourceBuffer> MediaSource::createWebSourceBuffer(const String
& type, const String& codecs, ExceptionState& exceptionState) | 580 PassOwnPtr<WebSourceBuffer> MediaSource::createWebSourceBuffer(const String& typ
e, const String& codecs, ExceptionState& exceptionState) |
| 583 { | 581 { |
| 584 WebSourceBuffer* webSourceBuffer = 0; | 582 WebSourceBuffer* webSourceBuffer = 0; |
| 585 | 583 |
| 586 switch (m_webMediaSource->addSourceBuffer(type, codecs, &webSourceBuffer)) { | 584 switch (m_webMediaSource->addSourceBuffer(type, codecs, &webSourceBuffer)) { |
| 587 case WebMediaSource::AddStatusOk: | 585 case WebMediaSource::AddStatusOk: |
| 588 return wrapUnique(webSourceBuffer); | 586 return adoptPtr(webSourceBuffer); |
| 589 case WebMediaSource::AddStatusNotSupported: | 587 case WebMediaSource::AddStatusNotSupported: |
| 590 DCHECK(!webSourceBuffer); | 588 DCHECK(!webSourceBuffer); |
| 591 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m
edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type | 589 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/m
edia-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| 592 // Step 2: If type contains a MIME type ... that is not supported with t
he types | 590 // Step 2: If type contains a MIME type ... that is not supported with t
he types |
| 593 // specified for the other SourceBuffer objects in sourceBuffers, then t
hrow | 591 // specified for the other SourceBuffer objects in sourceBuffers, then t
hrow |
| 594 // a NotSupportedError exception and abort these steps. | 592 // a NotSupportedError exception and abort these steps. |
| 595 logAndThrowDOMException(exceptionState, NotSupportedError, "The type pro
vided ('" + type + "') is not supported."); | 593 logAndThrowDOMException(exceptionState, NotSupportedError, "The type pro
vided ('" + type + "') is not supported."); |
| 596 return nullptr; | 594 return nullptr; |
| 597 case WebMediaSource::AddStatusReachedIdLimit: | 595 case WebMediaSource::AddStatusReachedIdLimit: |
| 598 DCHECK(!webSourceBuffer); | 596 DCHECK(!webSourceBuffer); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 616 | 614 |
| 617 m_asyncEventQueue->enqueueEvent(event); | 615 m_asyncEventQueue->enqueueEvent(event); |
| 618 } | 616 } |
| 619 | 617 |
| 620 URLRegistry& MediaSource::registry() const | 618 URLRegistry& MediaSource::registry() const |
| 621 { | 619 { |
| 622 return MediaSourceRegistry::registry(); | 620 return MediaSourceRegistry::registry(); |
| 623 } | 621 } |
| 624 | 622 |
| 625 } // namespace blink | 623 } // namespace blink |
| OLD | NEW |