chromium/chrome/test/data/prerender/prerender_events_common.js

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

// Common js for prerender loaders; defines the helper functions that put
// event handlers on prerenders and track the events for browser tests.

// TODO(gavinp): Put more common loader logic in here.

function AddPrerender(url, index) {
  var link = document.createElement('link');
  link.id = 'prerenderElement' + index;
  link.rel = 'prerender';
  link.href = url;
  document.body.appendChild(link);
  return link;
}

function RemoveLinkElement(index) {
  var link = document.getElementById('prerenderElement' + index);
  link.parentElement.removeChild(link);
}

function ExtractGetParameterBadlyAndInsecurely(param, defaultValue) {
  var re = RegExp('[&?]' + param + '=([^&?#]*)');
  var result = re.exec(document.location);
  if (result)
    return result[1];
  return defaultValue;
}

function AddAnchor(href, target) {
  var a = document.createElement('a');
  a.href = href;
  if (target)
    a.target = target;
  document.body.appendChild(a);
  return a;
}

function Click(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1
  }));
}

function ClickTarget(url) {
  var eventObject = new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1
  });
  AddAnchor(url, '_blank').dispatchEvent(eventObject);
}

function ClickPing(url, pingUrl) {
  var a = AddAnchor(url);
  a.ping = pingUrl;
  a.dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1
  }));
}

function ShiftClick(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1,
    shiftKey: true
  }));
}

function CtrlClick(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1,
    ctrlKey: true
  }));
}

function CtrlShiftClick(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1,
    ctrlKey: true,
    shiftKey: true
  }));
}

function MetaClick(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1,
    metaKey: true
  }));
}

function MetaShiftClick(url) {
  AddAnchor(url).dispatchEvent(new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true,
    detail: 1,
    metaKey: true,
    shiftKey: true
  }));
}

function WindowOpen(url) {
  window.open(url);
}