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

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

Issue 111043004: Update MediaKeySession method names to latest EME spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 11 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 30 matching lines...) Expand all
41 { 41 {
42 return adoptRef(new MediaKeySession(context, cdm, keys)); 42 return adoptRef(new MediaKeySession(context, cdm, keys));
43 } 43 }
44 44
45 MediaKeySession::MediaKeySession(ExecutionContext* context, ContentDecryptionMod ule* cdm, MediaKeys* keys) 45 MediaKeySession::MediaKeySession(ExecutionContext* context, ContentDecryptionMod ule* cdm, MediaKeys* keys)
46 : ContextLifecycleObserver(context) 46 : ContextLifecycleObserver(context)
47 , m_keySystem(keys->keySystem()) 47 , m_keySystem(keys->keySystem())
48 , m_asyncEventQueue(GenericEventQueue::create(this)) 48 , m_asyncEventQueue(GenericEventQueue::create(this))
49 , m_session(cdm->createSession(this)) 49 , m_session(cdm->createSession(this))
50 , m_keys(keys) 50 , m_keys(keys)
51 , m_keyRequestTimer(this, &MediaKeySession::keyRequestTimerFired) 51 , m_initializeNewSessionTimer(this, &MediaKeySession::initializeNewSessionTi merFired)
52 , m_updateTimer(this, &MediaKeySession::updateTimerFired) 52 , m_updateTimer(this, &MediaKeySession::updateTimerFired)
53 { 53 {
54 ScriptWrappable::init(this); 54 ScriptWrappable::init(this);
55 ASSERT(m_session);
55 } 56 }
56 57
57 MediaKeySession::~MediaKeySession() 58 MediaKeySession::~MediaKeySession()
58 { 59 {
59 close(); 60 m_session.clear();
61 m_asyncEventQueue->cancelAllEvents();
62
63 // FIXME: Release ref that MediaKeys has by removing it from m_sessions.
64 // if (m_keys) m_keys->sessionClosed(this);
65 m_keys = 0;
60 } 66 }
61 67
62 void MediaKeySession::setError(MediaKeyError* error) 68 void MediaKeySession::setError(MediaKeyError* error)
63 { 69 {
64 m_error = error; 70 m_error = error;
65 } 71 }
66 72
67 void MediaKeySession::close() 73 void MediaKeySession::release(ExceptionState& exceptionState)
68 { 74 {
69 ASSERT(!m_keys == !m_session); 75 m_session->release();
70
71 if (m_session)
72 m_session->close();
73 m_session.clear();
74 m_asyncEventQueue->cancelAllEvents();
75
76 // FIXME: Release ref that MediaKeys has by removing it from m_sessions.
77 // if (m_keys) m_keys->sessionClosed(this);
78 m_keys = 0;
79 } 76 }
80 77
81 String MediaKeySession::sessionId() const 78 String MediaKeySession::sessionId() const
82 { 79 {
83 return m_session->sessionId(); 80 return m_session->sessionId();
84 } 81 }
85 82
86 void MediaKeySession::generateKeyRequest(const String& mimeType, Uint8Array* ini tData) 83 void MediaKeySession::initializeNewSession(const String& mimeType, Uint8Array* i nitData)
87 { 84 {
88 m_pendingKeyRequests.append(PendingKeyRequest(mimeType, initData)); 85 m_pendingInitializeNewSessionData.append(InitializeNewSessionData(mimeType, initData));
89 // FIXME: Eliminate timers. Asynchronicity will be handled in Chromium. 86 m_initializeNewSessionTimer.startOneShot(0);
90 m_keyRequestTimer.startOneShot(0);
91 } 87 }
92 88
93 void MediaKeySession::keyRequestTimerFired(Timer<MediaKeySession>*) 89 void MediaKeySession::initializeNewSessionTimerFired(Timer<MediaKeySession>*)
94 { 90 {
95 ASSERT(m_pendingKeyRequests.size()); 91 ASSERT(m_pendingInitializeNewSessionData.size());
96 if (!m_session)
97 return;
98 92
99 while (!m_pendingKeyRequests.isEmpty()) { 93 while (!m_pendingInitializeNewSessionData.isEmpty()) {
100 PendingKeyRequest request = m_pendingKeyRequests.takeFirst(); 94 InitializeNewSessionData data = m_pendingInitializeNewSessionData.takeFi rst();
101 95 // FIXME: Refer to the spec to see what needs to be done in blink.
102 // NOTE: Continued from step 5 in MediaKeys::createSession(). 96 m_session->initializeNewSession(data.mimeType, *data.initData);
103 // The user agent will asynchronously execute the following steps in the task:
104
105 // 1. Let cdm be the cdm loaded in the MediaKeys constructor.
106 // 2. Let destinationURL be null.
107
108 // 3. Use cdm to generate a key request and follow the steps for the fir st matching condition from the following list:
109 m_session->generateKeyRequest(request.mimeType, *request.initData);
110 } 97 }
111 } 98 }
112 99
113 void MediaKeySession::update(Uint8Array* response, ExceptionState& exceptionStat e) 100 void MediaKeySession::update(Uint8Array* response, ExceptionState& exceptionStat e)
114 { 101 {
115 // From <https://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/ encrypted-media.html#dom-update>: 102 // From <https://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/ encrypted-media.html#dom-update>:
116 // The update(response) method must run the following steps: 103 // The update(response) method must run the following steps:
117 // 1. If the argument is null or an empty array, throw an INVALID_ACCESS_ERR . 104 // 1. If the argument is null or an empty array, throw an INVALID_ACCESS_ERR .
118 if (!response || !response->length()) { 105 if (!response || !response->length()) {
119 exceptionState.throwDOMException(InvalidAccessError, String::format("The response argument provided is %s.", response ? "an empty array" : "invalid")); 106 exceptionState.throwDOMException(InvalidAccessError, String::format("The response argument provided is %s.", response ? "an empty array" : "invalid"));
120 return; 107 return;
121 } 108 }
122 109
123 // 2. If the session is not in the PENDING state, throw an INVALID_STATE_ERR . 110 // 2. If the session is not in the PENDING state, throw an INVALID_STATE_ERR .
124 // FIXME: Implement states in MediaKeySession. 111 // FIXME: Implement states in MediaKeySession.
125 112
126 // 3. Schedule a task to handle the call, providing response. 113 // 3. Schedule a task to handle the call, providing response.
127 m_pendingKeys.append(response); 114 m_pendingKeys.append(response);
128 m_updateTimer.startOneShot(0); 115 m_updateTimer.startOneShot(0);
129 } 116 }
130 117
131 void MediaKeySession::updateTimerFired(Timer<MediaKeySession>*) 118 void MediaKeySession::updateTimerFired(Timer<MediaKeySession>*)
132 { 119 {
133 ASSERT(m_pendingKeys.size()); 120 ASSERT(m_pendingKeys.size());
134 if (!m_session)
135 return;
136 121
137 while (!m_pendingKeys.isEmpty()) { 122 while (!m_pendingKeys.isEmpty()) {
138 RefPtr<Uint8Array> pendingKey = m_pendingKeys.takeFirst(); 123 RefPtr<Uint8Array> pendingKey = m_pendingKeys.takeFirst();
139 124
140 // NOTE: Continued from step 2. of MediaKeySession::update() 125 // NOTE: Continued from step 2. of MediaKeySession::update()
141 // 2.1. Let cdm be the cdm loaded in the MediaKeys constructor. 126 // 2.1. Let cdm be the cdm loaded in the MediaKeys constructor.
142 // NOTE: This is m_session. 127 // NOTE: This is m_session.
143 // 2.2. Let 'did store key' be false. 128 // 2.2. Let 'did store key' be false.
144 // 2.3. Let 'next message' be null. 129 // 2.3. Let 'next message' be null.
145 // 2.4. Use cdm to handle key. 130 // 2.4. Use cdm to handle key.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 { 182 {
198 return EventTargetNames::MediaKeySession; 183 return EventTargetNames::MediaKeySession;
199 } 184 }
200 185
201 ExecutionContext* MediaKeySession::executionContext() const 186 ExecutionContext* MediaKeySession::executionContext() const
202 { 187 {
203 return ContextLifecycleObserver::executionContext(); 188 return ContextLifecycleObserver::executionContext();
204 } 189 }
205 190
206 } 191 }
OLDNEW
« no previous file with comments | « Source/modules/encryptedmedia/MediaKeySession.h ('k') | Source/modules/encryptedmedia/MediaKeySession.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698