Chromium Code Reviews| Index: Source/core/html/HTMLMediaElement.cpp |
| diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp |
| index cec3e8f28f9a7b68d9fdd7a07390770f9473bf65..27068e630e3f06cda9735cb477c1c8cb5e7ca31a 100644 |
| --- a/Source/core/html/HTMLMediaElement.cpp |
| +++ b/Source/core/html/HTMLMediaElement.cpp |
| @@ -50,8 +50,6 @@ |
| #include "core/html/MediaController.h" |
| #include "core/html/MediaError.h" |
| #include "core/html/MediaFragmentURIParser.h" |
| -#include "core/html/MediaKeyError.h" |
| -#include "core/html/MediaKeyEvent.h" |
| #include "core/html/TimeRanges.h" |
| #include "core/html/shadow/MediaControls.h" |
| #include "core/html/track/InbandTextTrack.h" |
| @@ -61,9 +59,6 @@ |
| #include "core/rendering/RenderLayerCompositor.h" |
| #include "core/rendering/RenderVideo.h" |
| #include "core/rendering/RenderView.h" |
| -// FIXME: Remove dependency on modules/encryptedmedia (http://crbug.com/242754). |
| -#include "modules/encryptedmedia/MediaKeyNeededEvent.h" |
| -#include "modules/encryptedmedia/MediaKeys.h" |
| #include "platform/ContentType.h" |
| #include "platform/Language.h" |
| #include "platform/Logging.h" |
| @@ -151,26 +146,6 @@ static void removeElementFromDocumentMap(HTMLMediaElement* element, Document* do |
| map.add(document, set); |
| } |
| -static void throwExceptionForMediaKeyException(const String& keySystem, const String& sessionId, MediaPlayer::MediaKeyException exception, ExceptionState& exceptionState) |
| -{ |
| - switch (exception) { |
| - case MediaPlayer::NoError: |
| - return; |
| - case MediaPlayer::InvalidPlayerState: |
| - exceptionState.throwDOMException(InvalidStateError, "The player is in an invalid state."); |
| - return; |
| - case MediaPlayer::KeySystemNotSupported: |
| - exceptionState.throwDOMException(NotSupportedError, "The key system provided ('" + keySystem +"') is not supported."); |
| - return; |
| - case MediaPlayer::InvalidAccess: |
| - exceptionState.throwDOMException(InvalidAccessError, "The session ID provided ('" + sessionId + "') is invalid."); |
| - return; |
| - } |
| - |
| - ASSERT_NOT_REACHED(); |
| - return; |
| -} |
| - |
| class TrackDisplayUpdateScope { |
| public: |
| TrackDisplayUpdateScope(HTMLMediaElement* mediaElement) |
| @@ -307,7 +282,6 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum |
| #if ENABLE(WEB_AUDIO) |
| , m_audioSourceNode(0) |
| #endif |
| - , m_emeMode(EmeModeNotSelected) |
| { |
| ASSERT(RuntimeEnabledFeatures::mediaEnabled()); |
| @@ -349,8 +323,6 @@ HTMLMediaElement::~HTMLMediaElement() |
| closeMediaSource(); |
| - setMediaKeysInternal(0); |
| - |
| removeElementFromDocumentMap(this, &document()); |
| // Destroying the player may cause a resource load to be canceled, |
| @@ -549,12 +521,17 @@ void HTMLMediaElement::scheduleNextSourceChild() |
| m_loadTimer.startOneShot(0); |
| } |
| -void HTMLMediaElement::scheduleEvent(const AtomicString& eventName) |
| +void HTMLMediaElement::scheduleNamedEvent(const AtomicString& eventName) |
|
ddorwin
2014/03/01 01:08:48
Thank you for changing the name, but this introduc
c.shu
2014/03/02 15:35:06
Done.
|
| +{ |
| + scheduleEvent(Event::createCancelable(eventName)); |
| +} |
| + |
| +void HTMLMediaElement::scheduleEvent(PassRefPtr<Event> event) |
| { |
| #if LOG_MEDIA_EVENTS |
| - WTF_LOG(Media, "HTMLMediaElement::scheduleEvent - scheduling '%s'", eventName.ascii().data()); |
| + WTF_LOG(Media, "HTMLMediaElement::scheduleEvent - scheduling '%s'", event->type().ascii().data()); |
| #endif |
| - m_asyncEventQueue->enqueueEvent(Event::createCancelable(eventName)); |
| + m_asyncEventQueue->enqueueEvent(event); |
| } |
| void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*) |
| @@ -655,7 +632,7 @@ void HTMLMediaElement::prepareForLoad() |
| // 3 - If the media element's networkState is set to NETWORK_LOADING or NETWORK_IDLE, queue |
| // a task to fire a simple event named abort at the media element. |
| if (m_networkState == NETWORK_LOADING || m_networkState == NETWORK_IDLE) |
| - scheduleEvent(EventTypeNames::abort); |
| + scheduleNamedEvent(EventTypeNames::abort); |
| closeMediaSource(); |
| @@ -670,7 +647,7 @@ void HTMLMediaElement::prepareForLoad() |
| m_paused = true; |
| m_seeking = false; |
| invalidateCachedTime(); |
| - scheduleEvent(EventTypeNames::emptied); |
| + scheduleNamedEvent(EventTypeNames::emptied); |
| updateMediaController(); |
| if (RuntimeEnabledFeatures::videoTrackEnabled()) |
| updateActiveTextTrackCues(0); |
| @@ -769,7 +746,7 @@ void HTMLMediaElement::selectMediaResource() |
| m_networkState = NETWORK_LOADING; |
| // 5 - Queue a task to fire a simple event named loadstart at the media element. |
| - scheduleEvent(EventTypeNames::loadstart); |
| + scheduleNamedEvent(EventTypeNames::loadstart); |
| // 6 - If mode is attribute, then run these substeps |
| if (mode == attribute) { |
| @@ -1369,7 +1346,7 @@ void HTMLMediaElement::noneSupported() |
| m_networkState = NETWORK_NO_SOURCE; |
| // 7 - Queue a task to fire a simple event named error at the media element. |
| - scheduleEvent(EventTypeNames::error); |
| + scheduleNamedEvent(EventTypeNames::error); |
| closeMediaSource(); |
| @@ -1398,14 +1375,14 @@ void HTMLMediaElement::mediaEngineError(PassRefPtr<MediaError> err) |
| m_error = err; |
| // 3 - Queue a task to fire a simple event named error at the media element. |
| - scheduleEvent(EventTypeNames::error); |
| + scheduleNamedEvent(EventTypeNames::error); |
| closeMediaSource(); |
| // 4 - Set the element's networkState attribute to the NETWORK_EMPTY value and queue a |
| // task to fire a simple event called emptied at the element. |
| m_networkState = NETWORK_EMPTY; |
| - scheduleEvent(EventTypeNames::emptied); |
| + scheduleNamedEvent(EventTypeNames::emptied); |
| // 5 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event. |
| setShouldDelayLoadEvent(false); |
| @@ -1511,8 +1488,8 @@ void HTMLMediaElement::changeNetworkStateFromLoadingToIdle() |
| // Schedule one last progress event so we guarantee that at least one is fired |
| // for files that load very quickly. |
| - scheduleEvent(EventTypeNames::progress); |
| - scheduleEvent(EventTypeNames::suspend); |
| + scheduleNamedEvent(EventTypeNames::progress); |
| + scheduleNamedEvent(EventTypeNames::suspend); |
| m_networkState = NETWORK_IDLE; |
| } |
| @@ -1560,7 +1537,7 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state) |
| // it started seeking, but seeking caused its readyState attribute to change to a value |
| // lower than HAVE_FUTURE_DATA, then a waiting will be fired at the element. |
| if (wasPotentiallyPlaying && m_readyState < HAVE_FUTURE_DATA) |
| - scheduleEvent(EventTypeNames::waiting); |
| + scheduleNamedEvent(EventTypeNames::waiting); |
| // 4.8.10.9 steps 12-14 |
| if (m_readyState >= HAVE_CURRENT_DATA) |
| @@ -1569,16 +1546,16 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state) |
| if (wasPotentiallyPlaying && m_readyState < HAVE_FUTURE_DATA) { |
| // 4.8.10.8 |
| scheduleTimeupdateEvent(false); |
| - scheduleEvent(EventTypeNames::waiting); |
| + scheduleNamedEvent(EventTypeNames::waiting); |
| } |
| } |
| if (m_readyState >= HAVE_METADATA && oldState < HAVE_METADATA) { |
| prepareMediaFragmentURI(); |
| - scheduleEvent(EventTypeNames::durationchange); |
| + scheduleNamedEvent(EventTypeNames::durationchange); |
| if (isVideo()) |
| - scheduleEvent(EventTypeNames::resize); |
| - scheduleEvent(EventTypeNames::loadedmetadata); |
| + scheduleNamedEvent(EventTypeNames::resize); |
| + scheduleNamedEvent(EventTypeNames::loadedmetadata); |
| if (hasMediaControls()) |
| mediaControls()->reset(); |
| if (renderer()) |
| @@ -1590,34 +1567,34 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state) |
| if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_haveFiredLoadedData) { |
| m_haveFiredLoadedData = true; |
| shouldUpdateDisplayState = true; |
| - scheduleEvent(EventTypeNames::loadeddata); |
| + scheduleNamedEvent(EventTypeNames::loadeddata); |
| setShouldDelayLoadEvent(false); |
| applyMediaFragmentURI(); |
| } |
| bool isPotentiallyPlaying = potentiallyPlaying(); |
| if (m_readyState == HAVE_FUTURE_DATA && oldState <= HAVE_CURRENT_DATA && tracksAreReady) { |
| - scheduleEvent(EventTypeNames::canplay); |
| + scheduleNamedEvent(EventTypeNames::canplay); |
| if (isPotentiallyPlaying) |
| - scheduleEvent(EventTypeNames::playing); |
| + scheduleNamedEvent(EventTypeNames::playing); |
| shouldUpdateDisplayState = true; |
| } |
| if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA && tracksAreReady) { |
| if (oldState <= HAVE_CURRENT_DATA) { |
| - scheduleEvent(EventTypeNames::canplay); |
| + scheduleNamedEvent(EventTypeNames::canplay); |
| if (isPotentiallyPlaying) |
| - scheduleEvent(EventTypeNames::playing); |
| + scheduleNamedEvent(EventTypeNames::playing); |
| } |
| if (m_autoplaying && m_paused && autoplay() && !document().isSandboxed(SandboxAutomaticFeatures) && !userGestureRequiredForPlay()) { |
| m_paused = false; |
| invalidateCachedTime(); |
| - scheduleEvent(EventTypeNames::play); |
| - scheduleEvent(EventTypeNames::playing); |
| + scheduleNamedEvent(EventTypeNames::play); |
| + scheduleNamedEvent(EventTypeNames::playing); |
| } |
| - scheduleEvent(EventTypeNames::canplaythrough); |
| + scheduleNamedEvent(EventTypeNames::canplaythrough); |
| shouldUpdateDisplayState = true; |
| } |
| @@ -1634,165 +1611,6 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state) |
| updateActiveTextTrackCues(currentTime()); |
| } |
| -void HTMLMediaElement::mediaPlayerKeyAdded(const String& keySystem, const String& sessionId) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::mediaPlayerKeyAdded"); |
| - |
| - MediaKeyEventInit initializer; |
| - initializer.keySystem = keySystem; |
| - initializer.sessionId = sessionId; |
| - initializer.bubbles = false; |
| - initializer.cancelable = false; |
| - |
| - RefPtr<Event> event = MediaKeyEvent::create(EventTypeNames::webkitkeyadded, initializer); |
| - event->setTarget(this); |
| - m_asyncEventQueue->enqueueEvent(event.release()); |
| -} |
| - |
| -void HTMLMediaElement::mediaPlayerKeyError(const String& keySystem, const String& sessionId, MediaPlayerClient::MediaKeyErrorCode errorCode, unsigned short systemCode) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::mediaPlayerKeyError: sessionID=%s, errorCode=%d, systemCode=%d", sessionId.utf8().data(), errorCode, systemCode); |
| - |
| - MediaKeyError::Code mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_UNKNOWN; |
| - switch (errorCode) { |
| - case MediaPlayerClient::UnknownError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_UNKNOWN; |
| - break; |
| - case MediaPlayerClient::ClientError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_CLIENT; |
| - break; |
| - case MediaPlayerClient::ServiceError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_SERVICE; |
| - break; |
| - case MediaPlayerClient::OutputError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_OUTPUT; |
| - break; |
| - case MediaPlayerClient::HardwareChangeError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_HARDWARECHANGE; |
| - break; |
| - case MediaPlayerClient::DomainError: |
| - mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_DOMAIN; |
| - break; |
| - } |
| - |
| - MediaKeyEventInit initializer; |
| - initializer.keySystem = keySystem; |
| - initializer.sessionId = sessionId; |
| - initializer.errorCode = MediaKeyError::create(mediaKeyErrorCode); |
| - initializer.systemCode = systemCode; |
| - initializer.bubbles = false; |
| - initializer.cancelable = false; |
| - |
| - RefPtr<Event> event = MediaKeyEvent::create(EventTypeNames::webkitkeyerror, initializer); |
| - event->setTarget(this); |
| - m_asyncEventQueue->enqueueEvent(event.release()); |
| -} |
| - |
| -void HTMLMediaElement::mediaPlayerKeyMessage(const String& keySystem, const String& sessionId, const unsigned char* message, unsigned messageLength, const KURL& defaultURL) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::mediaPlayerKeyMessage: sessionID=%s", sessionId.utf8().data()); |
| - |
| - MediaKeyEventInit initializer; |
| - initializer.keySystem = keySystem; |
| - initializer.sessionId = sessionId; |
| - initializer.message = Uint8Array::create(message, messageLength); |
| - initializer.defaultURL = defaultURL; |
| - initializer.bubbles = false; |
| - initializer.cancelable = false; |
| - |
| - RefPtr<Event> event = MediaKeyEvent::create(EventTypeNames::webkitkeymessage, initializer); |
| - event->setTarget(this); |
| - m_asyncEventQueue->enqueueEvent(event.release()); |
| -} |
| - |
| -// Create a MediaKeyNeededEvent for WD EME. |
| -static PassRefPtr<Event> createNeedKeyEvent(const String& contentType, const unsigned char* initData, unsigned initDataLength) |
| -{ |
| - MediaKeyNeededEventInit initializer; |
| - initializer.contentType = contentType; |
| - initializer.initData = Uint8Array::create(initData, initDataLength); |
| - initializer.bubbles = false; |
| - initializer.cancelable = false; |
| - |
| - return MediaKeyNeededEvent::create(EventTypeNames::needkey, initializer); |
| -} |
| - |
| -// Create a 'needkey' MediaKeyEvent for v0.1b EME. |
| -static PassRefPtr<Event> createWebkitNeedKeyEvent(const String& contentType, const unsigned char* initData, unsigned initDataLength) |
| -{ |
| - MediaKeyEventInit webkitInitializer; |
| - webkitInitializer.keySystem = String(); |
| - webkitInitializer.sessionId = String(); |
| - webkitInitializer.initData = Uint8Array::create(initData, initDataLength); |
| - webkitInitializer.bubbles = false; |
| - webkitInitializer.cancelable = false; |
| - |
| - return MediaKeyEvent::create(EventTypeNames::webkitneedkey, webkitInitializer); |
| -} |
| - |
| -bool HTMLMediaElement::mediaPlayerKeyNeeded(const String& contentType, const unsigned char* initData, unsigned initDataLength) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::mediaPlayerKeyNeeded: contentType=%s", contentType.utf8().data()); |
| - |
| - if (RuntimeEnabledFeatures::encryptedMediaEnabled()) { |
| - // Send event for WD EME. |
| - RefPtr<Event> event = createNeedKeyEvent(contentType, initData, initDataLength); |
| - event->setTarget(this); |
| - m_asyncEventQueue->enqueueEvent(event.release()); |
| - } |
| - |
| - if (RuntimeEnabledFeatures::prefixedEncryptedMediaEnabled()) { |
| - // Send event for v0.1b EME. |
| - RefPtr<Event> event = createWebkitNeedKeyEvent(contentType, initData, initDataLength); |
| - event->setTarget(this); |
| - m_asyncEventQueue->enqueueEvent(event.release()); |
| - } |
| - |
| - return true; |
| -} |
| - |
| -bool HTMLMediaElement::setEmeMode(EmeMode emeMode, ExceptionState& exceptionState) |
| -{ |
| - if (m_emeMode != EmeModeNotSelected && m_emeMode != emeMode) { |
| - exceptionState.throwDOMException(InvalidStateError, "Mixed use of EME prefixed and unprefixed API not allowed."); |
| - return false; |
| - } |
| - m_emeMode = emeMode; |
| - return true; |
| -} |
| - |
| -blink::WebContentDecryptionModule* HTMLMediaElement::contentDecryptionModule() |
| -{ |
| - return m_mediaKeys ? m_mediaKeys->contentDecryptionModule() : 0; |
| -} |
| - |
| -void HTMLMediaElement::setMediaKeysInternal(MediaKeys* mediaKeys) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::setMediaKeys"); |
| - if (m_mediaKeys == mediaKeys) |
| - return; |
| - |
| - ASSERT(m_emeMode = EmeModeUnprefixed); |
| - |
| - if (m_mediaKeys) |
| - m_mediaKeys->setMediaElement(0); |
| - m_mediaKeys = mediaKeys; |
| - if (m_mediaKeys) |
| - m_mediaKeys->setMediaElement(this); |
| - |
| - // If a player is connected, tell it that the CDM has changed. |
| - if (m_player) |
| - m_player->setContentDecryptionModule(contentDecryptionModule()); |
| -} |
| - |
| -void HTMLMediaElement::setMediaKeys(MediaKeys* mediaKeys, ExceptionState& exceptionState) |
| -{ |
| - if (!setEmeMode(EmeModeUnprefixed, exceptionState)) |
| - return; |
| - |
| - setMediaKeysInternal(mediaKeys); |
| -} |
| - |
| void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) |
| { |
| ASSERT(m_player); |
| @@ -1803,7 +1621,7 @@ void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) |
| double timedelta = time - m_previousProgressTime; |
| if (m_player->didLoadingProgress()) { |
| - scheduleEvent(EventTypeNames::progress); |
| + scheduleNamedEvent(EventTypeNames::progress); |
| m_previousProgressTime = time; |
| m_sentStalledEvent = false; |
| if (renderer()) |
| @@ -1811,7 +1629,7 @@ void HTMLMediaElement::progressEventTimerFired(Timer<HTMLMediaElement>*) |
| if (hasMediaControls()) |
| mediaControls()->bufferingProgressed(); |
| } else if (timedelta > 3.0 && !m_sentStalledEvent) { |
| - scheduleEvent(EventTypeNames::stalled); |
| + scheduleNamedEvent(EventTypeNames::stalled); |
| m_sentStalledEvent = true; |
| setShouldDelayLoadEvent(false); |
| } |
| @@ -1905,11 +1723,11 @@ void HTMLMediaElement::seek(double time, ExceptionState& exceptionState) |
| if (noSeekRequired) { |
| if (time == now) { |
| - scheduleEvent(EventTypeNames::seeking); |
| + scheduleNamedEvent(EventTypeNames::seeking); |
| // FIXME: There must be a stable state before timeupdate+seeked are dispatched and seeking |
| // is reset to false. See http://crbug.com/266631 |
| scheduleTimeupdateEvent(false); |
| - scheduleEvent(EventTypeNames::seeked); |
| + scheduleNamedEvent(EventTypeNames::seeked); |
| } |
| m_seeking = false; |
| return; |
| @@ -1924,7 +1742,7 @@ void HTMLMediaElement::seek(double time, ExceptionState& exceptionState) |
| m_sentEndEvent = false; |
| // 8 - Queue a task to fire a simple event named seeking at the element. |
| - scheduleEvent(EventTypeNames::seeking); |
| + scheduleNamedEvent(EventTypeNames::seeking); |
| // 9 - Set the current playback position to the given new playback position |
| m_player->seek(time); |
| @@ -1945,7 +1763,7 @@ void HTMLMediaElement::finishSeek() |
| scheduleTimeupdateEvent(false); |
| // 14 - Queue a task to fire a simple event named seeked at the element. |
| - scheduleEvent(EventTypeNames::seeked); |
| + scheduleNamedEvent(EventTypeNames::seeked); |
| setDisplayMode(Video); |
| } |
| @@ -2057,7 +1875,7 @@ void HTMLMediaElement::setDefaultPlaybackRate(double rate) |
| { |
| if (m_defaultPlaybackRate != rate) { |
| m_defaultPlaybackRate = rate; |
| - scheduleEvent(EventTypeNames::ratechange); |
| + scheduleNamedEvent(EventTypeNames::ratechange); |
| } |
| } |
| @@ -2073,7 +1891,7 @@ void HTMLMediaElement::setPlaybackRate(double rate) |
| if (m_playbackRate != rate) { |
| m_playbackRate = rate; |
| invalidateCachedTime(); |
| - scheduleEvent(EventTypeNames::ratechange); |
| + scheduleNamedEvent(EventTypeNames::ratechange); |
| } |
| if (m_player && potentiallyPlaying() && m_player->rate() != rate && !m_mediaController) |
| @@ -2153,12 +1971,12 @@ void HTMLMediaElement::playInternal() |
| if (m_paused) { |
| m_paused = false; |
| invalidateCachedTime(); |
| - scheduleEvent(EventTypeNames::play); |
| + scheduleNamedEvent(EventTypeNames::play); |
| if (m_readyState <= HAVE_CURRENT_DATA) |
| - scheduleEvent(EventTypeNames::waiting); |
| + scheduleNamedEvent(EventTypeNames::waiting); |
| else if (m_readyState >= HAVE_FUTURE_DATA) |
| - scheduleEvent(EventTypeNames::playing); |
| + scheduleNamedEvent(EventTypeNames::playing); |
| } |
| m_autoplaying = false; |
| @@ -2178,7 +1996,7 @@ void HTMLMediaElement::pause() |
| if (!m_paused) { |
| m_paused = true; |
| scheduleTimeupdateEvent(false); |
| - scheduleEvent(EventTypeNames::pause); |
| + scheduleNamedEvent(EventTypeNames::pause); |
| } |
| updatePlayState(); |
| @@ -2193,103 +2011,6 @@ void HTMLMediaElement::closeMediaSource() |
| m_mediaSource = nullptr; |
| } |
| -void HTMLMediaElement::webkitGenerateKeyRequest(const String& keySystem, PassRefPtr<Uint8Array> initData, ExceptionState& exceptionState) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::webkitGenerateKeyRequest"); |
| - |
| - if (!setEmeMode(EmeModePrefixed, exceptionState)) |
| - return; |
| - |
| - if (keySystem.isEmpty()) { |
| - exceptionState.throwDOMException(SyntaxError, "The key system provided is empty."); |
| - return; |
| - } |
| - |
| - if (!m_player) { |
| - exceptionState.throwDOMException(InvalidStateError, "No media has been loaded."); |
| - return; |
| - } |
| - |
| - const unsigned char* initDataPointer = 0; |
| - unsigned initDataLength = 0; |
| - if (initData) { |
| - initDataPointer = initData->data(); |
| - initDataLength = initData->length(); |
| - } |
| - |
| - MediaPlayer::MediaKeyException result = m_player->generateKeyRequest(keySystem, initDataPointer, initDataLength); |
| - throwExceptionForMediaKeyException(keySystem, String(), result, exceptionState); |
| -} |
| - |
| -void HTMLMediaElement::webkitGenerateKeyRequest(const String& keySystem, ExceptionState& exceptionState) |
| -{ |
| - webkitGenerateKeyRequest(keySystem, Uint8Array::create(0), exceptionState); |
| -} |
| - |
| -void HTMLMediaElement::webkitAddKey(const String& keySystem, PassRefPtr<Uint8Array> key, PassRefPtr<Uint8Array> initData, const String& sessionId, ExceptionState& exceptionState) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::webkitAddKey"); |
| - |
| - if (!setEmeMode(EmeModePrefixed, exceptionState)) |
| - return; |
| - |
| - if (keySystem.isEmpty()) { |
| - exceptionState.throwDOMException(SyntaxError, "The key system provided is empty."); |
| - return; |
| - } |
| - |
| - if (!key) { |
| - exceptionState.throwDOMException(SyntaxError, "The key provided is invalid."); |
| - return; |
| - } |
| - |
| - if (!key->length()) { |
| - exceptionState.throwDOMException(TypeMismatchError, "The key provided is invalid."); |
| - return; |
| - } |
| - |
| - if (!m_player) { |
| - exceptionState.throwDOMException(InvalidStateError, "No media has been loaded."); |
| - return; |
| - } |
| - |
| - const unsigned char* initDataPointer = 0; |
| - unsigned initDataLength = 0; |
| - if (initData) { |
| - initDataPointer = initData->data(); |
| - initDataLength = initData->length(); |
| - } |
| - |
| - MediaPlayer::MediaKeyException result = m_player->addKey(keySystem, key->data(), key->length(), initDataPointer, initDataLength, sessionId); |
| - throwExceptionForMediaKeyException(keySystem, sessionId, result, exceptionState); |
| -} |
| - |
| -void HTMLMediaElement::webkitAddKey(const String& keySystem, PassRefPtr<Uint8Array> key, ExceptionState& exceptionState) |
| -{ |
| - webkitAddKey(keySystem, key, Uint8Array::create(0), String(), exceptionState); |
| -} |
| - |
| -void HTMLMediaElement::webkitCancelKeyRequest(const String& keySystem, const String& sessionId, ExceptionState& exceptionState) |
| -{ |
| - WTF_LOG(Media, "HTMLMediaElement::webkitCancelKeyRequest"); |
| - |
| - if (!setEmeMode(EmeModePrefixed, exceptionState)) |
| - return; |
| - |
| - if (keySystem.isEmpty()) { |
| - exceptionState.throwDOMException(SyntaxError, "The key system provided is empty."); |
| - return; |
| - } |
| - |
| - if (!m_player) { |
| - exceptionState.throwDOMException(InvalidStateError, "No media has been loaded."); |
| - return; |
| - } |
| - |
| - MediaPlayer::MediaKeyException result = m_player->cancelKeyRequest(keySystem, sessionId); |
| - throwExceptionForMediaKeyException(keySystem, sessionId, result, exceptionState); |
| -} |
| - |
| bool HTMLMediaElement::loop() const |
| { |
| return fastHasAttribute(loopAttr); |
| @@ -2339,7 +2060,7 @@ void HTMLMediaElement::setVolume(double vol, ExceptionState& exceptionState) |
| if (m_volume != vol) { |
| m_volume = vol; |
| updateVolume(); |
| - scheduleEvent(EventTypeNames::volumechange); |
| + scheduleNamedEvent(EventTypeNames::volumechange); |
| } |
| } |
| @@ -2359,7 +2080,7 @@ void HTMLMediaElement::setMuted(bool muted) |
| if (hasMediaControls()) |
| mediaControls()->changedMute(); |
| } |
| - scheduleEvent(EventTypeNames::volumechange); |
| + scheduleNamedEvent(EventTypeNames::volumechange); |
| } |
| } |
| @@ -2441,7 +2162,7 @@ void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent) |
| // event at a given time so filter here |
| double movieTime = currentTime(); |
| if (movieTime != m_lastTimeUpdateEventMovieTime) { |
| - scheduleEvent(EventTypeNames::timeupdate); |
| + scheduleNamedEvent(EventTypeNames::timeupdate); |
| m_lastTimeUpdateEventWallTime = now; |
| m_lastTimeUpdateEventMovieTime = movieTime; |
| } |
| @@ -3045,12 +2766,12 @@ void HTMLMediaElement::mediaPlayerTimeChanged() |
| if (!m_mediaController && !m_paused) { |
| // changes paused to true and fires a simple event named pause at the media element. |
| m_paused = true; |
| - scheduleEvent(EventTypeNames::pause); |
| + scheduleNamedEvent(EventTypeNames::pause); |
| } |
| // Queue a task to fire a simple event named ended at the media element. |
| if (!m_sentEndEvent) { |
| m_sentEndEvent = true; |
| - scheduleEvent(EventTypeNames::ended); |
| + scheduleNamedEvent(EventTypeNames::ended); |
| } |
| // If the media element has a current media controller, then report the controller state |
| // for the media element's current media controller. |
| @@ -3078,7 +2799,7 @@ void HTMLMediaElement::durationChanged(double duration) |
| return; |
| m_duration = duration; |
| - scheduleEvent(EventTypeNames::durationchange); |
| + scheduleNamedEvent(EventTypeNames::durationchange); |
| if (hasMediaControls()) |
| mediaControls()->reset(); |
| @@ -3135,7 +2856,7 @@ void HTMLMediaElement::mediaPlayerSizeChanged() |
| ASSERT(hasVideo()); // "resize" makes no sense absent video. |
| if (m_readyState > HAVE_NOTHING && isVideo()) |
| - scheduleEvent(EventTypeNames::resize); |
| + scheduleNamedEvent(EventTypeNames::resize); |
| if (renderer()) |
| renderer()->updateFromElement(); |
| @@ -3346,7 +3067,7 @@ void HTMLMediaElement::userCancelledLoad() |
| m_error = MediaError::create(MediaError::MEDIA_ERR_ABORTED); |
| // 3 - Queue a task to fire a simple event named error at the media element. |
| - scheduleEvent(EventTypeNames::abort); |
| + scheduleNamedEvent(EventTypeNames::abort); |
| closeMediaSource(); |
| @@ -3356,7 +3077,7 @@ void HTMLMediaElement::userCancelledLoad() |
| // attribute to the NETWORK_IDLE value. |
| if (m_readyState == HAVE_NOTHING) { |
| m_networkState = NETWORK_EMPTY; |
| - scheduleEvent(EventTypeNames::emptied); |
| + scheduleNamedEvent(EventTypeNames::emptied); |
| } |
| else |
| m_networkState = NETWORK_IDLE; |
| @@ -3398,8 +3119,6 @@ void HTMLMediaElement::clearMediaPlayer(int flags) |
| closeMediaSource(); |
| - setMediaKeysInternal(0); |
| - |
| clearMediaPlayerAndAudioSourceProviderClient(); |
| stopPeriodicTimers(); |
| @@ -3698,9 +3417,6 @@ void HTMLMediaElement::createMediaPlayer() |
| m_player = MediaPlayer::create(this); |
| - if (m_emeMode == EmeModeUnprefixed && m_player) |
| - m_player->setContentDecryptionModule(contentDecryptionModule()); |
| - |
| #if ENABLE(WEB_AUDIO) |
| if (m_audioSourceNode) { |
| // When creating the player, make sure its AudioSourceProvider knows about the MediaElementAudioSourceNode. |