Chromium Code Reviews| 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; |
| })(); |