Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Unified Diff: tools/telemetry/telemetry/page/actions/seek.js

Issue 19482009: Telemetry media Seek action and metrics. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add base media action class and JS code. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+})();
« no previous file with comments | « tools/telemetry/telemetry/page/actions/play_unittest.py ('k') | tools/telemetry/telemetry/page/actions/seek.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698