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 // Prepares a video element for playback by setting default event handlers | 5 // Prepares a video element for playback by setting default event handlers |
6 // and source attribute. | 6 // and source attribute. |
7 function InitPlayer(player, video) { | 7 function InitPlayer(player, video) { |
8 Utils.timeLog('Registering video event handlers.'); | 8 Utils.timeLog('Registering video event handlers.'); |
9 | 9 |
10 // Map from event name to event listener function name. It is common for | 10 // Map from event name to event listener function name. It is common for |
11 // event listeners to be named onEventName. | 11 // event listeners to be named onEventName. |
12 var eventListenerMap = { | 12 var eventListenerMap = { |
13 'needkey': 'onNeedKey', | 13 'needkey': 'onNeedKey', |
14 'webkitneedkey': 'onWebkitNeedKey', | 14 'webkitneedkey': 'onWebkitNeedKey', |
15 'webkitkeymessage': 'onWebkitKeyMessage', | 15 'webkitkeymessage': 'onWebkitKeyMessage', |
16 'webkitkeyadded': 'onWebkitKeyAdded', | 16 'webkitkeyadded': 'onWebkitKeyAdded', |
| 17 'webkitkeyerror': 'onWebkitKeyError', |
17 'error': 'onError', | 18 'error': 'onError', |
18 'abort': 'onAbort' | 19 'abort': 'onAbort' |
19 }; | 20 }; |
20 | 21 |
21 // List of events that fail tests. | 22 // List of events that fail tests. |
22 var failingEvents = ['error', 'onAbort']; | 23 var failingEvents = ['error', 'abort']; |
23 | 24 |
24 for (eventName in eventListenerMap) { | 25 for (eventName in eventListenerMap) { |
25 video.addEventListener(eventName, | 26 video.addEventListener(eventName, |
26 player[eventListenerMap[eventName]] || function(){}); | 27 player[eventListenerMap[eventName]] || function(){}); |
27 } | 28 } |
28 | 29 |
29 for (var i = 0; i < failingEvents.length; i++) { | 30 for (var i = 0; i < failingEvents.length; i++) { |
30 video.addEventListener(failingEvents[i], Utils.failTest); | 31 video.addEventListener(failingEvents[i], Utils.failTest); |
31 } | 32 } |
32 | 33 |
33 if (TestConfig.useSRC) { | 34 if (TestConfig.useSRC) { |
34 Utils.timeLog('Loading media using src.'); | 35 Utils.timeLog('Loading media using src.'); |
35 video.src = TestConfig.mediaFile; | 36 video.src = TestConfig.mediaFile; |
36 } else { | 37 } else { |
37 var mediaSource = MediaSourceUtils.loadMediaSourceForTest(); | 38 var mediaSource = MediaSourceUtils.loadMediaSourceForTest(); |
38 video.src = window.URL.createObjectURL(mediaSource); | 39 video.src = window.URL.createObjectURL(mediaSource); |
39 } | 40 } |
40 } | 41 } |
41 | 42 |
42 function InitEMEPlayer(player, video) { | 43 function InitEMEPlayer(player, video) { |
43 player.onNeedKey = function(message) { | 44 video.addEventListener('needkey', function(message) { |
44 Utils.timeLog('Creating new media key session for contentType: ' + | 45 Utils.timeLog('Creating new media key session for contentType: ' + |
45 message.contentType + ', initData: ' + | 46 message.contentType + ', initData: ' + |
46 Utils.getHexString(message.initData)); | 47 Utils.getHexString(message.initData)); |
47 try { | 48 try { |
48 var mediaKeySession = message.target.mediaKeys.createSession( | 49 var mediaKeySession = message.target.mediaKeys.createSession( |
49 message.contentType, message.initData); | 50 message.contentType, message.initData); |
50 mediaKeySession.addEventListener('message', player.onMessage); | 51 mediaKeySession.addEventListener('message', player.onMessage); |
| 52 mediaKeySession.addEventListener('message', function(message) { |
| 53 video.receivedKeyMessage = true; |
| 54 if (Utils.isHeartBeatMessage(message.message)) { |
| 55 Utils.timeLog('MediaKeySession onMessage - heart beat', message); |
| 56 video.receivedHeartbeat = true; |
| 57 } |
| 58 }); |
51 mediaKeySession.addEventListener('error', function(error) { | 59 mediaKeySession.addEventListener('error', function(error) { |
52 Utils.failTest(error); | 60 Utils.failTest(error, KEY_ERROR); |
53 }); | 61 }); |
54 } catch (e) { | 62 } catch (e) { |
55 Utils.failTest(e); | 63 Utils.failTest(e); |
56 } | 64 } |
57 }; | 65 }); |
58 | 66 |
59 InitPlayer(player, video); | 67 InitPlayer(player, video); |
60 try { | 68 try { |
61 Utils.timeLog('Setting video media keys: ' + TestConfig.keySystem); | 69 Utils.timeLog('Setting video media keys: ' + TestConfig.keySystem); |
62 video.setMediaKeys(new MediaKeys(TestConfig.keySystem)); | 70 video.setMediaKeys(new MediaKeys(TestConfig.keySystem)); |
63 } catch (e) { | 71 } catch (e) { |
64 Utils.failTest(e); | 72 Utils.failTest(e); |
65 } | 73 } |
66 } | 74 } |
67 | 75 |
68 function InitPrefixedEMEPlayer(player, video) { | 76 function InitPrefixedEMEPlayer(player, video) { |
69 player.onWebkitNeedKey = function(message) { | 77 video.addEventListener('webkitneedkey', function(message) { |
| 78 var initData = message.initData; |
| 79 if (TestConfig.sessionToLoad) { |
| 80 Utils.timeLog('Loading session: ' + TestConfig.sessionToLoad) |
| 81 initData = Utils.convertToUint8Array( |
| 82 PREFIXED_API_LOAD_SESSION_HEADER + TestConfig.sessionToLoad); |
| 83 } |
70 Utils.timeLog(TestConfig.keySystem + ' Generate key request, initData: ' + | 84 Utils.timeLog(TestConfig.keySystem + ' Generate key request, initData: ' + |
71 Utils.getHexString(message.initData)); | 85 Utils.getHexString(initData)); |
72 message.target.webkitGenerateKeyRequest( | 86 try { |
73 TestConfig.keySystem, message.initData); | 87 message.target.webkitGenerateKeyRequest(TestConfig.keySystem, initData); |
74 }; | 88 } catch(e) { |
| 89 Utils.failTest(e); |
| 90 } |
| 91 }); |
75 | 92 |
76 player.onWebkitKeyAdded = function(message) { | 93 video.addEventListener('webkitkeyadded', function(message) { |
77 Utils.timeLog('onWebkitKeyAdded', message); | 94 Utils.timeLog('onWebkitKeyAdded', message); |
78 message.target.hasKeyAdded = true; | 95 message.target.receivedKeyAdded = true; |
79 }; | 96 }); |
| 97 |
| 98 video.addEventListener('webkitkeyerror', function(error) { |
| 99 Utils.timeLog('onWebkitKeyError', error); |
| 100 Utils.failTest(error, KEY_ERROR); |
| 101 }); |
| 102 |
| 103 video.addEventListener('webkitkeymessage', function(message) { |
| 104 Utils.timeLog('onWebkitKeyMessage', message); |
| 105 message.target.receivedKeyMessage = true; |
| 106 if (Utils.isHeartBeatMessage(message.message)) { |
| 107 Utils.timeLog('onWebkitKeyMessage - heart beat', message); |
| 108 message.target.receivedHeartbeat = true; |
| 109 } |
| 110 }); |
80 | 111 |
81 InitPlayer(player, video); | 112 InitPlayer(player, video); |
82 } | 113 } |
OLD | NEW |