| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 }; |
| OLD | NEW |