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', | |
18 'error': 'onError', | 17 'error': 'onError', |
19 'abort': 'onAbort' | 18 'abort': 'onAbort' |
20 }; | 19 }; |
21 | 20 |
22 // List of events that fail tests. | 21 // List of events that fail tests. |
23 var failingEvents = ['error', 'abort']; | 22 var failingEvents = ['error', 'onAbort']; |
24 | 23 |
25 for (eventName in eventListenerMap) { | 24 for (eventName in eventListenerMap) { |
26 video.addEventListener(eventName, | 25 video.addEventListener(eventName, |
27 player[eventListenerMap[eventName]] || function(){}); | 26 player[eventListenerMap[eventName]] || function(){}); |
28 } | 27 } |
29 | 28 |
30 for (var i = 0; i < failingEvents.length; i++) { | 29 for (var i = 0; i < failingEvents.length; i++) { |
31 video.addEventListener(failingEvents[i], Utils.failTest); | 30 video.addEventListener(failingEvents[i], Utils.failTest); |
32 } | 31 } |
33 | 32 |
34 if (TestConfig.useSRC) { | 33 if (TestConfig.useSRC) { |
35 Utils.timeLog('Loading media using src.'); | 34 Utils.timeLog('Loading media using src.'); |
36 video.src = TestConfig.mediaFile; | 35 video.src = TestConfig.mediaFile; |
37 } else { | 36 } else { |
38 var mediaSource = MediaSourceUtils.loadMediaSourceForTest(); | 37 var mediaSource = MediaSourceUtils.loadMediaSourceForTest(); |
39 video.src = window.URL.createObjectURL(mediaSource); | 38 video.src = window.URL.createObjectURL(mediaSource); |
40 } | 39 } |
41 } | 40 } |
42 | 41 |
43 function InitEMEPlayer(player, video) { | 42 function InitEMEPlayer(player, video) { |
44 video.addEventListener('needkey', function(message) { | 43 player.onNeedKey = function(message) { |
45 Utils.timeLog('Creating new media key session for contentType: ' + | 44 Utils.timeLog('Creating new media key session for contentType: ' + |
46 message.contentType + ', initData: ' + | 45 message.contentType + ', initData: ' + |
47 Utils.getHexString(message.initData)); | 46 Utils.getHexString(message.initData)); |
48 try { | 47 try { |
49 var mediaKeySession = message.target.mediaKeys.createSession( | 48 var mediaKeySession = message.target.mediaKeys.createSession( |
50 message.contentType, message.initData); | 49 message.contentType, message.initData); |
51 mediaKeySession.addEventListener('message', player.onMessage); | 50 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 }); | |
59 mediaKeySession.addEventListener('error', function(error) { | 51 mediaKeySession.addEventListener('error', function(error) { |
60 Utils.failTest(error, KEY_ERROR); | 52 Utils.failTest(error); |
61 }); | 53 }); |
62 } catch (e) { | 54 } catch (e) { |
63 Utils.failTest(e); | 55 Utils.failTest(e); |
64 } | 56 } |
65 }); | 57 }; |
66 | 58 |
67 InitPlayer(player, video); | 59 InitPlayer(player, video); |
68 try { | 60 try { |
69 Utils.timeLog('Setting video media keys: ' + TestConfig.keySystem); | 61 Utils.timeLog('Setting video media keys: ' + TestConfig.keySystem); |
70 video.setMediaKeys(new MediaKeys(TestConfig.keySystem)); | 62 video.setMediaKeys(new MediaKeys(TestConfig.keySystem)); |
71 } catch (e) { | 63 } catch (e) { |
72 Utils.failTest(e); | 64 Utils.failTest(e); |
73 } | 65 } |
74 } | 66 } |
75 | 67 |
76 function InitPrefixedEMEPlayer(player, video) { | 68 function InitPrefixedEMEPlayer(player, video) { |
77 video.addEventListener('webkitneedkey', function(message) { | 69 player.onWebkitNeedKey = 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 } | |
84 Utils.timeLog(TestConfig.keySystem + ' Generate key request, initData: ' + | 70 Utils.timeLog(TestConfig.keySystem + ' Generate key request, initData: ' + |
85 Utils.getHexString(initData)); | 71 Utils.getHexString(message.initData)); |
86 try { | 72 message.target.webkitGenerateKeyRequest( |
87 message.target.webkitGenerateKeyRequest(TestConfig.keySystem, initData); | 73 TestConfig.keySystem, message.initData); |
88 } catch(e) { | 74 }; |
89 Utils.failTest(e); | |
90 } | |
91 }); | |
92 | 75 |
93 video.addEventListener('webkitkeyadded', function(message) { | 76 player.onWebkitKeyAdded = function(message) { |
94 Utils.timeLog('onWebkitKeyAdded', message); | 77 Utils.timeLog('onWebkitKeyAdded', message); |
95 message.target.receivedKeyAdded = true; | 78 message.target.hasKeyAdded = true; |
96 }); | 79 }; |
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 }); | |
111 | 80 |
112 InitPlayer(player, video); | 81 InitPlayer(player, video); |
113 } | 82 } |
OLD | NEW |