aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/actions/mouse_click.js
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/actions/mouse_click.js')
-rw-r--r--catapult/telemetry/telemetry/internal/actions/mouse_click.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/actions/mouse_click.js b/catapult/telemetry/telemetry/internal/actions/mouse_click.js
new file mode 100644
index 00000000..e85239a6
--- /dev/null
+++ b/catapult/telemetry/telemetry/internal/actions/mouse_click.js
@@ -0,0 +1,40 @@
+// Copyright 2015 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.
+
+'use strict';
+
+(function() {
+ function MouseClickAction(opt_callback) {
+ this.callback_ = opt_callback;
+ }
+
+ MouseClickAction.prototype.start = function(options) {
+ this.click_(options.element);
+ };
+
+ MouseClickAction.prototype.click_ = function(element) {
+ var triggerMouseEvent = this.triggerMouseEvent_;
+ var callback = this.callback_;
+ triggerMouseEvent(element, 'mouseover');
+ triggerMouseEvent(element, 'mousedown');
+ // ~100ms is typical for a mouse click's elapsed time.
+ window.setTimeout(
+ function() {
+ triggerMouseEvent(element, 'mouseup');
+ triggerMouseEvent(element, 'click', callback);
+ }, 100);
+ };
+
+ MouseClickAction.prototype.triggerMouseEvent_ = function(
+ node, eventType, callback) {
+ var clickEvent = document.createEvent('MouseEvents');
+ clickEvent.initEvent(eventType, true, true);
+ node.dispatchEvent(clickEvent);
+ if (callback) {
+ window.setTimeout(callback, 0);
+ }
+ };
+
+ window.__MouseClickAction = MouseClickAction;
+})();