1 // Copyright (c) 2012 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.
5 // Common js for prerender loaders; defines the helper functions that put
6 // event handlers on prerenders and track the events for browser tests.
8 // TODO(gavinp): Put more common loader logic in here.
10 // Currently only errors with the ordering of Prerender events are caught.
11 var hadPrerenderEventErrors = false;
13 var receivedPrerenderStartEvents = [];
14 var receivedPrerenderLoadEvents = [];
15 var receivedPrerenderDomContentLoadedEvents = [];
16 var receivedPrerenderStopEvents = [];
18 function PrerenderStartHandler(index) {
19 if (receivedPrerenderStartEvents[index] ||
20 receivedPrerenderLoadEvents[index] ||
21 receivedPrerenderStopEvents[index]) {
22 hadPrerenderEventErrors = true;
25 receivedPrerenderStartEvents[index] = true;
28 function PrerenderLoadHandler(index) {
29 if (!receivedPrerenderStartEvents[index] ||
30 receivedPrerenderStopEvents[index]) {
31 hadPrerenderEventErrors = true;
34 if (!receivedPrerenderLoadEvents[index])
35 receivedPrerenderLoadEvents[index] = 0;
36 receivedPrerenderLoadEvents[index]++;
39 function PrerenderDomContentLoadedHandler(index) {
40 if (!receivedPrerenderStartEvents[index] ||
41 receivedPrerenderStopEvents[index]) {
42 hadPrerenderEventErrors = true;
45 if (!receivedPrerenderDomContentLoadedEvents[index])
46 receivedPrerenderDomContentLoadedEvents[index] = 0;
47 receivedPrerenderDomContentLoadedEvents[index]++;
50 function PrerenderStopHandler(index) {
51 if (!receivedPrerenderStartEvents[index] ||
52 receivedPrerenderStopEvents[index]) {
53 hadPrerenderEventErrors = true;
56 receivedPrerenderStopEvents[index] = true;
59 function AddEventHandlersToLinkElement(link, index) {
60 link.addEventListener('webkitprerenderstart',
61 PrerenderStartHandler.bind(null, index), false);
62 link.addEventListener('webkitprerenderload',
63 PrerenderLoadHandler.bind(null, index), false);
64 link.addEventListener('webkitprerenderdomcontentloaded',
65 PrerenderDomContentLoadedHandler.bind(null, index),
67 link.addEventListener('webkitprerenderstop',
68 PrerenderStopHandler.bind(null, index), false);
71 function AddPrerender(url, index) {
72 var link = document.createElement('link');
73 link.rel = 'prerender';
75 AddEventHandlersToLinkElement(link, index);
76 document.body.appendChild(link);
80 function AddAnchor(href, target) {
81 var a = document.createElement('a');
85 document.body.appendChild(a);
90 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
98 function ClickTarget(url) {
99 var eventObject = new MouseEvent('click', {
105 AddAnchor(url, '_blank').dispatchEvent(eventObject);
108 function ClickPing(url, pingUrl) {
109 var a = AddAnchor(url);
111 a.dispatchEvent(new MouseEvent('click', {
119 function ShiftClick(url) {
120 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
129 function CtrlClick(url) {
130 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
139 function CtrlShiftClick(url) {
140 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
150 function MetaClick(url) {
151 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
160 function MetaShiftClick(url) {
161 AddAnchor(url).dispatchEvent(new MouseEvent('click', {
171 function WindowOpen(url) {