chromium/chrome/test/data/drag_and_drop/event_monitoring.js

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/* Reports an event to DragAndDropBrowserTest and  DOMDragEventWaiter */
window.reportDragAndDropEvent = function(ev) {
  function safe(f) {
    try {
      return f();
    } catch(err) {
      return "Got exception: " + err.message;
    }
  }

  var msg = "Got a " + ev.type + " event from the " + window.name + " frame.";
  console.log(msg);

  if (window.domAutomationController) {
    window.domAutomationController.send({
      client_position: safe(function() {
        return "(" + ev.clientX + ", " + ev.clientY + ")";
      }),
      drop_effect: safe(function() { return ev.dataTransfer.dropEffect; }),
      effect_allowed: safe(function() {
        return ev.dataTransfer.effectAllowed;
      }),
      event_type: ev.type,
      file_names: safe(function() {
        return Array
            .from(ev.dataTransfer.files)
            .map(function(file) { return file.name; })
            .sort().join();
      }),
      mime_types: safe(function() {
        return Array.from(ev.dataTransfer.types).sort().join();
      }),
      page_position: safe(function() {
        return "(" + ev.pageX + ", " + ev.pageY + ")";
      }),
      screen_position: safe(function() {
        return "(" + ev.screenX + ", " + ev.screenY + ")";
      }),
      window_name: window.name
    });
  }
}