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

Side by Side Diff: third_party/WebKit/Source/modules/mediasource/MediaSource.cpp

Issue 2315113002: MSE: Throw TypeError instead of InvalidAccessError per spec update (Closed)
Patch Set: addSourceBuffer(null) is really addSourceBuffer("null") in at least Blink Created 4 years, 3 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
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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 BLINK_MSLOG << __func__ << " this=" << this; 129 BLINK_MSLOG << __func__ << " this=" << this;
130 DCHECK(isClosed()); 130 DCHECK(isClosed());
131 } 131 }
132 132
133 void MediaSource::logAndThrowDOMException(ExceptionState& exceptionState, const ExceptionCode& error, const String& message) 133 void MediaSource::logAndThrowDOMException(ExceptionState& exceptionState, const ExceptionCode& error, const String& message)
134 { 134 {
135 BLINK_MSLOG << __func__ << " (error=" << error << ", message=" << message << ")"; 135 BLINK_MSLOG << __func__ << " (error=" << error << ", message=" << message << ")";
136 exceptionState.throwDOMException(error, message); 136 exceptionState.throwDOMException(error, message);
137 } 137 }
138 138
139 void MediaSource::logAndThrowTypeError(ExceptionState& exceptionState, const Str ing& message)
140 {
141 BLINK_MSLOG << __func__ << " (message=" << message << ")";
142 exceptionState.throwTypeError(message);
143 }
144
139 SourceBuffer* MediaSource::addSourceBuffer(const String& type, ExceptionState& e xceptionState) 145 SourceBuffer* MediaSource::addSourceBuffer(const String& type, ExceptionState& e xceptionState)
140 { 146 {
141 BLINK_MSLOG << __func__ << " this=" << this << " type=" << type; 147 BLINK_MSLOG << __func__ << " this=" << this << " type=" << type;
142 148
143 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media -source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type 149 // 2.2 https://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer- SourceBuffer-DOMString-type/
144 // 1. If type is an empty string then throw an InvalidAccessError exception 150 // 1. If type is an empty string then throw a TypeError exception
145 // and abort these steps. 151 // and abort these steps.
146 if (type.isEmpty()) { 152 if (type.isEmpty()) {
147 logAndThrowDOMException(exceptionState, InvalidAccessError, "The type pr ovided is empty."); 153 logAndThrowTypeError(exceptionState, "The type provided is empty");
148 return 0; 154 return 0;
149 } 155 }
150 156
151 // 2. If type contains a MIME type that is not supported ..., then throw a 157 // 2. If type contains a MIME type that is not supported ..., then throw a
152 // NotSupportedError exception and abort these steps. 158 // NotSupportedError exception and abort these steps.
153 if (!isTypeSupported(type)) { 159 if (!isTypeSupported(type)) {
154 logAndThrowDOMException(exceptionState, NotSupportedError, "The type pro vided ('" + type + "') is unsupported."); 160 logAndThrowDOMException(exceptionState, NotSupportedError, "The type pro vided ('" + type + "') is unsupported.");
155 return 0; 161 return 0;
156 } 162 }
157 163
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 sourceBuffer->videoTracks().trackSelected(track->id()); 440 sourceBuffer->videoTracks().trackSelected(track->id());
435 sourceBuffer->videoTracks().scheduleChangeEvent(); 441 sourceBuffer->videoTracks().scheduleChangeEvent();
436 } 442 }
437 443
438 bool isActive = (sourceBuffer->videoTracks().selectedIndex() != -1) || sourc eBuffer->audioTracks().hasEnabledTrack(); 444 bool isActive = (sourceBuffer->videoTracks().selectedIndex() != -1) || sourc eBuffer->audioTracks().hasEnabledTrack();
439 setSourceBufferActive(sourceBuffer, isActive); 445 setSourceBufferActive(sourceBuffer, isActive);
440 } 446 }
441 447
442 void MediaSource::setDuration(double duration, ExceptionState& exceptionState) 448 void MediaSource::setDuration(double duration, ExceptionState& exceptionState)
443 { 449 {
444 // 2.1 http://www.w3.org/TR/media-source/#widl-MediaSource-duration 450 // 2.1 https://www.w3.org/TR/media-source/#widl-MediaSource-duration
445 // 1. If the value being set is negative or NaN then throw an InvalidAccessE rror 451 // 1. If the value being set is negative or NaN then throw a TypeError
446 // exception and abort these steps. 452 // exception and abort these steps.
447 if (std::isnan(duration)) { 453 if (std::isnan(duration)) {
448 logAndThrowDOMException(exceptionState, InvalidAccessError, ExceptionMes sages::notAFiniteNumber(duration, "duration")); 454 logAndThrowTypeError(exceptionState, ExceptionMessages::notAFiniteNumber (duration, "duration"));
449 return; 455 return;
450 } 456 }
451 if (duration < 0.0) { 457 if (duration < 0.0) {
452 logAndThrowDOMException(exceptionState, InvalidAccessError, ExceptionMes sages::indexExceedsMinimumBound("duration", duration, 0.0)); 458 logAndThrowTypeError(exceptionState, ExceptionMessages::indexExceedsMini mumBound("duration", duration, 0.0));
453 return; 459 return;
454 } 460 }
455 461
456 // 2. If the readyState attribute is not "open" then throw an InvalidStateEr ror 462 // 2. If the readyState attribute is not "open" then throw an InvalidStateEr ror
457 // exception and abort these steps. 463 // exception and abort these steps.
458 // 3. If the updating attribute equals true on any SourceBuffer in sourceBuf fers, 464 // 3. If the updating attribute equals true on any SourceBuffer in sourceBuf fers,
459 // then throw an InvalidStateError exception and abort these steps. 465 // then throw an InvalidStateError exception and abort these steps.
460 if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState) ) 466 if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState) )
461 return; 467 return;
462 468
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 // 2. If the updating attribute equals true on any SourceBuffer in 569 // 2. If the updating attribute equals true on any SourceBuffer in
564 // SourceBuffers, then throw an InvalidStateError exception and abort 570 // SourceBuffers, then throw an InvalidStateError exception and abort
565 // these steps. 571 // these steps.
566 // Note: https://github.com/w3c/media-source/issues/118, once fixed, will 572 // Note: https://github.com/w3c/media-source/issues/118, once fixed, will
567 // remove the updating check (step 2). We skip that check here already. 573 // remove the updating check (step 2). We skip that check here already.
568 if (throwExceptionIfClosed(isOpen(), exceptionState)) 574 if (throwExceptionIfClosed(isOpen(), exceptionState))
569 return; 575 return;
570 576
571 // 3. If start is negative or greater than end, then throw a TypeError 577 // 3. If start is negative or greater than end, then throw a TypeError
572 // exception and abort these steps. 578 // exception and abort these steps.
573 if (start < 0 || start > end) { 579 if (start < 0 || start > end) {
chcunningham 2016/09/07 18:36:05 Note that we let start == end here. That allolwed
wolenetz 2016/09/07 21:09:26 This is intended. It allows an app to direct the U
574 exceptionState.throwTypeError(ExceptionMessages::indexOutsideRange("star t value", start, 0.0, ExceptionMessages::InclusiveBound, end, ExceptionMessages: :InclusiveBound)); 580 logAndThrowTypeError(exceptionState, ExceptionMessages::indexOutsideRang e("start value", start, 0.0, ExceptionMessages::InclusiveBound, end, ExceptionMe ssages::InclusiveBound));
575 return; 581 return;
576 } 582 }
577 583
578 // 4. Set live seekable range to be a new normalized TimeRanges object 584 // 4. Set live seekable range to be a new normalized TimeRanges object
579 // containing a single range whose start position is start and end 585 // containing a single range whose start position is start and end
580 // position is end. 586 // position is end.
581 m_liveSeekableRange = TimeRanges::create(start, end); 587 m_liveSeekableRange = TimeRanges::create(start, end);
582 } 588 }
583 589
584 void MediaSource::clearLiveSeekableRange(ExceptionState& exceptionState) 590 void MediaSource::clearLiveSeekableRange(ExceptionState& exceptionState)
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 747
742 m_asyncEventQueue->enqueueEvent(event); 748 m_asyncEventQueue->enqueueEvent(event);
743 } 749 }
744 750
745 URLRegistry& MediaSource::registry() const 751 URLRegistry& MediaSource::registry() const
746 { 752 {
747 return MediaSourceRegistry::registry(); 753 return MediaSourceRegistry::registry();
748 } 754 }
749 755
750 } // namespace blink 756 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698