Index: tools/telemetry/telemetry/page/actions/seek.js |
diff --git a/tools/telemetry/telemetry/page/actions/play.js b/tools/telemetry/telemetry/page/actions/seek.js |
similarity index 55% |
copy from tools/telemetry/telemetry/page/actions/play.js |
copy to tools/telemetry/telemetry/page/actions/seek.js |
index eb174248e95b688325e9c5f62a5489ff55ec868a..35771990ebabbd7d4224989f7d7344c18176ff69 100644 |
--- a/tools/telemetry/telemetry/page/actions/play.js |
+++ b/tools/telemetry/telemetry/page/actions/seek.js |
@@ -1,4 +1,4 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
dtu
2013/07/20 01:20:56
Can you reuse the code between the two JS files? M
shadi
2013/07/22 19:18:31
I went with a MediaAction base class that runs com
|
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -27,50 +27,57 @@ |
return []; |
} |
- function playMedia(selector) { |
- // Performs the "Play" action on media satisfying selector. |
+ function seekMedia(selector, seekTime, logSeekTime) { |
+ // Performs the "Seek" action on media satisfying selector. |
var mediaElements = findMediaElements(selector); |
for (var i = 0; i < mediaElements.length; i++) { |
- console.log('Playing element: ' + mediaElements[i].src); |
- play(mediaElements[i]); |
+ seek(mediaElements[i], seekTime, logSeekTime); |
} |
} |
- function play(element) { |
+ function seek(element, seekTime, logSeekTime) { |
if (element instanceof HTMLMediaElement) |
- playHTML5Element(element); |
+ seekHTML5Element(element, seekTime, logSeekTime); |
else |
- console.error('Can not play non HTML5 media elements.'); |
+ console.error('Can not seek non HTML5 media elements.'); |
} |
- function playHTML5Element(element) { |
- function logEventHappened(e) { |
+ function seekHTML5Element(element, seekTime, logSeekTime) { |
+ element['seeked_completed'] = false; |
+ var onSeeked = function(e) { |
element[e.type + '_completed'] = true; |
- } |
+ element.removeEventListener('seeked', onSeeked); |
+ }; |
function onError(e) { |
console.error('Error playing media :' + e.type); |
} |
- element.addEventListener('playing', logEventHappened); |
- element.addEventListener('ended', logEventHappened); |
element.addEventListener('error', onError); |
element.addEventListener('abort', onError); |
- var willPlayEvent = document.createEvent('Event'); |
- willPlayEvent.initEvent('willPlay', false, false); |
- element.dispatchEvent(willPlayEvent); |
- element.play(); |
+ if (logSeekTime) { |
+ var willSeekEvent = document.createEvent('Event'); |
+ willSeekEvent.initEvent('willSeek', false, false); |
+ willSeekEvent.seekLabel = seekTime; |
+ element.dispatchEvent(willSeekEvent); |
+ } |
+ element.addEventListener('seeked', onSeeked); |
+ try { |
+ element.currentTime = seekTime; |
+ } catch (err) { |
+ console.error('Cannot seek with network state: ' + element.networkState); |
+ } |
} |
- function hasEventCompleted(selector, event_name) { |
- // Return true if the event_name fired for media satisfying the selector. |
+ function hasEventCompleted(selector, eventName) { |
+ // Return true if the 'eventName' fired for media satisfying the selector. |
var mediaElements = findMediaElements(selector); |
for (var i = 0; i < mediaElements.length; i++) { |
- if (!mediaElements[i][event_name + '_completed']) |
+ if (!mediaElements[i][eventName + '_completed']) |
return false; |
} |
return true; |
} |
- window.__playMedia = playMedia; |
+ window.__seekMedia = seekMedia; |
window.__hasEventCompleted = hasEventCompleted; |
})(); |