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

Side by Side Diff: media/test/data/eme_player_js/player_utils.js

Issue 2426813002: EME: Close existing sessions on CDM failure (Closed)
Patch Set: rename result (+rebase) Created 4 years, 1 month 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
« no previous file with comments | « media/test/data/eme_player_js/globals.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // The PlayerUtils provides utility functions to binding common media events 5 // The PlayerUtils provides utility functions to binding common media events
6 // to specific player functions. It also provides functions to load media source 6 // to specific player functions. It also provides functions to load media source
7 // base on test configurations. 7 // base on test configurations.
8 var PlayerUtils = new function() { 8 var PlayerUtils = new function() {
9 } 9 }
10 10
(...skipping 10 matching lines...) Expand all
21 var eventListenerFunction = player[eventListenerMap[eventName]]; 21 var eventListenerFunction = player[eventListenerMap[eventName]];
22 if (eventListenerFunction) { 22 if (eventListenerFunction) {
23 player.video.addEventListener(eventName, function(e) { 23 player.video.addEventListener(eventName, function(e) {
24 player[eventListenerMap[e.type]](e); 24 player[eventListenerMap[e.type]](e);
25 }); 25 });
26 } 26 }
27 } 27 }
28 28
29 player.video.addEventListener('error', function(error) { 29 player.video.addEventListener('error', function(error) {
30 // This most likely happens on pipeline failures (e.g. when the CDM 30 // This most likely happens on pipeline failures (e.g. when the CDM
31 // crashes). 31 // crashes). Don't report a failure if the test is checking that sessions
32 // are closed on a crash.
32 Utils.timeLog('onHTMLElementError', error); 33 Utils.timeLog('onHTMLElementError', error);
33 Utils.failTest(error); 34 if (player.testConfig.keySystem == CRASH_TEST_KEYSYSTEM) {
35 // On failure the session should have been closed, so verify.
36 player.session.closed.then(
37 function(result) {
38 Utils.setResultInTitle(EME_SESSION_CLOSED_AND_ERROR);
39 },
40 function(error) { Utils.failTest(error); });
41 } else {
42 Utils.failTest(error);
43 }
34 }); 44 });
35 }; 45 };
36 46
37 // Register the necessary event handlers needed when playing encrypted content. 47 // Register the necessary event handlers needed when playing encrypted content.
38 // Returns a promise that resolves to the player. 48 // Returns a promise that resolves to the player.
39 PlayerUtils.registerEMEEventListeners = function(player) { 49 PlayerUtils.registerEMEEventListeners = function(player) {
40 player.video.addEventListener('encrypted', function(message) { 50 player.video.addEventListener('encrypted', function(message) {
41 51
42 function addMediaKeySessionListeners(mediaKeySession) { 52 function addMediaKeySessionListeners(mediaKeySession) {
43 mediaKeySession.addEventListener('message', function(message) { 53 mediaKeySession.addEventListener('message', function(message) {
44 player.video.receivedKeyMessage = true; 54 player.video.receivedKeyMessage = true;
45 if (Utils.isRenewalMessage(message)) { 55 if (Utils.isRenewalMessage(message)) {
46 Utils.timeLog('MediaKeySession onMessage - renewal', message); 56 Utils.timeLog('MediaKeySession onMessage - renewal', message);
47 player.video.receivedRenewalMessage = true; 57 player.video.receivedRenewalMessage = true;
48 } else { 58 } else {
49 if (message.messageType != 'license-request') { 59 if (message.messageType != 'license-request') {
50 Utils.failTest('Unexpected message type "' + message.messageType + 60 Utils.failTest('Unexpected message type "' + message.messageType +
51 '" received.', 61 '" received.',
52 EME_MESSAGE_UNEXPECTED_TYPE); 62 EME_MESSAGE_UNEXPECTED_TYPE);
53 } 63 }
54 } 64 }
55 player.onMessage(message); 65 player.onMessage(message);
56 }); 66 });
57 } 67 }
58 68
59 try { 69 try {
60 if (player.testConfig.sessionToLoad) { 70 if (player.testConfig.sessionToLoad) {
61 Utils.timeLog('Loading session: ' + player.testConfig.sessionToLoad); 71 Utils.timeLog('Loading session: ' + player.testConfig.sessionToLoad);
62 var session = 72 player.session =
63 message.target.mediaKeys.createSession('persistent-license'); 73 message.target.mediaKeys.createSession('persistent-license');
64 addMediaKeySessionListeners(session); 74 addMediaKeySessionListeners(player.session);
65 session.load(player.testConfig.sessionToLoad) 75 player.session.load(player.testConfig.sessionToLoad)
66 .then( 76 .then(
67 function(result) { 77 function(result) {
68 if (!result) 78 if (!result)
69 Utils.failTest('Session not found.', EME_SESSION_NOT_FOUND); 79 Utils.failTest('Session not found.', EME_SESSION_NOT_FOUND);
70 }, 80 },
71 function(error) { Utils.failTest(error, EME_LOAD_FAILED); }); 81 function(error) { Utils.failTest(error, EME_LOAD_FAILED); });
72 } else { 82 } else {
73 Utils.timeLog('Creating new media key session for initDataType: ' + 83 Utils.timeLog('Creating new media key session for initDataType: ' +
74 message.initDataType + ', initData: ' + 84 message.initDataType + ', initData: ' +
75 Utils.getHexString(new Uint8Array(message.initData))); 85 Utils.getHexString(new Uint8Array(message.initData)));
76 var session = message.target.mediaKeys.createSession(); 86 player.session = message.target.mediaKeys.createSession();
77 addMediaKeySessionListeners(session); 87 addMediaKeySessionListeners(player.session);
78 session.generateRequest(message.initDataType, message.initData) 88 player.session.generateRequest(message.initDataType, message.initData)
79 .catch(function(error) { 89 .catch(function(error) {
80 // Ignore the error if a crash is expected. This ensures that 90 // Ignore the error if a crash is expected. This ensures that
81 // the decoder actually detects and reports the error. 91 // the decoder actually detects and reports the error.
82 if (this.testConfig.keySystem != 92 if (this.testConfig.keySystem != CRASH_TEST_KEYSYSTEM) {
83 'org.chromium.externalclearkey.crash') {
84 Utils.failTest(error, EME_GENERATEREQUEST_FAILED); 93 Utils.failTest(error, EME_GENERATEREQUEST_FAILED);
85 } 94 }
86 }); 95 });
87 } 96 }
88 } catch (e) { 97 } catch (e) {
89 Utils.failTest(e); 98 Utils.failTest(e);
90 } 99 }
91 }); 100 });
92 101
93 this.registerDefaultEventListeners(player); 102 this.registerDefaultEventListeners(player);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 201
193 // Return the appropriate player based on test configuration. 202 // Return the appropriate player based on test configuration.
194 PlayerUtils.createPlayer = function(video, testConfig) { 203 PlayerUtils.createPlayer = function(video, testConfig) {
195 function getPlayerType(keySystem) { 204 function getPlayerType(keySystem) {
196 switch (keySystem) { 205 switch (keySystem) {
197 case WIDEVINE_KEYSYSTEM: 206 case WIDEVINE_KEYSYSTEM:
198 return WidevinePlayer; 207 return WidevinePlayer;
199 case CLEARKEY: 208 case CLEARKEY:
200 case EXTERNAL_CLEARKEY: 209 case EXTERNAL_CLEARKEY:
201 case EXTERNAL_CLEARKEY_RENEWAL: 210 case EXTERNAL_CLEARKEY_RENEWAL:
211 case CRASH_TEST_KEYSYSTEM:
202 return ClearKeyPlayer; 212 return ClearKeyPlayer;
203 case FILE_IO_TEST_KEYSYSTEM: 213 case FILE_IO_TEST_KEYSYSTEM:
204 case OUTPUT_PROTECTION_TEST_KEYSYSTEM: 214 case OUTPUT_PROTECTION_TEST_KEYSYSTEM:
205 case PLATFORM_VERIFICATION_TEST_KEYSYSTEM: 215 case PLATFORM_VERIFICATION_TEST_KEYSYSTEM:
206 return UnitTestPlayer; 216 return UnitTestPlayer;
207 default: 217 default:
208 Utils.timeLog(keySystem + ' is not a known key system'); 218 Utils.timeLog(keySystem + ' is not a known key system');
209 return ClearKeyPlayer; 219 return ClearKeyPlayer;
210 } 220 }
211 } 221 }
212 var Player = getPlayerType(testConfig.keySystem); 222 var Player = getPlayerType(testConfig.keySystem);
213 return new Player(video, testConfig); 223 return new Player(video, testConfig);
214 }; 224 };
OLDNEW
« no previous file with comments | « media/test/data/eme_player_js/globals.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698