1// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7(function() {
8  function MouseClickAction(opt_callback) {
9    this.callback_ = opt_callback;
10  }
11
12  MouseClickAction.prototype.start = function(options) {
13    this.click_(options.element);
14  };
15
16  MouseClickAction.prototype.click_ = function(element) {
17    var triggerMouseEvent = this.triggerMouseEvent_;
18    var callback = this.callback_;
19    triggerMouseEvent(element, 'mouseover');
20    triggerMouseEvent(element, 'mousedown');
21    // ~100ms is typical for a mouse click's elapsed time.
22    window.setTimeout(
23      function() {
24        triggerMouseEvent(element, 'mouseup');
25        triggerMouseEvent(element, 'click', callback);
26      }, 100);
27  };
28
29  MouseClickAction.prototype.triggerMouseEvent_ = function(
30      node, eventType, callback) {
31    var clickEvent = document.createEvent('MouseEvents');
32    clickEvent.initEvent(eventType, true, true);
33    node.dispatchEvent(clickEvent);
34    if (callback) {
35      window.setTimeout(callback, 0);
36    }
37  };
38
39  window.__MouseClickAction = MouseClickAction;
40})();
41