Index: tools/telemetry/telemetry/page/actions/seek.js |
diff --git a/tools/telemetry/telemetry/page/actions/seek.js b/tools/telemetry/telemetry/page/actions/seek.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..75d37792ba62ada64018e302d3482430c8b6a4ed |
--- /dev/null |
+++ b/tools/telemetry/telemetry/page/actions/seek.js |
@@ -0,0 +1,49 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// This file performs actions on media elements. |
+(function() { |
+ function seekMedia(selector, seekTime, logSeekTime) { |
+ // Performs the "Seek" action on media satisfying selector. |
+ var mediaElements = window.__findMediaElements(selector); |
+ for (var i = 0; i < mediaElements.length; i++) { |
+ seek(mediaElements[i], seekTime, logSeekTime); |
+ } |
+ } |
+ |
+ function seek(element, seekTime, logSeekTime) { |
+ if (element instanceof HTMLMediaElement) |
+ seekHTML5Element(element, seekTime, logSeekTime); |
+ else |
+ console.error('Can not seek non HTML5 media elements.'); |
+ } |
+ |
+ 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('error', onError); |
+ element.addEventListener('abort', onError); |
+ |
+ 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); |
+ } |
+ } |
+ |
+ window.__seekMedia = seekMedia; |
+})(); |