7903b3eddd9cb69bdf70d35beee5e208a9e1d90d
[platform/framework/web/crosswalk.git] / src / chrome / test / data / prerender / prerender_events_common.js
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.
4
5 // Common js for prerender loaders; defines the helper functions that put
6 // event handlers on prerenders and track the events for browser tests.
7
8 // TODO(gavinp): Put more common loader logic in here.
9
10 // Currently only errors with the ordering of Prerender events are caught.
11 var hadPrerenderEventErrors = false;
12
13 var receivedPrerenderStartEvents = [];
14 var receivedPrerenderLoadEvents = [];
15 var receivedPrerenderDomContentLoadedEvents = [];
16 var receivedPrerenderStopEvents = [];
17
18 function PrerenderStartHandler(index) {
19   if (receivedPrerenderStartEvents[index] ||
20       receivedPrerenderLoadEvents[index] ||
21       receivedPrerenderStopEvents[index]) {
22     hadPrerenderEventErrors = true;
23     return;
24   }
25   receivedPrerenderStartEvents[index] = true;
26 }
27
28 function PrerenderLoadHandler(index) {
29   if (!receivedPrerenderStartEvents[index] ||
30       receivedPrerenderStopEvents[index]) {
31     hadPrerenderEventErrors = true;
32     return;
33   }
34   if (!receivedPrerenderLoadEvents[index])
35     receivedPrerenderLoadEvents[index] = 0;
36   receivedPrerenderLoadEvents[index]++;
37 }
38
39 function PrerenderDomContentLoadedHandler(index) {
40   if (!receivedPrerenderStartEvents[index] ||
41       receivedPrerenderStopEvents[index]) {
42     hadPrerenderEventErrors = true;
43     return;
44   }
45   if (!receivedPrerenderDomContentLoadedEvents[index])
46     receivedPrerenderDomContentLoadedEvents[index] = 0;
47   receivedPrerenderDomContentLoadedEvents[index]++;
48 }
49
50 function PrerenderStopHandler(index) {
51   if (!receivedPrerenderStartEvents[index] ||
52       receivedPrerenderStopEvents[index]) {
53     hadPrerenderEventErrors = true;
54     return;
55   }
56   receivedPrerenderStopEvents[index] = true;
57 }
58
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),
66                         false);
67   link.addEventListener('webkitprerenderstop',
68                         PrerenderStopHandler.bind(null, index), false);
69 }
70
71 function AddPrerender(url, index) {
72   var link = document.createElement('link');
73   link.rel = 'prerender';
74   link.href = url;
75   AddEventHandlersToLinkElement(link, index);
76   document.body.appendChild(link);
77   return link;
78 }
79
80 function AddAnchor(href, target) {
81   var a = document.createElement('a');
82   a.href = href;
83   if (target)
84     a.target = target;
85   document.body.appendChild(a);
86   return a;
87 }
88
89 function Click(url) {
90   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
91     view: window,
92     bubbles: true,
93     cancelable: true,
94     detail: 1
95   }));
96 }
97
98 function ClickTarget(url) {
99   var eventObject = new MouseEvent('click', {
100     view: window,
101     bubbles: true,
102     cancelable: true,
103     detail: 1
104   });
105   AddAnchor(url, '_blank').dispatchEvent(eventObject);
106 }
107
108 function ClickPing(url, pingUrl) {
109   var a = AddAnchor(url);
110   a.ping = pingUrl;
111   a.dispatchEvent(new MouseEvent('click', {
112     view: window,
113     bubbles: true,
114     cancelable: true,
115     detail: 1
116   }));
117 }
118
119 function ShiftClick(url) {
120   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
121     view: window,
122     bubbles: true,
123     cancelable: true,
124     detail: 1,
125     shiftKey: true
126   }));
127 }
128
129 function CtrlClick(url) {
130   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
131     view: window,
132     bubbles: true,
133     cancelable: true,
134     detail: 1,
135     ctrlKey: true
136   }));
137 }
138
139 function CtrlShiftClick(url) {
140   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
141     view: window,
142     bubbles: true,
143     cancelable: true,
144     detail: 1,
145     ctrlKey: true,
146     shiftKey: true
147   }));
148 }
149
150 function MetaClick(url) {
151   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
152     view: window,
153     bubbles: true,
154     cancelable: true,
155     detail: 1,
156     metaKey: true
157   }));
158 }
159
160 function MetaShiftClick(url) {
161   AddAnchor(url).dispatchEvent(new MouseEvent('click', {
162     view: window,
163     bubbles: true,
164     cancelable: true,
165     detail: 1,
166     metaKey: true,
167     shiftKey: true
168   }));
169 }
170
171 function WindowOpen(url) {
172   window.open(url);
173 }