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

Side by Side Diff: Source/modules/encryptedmedia/MediaKeySession.cpp

Issue 950813005: Change initDataType and sessionType to be enums (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: android compile issues Created 5 years, 10 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 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "public/platform/WebContentDecryptionModuleSession.h" 48 #include "public/platform/WebContentDecryptionModuleSession.h"
49 #include "public/platform/WebEncryptedMediaKeyInformation.h" 49 #include "public/platform/WebEncryptedMediaKeyInformation.h"
50 #include "public/platform/WebString.h" 50 #include "public/platform/WebString.h"
51 #include "public/platform/WebURL.h" 51 #include "public/platform/WebURL.h"
52 #include "wtf/ASCIICType.h" 52 #include "wtf/ASCIICType.h"
53 #include <cmath> 53 #include <cmath>
54 #include <limits> 54 #include <limits>
55 55
56 namespace { 56 namespace {
57 57
58 // The list of possible values for |sessionType|.
59 const char kTemporary[] = "temporary";
60 const char kPersistentLicense[] = "persistent-license";
61 const char kPersistentReleaseMessage[] = "persistent-release-message";
62
63 // The list of possible values for |messageType|.
64 const char kLicenseRequest[] = "license-request";
65 const char kLicenseRenewal[] = "license-renewal";
66 const char kLicenseRelease[] = "license-release";
67
68 // Minimum and maximum length for session ids. 58 // Minimum and maximum length for session ids.
69 enum { 59 enum {
70 MinSessionIdLength = 1, 60 MinSessionIdLength = 1,
71 MaxSessionIdLength = 512 61 MaxSessionIdLength = 512
72 }; 62 };
73 63
74 } // namespace 64 } // namespace
75 65
76 namespace blink { 66 namespace blink {
77 67
78 // Checks that |sessionId| looks correct and returns whether all checks pass. 68 // Checks that |sessionId| looks correct and returns whether all checks pass.
79 static bool isValidSessionId(const String& sessionId) 69 static bool isValidSessionId(const String& sessionId)
80 { 70 {
81 if ((sessionId.length() < MinSessionIdLength) || (sessionId.length() > MaxSe ssionIdLength)) 71 if ((sessionId.length() < MinSessionIdLength) || (sessionId.length() > MaxSe ssionIdLength))
82 return false; 72 return false;
83 73
84 if (!sessionId.containsOnlyASCII()) 74 if (!sessionId.containsOnlyASCII())
85 return false; 75 return false;
86 76
87 // Check that the sessionId only contains alphanumeric characters. 77 // Check that the sessionId only contains alphanumeric characters.
88 for (unsigned i = 0; i < sessionId.length(); ++i) { 78 for (unsigned i = 0; i < sessionId.length(); ++i) {
89 if (!isASCIIAlphanumeric(sessionId[i])) 79 if (!isASCIIAlphanumeric(sessionId[i]))
90 return false; 80 return false;
91 } 81 }
92 82
93 return true; 83 return true;
94 } 84 }
95 85
96 // Checks that |initDataType| is a registered Initialization Data Type.
97 static bool isRegisteredInitDataType(const String& initDataType)
98 {
99 // List from https://w3c.github.io/encrypted-media/initdata-format-registry. html
100 return initDataType == "cenc" || initDataType == "keyids" || initDataType == "webm";
101 }
102
103 static String ConvertKeyStatusToString(const WebEncryptedMediaKeyInformation::Ke yStatus status) 86 static String ConvertKeyStatusToString(const WebEncryptedMediaKeyInformation::Ke yStatus status)
104 { 87 {
105 switch (status) { 88 switch (status) {
106 case WebEncryptedMediaKeyInformation::KeyStatus::Usable: 89 case WebEncryptedMediaKeyInformation::KeyStatus::Usable:
107 return "usable"; 90 return "usable";
108 case WebEncryptedMediaKeyInformation::KeyStatus::Expired: 91 case WebEncryptedMediaKeyInformation::KeyStatus::Expired:
109 return "expired"; 92 return "expired";
110 case WebEncryptedMediaKeyInformation::KeyStatus::OutputNotAllowed: 93 case WebEncryptedMediaKeyInformation::KeyStatus::OutputNotAllowed:
111 return "output-not-allowed"; 94 return "output-not-allowed";
112 case WebEncryptedMediaKeyInformation::KeyStatus::InternalError: 95 case WebEncryptedMediaKeyInformation::KeyStatus::InternalError:
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 { 129 {
147 return m_result; 130 return m_result;
148 } 131 }
149 132
150 const PassRefPtr<DOMArrayBuffer> data() const 133 const PassRefPtr<DOMArrayBuffer> data() const
151 { 134 {
152 ASSERT(m_type == GenerateRequest || m_type == Update); 135 ASSERT(m_type == GenerateRequest || m_type == Update);
153 return m_data; 136 return m_data;
154 } 137 }
155 138
156 const String& initDataType() const 139 WebEncryptedMediaInitDataType initDataType() const
157 { 140 {
158 ASSERT(m_type == GenerateRequest); 141 ASSERT(m_type == GenerateRequest);
159 return m_stringData; 142 return m_initDataType;
160 } 143 }
161 144
162 const String& sessionId() const 145 const String& sessionId() const
163 { 146 {
164 ASSERT(m_type == Load); 147 ASSERT(m_type == Load);
165 return m_stringData; 148 return m_stringData;
166 } 149 }
167 150
168 static PendingAction* CreatePendingGenerateRequest(ContentDecryptionModuleRe sult* result, const String& initDataType, PassRefPtr<DOMArrayBuffer> initData) 151 static PendingAction* CreatePendingGenerateRequest(ContentDecryptionModuleRe sult* result, WebEncryptedMediaInitDataType initDataType, PassRefPtr<DOMArrayBuf fer> initData)
169 { 152 {
170 ASSERT(result); 153 ASSERT(result);
171 ASSERT(initData); 154 ASSERT(initData);
172 return new PendingAction(GenerateRequest, result, initDataType, initData ); 155 return new PendingAction(GenerateRequest, result, initDataType, initData , String());
173 } 156 }
174 157
175 static PendingAction* CreatePendingLoadRequest(ContentDecryptionModuleResult * result, const String& sessionId) 158 static PendingAction* CreatePendingLoadRequest(ContentDecryptionModuleResult * result, const String& sessionId)
176 { 159 {
177 ASSERT(result); 160 ASSERT(result);
178 return new PendingAction(Load, result, sessionId, PassRefPtr<DOMArrayBuf fer>()); 161 return new PendingAction(Load, result, WebEncryptedMediaInitDataType::Un known, PassRefPtr<DOMArrayBuffer>(), sessionId);
179 } 162 }
180 163
181 static PendingAction* CreatePendingUpdate(ContentDecryptionModuleResult* res ult, PassRefPtr<DOMArrayBuffer> data) 164 static PendingAction* CreatePendingUpdate(ContentDecryptionModuleResult* res ult, PassRefPtr<DOMArrayBuffer> data)
182 { 165 {
183 ASSERT(result); 166 ASSERT(result);
184 ASSERT(data); 167 ASSERT(data);
185 return new PendingAction(Update, result, String(), data); 168 return new PendingAction(Update, result, WebEncryptedMediaInitDataType:: Unknown, data, String());
186 } 169 }
187 170
188 static PendingAction* CreatePendingClose(ContentDecryptionModuleResult* resu lt) 171 static PendingAction* CreatePendingClose(ContentDecryptionModuleResult* resu lt)
189 { 172 {
190 ASSERT(result); 173 ASSERT(result);
191 return new PendingAction(Close, result, String(), PassRefPtr<DOMArrayBuf fer>()); 174 return new PendingAction(Close, result, WebEncryptedMediaInitDataType::U nknown, PassRefPtr<DOMArrayBuffer>(), String());
192 } 175 }
193 176
194 static PendingAction* CreatePendingRemove(ContentDecryptionModuleResult* res ult) 177 static PendingAction* CreatePendingRemove(ContentDecryptionModuleResult* res ult)
195 { 178 {
196 ASSERT(result); 179 ASSERT(result);
197 return new PendingAction(Remove, result, String(), PassRefPtr<DOMArrayBu ffer>()); 180 return new PendingAction(Remove, result, WebEncryptedMediaInitDataType:: Unknown, PassRefPtr<DOMArrayBuffer>(), String());
198 } 181 }
199 182
200 ~PendingAction() 183 ~PendingAction()
201 { 184 {
202 } 185 }
203 186
204 DEFINE_INLINE_TRACE() 187 DEFINE_INLINE_TRACE()
205 { 188 {
206 visitor->trace(m_result); 189 visitor->trace(m_result);
207 } 190 }
208 191
209 private: 192 private:
210 PendingAction(Type type, ContentDecryptionModuleResult* result, const String & stringData, PassRefPtr<DOMArrayBuffer> data) 193 PendingAction(Type type, ContentDecryptionModuleResult* result, WebEncrypted MediaInitDataType initDataType, PassRefPtr<DOMArrayBuffer> data, const String& s tringData)
211 : m_type(type) 194 : m_type(type)
212 , m_result(result) 195 , m_result(result)
196 , m_initDataType(initDataType)
197 , m_data(data)
213 , m_stringData(stringData) 198 , m_stringData(stringData)
214 , m_data(data)
215 { 199 {
216 } 200 }
217 201
218 const Type m_type; 202 const Type m_type;
219 const Member<ContentDecryptionModuleResult> m_result; 203 const Member<ContentDecryptionModuleResult> m_result;
204 const WebEncryptedMediaInitDataType m_initDataType;
205 const RefPtr<DOMArrayBuffer> m_data;
220 const String m_stringData; 206 const String m_stringData;
221 const RefPtr<DOMArrayBuffer> m_data;
222 }; 207 };
223 208
224 // This class wraps the promise resolver used when initializing a new session 209 // This class wraps the promise resolver used when initializing a new session
225 // and is passed to Chromium to fullfill the promise. This implementation of 210 // and is passed to Chromium to fullfill the promise. This implementation of
226 // completeWithSession() will resolve the promise with void, while 211 // completeWithSession() will resolve the promise with void, while
227 // completeWithError() will reject the promise with an exception. complete() 212 // completeWithError() will reject the promise with an exception. complete()
228 // is not expected to be called, and will reject the promise. 213 // is not expected to be called, and will reject the promise.
229 class NewSessionResultPromise : public ContentDecryptionModuleResultPromise { 214 class NewSessionResultPromise : public ContentDecryptionModuleResultPromise {
230 public: 215 public:
231 NewSessionResultPromise(ScriptState* scriptState, MediaKeySession* session) 216 NewSessionResultPromise(ScriptState* scriptState, MediaKeySession* session)
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 DEFINE_INLINE_TRACE() 288 DEFINE_INLINE_TRACE()
304 { 289 {
305 visitor->trace(m_session); 290 visitor->trace(m_session);
306 ContentDecryptionModuleResultPromise::trace(visitor); 291 ContentDecryptionModuleResultPromise::trace(visitor);
307 } 292 }
308 293
309 private: 294 private:
310 Member<MediaKeySession> m_session; 295 Member<MediaKeySession> m_session;
311 }; 296 };
312 297
313 MediaKeySession* MediaKeySession::create(ScriptState* scriptState, MediaKeys* me diaKeys, const String& sessionType) 298 MediaKeySession* MediaKeySession::create(ScriptState* scriptState, MediaKeys* me diaKeys, WebEncryptedMediaSessionType sessionType)
314 { 299 {
315 ASSERT(isValidSessionType(sessionType));
316 RefPtrWillBeRawPtr<MediaKeySession> session = new MediaKeySession(scriptStat e, mediaKeys, sessionType); 300 RefPtrWillBeRawPtr<MediaKeySession> session = new MediaKeySession(scriptStat e, mediaKeys, sessionType);
317 session->suspendIfNeeded(); 301 session->suspendIfNeeded();
318 return session.get(); 302 return session.get();
319 } 303 }
320 304
321 bool MediaKeySession::isValidSessionType(const String& sessionType) 305 WebEncryptedMediaInitDataType MediaKeySession::convertInitDataType(const String& initDataType)
322 { 306 {
323 return (sessionType == kTemporary || sessionType == kPersistentLicense || se ssionType == kPersistentReleaseMessage); 307 if (initDataType == "cenc")
308 return WebEncryptedMediaInitDataType::Cenc;
309 if (initDataType == "keyids")
310 return WebEncryptedMediaInitDataType::Keyids;
311 if (initDataType == "webm")
312 return WebEncryptedMediaInitDataType::Webm;
313
314 // |initDataType| is not restricted in the idl, so anything is possible.
315 return WebEncryptedMediaInitDataType::Unknown;
324 } 316 }
325 317
326 MediaKeySession::MediaKeySession(ScriptState* scriptState, MediaKeys* mediaKeys, const String& sessionType) 318 WebEncryptedMediaSessionType MediaKeySession::convertSessionType(const String& s essionType)
319 {
320 if (sessionType == "temporary")
321 return WebEncryptedMediaSessionType::Temporary;
322 if (sessionType == "persistent-license")
323 return WebEncryptedMediaSessionType::PersistentLicense;
324 if (sessionType == "persistent-release-message")
325 return WebEncryptedMediaSessionType::PersistentReleaseMessage;
326
327 ASSERT_NOT_REACHED();
328 return WebEncryptedMediaSessionType::Unknown;
329 }
330
331 MediaKeySession::MediaKeySession(ScriptState* scriptState, MediaKeys* mediaKeys, WebEncryptedMediaSessionType sessionType)
327 : ActiveDOMObject(scriptState->executionContext()) 332 : ActiveDOMObject(scriptState->executionContext())
328 , m_keySystem(mediaKeys->keySystem()) 333 , m_keySystem(mediaKeys->keySystem())
329 , m_asyncEventQueue(GenericEventQueue::create(this)) 334 , m_asyncEventQueue(GenericEventQueue::create(this))
330 , m_mediaKeys(mediaKeys) 335 , m_mediaKeys(mediaKeys)
331 , m_sessionType(sessionType) 336 , m_sessionType(sessionType)
332 , m_expiration(std::numeric_limits<double>::quiet_NaN()) 337 , m_expiration(std::numeric_limits<double>::quiet_NaN())
333 , m_keyStatusesMap(new MediaKeyStatusMap()) 338 , m_keyStatusesMap(new MediaKeyStatusMap())
334 , m_isUninitialized(true) 339 , m_isUninitialized(true)
335 , m_isCallable(false) 340 , m_isCallable(false)
336 , m_isClosed(false) 341 , m_isClosed(false)
(...skipping 17 matching lines...) Expand all
354 // 3.2 Let the expiration attribute be NaN. 359 // 3.2 Let the expiration attribute be NaN.
355 ASSERT(std::isnan(m_expiration)); 360 ASSERT(std::isnan(m_expiration));
356 361
357 // 3.3 Let the closed attribute be a new promise. 362 // 3.3 Let the closed attribute be a new promise.
358 ASSERT(!closed(scriptState).isUndefinedOrNull()); 363 ASSERT(!closed(scriptState).isUndefinedOrNull());
359 364
360 // 3.4 Let the keyStatuses attribute be empty. 365 // 3.4 Let the keyStatuses attribute be empty.
361 ASSERT(m_keyStatusesMap->size() == 0); 366 ASSERT(m_keyStatusesMap->size() == 0);
362 367
363 // 3.5 Let the session type be sessionType. 368 // 3.5 Let the session type be sessionType.
364 ASSERT(isValidSessionType(m_sessionType)); 369 ASSERT(m_sessionType != WebEncryptedMediaSessionType::Unknown);
365 370
366 // 3.6 Let uninitialized be true. 371 // 3.6 Let uninitialized be true.
367 ASSERT(m_isUninitialized); 372 ASSERT(m_isUninitialized);
368 373
369 // 3.7 Let callable be false. 374 // 3.7 Let callable be false.
370 ASSERT(!m_isCallable); 375 ASSERT(!m_isCallable);
371 376
372 // 3.8 Let the use distinctive identifier value be this object's 377 // 3.8 Let the use distinctive identifier value be this object's
373 // use distinctive identifier. 378 // use distinctive identifier.
374 // FIXME: Implement this (http://crbug.com/448922). 379 // FIXME: Implement this (http://crbug.com/448922).
(...skipping 22 matching lines...) Expand all
397 ScriptPromise MediaKeySession::closed(ScriptState* scriptState) 402 ScriptPromise MediaKeySession::closed(ScriptState* scriptState)
398 { 403 {
399 return m_closedPromise->promise(scriptState->world()); 404 return m_closedPromise->promise(scriptState->world());
400 } 405 }
401 406
402 MediaKeyStatusMap* MediaKeySession::keyStatuses() 407 MediaKeyStatusMap* MediaKeySession::keyStatuses()
403 { 408 {
404 return m_keyStatusesMap; 409 return m_keyStatusesMap;
405 } 410 }
406 411
407 ScriptPromise MediaKeySession::generateRequest(ScriptState* scriptState, const S tring& initDataType, const DOMArrayPiece& initData) 412 ScriptPromise MediaKeySession::generateRequest(ScriptState* scriptState, const S tring& initDataTypeString, const DOMArrayPiece& initData)
408 { 413 {
409 WTF_LOG(Media, "MediaKeySession(%p)::generateRequest %s", this, initDataType .ascii().data()); 414 WTF_LOG(Media, "MediaKeySession(%p)::generateRequest %s", this, initDataType String.ascii().data());
410 415
411 // From https://w3c.github.io/encrypted-media/#generateRequest: 416 // From https://w3c.github.io/encrypted-media/#generateRequest:
412 // Generates a request based on the initData. When this method is invoked, 417 // Generates a request based on the initData. When this method is invoked,
413 // the user agent must run the following steps: 418 // the user agent must run the following steps:
414 419
415 // 1. If this object's uninitialized value is false, return a promise 420 // 1. If this object's uninitialized value is false, return a promise
416 // rejected with a new DOMException whose name is "InvalidStateError". 421 // rejected with a new DOMException whose name is "InvalidStateError".
417 if (!m_isUninitialized) 422 if (!m_isUninitialized)
418 return CreateRejectedPromiseAlreadyInitialized(scriptState); 423 return CreateRejectedPromiseAlreadyInitialized(scriptState);
419 424
420 // 2. Let this object's uninitialized be false. 425 // 2. Let this object's uninitialized be false.
421 m_isUninitialized = false; 426 m_isUninitialized = false;
422 427
423 // 3. If initDataType is an empty string, return a promise rejected with a 428 // 3. If initDataType is an empty string, return a promise rejected with a
424 // new DOMException whose name is "InvalidAccessError". 429 // new DOMException whose name is "InvalidAccessError".
425 if (initDataType.isEmpty()) { 430 if (initDataTypeString.isEmpty()) {
426 return ScriptPromise::rejectWithDOMException( 431 return ScriptPromise::rejectWithDOMException(
427 scriptState, DOMException::create(InvalidAccessError, "The initDataT ype parameter is empty.")); 432 scriptState, DOMException::create(InvalidAccessError, "The initDataT ype parameter is empty."));
428 } 433 }
429 434
430 // 4. If initData is an empty array, return a promise rejected with a new 435 // 4. If initData is an empty array, return a promise rejected with a new
431 // DOMException whose name is"InvalidAccessError". 436 // DOMException whose name is"InvalidAccessError".
432 if (!initData.byteLength()) { 437 if (!initData.byteLength()) {
433 return ScriptPromise::rejectWithDOMException( 438 return ScriptPromise::rejectWithDOMException(
434 scriptState, DOMException::create(InvalidAccessError, "The initData parameter is empty.")); 439 scriptState, DOMException::create(InvalidAccessError, "The initData parameter is empty."));
435 } 440 }
436 441
437 // 5. If the Key System implementation represented by this object's cdm 442 // 5. If the Key System implementation represented by this object's cdm
438 // implementation value does not support initDataType as an 443 // implementation value does not support initDataType as an
439 // Initialization Data Type, return a promise rejected with a new 444 // Initialization Data Type, return a promise rejected with a new
440 // DOMException whose name is NotSupportedError. String comparison 445 // DOMException whose name is NotSupportedError. String comparison
441 // is case-sensitive. 446 // is case-sensitive.
442 // (blink side doesn't know what the CDM supports, so the proper check 447 // (blink side doesn't know what the CDM supports, so the proper check
443 // will be done on the Chromium side. However, we can verify that 448 // will be done on the Chromium side. However, we can verify that
444 // |initDataType| is one of the registered values.) 449 // |initDataType| is one of the registered values.)
445 if (!isRegisteredInitDataType(initDataType)) { 450 WebEncryptedMediaInitDataType initDataType = convertInitDataType(initDataTyp eString);
451 if (initDataType == WebEncryptedMediaInitDataType::Unknown) {
446 return ScriptPromise::rejectWithDOMException( 452 return ScriptPromise::rejectWithDOMException(
447 scriptState, DOMException::create(NotSupportedError, "The initializa tion data type '" + initDataType + "' is not a registered Initialization Data Ty pe.")); 453 scriptState, DOMException::create(NotSupportedError, "The initializa tion data type '" + initDataTypeString + "' is not supported."));
448 } 454 }
449 455
450 // 6. Let init data be a copy of the contents of the initData parameter. 456 // 6. Let init data be a copy of the contents of the initData parameter.
451 RefPtr<DOMArrayBuffer> initDataBuffer = DOMArrayBuffer::create(initData.data (), initData.byteLength()); 457 RefPtr<DOMArrayBuffer> initDataBuffer = DOMArrayBuffer::create(initData.data (), initData.byteLength());
452 458
453 // 7. Let session type be this object's session type. 459 // 7. Let session type be this object's session type.
454 // (Done in constructor.) 460 // (Done in constructor.)
455 461
456 // 8. Let promise be a new promise. 462 // 8. Let promise be a new promise.
457 NewSessionResultPromise* result = new NewSessionResultPromise(scriptState, t his); 463 NewSessionResultPromise* result = new NewSessionResultPromise(scriptState, t his);
(...skipping 28 matching lines...) Expand all
486 // 3. If sessionId is an empty string, return a promise rejected with a 492 // 3. If sessionId is an empty string, return a promise rejected with a
487 // new DOMException whose name is "InvalidAccessError". 493 // new DOMException whose name is "InvalidAccessError".
488 if (sessionId.isEmpty()) { 494 if (sessionId.isEmpty()) {
489 return ScriptPromise::rejectWithDOMException( 495 return ScriptPromise::rejectWithDOMException(
490 scriptState, DOMException::create(InvalidAccessError, "The sessionId parameter is empty.")); 496 scriptState, DOMException::create(InvalidAccessError, "The sessionId parameter is empty."));
491 } 497 }
492 498
493 // 4. If this object's session type is not "persistent-license" or 499 // 4. If this object's session type is not "persistent-license" or
494 // "persistent-release-message", return a promise rejected with a 500 // "persistent-release-message", return a promise rejected with a
495 // new DOMException whose name is InvalidAccessError. 501 // new DOMException whose name is InvalidAccessError.
496 if (m_sessionType != kPersistentLicense && m_sessionType != kPersistentRelea seMessage) { 502 if (m_sessionType != WebEncryptedMediaSessionType::PersistentLicense && m_se ssionType != WebEncryptedMediaSessionType::PersistentReleaseMessage) {
497 return ScriptPromise::rejectWithDOMException( 503 return ScriptPromise::rejectWithDOMException(
498 scriptState, DOMException::create(InvalidAccessError, "The session t ype is not persistent.")); 504 scriptState, DOMException::create(InvalidAccessError, "The session t ype is not persistent."));
499 } 505 }
500 506
501 // 5. If the Key System implementation represented by this object's cdm 507 // 5. If the Key System implementation represented by this object's cdm
502 // implementation value does not support loading previous sessions, 508 // implementation value does not support loading previous sessions,
503 // return a promise rejected with a new DOMException whose name is 509 // return a promise rejected with a new DOMException whose name is
504 // NotSupportedError. 510 // NotSupportedError.
505 // FIXME: Implement this (http://crbug.com/448922). 511 // FIXME: Implement this (http://crbug.com/448922).
506 512
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 // method is invoked, the user agent must run the following steps: 607 // method is invoked, the user agent must run the following steps:
602 608
603 // 1. If this object's callable value is false, return a promise rejected 609 // 1. If this object's callable value is false, return a promise rejected
604 // with a new DOMException whose name is "InvalidStateError". 610 // with a new DOMException whose name is "InvalidStateError".
605 if (!m_isCallable) 611 if (!m_isCallable)
606 return CreateRejectedPromiseNotCallable(scriptState); 612 return CreateRejectedPromiseNotCallable(scriptState);
607 613
608 // 2. If this object's session type is not "persistent-license" or 614 // 2. If this object's session type is not "persistent-license" or
609 // "persistent-release-message", return a promise rejected with a 615 // "persistent-release-message", return a promise rejected with a
610 // new DOMException whose name is InvalidAccessError. 616 // new DOMException whose name is InvalidAccessError.
611 if (m_sessionType != kPersistentLicense && m_sessionType != kPersistentRelea seMessage) { 617 if (m_sessionType != WebEncryptedMediaSessionType::PersistentLicense && m_se ssionType != WebEncryptedMediaSessionType::PersistentReleaseMessage) {
612 return ScriptPromise::rejectWithDOMException( 618 return ScriptPromise::rejectWithDOMException(
613 scriptState, DOMException::create(InvalidAccessError, "The session t ype is not persistent.")); 619 scriptState, DOMException::create(InvalidAccessError, "The session t ype is not persistent."));
614 } 620 }
615 621
616 // 3. If the Session Close algorithm has been run on this object, return a 622 // 3. If the Session Close algorithm has been run on this object, return a
617 // promise rejected with a new DOMException whose name is 623 // promise rejected with a new DOMException whose name is
618 // "InvalidStateError". 624 // "InvalidStateError".
619 if (m_isClosed) { 625 if (m_isClosed) {
620 return ScriptPromise::rejectWithDOMException( 626 return ScriptPromise::rejectWithDOMException(
621 scriptState, DOMException::create(InvalidStateError, "The session is already closed.")); 627 scriptState, DOMException::create(InvalidStateError, "The session is already closed."));
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 // The following steps are run: 804 // The following steps are run:
799 // 1. Let the session be the specified MediaKeySession object. 805 // 1. Let the session be the specified MediaKeySession object.
800 // 2. Queue a task to fire a simple event named message at the session. 806 // 2. Queue a task to fire a simple event named message at the session.
801 // The event is of type MediaKeyMessageEvent and has: 807 // The event is of type MediaKeyMessageEvent and has:
802 // -> messageType = the specified message type 808 // -> messageType = the specified message type
803 // -> message = the specified message 809 // -> message = the specified message
804 810
805 MediaKeyMessageEventInit init; 811 MediaKeyMessageEventInit init;
806 switch (messageType) { 812 switch (messageType) {
807 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRequest: 813 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRequest:
808 init.setMessageType(kLicenseRequest); 814 init.setMessageType("license-request");
809 break; 815 break;
810 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRenewal: 816 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRenewal:
811 init.setMessageType(kLicenseRenewal); 817 init.setMessageType("license-renewal");
812 break; 818 break;
813 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRelease: 819 case WebContentDecryptionModuleSession::Client::MessageType::LicenseRelease:
814 init.setMessageType(kLicenseRelease); 820 init.setMessageType("license-release");
815 break; 821 break;
816 } 822 }
817 init.setMessage(DOMArrayBuffer::create(static_cast<const void*>(message), me ssageLength)); 823 init.setMessage(DOMArrayBuffer::create(static_cast<const void*>(message), me ssageLength));
818 824
819 RefPtrWillBeRawPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::creat e(EventTypeNames::message, init); 825 RefPtrWillBeRawPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::creat e(EventTypeNames::message, init);
820 event->setTarget(this); 826 event->setTarget(this);
821 m_asyncEventQueue->enqueueEvent(event.release()); 827 m_asyncEventQueue->enqueueEvent(event.release());
822 } 828 }
823 829
824 void MediaKeySession::close() 830 void MediaKeySession::close()
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 visitor->trace(m_asyncEventQueue); 945 visitor->trace(m_asyncEventQueue);
940 visitor->trace(m_pendingActions); 946 visitor->trace(m_pendingActions);
941 visitor->trace(m_mediaKeys); 947 visitor->trace(m_mediaKeys);
942 visitor->trace(m_keyStatusesMap); 948 visitor->trace(m_keyStatusesMap);
943 visitor->trace(m_closedPromise); 949 visitor->trace(m_closedPromise);
944 RefCountedGarbageCollectedEventTargetWithInlineData<MediaKeySession>::trace( visitor); 950 RefCountedGarbageCollectedEventTargetWithInlineData<MediaKeySession>::trace( visitor);
945 ActiveDOMObject::trace(visitor); 951 ActiveDOMObject::trace(visitor);
946 } 952 }
947 953
948 } // namespace blink 954 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/encryptedmedia/MediaKeySession.h ('k') | Source/modules/encryptedmedia/MediaKeySystemAccess.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698