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

Unified Diff: Source/modules/mediasource/SourceBuffer.cpp

Issue 266453005: Apply TypeChecking to MediaSource IDLs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Undo too eager removal; Fixup test; Mark remove() args unrestricted. Created 6 years, 8 months 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 side-by-side diff with in-line comments
Download patch
Index: Source/modules/mediasource/SourceBuffer.cpp
diff --git a/Source/modules/mediasource/SourceBuffer.cpp b/Source/modules/mediasource/SourceBuffer.cpp
index 026e9da91d01317c0a67d3ec9d32831b4cff76b0..919390a79742dac718611614c807e5f862e2a791 100644
--- a/Source/modules/mediasource/SourceBuffer.cpp
+++ b/Source/modules/mediasource/SourceBuffer.cpp
@@ -125,23 +125,19 @@ void SourceBuffer::setMode(const AtomicString& newMode, ExceptionState& exceptio
{
// Section 3.1 On setting mode attribute steps.
// 1. Let new mode equal the new value being assigned to this attribute.
- // 2. If new mode does not equal "segments" or "sequence", then throw an INVALID_ACCESS_ERR exception and abort
- // these steps.
- // Step 2 is unnecessary: IDL enforcement prevents this case and should just return immediately to script
- // without calling this method in this case.
- // 3. If this object has been removed from the sourceBuffers attribute of the parent media source, then throw
+ // 2. If this object has been removed from the sourceBuffers attribute of the parent media source, then throw
// an INVALID_STATE_ERR exception and abort these steps.
- // 4. If the updating attribute equals true, then throw an INVALID_STATE_ERR exception and abort these steps.
+ // 3. If the updating attribute equals true, then throw an INVALID_STATE_ERR exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionState))
return;
- // 5. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
- // 5.1 Set the readyState attribute of the parent media source to "open"
- // 5.2 Queue a task to fire a simple event named sourceopen at the parent media source.
+ // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
+ // 4.1 Set the readyState attribute of the parent media source to "open"
+ // 4.2 Queue a task to fire a simple event named sourceopen at the parent media source.
m_source->openIfInEndedState();
- // 6. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALID_STATE_ERR and abort these steps.
- // 7. If the new mode equals "sequence", then set the group start timestamp to the highest presentation end timestamp.
+ // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALID_STATE_ERR and abort these steps.
+ // 6. If the new mode equals "sequence", then set the group start timestamp to the highest presentation end timestamp.
WebSourceBuffer::AppendMode appendMode = WebSourceBuffer::AppendModeSegments;
if (newMode == sequenceKeyword())
appendMode = WebSourceBuffer::AppendModeSequence;
@@ -150,7 +146,7 @@ void SourceBuffer::setMode(const AtomicString& newMode, ExceptionState& exceptio
return;
}
- // 8. Update the attribute to new mode.
+ // 7. Update the attribute to new mode.
m_mode = newMode;
}
@@ -176,6 +172,8 @@ double SourceBuffer::timestampOffset() const
void SourceBuffer::setTimestampOffset(double offset, ExceptionState& exceptionState)
{
// Enforce throwing an exception on restricted double values.
+ // (Needs TypeChecking=Unrestricted to apply to attributes before it can be
Nils Barth (inactive) 2014/05/01 01:08:46 Could you add a link to the bug here so I can grep
+ // removed.)
if (!std::isfinite(offset)) {
exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(offset));
return;
@@ -213,6 +211,8 @@ double SourceBuffer::appendWindowStart() const
void SourceBuffer::setAppendWindowStart(double start, ExceptionState& exceptionState)
{
// Enforce throwing an exception on restricted double values.
+ // (Needs TypeChecking=Unrestricted to apply to attributes before it can be
Nils Barth (inactive) 2014/05/01 01:08:46 http://crbug.com/354298
+ // removed.)
if (!std::isfinite(start)) {
exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(start));
return;
@@ -275,12 +275,6 @@ void SourceBuffer::appendBuffer(PassRefPtr<ArrayBuffer> data, ExceptionState& ex
{
// Section 3.2 appendBuffer()
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
- // 1. If data is null then throw an InvalidAccessError exception and abort these steps.
- if (!data) {
- exceptionState.throwDOMException(InvalidAccessError, "The ArrayBuffer provided is invalid.");
- return;
- }
-
appendBufferInternal(static_cast<const unsigned char*>(data->data()), data->byteLength(), exceptionState);
}
@@ -288,12 +282,6 @@ void SourceBuffer::appendBuffer(PassRefPtr<ArrayBufferView> data, ExceptionState
{
// Section 3.2 appendBuffer()
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
- // 1. If data is null then throw an InvalidAccessError exception and abort these steps.
- if (!data) {
- exceptionState.throwDOMException(InvalidAccessError, "The ArrayBuffer provided is invalid.");
- return;
- }
-
appendBufferInternal(static_cast<const unsigned char*>(data->baseAddress()), data->byteLength(), exceptionState);
}
@@ -492,29 +480,30 @@ void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size
// Section 3.2 appendBuffer()
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
- // Step 1 is enforced by the caller.
- // 2. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps.
- // 3. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. Run the prepare append algorithm.
+ // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#sourcebuffer-prepare-append
+ // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps.
+ // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionState))
return;
TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::appendBuffer", this);
- // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps: ...
+ // 3. If the readyState attribute of the parent media source is in the "ended" state then run the following steps: ...
m_source->openIfInEndedState();
- // Steps 5-6
+ // Steps 4-5 - end "prepare append" algorithm.
- // 7. Add data to the end of the input buffer.
+ // 2. Add data to the end of the input buffer.
m_pendingAppendData.append(data, size);
- // 8. Set the updating attribute to true.
+ // 3. Set the updating attribute to true.
m_updating = true;
- // 9. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
+ // 4. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
scheduleEvent(EventTypeNames::updatestart);
- // 10. Asynchronously run the buffer append algorithm.
+ // 5. Asynchronously run the buffer append algorithm.
m_appendBufferAsyncPartRunner.runAsync();
TRACE_EVENT_ASYNC_STEP_INTO0("media", "SourceBuffer::appendBuffer", this, "waiting");
@@ -580,13 +569,13 @@ void SourceBuffer::appendStreamInternal(PassRefPtrWillBeRawPtr<Stream> stream, E
{
// Section 3.2 appendStream()
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize
- // 1. If stream is null then throw an InvalidAccessError exception and abort these steps.
- if (!stream || stream->isNeutered()) {
- exceptionState.throwDOMException(InvalidAccessError, stream ? "The stream provided has been neutered." : "The stream provided is invalid.");
+ // (0. If the stream has been neutered, then throw an InvalidAccessError exception and abort these steps.)
+ if (stream->isNeutered()) {
+ exceptionState.throwDOMException(InvalidAccessError, "The stream provided has been neutered.");
return;
}
- // 2. Run the prepare append algorithm.
+ // 1. Run the prepare append algorithm.
// Section 3.5.4 Prepare Append Algorithm.
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#sourcebuffer-prepare-append
// 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps.
@@ -601,13 +590,13 @@ void SourceBuffer::appendStreamInternal(PassRefPtrWillBeRawPtr<Stream> stream, E
// Steps 4-5 of the prepare append algorithm are handled by m_webSourceBuffer.
- // 3. Set the updating attribute to true.
+ // 2. Set the updating attribute to true.
m_updating = true;
- // 4. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
+ // 3. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
scheduleEvent(EventTypeNames::updatestart);
- // 5. Asynchronously run the stream append loop algorithm with stream and maxSize.
+ // 4. Asynchronously run the stream append loop algorithm with stream and maxSize.
stream->neuter();
m_loader = adoptPtr(new FileReaderLoader(FileReaderLoader::ReadByClient, this));

Powered by Google App Engine
This is Rietveld 408576698