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

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

Issue 266453005: Apply TypeChecking to MediaSource IDLs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Use MAX_VALUE instead of POS_INF. Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 const AtomicString& SourceBuffer::sequenceKeyword() 118 const AtomicString& SourceBuffer::sequenceKeyword()
119 { 119 {
120 DEFINE_STATIC_LOCAL(const AtomicString, sequence, ("sequence", AtomicString: :ConstructFromLiteral)); 120 DEFINE_STATIC_LOCAL(const AtomicString, sequence, ("sequence", AtomicString: :ConstructFromLiteral));
121 return sequence; 121 return sequence;
122 } 122 }
123 123
124 void SourceBuffer::setMode(const AtomicString& newMode, ExceptionState& exceptio nState) 124 void SourceBuffer::setMode(const AtomicString& newMode, ExceptionState& exceptio nState)
125 { 125 {
126 // Section 3.1 On setting mode attribute steps. 126 // Section 3.1 On setting mode attribute steps.
127 // 1. Let new mode equal the new value being assigned to this attribute. 127 // 1. Let new mode equal the new value being assigned to this attribute.
128 // 2. If new mode does not equal "segments" or "sequence", then throw an INV ALID_ACCESS_ERR exception and abort 128 // 2. If this object has been removed from the sourceBuffers attribute of th e parent media source, then throw
129 // these steps.
130 // Step 2 is unnecessary: IDL enforcement prevents this case and should j ust return immediately to script
131 // without calling this method in this case.
132 // 3. If this object has been removed from the sourceBuffers attribute of th e parent media source, then throw
133 // an INVALID_STATE_ERR exception and abort these steps. 129 // an INVALID_STATE_ERR exception and abort these steps.
134 // 4. If the updating attribute equals true, then throw an INVALID_STATE_ERR exception and abort these steps. 130 // 3. If the updating attribute equals true, then throw an INVALID_STATE_ERR exception and abort these steps.
135 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e)) 131 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e))
136 return; 132 return;
137 133
138 // 5. If the readyState attribute of the parent media source is in the "ende d" state then run the following steps: 134 // 4. If the readyState attribute of the parent media source is in the "ende d" state then run the following steps:
139 // 5.1 Set the readyState attribute of the parent media source to "open" 135 // 4.1 Set the readyState attribute of the parent media source to "open"
140 // 5.2 Queue a task to fire a simple event named sourceopen at the parent me dia source. 136 // 4.2 Queue a task to fire a simple event named sourceopen at the parent me dia source.
141 m_source->openIfInEndedState(); 137 m_source->openIfInEndedState();
142 138
143 // 6. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALI D_STATE_ERR and abort these steps. 139 // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALI D_STATE_ERR and abort these steps.
144 // 7. If the new mode equals "sequence", then set the group start timestamp to the highest presentation end timestamp. 140 // 6. If the new mode equals "sequence", then set the group start timestamp to the highest presentation end timestamp.
145 WebSourceBuffer::AppendMode appendMode = WebSourceBuffer::AppendModeSegments ; 141 WebSourceBuffer::AppendMode appendMode = WebSourceBuffer::AppendModeSegments ;
146 if (newMode == sequenceKeyword()) 142 if (newMode == sequenceKeyword())
147 appendMode = WebSourceBuffer::AppendModeSequence; 143 appendMode = WebSourceBuffer::AppendModeSequence;
148 if (!m_webSourceBuffer->setMode(appendMode)) { 144 if (!m_webSourceBuffer->setMode(appendMode)) {
149 exceptionState.throwDOMException(InvalidStateError, "The mode may not be set while the SourceBuffer's append state is 'PARSING_MEDIA_SEGMENT'."); 145 exceptionState.throwDOMException(InvalidStateError, "The mode may not be set while the SourceBuffer's append state is 'PARSING_MEDIA_SEGMENT'.");
150 return; 146 return;
151 } 147 }
152 148
153 // 8. Update the attribute to new mode. 149 // 7. Update the attribute to new mode.
154 m_mode = newMode; 150 m_mode = newMode;
155 } 151 }
156 152
157 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionState& exceptionState) co nst 153 PassRefPtr<TimeRanges> SourceBuffer::buffered(ExceptionState& exceptionState) co nst
158 { 154 {
159 // Section 3.1 buffered attribute steps. 155 // Section 3.1 buffered attribute steps.
160 // 1. If this object has been removed from the sourceBuffers attribute of th e parent media source then throw an 156 // 1. If this object has been removed from the sourceBuffers attribute of th e parent media source then throw an
161 // InvalidStateError exception and abort these steps. 157 // InvalidStateError exception and abort these steps.
162 if (isRemoved()) { 158 if (isRemoved()) {
163 exceptionState.throwDOMException(InvalidStateError, "This SourceBuffer h as been removed from the parent media source."); 159 exceptionState.throwDOMException(InvalidStateError, "This SourceBuffer h as been removed from the parent media source.");
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 m_webSourceBuffer->setAppendWindowEnd(end); 255 m_webSourceBuffer->setAppendWindowEnd(end);
260 256
261 // 5. Update the attribute to the new value. 257 // 5. Update the attribute to the new value.
262 m_appendWindowEnd = end; 258 m_appendWindowEnd = end;
263 } 259 }
264 260
265 void SourceBuffer::appendBuffer(PassRefPtr<ArrayBuffer> data, ExceptionState& ex ceptionState) 261 void SourceBuffer::appendBuffer(PassRefPtr<ArrayBuffer> data, ExceptionState& ex ceptionState)
266 { 262 {
267 // Section 3.2 appendBuffer() 263 // Section 3.2 appendBuffer()
268 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data 264 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
269 // 1. If data is null then throw an InvalidAccessError exception and abort t hese steps.
270 if (!data) {
271 exceptionState.throwDOMException(InvalidAccessError, "The ArrayBuffer pr ovided is invalid.");
272 return;
273 }
274
275 appendBufferInternal(static_cast<const unsigned char*>(data->data()), data-> byteLength(), exceptionState); 265 appendBufferInternal(static_cast<const unsigned char*>(data->data()), data-> byteLength(), exceptionState);
276 } 266 }
277 267
278 void SourceBuffer::appendBuffer(PassRefPtr<ArrayBufferView> data, ExceptionState & exceptionState) 268 void SourceBuffer::appendBuffer(PassRefPtr<ArrayBufferView> data, ExceptionState & exceptionState)
279 { 269 {
280 // Section 3.2 appendBuffer() 270 // Section 3.2 appendBuffer()
281 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data 271 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
282 // 1. If data is null then throw an InvalidAccessError exception and abort t hese steps.
283 if (!data) {
284 exceptionState.throwDOMException(InvalidAccessError, "The ArrayBuffer pr ovided is invalid.");
285 return;
286 }
287
288 appendBufferInternal(static_cast<const unsigned char*>(data->baseAddress()), data->byteLength(), exceptionState); 272 appendBufferInternal(static_cast<const unsigned char*>(data->baseAddress()), data->byteLength(), exceptionState);
289 } 273 }
290 274
291 void SourceBuffer::appendStream(PassRefPtrWillBeRawPtr<Stream> stream, Exception State& exceptionState) 275 void SourceBuffer::appendStream(PassRefPtrWillBeRawPtr<Stream> stream, Exception State& exceptionState)
292 { 276 {
293 m_streamMaxSizeValid = false; 277 m_streamMaxSizeValid = false;
294 appendStreamInternal(stream, exceptionState); 278 appendStreamInternal(stream, exceptionState);
295 } 279 }
296 280
297 void SourceBuffer::appendStream(PassRefPtrWillBeRawPtr<Stream> stream, unsigned long long maxSize, ExceptionState& exceptionState) 281 void SourceBuffer::appendStream(PassRefPtrWillBeRawPtr<Stream> stream, unsigned long long maxSize, ExceptionState& exceptionState)
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 event->setTarget(this); 460 event->setTarget(this);
477 461
478 m_asyncEventQueue->enqueueEvent(event.release()); 462 m_asyncEventQueue->enqueueEvent(event.release());
479 } 463 }
480 464
481 void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size , ExceptionState& exceptionState) 465 void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size , ExceptionState& exceptionState)
482 { 466 {
483 // Section 3.2 appendBuffer() 467 // Section 3.2 appendBuffer()
484 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data 468 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data
485 469
486 // Step 1 is enforced by the caller. 470 // 1. Run the prepare append algorithm.
487 // 2. If this object has been removed from the sourceBuffers attribute of th e parent media source then throw an InvalidStateError exception and abort these steps. 471 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#sourcebuffer-prepare-append
488 // 3. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps. 472 // 1. If this object has been removed from the sourceBuffers attribute of t he parent media source then throw an InvalidStateError exception and abort these steps.
473 // 2. If the updating attribute equals true, then throw an InvalidStateErro r exception and abort these steps.
489 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e)) 474 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e))
490 return; 475 return;
491 476
492 TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::appendBuffer", this); 477 TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::appendBuffer", this);
493 478
494 // 4. If the readyState attribute of the parent media source is in the "ende d" state then run the following steps: ... 479 // 3. If the readyState attribute of the parent media source is in the "end ed" state then run the following steps: ...
495 m_source->openIfInEndedState(); 480 m_source->openIfInEndedState();
496 481
497 // Steps 5-6 482 // Steps 4-5 - end "prepare append" algorithm.
498 483
499 // 7. Add data to the end of the input buffer. 484 // 2. Add data to the end of the input buffer.
500 m_pendingAppendData.append(data, size); 485 m_pendingAppendData.append(data, size);
501 486
502 // 8. Set the updating attribute to true. 487 // 3. Set the updating attribute to true.
503 m_updating = true; 488 m_updating = true;
504 489
505 // 9. Queue a task to fire a simple event named updatestart at this SourceBu ffer object. 490 // 4. Queue a task to fire a simple event named updatestart at this SourceBu ffer object.
506 scheduleEvent(EventTypeNames::updatestart); 491 scheduleEvent(EventTypeNames::updatestart);
507 492
508 // 10. Asynchronously run the buffer append algorithm. 493 // 5. Asynchronously run the buffer append algorithm.
509 m_appendBufferAsyncPartRunner.runAsync(); 494 m_appendBufferAsyncPartRunner.runAsync();
510 495
511 TRACE_EVENT_ASYNC_STEP_INTO0("media", "SourceBuffer::appendBuffer", this, "w aiting"); 496 TRACE_EVENT_ASYNC_STEP_INTO0("media", "SourceBuffer::appendBuffer", this, "w aiting");
512 } 497 }
513 498
514 void SourceBuffer::appendBufferAsyncPart() 499 void SourceBuffer::appendBufferAsyncPart()
515 { 500 {
516 ASSERT(m_updating); 501 ASSERT(m_updating);
517 502
518 TRACE_EVENT_ASYNC_STEP_INTO0("media", "SourceBuffer::appendBuffer", this, "a ppending"); 503 TRACE_EVENT_ASYNC_STEP_INTO0("media", "SourceBuffer::appendBuffer", this, "a ppending");
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 scheduleEvent(EventTypeNames::update); 549 scheduleEvent(EventTypeNames::update);
565 550
566 // 12. Queue a task to fire a simple event named updateend at this SourceBuf fer object. 551 // 12. Queue a task to fire a simple event named updateend at this SourceBuf fer object.
567 scheduleEvent(EventTypeNames::updateend); 552 scheduleEvent(EventTypeNames::updateend);
568 } 553 }
569 554
570 void SourceBuffer::appendStreamInternal(PassRefPtrWillBeRawPtr<Stream> stream, E xceptionState& exceptionState) 555 void SourceBuffer::appendStreamInternal(PassRefPtrWillBeRawPtr<Stream> stream, E xceptionState& exceptionState)
571 { 556 {
572 // Section 3.2 appendStream() 557 // Section 3.2 appendStream()
573 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-ma xSize 558 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-ma xSize
574 // 1. If stream is null then throw an InvalidAccessError exception and abort these steps. 559 // (0. If the stream has been neutered, then throw an InvalidAccessError exc eption and abort these steps.)
575 if (!stream || stream->isNeutered()) { 560 if (stream->isNeutered()) {
576 exceptionState.throwDOMException(InvalidAccessError, stream ? "The strea m provided has been neutered." : "The stream provided is invalid."); 561 exceptionState.throwDOMException(InvalidAccessError, "The stream provide d has been neutered.");
577 return; 562 return;
578 } 563 }
579 564
580 // 2. Run the prepare append algorithm. 565 // 1. Run the prepare append algorithm.
581 // Section 3.5.4 Prepare Append Algorithm. 566 // Section 3.5.4 Prepare Append Algorithm.
582 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-so urce.html#sourcebuffer-prepare-append 567 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-so urce.html#sourcebuffer-prepare-append
583 // 1. If this object has been removed from the sourceBuffers attribute of t he parent media source then throw an InvalidStateError exception and abort these steps. 568 // 1. If this object has been removed from the sourceBuffers attribute of t he parent media source then throw an InvalidStateError exception and abort these steps.
584 // 2. If the updating attribute equals true, then throw an InvalidStateErro r exception and abort these steps. 569 // 2. If the updating attribute equals true, then throw an InvalidStateErro r exception and abort these steps.
585 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e)) 570 if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating, exceptionStat e))
586 return; 571 return;
587 572
588 TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::appendStream", this); 573 TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::appendStream", this);
589 574
590 // 3. If the readyState attribute of the parent media source is in the "end ed" state then run the following steps: ... 575 // 3. If the readyState attribute of the parent media source is in the "end ed" state then run the following steps: ...
591 m_source->openIfInEndedState(); 576 m_source->openIfInEndedState();
592 577
593 // Steps 4-5 of the prepare append algorithm are handled by m_webSourceBuffe r. 578 // Steps 4-5 of the prepare append algorithm are handled by m_webSourceBuffe r.
594 579
595 // 3. Set the updating attribute to true. 580 // 2. Set the updating attribute to true.
596 m_updating = true; 581 m_updating = true;
597 582
598 // 4. Queue a task to fire a simple event named updatestart at this SourceBu ffer object. 583 // 3. Queue a task to fire a simple event named updatestart at this SourceBu ffer object.
599 scheduleEvent(EventTypeNames::updatestart); 584 scheduleEvent(EventTypeNames::updatestart);
600 585
601 // 5. Asynchronously run the stream append loop algorithm with stream and ma xSize. 586 // 4. Asynchronously run the stream append loop algorithm with stream and ma xSize.
602 587
603 stream->neuter(); 588 stream->neuter();
604 m_loader = adoptPtr(new FileReaderLoader(FileReaderLoader::ReadByClient, thi s)); 589 m_loader = adoptPtr(new FileReaderLoader(FileReaderLoader::ReadByClient, thi s));
605 m_stream = stream; 590 m_stream = stream;
606 m_appendStreamAsyncPartRunner.runAsync(); 591 m_appendStreamAsyncPartRunner.runAsync();
607 } 592 }
608 593
609 void SourceBuffer::appendStreamAsyncPart() 594 void SourceBuffer::appendStreamAsyncPart()
610 { 595 {
611 ASSERT(m_updating); 596 ASSERT(m_updating);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 appendStreamDone(false); 683 appendStreamDone(false);
699 } 684 }
700 685
701 void SourceBuffer::trace(Visitor* visitor) 686 void SourceBuffer::trace(Visitor* visitor)
702 { 687 {
703 visitor->trace(m_source); 688 visitor->trace(m_source);
704 visitor->trace(m_stream); 689 visitor->trace(m_stream);
705 } 690 }
706 691
707 } // namespace WebCore 692 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/mediasource/MediaSourceBase.cpp ('k') | Source/modules/mediasource/SourceBuffer.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698