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 |
11 // Prepares a video element for playback by setting default event handlers | 11 // Prepares a video element for playback by setting default event handlers |
12 // and source attribute. | 12 // and source attribute. |
13 PlayerUtils.registerDefaultEventListeners = function(player) { | 13 PlayerUtils.registerDefaultEventListeners = function(player) { |
14 Utils.timeLog('Registering video event handlers.'); | 14 Utils.timeLog('Registering video event handlers.'); |
15 // Map from event name to event listener function name. It is common for | 15 // Map from event name to event listener function name. It is common for |
16 // event listeners to be named onEventName. | 16 // event listeners to be named onEventName. |
17 var eventListenerMap = { | 17 var eventListenerMap = { |
18 'needkey': 'onNeedKey', | |
19 'encrypted': 'onEncrypted', | 18 'encrypted': 'onEncrypted', |
20 'webkitneedkey': 'onWebkitNeedKey', | 19 'webkitneedkey': 'onWebkitNeedKey', |
21 'webkitkeymessage': 'onWebkitKeyMessage', | 20 'webkitkeymessage': 'onWebkitKeyMessage', |
22 'webkitkeyadded': 'onWebkitKeyAdded', | 21 'webkitkeyadded': 'onWebkitKeyAdded', |
23 'webkitkeyerror': 'onWebkitKeyError' | 22 'webkitkeyerror': 'onWebkitKeyError' |
24 }; | 23 }; |
25 for (eventName in eventListenerMap) { | 24 for (eventName in eventListenerMap) { |
26 var eventListenerFunction = player[eventListenerMap[eventName]]; | 25 var eventListenerFunction = player[eventListenerMap[eventName]]; |
27 if (eventListenerFunction) { | 26 if (eventListenerFunction) { |
28 player.video.addEventListener(eventName, function(e) { | 27 player.video.addEventListener(eventName, function(e) { |
29 player[eventListenerMap[e.type]](e); | 28 player[eventListenerMap[e.type]](e); |
30 }); | 29 }); |
31 } | 30 } |
32 } | 31 } |
33 // List of events that fail tests. | 32 // List of events that fail tests. |
34 var failingEvents = ['error', 'abort']; | 33 var failingEvents = ['error', 'abort']; |
35 for (var i = 0; i < failingEvents.length; i++) { | 34 for (var i = 0; i < failingEvents.length; i++) { |
36 player.video.addEventListener(failingEvents[i], Utils.failTest); | 35 player.video.addEventListener(failingEvents[i], Utils.failTest); |
37 } | 36 } |
38 }; | 37 }; |
39 | 38 |
40 PlayerUtils.registerEMEEventListeners = function(player) { | 39 PlayerUtils.registerEMEEventListeners = function(player) { |
41 var encrypted_handler = function(message) { | 40 player.video.addEventListener('encrypted', function(message) { |
42 | 41 |
43 function addMediaKeySessionListeners(mediaKeySession) { | 42 function addMediaKeySessionListeners(mediaKeySession) { |
44 mediaKeySession.addEventListener('message', function(message) { | 43 mediaKeySession.addEventListener('message', function(message) { |
45 player.video.receivedKeyMessage = true; | 44 player.video.receivedKeyMessage = true; |
46 if (Utils.isHeartBeatMessage(message.message)) { | 45 if (Utils.isHeartBeatMessage(message.message)) { |
47 Utils.timeLog('MediaKeySession onMessage - heart beat', message); | 46 Utils.timeLog('MediaKeySession onMessage - heart beat', message); |
48 player.video.receivedHeartbeat = true; | 47 player.video.receivedHeartbeat = true; |
49 } | 48 } |
50 player.onMessage(message); | 49 player.onMessage(message); |
51 }); | 50 }); |
52 mediaKeySession.addEventListener('error', function(error) { | 51 mediaKeySession.addEventListener('error', function(error) { |
53 Utils.failTest(error, KEY_ERROR); | 52 Utils.failTest(error, KEY_ERROR); |
54 }); | 53 }); |
55 } | 54 } |
56 | 55 |
57 // TODO(sandersd): Stop checking contentType once we complete the switch to | |
58 // using the 'encrypted' event. | |
59 var init_data_type = message.initDataType || message.contentType; | |
60 Utils.timeLog('Creating new media key session for initDataType: ' + | 56 Utils.timeLog('Creating new media key session for initDataType: ' + |
61 init_data_type + ', initData: ' + | 57 message.initDataType + ', initData: ' + |
62 Utils.getHexString(new Uint8Array(message.initData))); | 58 Utils.getHexString(new Uint8Array(message.initData))); |
63 try { | 59 try { |
64 if (message.target.mediaKeys.createSession.length == 0) { | 60 if (message.target.mediaKeys.createSession.length == 0) { |
65 // FIXME(jrummell): Remove this test (and else branch) once blink | 61 // FIXME(jrummell): Remove this test (and else branch) once blink |
66 // uses the new API. | 62 // uses the new API. |
67 var session = message.target.mediaKeys.createSession(); | 63 var session = message.target.mediaKeys.createSession(); |
68 addMediaKeySessionListeners(session); | 64 addMediaKeySessionListeners(session); |
69 session.generateRequest(init_data_type, message.initData) | 65 session.generateRequest(message.initDataType, message.initData) |
70 .catch(function(error) { | 66 .catch(function(error) { |
71 Utils.failTest(error, KEY_ERROR); | 67 Utils.failTest(error, KEY_ERROR); |
72 }); | 68 }); |
73 } else { | 69 } else { |
74 var session = message.target.mediaKeys.createSession( | 70 var session = message.target.mediaKeys.createSession( |
75 init_data_type, message.initData); | 71 message.initDataType, message.initData); |
76 session.then(addMediaKeySessionListeners) | 72 session.then(addMediaKeySessionListeners) |
77 .catch(function(error) { | 73 .catch(function(error) { |
78 Utils.failTest(error, KEY_ERROR); | 74 Utils.failTest(error, KEY_ERROR); |
79 }); | 75 }); |
80 } | 76 } |
81 } catch (e) { | 77 } catch (e) { |
82 Utils.failTest(e); | 78 Utils.failTest(e); |
83 } | 79 } |
84 } | 80 }); |
85 | |
86 // TODO(sandersd): Stop registering 'needkey' after it is renamed to | |
87 // 'encrypted'. | |
88 player.video.addEventListener('encrypted', encrypted_handler); | |
89 player.video.addEventListener('needkey', encrypted_handler); | |
90 | 81 |
91 this.registerDefaultEventListeners(player); | 82 this.registerDefaultEventListeners(player); |
92 try { | 83 try { |
93 Utils.timeLog('Setting video media keys: ' + player.testConfig.keySystem); | 84 Utils.timeLog('Setting video media keys: ' + player.testConfig.keySystem); |
94 MediaKeys.create(player.testConfig.keySystem).then(function(mediaKeys) { | 85 MediaKeys.create(player.testConfig.keySystem).then(function(mediaKeys) { |
95 player.video.setMediaKeys(mediaKeys); | 86 player.video.setMediaKeys(mediaKeys); |
96 }).catch(function(error) { | 87 }).catch(function(error) { |
97 Utils.failTest(error, NOTSUPPORTEDERROR); | 88 Utils.failTest(error, NOTSUPPORTEDERROR); |
98 }); | 89 }); |
99 } catch (e) { | 90 } catch (e) { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 default: | 181 default: |
191 Utils.timeLog(keySystem + ' is not a known key system'); | 182 Utils.timeLog(keySystem + ' is not a known key system'); |
192 if (usePrefixedEME) | 183 if (usePrefixedEME) |
193 return PrefixedClearKeyPlayer; | 184 return PrefixedClearKeyPlayer; |
194 return ClearKeyPlayer; | 185 return ClearKeyPlayer; |
195 } | 186 } |
196 } | 187 } |
197 var Player = getPlayerType(testConfig.keySystem); | 188 var Player = getPlayerType(testConfig.keySystem); |
198 return new Player(video, testConfig); | 189 return new Player(video, testConfig); |
199 }; | 190 }; |
OLD | NEW |