Chromium Code Reviews| Index: third_party/WebKit/Source/modules/mediasource/MediaSource.cpp |
| diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp |
| index b954d85d5e04b93b834e0007852ffa65988531b0..cfeddd959147aeeb83b116d631dfe1aa67dcc4c1 100644 |
| --- a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp |
| +++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp |
| @@ -150,9 +150,10 @@ SourceBuffer* MediaSource::addSourceBuffer(const String& type, |
| ExceptionState& exceptionState) { |
| BLINK_MSLOG << __func__ << " this=" << this << " type=" << type; |
| - // 2.2 https://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type/ |
| + // 2.2 |
| + // https://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type/ |
|
dcheng
2016/10/04 21:45:52
This formatting is unfortunate (maybe put the sect
|
| // 1. If type is an empty string then throw a TypeError exception |
| - // and abort these steps. |
| + // and abort these steps. |
| if (type.isEmpty()) { |
| logAndThrowTypeError(exceptionState, "The type provided is empty"); |
| return 0; |
| @@ -184,14 +185,17 @@ SourceBuffer* MediaSource::addSourceBuffer(const String& type, |
| if (!webSourceBuffer) { |
| DCHECK(exceptionState.code() == NotSupportedError || |
| exceptionState.code() == QuotaExceededError); |
| - // 2. If type contains a MIME type that is not supported ..., then throw a NotSupportedError exception and abort these steps. |
| - // 3. If the user agent can't handle any more SourceBuffer objects then throw a QuotaExceededError exception and abort these steps |
| + // 2. If type contains a MIME type that is not supported ..., then throw a |
| + // NotSupportedError exception and abort these steps. |
| + // 3. If the user agent can't handle any more SourceBuffer objects then |
| + // throw a QuotaExceededError exception and abort these steps |
| return 0; |
| } |
| SourceBuffer* buffer = SourceBuffer::create(std::move(webSourceBuffer), this, |
| m_asyncEventQueue.get()); |
| - // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that object. |
| + // 6. Add the new object to sourceBuffers and fire a addsourcebuffer on that |
| + // object. |
| m_sourceBuffers->add(buffer); |
| // 7. Return the new object to the caller. |
| @@ -204,10 +208,11 @@ void MediaSource::removeSourceBuffer(SourceBuffer* buffer, |
| ExceptionState& exceptionState) { |
| BLINK_MSLOG << __func__ << " this=" << this << " buffer=" << buffer; |
| - // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-removeSourceBuffer-void-SourceBuffer-sourceBuffer |
| + // 2.2 |
|
dcheng
2016/10/04 21:45:52
Similarly here and elsewhere.
|
| + // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-removeSourceBuffer-void-SourceBuffer-sourceBuffer |
| // 1. If sourceBuffer specifies an object that is not in sourceBuffers then |
| - // throw a NotFoundError exception and abort these steps. |
| + // throw a NotFoundError exception and abort these steps. |
| if (!m_sourceBuffers->length() || !m_sourceBuffers->contains(buffer)) { |
| logAndThrowDOMException( |
| exceptionState, NotFoundError, |
| @@ -218,15 +223,17 @@ void MediaSource::removeSourceBuffer(SourceBuffer* buffer, |
| // Steps 2-8 are implemented by SourceBuffer::removedFromMediaSource. |
| buffer->removedFromMediaSource(); |
| - // 9. If sourceBuffer is in activeSourceBuffers, then remove sourceBuffer from activeSourceBuffers ... |
| + // 9. If sourceBuffer is in activeSourceBuffers, then remove sourceBuffer from |
| + // activeSourceBuffers ... |
| m_activeSourceBuffers->remove(buffer); |
| - // 10. Remove sourceBuffer from sourceBuffers and fire a removesourcebuffer event |
| - // on that object. |
| + // 10. Remove sourceBuffer from sourceBuffers and fire a removesourcebuffer |
| + // event on that object. |
| m_sourceBuffers->remove(buffer); |
| // 11. Destroy all resources for sourceBuffer. |
| - // This should have been done already by SourceBuffer::removedFromMediaSource (steps 2-8) above. |
| + // This should have been done already by |
| + // SourceBuffer::removedFromMediaSource (steps 2-8) above. |
| } |
| void MediaSource::onReadyStateChange(const AtomicString& oldState, |
| @@ -283,8 +290,10 @@ bool MediaSource::isTypeSupported(const String& type) { |
| return false; |
| } |
| - // Note: MediaSource.isTypeSupported() returning true implies that HTMLMediaElement.canPlayType() will return "maybe" or "probably" |
| - // since it does not make sense for a MediaSource to support a type the HTMLMediaElement knows it cannot play. |
| + // Note: MediaSource.isTypeSupported() returning true implies that |
| + // HTMLMediaElement.canPlayType() will return "maybe" or "probably" since it |
| + // does not make sense for a MediaSource to support a type the |
| + // HTMLMediaElement knows it cannot play. |
| if (HTMLMediaElement::supportsType(contentType) == |
| WebMimeRegistry::IsNotSupported) { |
| BLINK_MSLOG << __func__ << "(" << type |
| @@ -292,9 +301,12 @@ bool MediaSource::isTypeSupported(const String& type) { |
| return false; |
| } |
| - // 3. If type contains a media type or media subtype that the MediaSource does not support, then return false. |
| - // 4. If type contains at a codec that the MediaSource does not support, then return false. |
| - // 5. If the MediaSource does not support the specified combination of media type, media subtype, and codecs then return false. |
| + // 3. If type contains a media type or media subtype that the MediaSource does |
| + // not support, then return false. |
| + // 4. If type contains at a codec that the MediaSource does not support, then |
| + // return false. |
| + // 5. If the MediaSource does not support the specified combination of media |
| + // type, media subtype, and codecs then return false. |
| // 6. Return true. |
| bool result = MIMETypeRegistry::isSupportedMediaSourceMIMEType( |
| contentType.type(), codecs); |
| @@ -354,11 +366,13 @@ TimeRanges* MediaSource::buffered() const { |
| for (size_t i = 0; i < m_activeSourceBuffers->length(); ++i) |
| ranges[i] = m_activeSourceBuffers->item(i)->buffered(ASSERT_NO_EXCEPTION); |
| - // 1. If activeSourceBuffers.length equals 0 then return an empty TimeRanges object and abort these steps. |
| + // 1. If activeSourceBuffers.length equals 0 then return an empty TimeRanges |
| + // object and abort these steps. |
| if (ranges.isEmpty()) |
| return TimeRanges::create(); |
| - // 2. Let active ranges be the ranges returned by buffered for each SourceBuffer object in activeSourceBuffers. |
| + // 2. Let active ranges be the ranges returned by buffered for each |
| + // SourceBuffer object in activeSourceBuffers. |
| // 3. Let highest end time be the largest range end time in the active ranges. |
| double highestEndTime = -1; |
| for (size_t i = 0; i < ranges.size(); ++i) { |
| @@ -372,23 +386,29 @@ TimeRanges* MediaSource::buffered() const { |
| if (highestEndTime < 0) |
| return TimeRanges::create(); |
| - // 4. Let intersection ranges equal a TimeRange object containing a single range from 0 to highest end time. |
| + // 4. Let intersection ranges equal a TimeRange object containing a single |
| + // range from 0 to highest end time. |
| TimeRanges* intersectionRanges = TimeRanges::create(0, highestEndTime); |
| - // 5. For each SourceBuffer object in activeSourceBuffers run the following steps: |
| + // 5. For each SourceBuffer object in activeSourceBuffers run the following |
| + // steps: |
| bool ended = readyState() == endedKeyword(); |
| for (size_t i = 0; i < ranges.size(); ++i) { |
| - // 5.1 Let source ranges equal the ranges returned by the buffered attribute on the current SourceBuffer. |
| + // 5.1 Let source ranges equal the ranges returned by the buffered attribute |
| + // on the current SourceBuffer. |
| TimeRanges* sourceRanges = ranges[i].get(); |
| - // 5.2 If readyState is "ended", then set the end time on the last range in source ranges to highest end time. |
| + // 5.2 If readyState is "ended", then set the end time on the last range in |
| + // source ranges to highest end time. |
| if (ended && sourceRanges->length()) |
| sourceRanges->add( |
| sourceRanges->start(sourceRanges->length() - 1, ASSERT_NO_EXCEPTION), |
| highestEndTime); |
| - // 5.3 Let new intersection ranges equal the the intersection between the intersection ranges and the source ranges. |
| - // 5.4 Replace the ranges in intersection ranges with the new intersection ranges. |
| + // 5.3 Let new intersection ranges equal the the intersection between the |
| + // intersection ranges and the source ranges. |
| + // 5.4 Replace the ranges in intersection ranges with the new intersection |
| + // ranges. |
| intersectionRanges->intersectWith(sourceRanges); |
| } |
| @@ -427,18 +447,20 @@ TimeRanges* MediaSource::seekable() const { |
| std::max(m_liveSeekableRange->end(0, ASSERT_NO_EXCEPTION), |
| buffered->end(buffered->length() - 1, ASSERT_NO_EXCEPTION))); |
| } |
| - // 2. If the HTMLMediaElement.buffered attribute returns an empty TimeRanges object, then |
| - // return an empty TimeRanges object and abort these steps. |
| + // 2. If the HTMLMediaElement.buffered attribute returns an empty TimeRanges |
| + // object, then return an empty TimeRanges object and abort these steps. |
| if (buffered->length() == 0) |
| return TimeRanges::create(); |
| - // 3. Return a single range with a start time of 0 and an end time equal to the highest end |
| - // time reported by the HTMLMediaElement.buffered attribute. |
| + // 3. Return a single range with a start time of 0 and an end time equal to |
| + // the highest end time reported by the HTMLMediaElement.buffered |
| + // attribute. |
| return TimeRanges::create( |
| 0, buffered->end(buffered->length() - 1, ASSERT_NO_EXCEPTION)); |
| } |
| - // 3. Otherwise: Return a single range with a start time of 0 and an end time equal to duration. |
| + // 3. Otherwise: Return a single range with a start time of 0 and an end time |
| + // equal to duration. |
| return TimeRanges::create(0, sourceDuration); |
| } |
| @@ -479,15 +501,16 @@ void MediaSource::setDuration(double duration, ExceptionState& exceptionState) { |
| return; |
| } |
| - // 2. If the readyState attribute is not "open" then throw an InvalidStateError |
| - // exception and abort these steps. |
| - // 3. If the updating attribute equals true on any SourceBuffer in sourceBuffers, |
| - // then throw an InvalidStateError exception and abort these steps. |
| + // 2. If the readyState attribute is not "open" then throw an |
| + // InvalidStateError exception and abort these steps. |
| + // 3. If the updating attribute equals true on any SourceBuffer in |
| + // sourceBuffers, then throw an InvalidStateError exception and abort these |
| + // steps. |
| if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState)) |
| return; |
| - // 4. Run the duration change algorithm with new duration set to the value being |
| - // assigned to this attribute. |
| + // 4. Run the duration change algorithm with new duration set to the value |
| + // being assigned to this attribute. |
| durationChangeAlgorithm(duration, exceptionState); |
| } |
| @@ -547,11 +570,14 @@ void MediaSource::durationChangeAlgorithm(double newDuration, |
| ASSERT_NO_EXCEPTION); |
| } |
| - // 5. If a user agent is unable to partially render audio frames or text cues that start before and end after the duration, then run the following steps: |
| - // NOTE: Currently we assume that the media engine is able to render partial frames/cues. If a media |
| - // engine gets added that doesn't support this, then we'll need to add logic to handle the substeps. |
| + // 5. If a user agent is unable to partially render audio frames or text cues |
| + // that start before and end after the duration, then run the following steps: |
| + // NOTE: Currently we assume that the media engine is able to render |
| + // partial frames/cues. If a media engine gets added that doesn't support |
| + // this, then we'll need to add logic to handle the substeps. |
| - // 6. Update the media controller duration to new duration and run the HTMLMediaElement duration change algorithm. |
| + // 6. Update the media controller duration to new duration and run the |
| + // HTMLMediaElement duration change algorithm. |
| m_attachedElement->durationChanged(newDuration, requestSeek); |
| } |
| @@ -647,17 +673,20 @@ void MediaSource::clearLiveSeekableRange(ExceptionState& exceptionState) { |
| void MediaSource::endOfStreamInternal( |
| const WebMediaSource::EndOfStreamStatus eosStatus, |
| ExceptionState& exceptionState) { |
| - // 2.2 http://www.w3.org/TR/media-source/#widl-MediaSource-endOfStream-void-EndOfStreamError-error |
| + // 2.2 |
| + // http://www.w3.org/TR/media-source/#widl-MediaSource-endOfStream-void-EndOfStreamError-error |
| // 1. If the readyState attribute is not in the "open" state then throw an |
| - // InvalidStateError exception and abort these steps. |
| - // 2. If the updating attribute equals true on any SourceBuffer in sourceBuffers, then throw an |
| - // InvalidStateError exception and abort these steps. |
| + // InvalidStateError exception and abort these steps. |
| + // 2. If the updating attribute equals true on any SourceBuffer in |
| + // sourceBuffers, then throw an InvalidStateError exception and abort these |
| + // steps. |
| if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState)) |
| return; |
| // 3. Run the end of stream algorithm with the error parameter set to error. |
| // 1. Change the readyState attribute value to "ended". |
| - // 2. Queue a task to fire a simple event named sourceended at the MediaSource. |
| + // 2. Queue a task to fire a simple event named sourceended at the |
| + // MediaSource. |
| setReadyState(endedKeyword()); |
| // 3. Do various steps based on |eosStatus|. |
| @@ -752,19 +781,21 @@ std::unique_ptr<WebSourceBuffer> MediaSource::createWebSourceBuffer( |
| return wrapUnique(webSourceBuffer); |
| case WebMediaSource::AddStatusNotSupported: |
| DCHECK(!webSourceBuffer); |
| - // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| - // Step 2: If type contains a MIME type ... that is not supported with the types |
| - // specified for the other SourceBuffer objects in sourceBuffers, then throw |
| - // a NotSupportedError exception and abort these steps. |
| + // 2.2 |
| + // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| + // Step 2: If type contains a MIME type ... that is not supported with the |
| + // types specified for the other SourceBuffer objects in sourceBuffers, |
| + // then throw a NotSupportedError exception and abort these steps. |
| logAndThrowDOMException( |
| exceptionState, NotSupportedError, |
| "The type provided ('" + type + "') is not supported."); |
| return nullptr; |
| case WebMediaSource::AddStatusReachedIdLimit: |
| DCHECK(!webSourceBuffer); |
| - // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| - // Step 3: If the user agent can't handle any more SourceBuffer objects then throw |
| - // a QuotaExceededError exception and abort these steps. |
| + // 2.2 |
| + // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| + // Step 3: If the user agent can't handle any more SourceBuffer objects |
| + // then throw a QuotaExceededError exception and abort these steps. |
| logAndThrowDOMException(exceptionState, QuotaExceededError, |
| "This MediaSource has reached the limit of " |
| "SourceBuffer objects it can handle. No " |