| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2013 Apple 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 }; | 129 }; |
| 130 | 130 |
| 131 // This class allows a MediaKeySession object to be created asynchronously. | 131 // This class allows a MediaKeySession object to be created asynchronously. |
| 132 class MediaKeySessionInitializer : public ScriptPromiseResolver { | 132 class MediaKeySessionInitializer : public ScriptPromiseResolver { |
| 133 WTF_MAKE_NONCOPYABLE(MediaKeySessionInitializer); | 133 WTF_MAKE_NONCOPYABLE(MediaKeySessionInitializer); |
| 134 | 134 |
| 135 public: | 135 public: |
| 136 static ScriptPromise create(ScriptState*, MediaKeys*, const String& initData
Type, PassRefPtr<ArrayBuffer> initData, const String& sessionType); | 136 static ScriptPromise create(ScriptState*, MediaKeys*, const String& initData
Type, PassRefPtr<ArrayBuffer> initData, const String& sessionType); |
| 137 virtual ~MediaKeySessionInitializer(); | 137 virtual ~MediaKeySessionInitializer(); |
| 138 | 138 |
| 139 void completeWithSession(blink::WebContentDecryptionModuleResult::SessionSta
tus); | 139 void completeWithSession(WebContentDecryptionModuleResult::SessionStatus); |
| 140 void completeWithDOMException(ExceptionCode, const String& errorMessage); | 140 void completeWithDOMException(ExceptionCode, const String& errorMessage); |
| 141 | 141 |
| 142 private: | 142 private: |
| 143 MediaKeySessionInitializer(ScriptState*, MediaKeys*, const String& initDataT
ype, PassRefPtr<ArrayBuffer> initData, const String& sessionType); | 143 MediaKeySessionInitializer(ScriptState*, MediaKeys*, const String& initDataT
ype, PassRefPtr<ArrayBuffer> initData, const String& sessionType); |
| 144 void timerFired(Timer<MediaKeySessionInitializer>*); | 144 void timerFired(Timer<MediaKeySessionInitializer>*); |
| 145 | 145 |
| 146 Persistent<MediaKeys> m_mediaKeys; | 146 Persistent<MediaKeys> m_mediaKeys; |
| 147 OwnPtr<blink::WebContentDecryptionModuleSession> m_cdmSession; | 147 OwnPtr<WebContentDecryptionModuleSession> m_cdmSession; |
| 148 | 148 |
| 149 // The next 3 values are simply the initialization data saved so that the | 149 // The next 3 values are simply the initialization data saved so that the |
| 150 // asynchronous creation has the data needed. | 150 // asynchronous creation has the data needed. |
| 151 String m_initDataType; | 151 String m_initDataType; |
| 152 RefPtr<ArrayBuffer> m_initData; | 152 RefPtr<ArrayBuffer> m_initData; |
| 153 String m_sessionType; | 153 String m_sessionType; |
| 154 | 154 |
| 155 Timer<MediaKeySessionInitializer> m_timer; | 155 Timer<MediaKeySessionInitializer> m_timer; |
| 156 }; | 156 }; |
| 157 | 157 |
| 158 // Represents the result used when a new WebContentDecryptionModuleSession | 158 // Represents the result used when a new WebContentDecryptionModuleSession |
| 159 // object has been created. Needed as MediaKeySessionInitializer can't be both | 159 // object has been created. Needed as MediaKeySessionInitializer can't be both |
| 160 // a ScriptPromiseResolver and ContentDecryptionModuleResult at the same time. | 160 // a ScriptPromiseResolver and ContentDecryptionModuleResult at the same time. |
| 161 class NewMediaKeySessionResult FINAL : public ContentDecryptionModuleResult { | 161 class NewMediaKeySessionResult FINAL : public ContentDecryptionModuleResult { |
| 162 public: | 162 public: |
| 163 NewMediaKeySessionResult(MediaKeySessionInitializer* initializer) | 163 NewMediaKeySessionResult(MediaKeySessionInitializer* initializer) |
| 164 : m_initializer(initializer) | 164 : m_initializer(initializer) |
| 165 { | 165 { |
| 166 } | 166 } |
| 167 | 167 |
| 168 // ContentDecryptionModuleResult implementation. | 168 // ContentDecryptionModuleResult implementation. |
| 169 virtual void complete() OVERRIDE | 169 virtual void complete() OVERRIDE |
| 170 { | 170 { |
| 171 ASSERT_NOT_REACHED(); | 171 ASSERT_NOT_REACHED(); |
| 172 m_initializer->completeWithDOMException(InvalidStateError, "Unexpected c
ompletion."); | 172 m_initializer->completeWithDOMException(InvalidStateError, "Unexpected c
ompletion."); |
| 173 } | 173 } |
| 174 | 174 |
| 175 virtual void completeWithSession(blink::WebContentDecryptionModuleResult::Se
ssionStatus status) OVERRIDE | 175 virtual void completeWithSession(WebContentDecryptionModuleResult::SessionSt
atus status) OVERRIDE |
| 176 { | 176 { |
| 177 m_initializer->completeWithSession(status); | 177 m_initializer->completeWithSession(status); |
| 178 } | 178 } |
| 179 | 179 |
| 180 virtual void completeWithError(blink::WebContentDecryptionModuleException co
de, unsigned long systemCode, const blink::WebString& message) OVERRIDE | 180 virtual void completeWithError(WebContentDecryptionModuleException code, uns
igned long systemCode, const WebString& message) OVERRIDE |
| 181 { | 181 { |
| 182 m_initializer->completeWithDOMException(WebCdmExceptionToExceptionCode(c
ode), message); | 182 m_initializer->completeWithDOMException(WebCdmExceptionToExceptionCode(c
ode), message); |
| 183 } | 183 } |
| 184 | 184 |
| 185 private: | 185 private: |
| 186 MediaKeySessionInitializer* m_initializer; | 186 MediaKeySessionInitializer* m_initializer; |
| 187 }; | 187 }; |
| 188 | 188 |
| 189 ScriptPromise MediaKeySessionInitializer::create(ScriptState* scriptState, Media
Keys* mediaKeys, const String& initDataType, PassRefPtr<ArrayBuffer> initData, c
onst String& sessionType) | 189 ScriptPromise MediaKeySessionInitializer::create(ScriptState* scriptState, Media
Keys* mediaKeys, const String& initDataType, PassRefPtr<ArrayBuffer> initData, c
onst String& sessionType) |
| 190 { | 190 { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 215 | 215 |
| 216 void MediaKeySessionInitializer::timerFired(Timer<MediaKeySessionInitializer>*) | 216 void MediaKeySessionInitializer::timerFired(Timer<MediaKeySessionInitializer>*) |
| 217 { | 217 { |
| 218 WTF_LOG(Media, "MediaKeySessionInitializer::timerFired"); | 218 WTF_LOG(Media, "MediaKeySessionInitializer::timerFired"); |
| 219 | 219 |
| 220 // Continue MediaKeys::createSession() at step 7. | 220 // Continue MediaKeys::createSession() at step 7. |
| 221 // 7.1 Let request be null. (Request provided by cdm in message event). | 221 // 7.1 Let request be null. (Request provided by cdm in message event). |
| 222 // 7.2 Let default URL be null. (Also provided by cdm in message event). | 222 // 7.2 Let default URL be null. (Also provided by cdm in message event). |
| 223 | 223 |
| 224 // 7.3 Let cdm be the cdm loaded in create(). | 224 // 7.3 Let cdm be the cdm loaded in create(). |
| 225 blink::WebContentDecryptionModule* cdm = m_mediaKeys->contentDecryptionModul
e(); | 225 WebContentDecryptionModule* cdm = m_mediaKeys->contentDecryptionModule(); |
| 226 | 226 |
| 227 // 7.4 Use the cdm to execute the following steps: | 227 // 7.4 Use the cdm to execute the following steps: |
| 228 // 7.4.1 If the init data is not valid for initDataType, reject promise | 228 // 7.4.1 If the init data is not valid for initDataType, reject promise |
| 229 // with a new DOMException whose name is "InvalidAccessError". | 229 // with a new DOMException whose name is "InvalidAccessError". |
| 230 // 7.4.2 If the init data is not supported by the cdm, reject promise with | 230 // 7.4.2 If the init data is not supported by the cdm, reject promise with |
| 231 // a new DOMException whose name is "NotSupportedError". | 231 // a new DOMException whose name is "NotSupportedError". |
| 232 // 7.4.3 Let request be a request (e.g. a license request) generated based | 232 // 7.4.3 Let request be a request (e.g. a license request) generated based |
| 233 // on the init data, which is interpreteted per initDataType, and | 233 // on the init data, which is interpreteted per initDataType, and |
| 234 // sessionType. If sessionType is "temporary", the request is for a | 234 // sessionType. If sessionType is "temporary", the request is for a |
| 235 // temporary non-persisted license. If sessionType is "persistent", | 235 // temporary non-persisted license. If sessionType is "persistent", |
| 236 // the request is for a persistable license. | 236 // the request is for a persistable license. |
| 237 // 7.4.4 If the init data indicates a default URL, let default URL be | 237 // 7.4.4 If the init data indicates a default URL, let default URL be |
| 238 // that URL. The URL may be validated and/or normalized. | 238 // that URL. The URL may be validated and/or normalized. |
| 239 m_cdmSession = adoptPtr(cdm->createSession()); | 239 m_cdmSession = adoptPtr(cdm->createSession()); |
| 240 NewMediaKeySessionResult* result = new NewMediaKeySessionResult(this); | 240 NewMediaKeySessionResult* result = new NewMediaKeySessionResult(this); |
| 241 m_cdmSession->initializeNewSession(m_initDataType, static_cast<unsigned char
*>(m_initData->data()), m_initData->byteLength(), m_sessionType, result->result(
)); | 241 m_cdmSession->initializeNewSession(m_initDataType, static_cast<unsigned char
*>(m_initData->data()), m_initData->byteLength(), m_sessionType, result->result(
)); |
| 242 | 242 |
| 243 WTF_LOG(Media, "MediaKeySessionInitializer::timerFired done"); | 243 WTF_LOG(Media, "MediaKeySessionInitializer::timerFired done"); |
| 244 // Note: As soon as the promise is resolved (or rejected), the | 244 // Note: As soon as the promise is resolved (or rejected), the |
| 245 // ScriptPromiseResolver object (|this|) is freed. So if | 245 // ScriptPromiseResolver object (|this|) is freed. So if |
| 246 // initializeNewSession() is synchronous, access to any members will crash. | 246 // initializeNewSession() is synchronous, access to any members will crash. |
| 247 } | 247 } |
| 248 | 248 |
| 249 void MediaKeySessionInitializer::completeWithSession(blink::WebContentDecryption
ModuleResult::SessionStatus status) | 249 void MediaKeySessionInitializer::completeWithSession(WebContentDecryptionModuleR
esult::SessionStatus status) |
| 250 { | 250 { |
| 251 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession"); | 251 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession"); |
| 252 | 252 |
| 253 switch (status) { | 253 switch (status) { |
| 254 case blink::WebContentDecryptionModuleResult::NewSession: { | 254 case WebContentDecryptionModuleResult::NewSession: { |
| 255 // Resume MediaKeys::createSession(). | 255 // Resume MediaKeys::createSession(). |
| 256 // 7.5 Let the session ID be a unique Session ID string. It may be | 256 // 7.5 Let the session ID be a unique Session ID string. It may be |
| 257 // obtained from cdm (it is). | 257 // obtained from cdm (it is). |
| 258 // 7.6 Let session be a new MediaKeySession object, and initialize it. | 258 // 7.6 Let session be a new MediaKeySession object, and initialize it. |
| 259 // (Object was created previously, complete the steps for 7.6). | 259 // (Object was created previously, complete the steps for 7.6). |
| 260 RefPtrWillBeRawPtr<MediaKeySession> session = adoptRefCountedGarbageColl
ectedWillBeNoop(new MediaKeySession(executionContext(), m_mediaKeys, m_cdmSessio
n.release())); | 260 RefPtrWillBeRawPtr<MediaKeySession> session = adoptRefCountedGarbageColl
ectedWillBeNoop(new MediaKeySession(executionContext(), m_mediaKeys, m_cdmSessio
n.release())); |
| 261 session->suspendIfNeeded(); | 261 session->suspendIfNeeded(); |
| 262 | 262 |
| 263 // 7.7 If any of the preceding steps failed, reject promise with a | 263 // 7.7 If any of the preceding steps failed, reject promise with a |
| 264 // new DOMException whose name is the appropriate error name | 264 // new DOMException whose name is the appropriate error name |
| 265 // and that has an appropriate message. | 265 // and that has an appropriate message. |
| 266 // (Implemented by CDM/Chromium calling completeWithError()). | 266 // (Implemented by CDM/Chromium calling completeWithError()). |
| 267 | 267 |
| 268 // 7.8 Add an entry for the value of the sessionId attribute to the | 268 // 7.8 Add an entry for the value of the sessionId attribute to the |
| 269 // list of active session IDs for this object. | 269 // list of active session IDs for this object. |
| 270 // (Implemented in SessionIdAdapter). | 270 // (Implemented in SessionIdAdapter). |
| 271 | 271 |
| 272 // 7.9 Run the Queue a "message" Event algorithm on the session, | 272 // 7.9 Run the Queue a "message" Event algorithm on the session, |
| 273 // providing request and default URL. | 273 // providing request and default URL. |
| 274 // (Done by the CDM). | 274 // (Done by the CDM). |
| 275 | 275 |
| 276 // 7.10 Resolve promise with session. | 276 // 7.10 Resolve promise with session. |
| 277 resolve(session.release()); | 277 resolve(session.release()); |
| 278 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/s
ession"); | 278 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/s
ession"); |
| 279 return; | 279 return; |
| 280 } | 280 } |
| 281 | 281 |
| 282 case blink::WebContentDecryptionModuleResult::SessionNotFound: | 282 case WebContentDecryptionModuleResult::SessionNotFound: |
| 283 // Step 4.7.1 of MediaKeys::loadSession(): If there is no data | 283 // Step 4.7.1 of MediaKeys::loadSession(): If there is no data |
| 284 // stored for the sessionId in the origin, resolve promise with | 284 // stored for the sessionId in the origin, resolve promise with |
| 285 // undefined. | 285 // undefined. |
| 286 resolve(V8UndefinedType()); | 286 resolve(V8UndefinedType()); |
| 287 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/u
ndefined"); | 287 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/u
ndefined"); |
| 288 return; | 288 return; |
| 289 | 289 |
| 290 case blink::WebContentDecryptionModuleResult::SessionAlreadyExists: | 290 case WebContentDecryptionModuleResult::SessionAlreadyExists: |
| 291 // If a session already exists, resolve the promise with null. | 291 // If a session already exists, resolve the promise with null. |
| 292 resolve(V8NullType()); | 292 resolve(V8NullType()); |
| 293 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/n
ull"); | 293 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithSession done w/n
ull"); |
| 294 return; | 294 return; |
| 295 } | 295 } |
| 296 ASSERT_NOT_REACHED(); | 296 ASSERT_NOT_REACHED(); |
| 297 } | 297 } |
| 298 | 298 |
| 299 void MediaKeySessionInitializer::completeWithDOMException(ExceptionCode code, co
nst String& errorMessage) | 299 void MediaKeySessionInitializer::completeWithDOMException(ExceptionCode code, co
nst String& errorMessage) |
| 300 { | 300 { |
| 301 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithDOMException"); | 301 WTF_LOG(Media, "MediaKeySessionInitializer::completeWithDOMException"); |
| 302 reject(DOMException::create(code, errorMessage)); | 302 reject(DOMException::create(code, errorMessage)); |
| 303 } | 303 } |
| 304 | 304 |
| 305 ScriptPromise MediaKeySession::create(ScriptState* scriptState, MediaKeys* media
Keys, const String& initDataType, PassRefPtr<ArrayBuffer> initData, const String
& sessionType) | 305 ScriptPromise MediaKeySession::create(ScriptState* scriptState, MediaKeys* media
Keys, const String& initDataType, PassRefPtr<ArrayBuffer> initData, const String
& sessionType) |
| 306 { | 306 { |
| 307 // Since creation is done asynchronously, use MediaKeySessionInitializer | 307 // Since creation is done asynchronously, use MediaKeySessionInitializer |
| 308 // to do it. | 308 // to do it. |
| 309 return MediaKeySessionInitializer::create(scriptState, mediaKeys, initDataTy
pe, initData, sessionType); | 309 return MediaKeySessionInitializer::create(scriptState, mediaKeys, initDataTy
pe, initData, sessionType); |
| 310 } | 310 } |
| 311 | 311 |
| 312 MediaKeySession::MediaKeySession(ExecutionContext* context, MediaKeys* keys, Pas
sOwnPtr<blink::WebContentDecryptionModuleSession> cdmSession) | 312 MediaKeySession::MediaKeySession(ExecutionContext* context, MediaKeys* keys, Pas
sOwnPtr<WebContentDecryptionModuleSession> cdmSession) |
| 313 : ActiveDOMObject(context) | 313 : ActiveDOMObject(context) |
| 314 , m_keySystem(keys->keySystem()) | 314 , m_keySystem(keys->keySystem()) |
| 315 , m_asyncEventQueue(GenericEventQueue::create(this)) | 315 , m_asyncEventQueue(GenericEventQueue::create(this)) |
| 316 , m_session(cdmSession) | 316 , m_session(cdmSession) |
| 317 , m_keys(keys) | 317 , m_keys(keys) |
| 318 , m_isClosed(false) | 318 , m_isClosed(false) |
| 319 , m_closedPromise(new ClosedPromise(context, this, ClosedPromise::Closed)) | 319 , m_closedPromise(new ClosedPromise(context, this, ClosedPromise::Closed)) |
| 320 , m_actionTimer(this, &MediaKeySession::actionTimerFired) | 320 , m_actionTimer(this, &MediaKeySession::actionTimerFired) |
| 321 { | 321 { |
| 322 WTF_LOG(Media, "MediaKeySession(%p)::MediaKeySession", this); | 322 WTF_LOG(Media, "MediaKeySession(%p)::MediaKeySession", this); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 break; | 476 break; |
| 477 case PendingAction::Message: | 477 case PendingAction::Message: |
| 478 WTF_LOG(Media, "MediaKeySession(%p)::actionTimerFired: Message", thi
s); | 478 WTF_LOG(Media, "MediaKeySession(%p)::actionTimerFired: Message", thi
s); |
| 479 m_asyncEventQueue->enqueueEvent(action->event().release()); | 479 m_asyncEventQueue->enqueueEvent(action->event().release()); |
| 480 break; | 480 break; |
| 481 } | 481 } |
| 482 } | 482 } |
| 483 } | 483 } |
| 484 | 484 |
| 485 // Queue a task to fire a simple event named keymessage at the new object | 485 // Queue a task to fire a simple event named keymessage at the new object |
| 486 void MediaKeySession::message(const unsigned char* message, size_t messageLength
, const blink::WebURL& destinationURL) | 486 void MediaKeySession::message(const unsigned char* message, size_t messageLength
, const WebURL& destinationURL) |
| 487 { | 487 { |
| 488 WTF_LOG(Media, "MediaKeySession(%p)::message", this); | 488 WTF_LOG(Media, "MediaKeySession(%p)::message", this); |
| 489 | 489 |
| 490 MediaKeyMessageEventInit init; | 490 MediaKeyMessageEventInit init; |
| 491 init.bubbles = false; | 491 init.bubbles = false; |
| 492 init.cancelable = false; | 492 init.cancelable = false; |
| 493 init.message = ArrayBuffer::create(static_cast<const void*>(message), messag
eLength); | 493 init.message = ArrayBuffer::create(static_cast<const void*>(message), messag
eLength); |
| 494 init.destinationURL = destinationURL.string(); | 494 init.destinationURL = destinationURL.string(); |
| 495 | 495 |
| 496 RefPtrWillBeRawPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::creat
e(EventTypeNames::message, init); | 496 RefPtrWillBeRawPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::creat
e(EventTypeNames::message, init); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 // systemCode = a Key System-specific value, if provided, and 0 otherwise | 554 // systemCode = a Key System-specific value, if provided, and 0 otherwise |
| 555 // 2. Set the MediaKeySession object's error attribute to the error object c
reated in the previous step. | 555 // 2. Set the MediaKeySession object's error attribute to the error object c
reated in the previous step. |
| 556 m_error = MediaKeyError::create(mediaKeyErrorCode, systemCode); | 556 m_error = MediaKeyError::create(mediaKeyErrorCode, systemCode); |
| 557 | 557 |
| 558 // 3. queue a task to fire a simple event named keyerror at the MediaKeySess
ion object. | 558 // 3. queue a task to fire a simple event named keyerror at the MediaKeySess
ion object. |
| 559 RefPtrWillBeRawPtr<Event> event = Event::create(EventTypeNames::error); | 559 RefPtrWillBeRawPtr<Event> event = Event::create(EventTypeNames::error); |
| 560 event->setTarget(this); | 560 event->setTarget(this); |
| 561 m_asyncEventQueue->enqueueEvent(event.release()); | 561 m_asyncEventQueue->enqueueEvent(event.release()); |
| 562 } | 562 } |
| 563 | 563 |
| 564 void MediaKeySession::error(blink::WebContentDecryptionModuleException exception
, unsigned long systemCode, const blink::WebString& errorMessage) | 564 void MediaKeySession::error(WebContentDecryptionModuleException exception, unsig
ned long systemCode, const WebString& errorMessage) |
| 565 { | 565 { |
| 566 WTF_LOG(Media, "MediaKeySession::error: exception=%d, systemCode=%lu", excep
tion, systemCode); | 566 WTF_LOG(Media, "MediaKeySession::error: exception=%d, systemCode=%lu", excep
tion, systemCode); |
| 567 | 567 |
| 568 // FIXME: EME-WD MediaKeyError now derives from DOMException. Figure out how | 568 // FIXME: EME-WD MediaKeyError now derives from DOMException. Figure out how |
| 569 // to implement this without breaking prefixed EME, which has a totally | 569 // to implement this without breaking prefixed EME, which has a totally |
| 570 // different definition. The spec may also change to be just a DOMException. | 570 // different definition. The spec may also change to be just a DOMException. |
| 571 // For now, simply generate an existing MediaKeyError. | 571 // For now, simply generate an existing MediaKeyError. |
| 572 MediaKeyErrorCode errorCode; | 572 MediaKeyErrorCode errorCode; |
| 573 switch (exception) { | 573 switch (exception) { |
| 574 case blink::WebContentDecryptionModuleExceptionClientError: | 574 case WebContentDecryptionModuleExceptionClientError: |
| 575 errorCode = MediaKeyErrorCodeClient; | 575 errorCode = MediaKeyErrorCodeClient; |
| 576 break; | 576 break; |
| 577 default: | 577 default: |
| 578 // All other exceptions get converted into Unknown. | 578 // All other exceptions get converted into Unknown. |
| 579 errorCode = MediaKeyErrorCodeUnknown; | 579 errorCode = MediaKeyErrorCodeUnknown; |
| 580 break; | 580 break; |
| 581 } | 581 } |
| 582 error(errorCode, systemCode); | 582 error(errorCode, systemCode); |
| 583 } | 583 } |
| 584 | 584 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 void MediaKeySession::trace(Visitor* visitor) | 623 void MediaKeySession::trace(Visitor* visitor) |
| 624 { | 624 { |
| 625 visitor->trace(m_error); | 625 visitor->trace(m_error); |
| 626 visitor->trace(m_asyncEventQueue); | 626 visitor->trace(m_asyncEventQueue); |
| 627 visitor->trace(m_pendingActions); | 627 visitor->trace(m_pendingActions); |
| 628 visitor->trace(m_keys); | 628 visitor->trace(m_keys); |
| 629 visitor->trace(m_closedPromise); | 629 visitor->trace(m_closedPromise); |
| 630 EventTargetWithInlineData::trace(visitor); | 630 EventTargetWithInlineData::trace(visitor); |
| 631 } | 631 } |
| 632 | 632 |
| 633 } | 633 } // namespace blink |
| OLD | NEW |