Changeset 163907 in webkit
- Timestamp:
- Feb 11, 2014 1:50:21 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r163906 r163907 1 2014-02-10 Jer Noble <jer.noble@apple.com> 2 3 [EME][Mac] Move the implementation of CDMPrivateAVFoundation back into MediaPlayerPrivateAVFoundationObjC. 4 https://bugs.webkit.org/show_bug.cgi?id=128559 5 6 Reviewed by Dean Jackson. 7 8 To prepare for multiple simultaneous CDMs with muliple MediaPlayer types, move the implementation for 9 CDMPrivateAVFoundation back into its media engine. 10 11 * Modules/encryptedmedia/CDMPrivateAVFoundation.mm: 12 (WebCore::MediaKeyExceptionToErrorCode): Added. 13 (WebCore::CDMSessionAVFoundation::generateKeyRequest): Moved to MediaPlayerPrivateAVFoundationObjC. 14 (WebCore::CDMSessionAVFoundation::releaseKeys): Ditto. 15 (WebCore::CDMSessionAVFoundation::update): Ditto. 16 * platform/graphics/MediaPlayer.cpp: 17 (WebCore::MediaPlayer::generateKeyRequest): Added, pass through to MediaPlayerPrivate. 18 (WebCore::MediaPlayer::releaseKeys): Ditto. 19 (WebCore::MediaPlayer::update): Ditto. 20 * platform/graphics/MediaPlayer.h: 21 * platform/graphics/MediaPlayerPrivate.h: 22 (WebCore::MediaPlayerPrivateInterface::generateKeyRequest): Added. 23 (WebCore::MediaPlayerPrivateInterface::releaseKeys): Ditto. 24 (WebCore::MediaPlayerPrivateInterface::update): Ditto. 25 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 26 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 27 (WebCore::MediaPlayerPrivateAVFoundationObjC::generateKeyRequest): Moved from CDMSessionAVFoundation. 28 (WebCore::MediaPlayerPrivateAVFoundationObjC::releaseKeys): Ditto. 29 (WebCore::MediaPlayerPrivateAVFoundationObjC::update): Ditto. 30 1 31 2014-01-24 Jer Noble <jer.noble@apple.com> 2 32 -
trunk/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.mm
r162139 r163907 91 91 } 92 92 93 static unsigned short MediaKeyExceptionToErrorCode(MediaPlayer::MediaKeyException error) 94 { 95 switch (error) { 96 case MediaPlayer::NoError: 97 return 0; 98 case MediaPlayer::InvalidPlayerState: 99 return INVALID_STATE_ERR; 100 case MediaPlayer::KeySystemNotSupported: 101 return NOT_SUPPORTED_ERR; 102 default: 103 ASSERT_NOT_REACHED(); 104 return 0; 105 } 106 } 107 93 108 PassRefPtr<Uint8Array> CDMSessionAVFoundation::generateKeyRequest(const String& mimeType, Uint8Array* initData, String& destinationURL, unsigned short& errorCode, unsigned long& systemCode) 94 109 { … … 98 113 if (!mediaPlayer) { 99 114 errorCode = NOT_SUPPORTED_ERR; 100 return 0; 101 } 102 103 String keyURI; 104 String keyID; 105 RefPtr<Uint8Array> certificate; 106 if (!MediaPlayerPrivateAVFoundationObjC::extractKeyURIKeyIDAndCertificateFromInitData(initData, keyURI, keyID, certificate)) { 107 errorCode = INVALID_STATE_ERR; 108 return 0; 109 } 110 111 m_request = MediaPlayerPrivateAVFoundationObjC::takeRequestForPlayerAndKeyURI(mediaPlayer, keyURI); 112 if (!m_request) { 113 errorCode = INVALID_STATE_ERR; 114 return 0; 115 return nullptr; 115 116 } 116 117 117 118 m_sessionId = createCanonicalUUIDString(); 118 119 119 RetainPtr<NSData> certificateData = adoptNS([[NSData alloc] initWithBytes:certificate->baseAddress() length:certificate->byteLength()]); 120 NSString* assetStr = keyID; 121 RetainPtr<NSData> assetID = [NSData dataWithBytes: [assetStr cStringUsingEncoding:NSUTF8StringEncoding] length:[assetStr lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; 122 NSError* error = 0; 123 RetainPtr<NSData> keyRequest = [m_request.get() streamingContentKeyRequestDataForApp:certificateData.get() contentIdentifier:assetID.get() options:nil error:&error]; 124 125 if (!keyRequest) { 126 NSError* underlyingError = [[error userInfo] objectForKey:NSUnderlyingErrorKey]; 127 errorCode = CDM::DomainError; 128 systemCode = [underlyingError code]; 129 return 0; 130 } 131 132 errorCode = 0; 133 systemCode = 0; 134 destinationURL = String(); 135 136 RefPtr<ArrayBuffer> keyRequestBuffer = ArrayBuffer::create([keyRequest.get() bytes], [keyRequest.get() length]); 137 return Uint8Array::create(keyRequestBuffer, 0, keyRequestBuffer->byteLength()); 120 MediaPlayer::MediaKeyException error; 121 RefPtr<Uint8Array> request = mediaPlayer->generateKeyRequest(m_sessionId, mimeType, initData, destinationURL, error, systemCode); 122 errorCode = MediaKeyExceptionToErrorCode(error); 123 return request; 138 124 } 139 125 140 126 void CDMSessionAVFoundation::releaseKeys() 141 127 { 128 MediaPlayer* mediaPlayer = m_parent->cdm()->mediaPlayer(); 129 if (!mediaPlayer) 130 return; 131 132 mediaPlayer->releaseKeys(m_sessionId); 142 133 } 143 134 … … 147 138 return false; 148 139 149 RetainPtr<NSData> keyData = adoptNS([[NSData alloc] initWithBytes:key->baseAddress() length:key->byteLength()]); 150 [[m_request.get() dataRequest] respondWithData:keyData.get()]; 151 [m_request.get() finishLoading]; 152 errorCode = 0; 153 systemCode = 0; 154 nextMessage = nullptr; 155 m_request = nullptr; 140 MediaPlayer* mediaPlayer = m_parent->cdm()->mediaPlayer(); 141 if (!mediaPlayer) { 142 errorCode = NOT_SUPPORTED_ERR; 143 return nullptr; 144 } 156 145 157 return true; 146 MediaPlayer::MediaKeyException error; 147 bool succeeded = mediaPlayer->update(m_sessionId, key, nextMessage, error, systemCode); 148 errorCode = MediaKeyExceptionToErrorCode(error); 149 return succeeded; 158 150 } 159 151 -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r163816 r163907 524 524 #endif 525 525 526 #if ENABLE(ENCRYPTED_MEDIA_V2) 527 PassRefPtr<Uint8Array> MediaPlayer::generateKeyRequest(const String& sessionID, const String& mimeType, Uint8Array* initData, String& destinationURL, MediaKeyException& error, unsigned long& systemCode) 528 { 529 return m_private->generateKeyRequest(sessionID, mimeType, initData, destinationURL, error, systemCode); 530 } 531 532 void MediaPlayer::releaseKeys(const String& sessionID) 533 { 534 m_private->releaseKeys(sessionID); 535 } 536 537 bool MediaPlayer::update(const String& sessionID, Uint8Array* key, RefPtr<Uint8Array>& nextMessage, MediaKeyException& error, unsigned long& systemCode) 538 { 539 return m_private->update(sessionID, key, nextMessage, error, systemCode); 540 } 541 #endif 542 526 543 double MediaPlayer::duration() const 527 544 { -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r163816 r163907 316 316 void pause(); 317 317 318 #if ENABLE(ENCRYPTED_MEDIA) 318 #if ENABLE(ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA_V2) 319 319 // Represents synchronous exceptions that can be thrown from the Encrypted Media methods. 320 320 // This is different from the asynchronous MediaKeyError. 321 321 enum MediaKeyException { NoError, InvalidPlayerState, KeySystemNotSupported }; 322 322 #endif 323 324 #if ENABLE(ENCRYPTED_MEDIA) 323 325 MediaKeyException generateKeyRequest(const String& keySystem, const unsigned char* initData, unsigned initDataLength); 324 326 MediaKeyException addKey(const String& keySystem, const unsigned char* key, unsigned keyLength, const unsigned char* initData, unsigned initDataLength, const String& sessionId); 325 327 MediaKeyException cancelKeyRequest(const String& keySystem, const String& sessionId); 328 #endif 329 330 #if ENABLE(ENCRYPTED_MEDIA_V2) 331 PassRefPtr<Uint8Array> generateKeyRequest(const String& sessionID, const String& mimeType, Uint8Array* initData, String& destinationURL, MediaKeyException& error, unsigned long& systemCode); 332 void releaseKeys(const String& sessionID); 333 bool update(const String& sessionID, Uint8Array* key, RefPtr<Uint8Array>& nextMessage, MediaKeyException& error, unsigned long& systemCode); 326 334 #endif 327 335 -
trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
r163816 r163907 208 208 #endif 209 209 210 #if ENABLE(ENCRYPTED_MEDIA_V2) 211 virtual PassRefPtr<Uint8Array> generateKeyRequest(const String&, const String&, Uint8Array*, String&, MediaPlayer::MediaKeyException&, unsigned long&) { return nullptr; } 212 virtual void releaseKeys(const String&) { } 213 virtual bool update(const String&, Uint8Array*, RefPtr<Uint8Array>&, MediaPlayer::MediaKeyException&, unsigned long&) { return false; } 214 #endif 215 210 216 #if ENABLE(VIDEO_TRACK) 211 217 virtual bool requiresTextTrackRepresentation() const { return false; } -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r162879 r163907 199 199 #endif 200 200 201 #if ENABLE(ENCRYPTED_MEDIA_V2) 202 PassRefPtr<Uint8Array> generateKeyRequest(const String& sessionId, const String& mimeType, Uint8Array* initData, String& destinationURL, MediaPlayer::MediaKeyException& error, unsigned long& systemCode); 203 void releaseKeys(const String& sessionId); 204 bool update(const String& sessionId, Uint8Array* key, RefPtr<Uint8Array>& nextMessage, MediaPlayer::MediaKeyException& error, unsigned long& systemCode); 205 #endif 206 201 207 virtual String languageOfPrimaryAudioTrack() const override; 202 208 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r163844 r163907 1598 1598 1599 1599 #if ENABLE(ENCRYPTED_MEDIA_V2) 1600 RetainPtr<AVAssetResourceLoadingRequest> MediaPlayerPrivateAVFoundationObjC::takeRequestForPlayerAndKeyURI(MediaPlayer* player, const String& keyURI) 1601 { 1602 MediaPlayerPrivateAVFoundationObjC* _this = playerToPrivateMap().get(player); 1603 if (!_this) 1604 return nullptr; 1605 1606 return _this->m_keyURIToRequestMap.take(keyURI); 1607 1600 PassRefPtr<Uint8Array> MediaPlayerPrivateAVFoundationObjC::generateKeyRequest(const String& sessionId, const String& mimeType, Uint8Array* initData, String& destinationURL, MediaPlayer::MediaKeyException& error, unsigned long& systemCode) 1601 { 1602 UNUSED_PARAM(mimeType); 1603 1604 String keyURI; 1605 String keyID; 1606 RefPtr<Uint8Array> certificate; 1607 if (!MediaPlayerPrivateAVFoundationObjC::extractKeyURIKeyIDAndCertificateFromInitData(initData, keyURI, keyID, certificate)) { 1608 error = MediaPlayer::InvalidPlayerState; 1609 return 0; 1610 } 1611 1612 RetainPtr<AVAssetResourceLoadingRequest> request = m_keyURIToRequestMap.take(keyURI); 1613 if (!request) { 1614 error = MediaPlayer::InvalidPlayerState; 1615 return 0; 1616 } 1617 1618 m_sessionIDToRequestMap.add(sessionId, request); 1619 1620 RetainPtr<NSData> certificateData = adoptNS([[NSData alloc] initWithBytes:certificate->baseAddress() length:certificate->byteLength()]); 1621 NSString* assetStr = keyID; 1622 RetainPtr<NSData> assetID = [NSData dataWithBytes: [assetStr cStringUsingEncoding:NSUTF8StringEncoding] length:[assetStr lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; 1623 NSError* nsError = 0; 1624 RetainPtr<NSData> keyRequest = [request streamingContentKeyRequestDataForApp:certificateData.get() contentIdentifier:assetID.get() options:nil error:&nsError]; 1625 1626 if (!keyRequest) { 1627 NSError* underlyingError = [[nsError userInfo] objectForKey:NSUnderlyingErrorKey]; 1628 systemCode = [underlyingError code]; 1629 return 0; 1630 } 1631 1632 error = MediaPlayer::NoError; 1633 systemCode = 0; 1634 destinationURL = String(); 1635 1636 RefPtr<ArrayBuffer> keyRequestBuffer = ArrayBuffer::create([keyRequest.get() bytes], [keyRequest.get() length]); 1637 return Uint8Array::create(keyRequestBuffer, 0, keyRequestBuffer->byteLength()); 1638 } 1639 1640 void MediaPlayerPrivateAVFoundationObjC::releaseKeys(const String& sessionId) 1641 { 1642 UNUSED_PARAM(sessionId); 1643 } 1644 1645 bool MediaPlayerPrivateAVFoundationObjC::update(const String& sessionId, Uint8Array* key, RefPtr<Uint8Array>& nextMessage, MediaPlayer::MediaKeyException& error, unsigned long& systemCode) 1646 { 1647 ASSERT(key); 1648 1649 RetainPtr<AVAssetResourceLoadingRequest> request = m_sessionIDToRequestMap.get(sessionId); 1650 if (!request) { 1651 error = MediaPlayer::InvalidPlayerState; 1652 return false; 1653 } 1654 1655 RetainPtr<NSData> keyData = adoptNS([[NSData alloc] initWithBytes:key->baseAddress() length:key->byteLength()]); 1656 [[request dataRequest] respondWithData:keyData.get()]; 1657 [request finishLoading]; 1658 error = MediaPlayer::NoError; 1659 systemCode = 0; 1660 nextMessage = nullptr; 1661 1662 return true; 1608 1663 } 1609 1664 #endif -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h
r163816 r163907 72 72 void effectiveRateChanged(); 73 73 void sizeChanged(); 74 75 #if ENABLE(ENCRYPTED_MEDIA_V2) 76 void keyNeeded(Uint8Array*); 77 #endif 74 78 75 79 private: -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm
r163816 r163907 535 535 } 536 536 537 #if ENABLE(ENCRYPTED_MEDIA_V2) 538 void MediaPlayerPrivateMediaSourceAVFObjC::keyNeeded(Uint8Array* initData) 539 { 540 m_player->keyNeeded(initData); 541 } 542 #endif 543 537 544 void MediaPlayerPrivateMediaSourceAVFObjC::setReadyState(MediaPlayer::ReadyState readyState) 538 545 {
Note: See TracChangeset
for help on using the changeset viewer.