Elim cr-checkbox
[chromium-blink-merge.git] / chrome / test / data / extensions / api_test / webnavigation / crossProcess / test_crossProcess.js
blob5479b3c0f3f9949c84538f2f0fd81c81fdb223a0
1 // Copyright 2013 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 onload = function() {
6 var getURL = chrome.extension.getURL;
7 var URL_REGULAR =
8 "http://127.0.0.1:PORT/extensions/api_test/webnavigation/" +
9 "crossProcess/empty.html";
10 var URL_REDIRECT = "http://www.a.com:PORT/server-redirect";
11 var URL_TEST = "http://127.0.0.1:PORT/test";
12 chrome.tabs.create({"url": "about:blank"}, function(tab) {
13 var tabId = tab.id;
14 chrome.test.getConfig(function(config) {
15 var fixPort = function(url) {
16 return url.replace(/PORT/g, config.testServer.port);
18 URL_REGULAR = fixPort(URL_REGULAR);
19 URL_REDIRECT = fixPort(URL_REDIRECT);
20 URL_TEST = fixPort(URL_TEST);
22 chrome.test.runTests([
23 // Navigates from an extension page to a HTTP page which causes a
24 // process switch.
25 function crossProcess() {
26 expect([
27 { label: "a-onBeforeNavigate",
28 event: "onBeforeNavigate",
29 details: { frameId: 0,
30 parentFrameId: -1,
31 processId: 0,
32 tabId: 0,
33 timeStamp: 0,
34 url: getURL('a.html') }},
35 { label: "a-onCommitted",
36 event: "onCommitted",
37 details: { frameId: 0,
38 processId: 0,
39 tabId: 0,
40 timeStamp: 0,
41 transitionQualifiers: [],
42 transitionType: "link",
43 url: getURL('a.html') }},
44 { label: "a-onDOMContentLoaded",
45 event: "onDOMContentLoaded",
46 details: { frameId: 0,
47 processId: 0,
48 tabId: 0,
49 timeStamp: 0,
50 url: getURL('a.html') }},
51 { label: "a-onCompleted",
52 event: "onCompleted",
53 details: { frameId: 0,
54 processId: 0,
55 tabId: 0,
56 timeStamp: 0,
57 url: getURL('a.html') }},
58 { label: "b-onBeforeNavigate",
59 event: "onBeforeNavigate",
60 details: { frameId: 0,
61 parentFrameId: -1,
62 processId: 1,
63 tabId: 0,
64 timeStamp: 0,
65 url: URL_REGULAR }},
66 { label: "b-onCommitted",
67 event: "onCommitted",
68 details: { frameId: 0,
69 processId: 1,
70 tabId: 0,
71 timeStamp: 0,
72 transitionQualifiers: [],
73 transitionType: "link",
74 url: URL_REGULAR }},
75 { label: "b-onDOMContentLoaded",
76 event: "onDOMContentLoaded",
77 details: { frameId: 0,
78 processId: 1,
79 tabId: 0,
80 timeStamp: 0,
81 url: URL_REGULAR }},
82 { label: "b-onCompleted",
83 event: "onCompleted",
84 details: { frameId: 0,
85 processId: 1,
86 tabId: 0,
87 timeStamp: 0,
88 url: URL_REGULAR }}],
89 [ navigationOrder("a-"), navigationOrder("b-") ]);
91 chrome.tabs.update(
92 tabId,
93 { url: getURL('a.html?' + config.testServer.port) });
96 // Redirects through an app extent, should cause two process switches.
97 function crossProcessRedirect() {
98 expect([
99 { label: "a-onBeforeNavigate",
100 event: "onBeforeNavigate",
101 details: { frameId: 0,
102 parentFrameId: -1,
103 processId: 0,
104 tabId: 0,
105 timeStamp: 0,
106 url: getURL('c.html') }},
107 { label: "a-onCommitted",
108 event: "onCommitted",
109 details: { frameId: 0,
110 processId: 0,
111 tabId: 0,
112 timeStamp: 0,
113 transitionQualifiers: [],
114 transitionType: "link",
115 url: getURL('c.html') }},
116 { label: "a-onDOMContentLoaded",
117 event: "onDOMContentLoaded",
118 details: { frameId: 0,
119 processId: 0,
120 tabId: 0,
121 timeStamp: 0,
122 url: getURL('c.html') }},
123 { label: "a-onCompleted",
124 event: "onCompleted",
125 details: { frameId: 0,
126 processId: 0,
127 tabId: 0,
128 timeStamp: 0,
129 url: getURL('c.html') }},
130 { label: "b-onBeforeNavigate",
131 event: "onBeforeNavigate",
132 details: { frameId: 0,
133 parentFrameId: -1,
134 processId: 1,
135 tabId: 0,
136 timeStamp: 0,
137 url: URL_REDIRECT }},
138 { label: "b-onErrorOccurred",
139 event: "onErrorOccurred",
140 details: { error: "net::ERR_ABORTED",
141 frameId: 0,
142 processId: 1,
143 tabId: 0,
144 timeStamp: 0,
145 url: URL_REDIRECT }},
146 { label: "c-onBeforeNavigate",
147 event: "onBeforeNavigate",
148 details: { frameId: 0,
149 parentFrameId: -1,
150 processId: 2,
151 tabId: 0,
152 timeStamp: 0,
153 url: URL_REGULAR }},
154 { label: "c-onCommitted",
155 event: "onCommitted",
156 details: { frameId: 0,
157 processId: 2,
158 tabId: 0,
159 timeStamp: 0,
160 transitionQualifiers: [],
161 transitionType: "link",
162 url: URL_REGULAR }},
163 { label: "c-onDOMContentLoaded",
164 event: "onDOMContentLoaded",
165 details: { frameId: 0,
166 processId: 2,
167 tabId: 0,
168 timeStamp: 0,
169 url: URL_REGULAR }},
170 { label: "c-onCompleted",
171 event: "onCompleted",
172 details: { frameId: 0,
173 processId: 2,
174 tabId: 0,
175 timeStamp: 0,
176 url: URL_REGULAR }}],
177 [ navigationOrder("a-"),
178 navigationOrder("c-"),
179 [ "a-onCompleted", "b-onBeforeNavigate", "b-onErrorOccurred",
180 "c-onBeforeNavigate"] ]);
182 chrome.tabs.update(
183 tabId,
184 { url: getURL('c.html?' + config.testServer.port) });
187 // Navigates to a different site, but then commits
188 // same-site, non-user, renderer-initiated navigation
189 // before the slow cross-site navigation commits.
191 * This test case is disabled, because it is flaky and fails fairly
192 * consistently on MSan bots. See https://crbug.com/467800
194 function crossProcessWithSameSiteCommit() {
195 expect([
196 { label: "a-onBeforeNavigate",
197 event: "onBeforeNavigate",
198 details: { frameId: 0,
199 parentFrameId: -1,
200 processId: 0,
201 tabId: 0,
202 timeStamp: 0,
203 url: getURL('d.html') }},
204 { label: "a-onCommitted",
205 event: "onCommitted",
206 details: { frameId: 0,
207 processId: 0,
208 tabId: 0,
209 timeStamp: 0,
210 transitionQualifiers: [],
211 transitionType: "link",
212 url: getURL('d.html') }},
213 { label: "a-onDOMContentLoaded",
214 event: "onDOMContentLoaded",
215 details: { frameId: 0,
216 processId: 0,
217 tabId: 0,
218 timeStamp: 0,
219 url: getURL('d.html') }},
220 { label: "a-onCompleted",
221 event: "onCompleted",
222 details: { frameId: 0,
223 processId: 0,
224 tabId: 0,
225 timeStamp: 0,
226 url: getURL('d.html') }},
227 { label: "b-onBeforeNavigate",
228 event: "onBeforeNavigate",
229 details: { frameId: 0,
230 parentFrameId: -1,
231 processId: 1,
232 tabId: 0,
233 timeStamp: 0,
234 url: URL_TEST + "1" }},
235 { label: "b-onCommitted",
236 event: "onCommitted",
237 details: { frameId: 0,
238 processId: 1,
239 tabId: 0,
240 timeStamp: 0,
241 transitionQualifiers: [],
242 transitionType: "link",
243 url: URL_TEST + "1" }},
244 { label: "b-onDOMContentLoaded",
245 event: "onDOMContentLoaded",
246 details: { frameId: 0,
247 processId: 1,
248 tabId: 0,
249 timeStamp: 0,
250 url: URL_TEST + "1" }},
251 { label: "b-onCompleted",
252 event: "onCompleted",
253 details: { frameId: 0,
254 processId: 1,
255 tabId: 0,
256 timeStamp: 0,
257 url: URL_TEST + "1" }},
258 { label: "c-onBeforeNavigate",
259 event: "onBeforeNavigate",
260 details: { frameId: 0,
261 parentFrameId: -1,
262 processId: 0,
263 tabId: 0,
264 timeStamp: 0,
265 url: getURL('empty.html') }},
266 { label: "c-onCommitted",
267 event: "onCommitted",
268 details: { frameId: 0,
269 processId: 0,
270 tabId: 0,
271 timeStamp: 0,
272 transitionQualifiers: ["client_redirect"],
273 transitionType: "link",
274 url: getURL('empty.html') }},
275 { label: "c-onDOMContentLoaded",
276 event: "onDOMContentLoaded",
277 details: { frameId: 0,
278 processId: 0,
279 tabId: 0,
280 timeStamp: 0,
281 url: getURL('empty.html') }},
282 { label: "c-onCompleted",
283 event: "onCompleted",
284 details: { frameId: 0,
285 processId: 0,
286 tabId: 0,
287 timeStamp: 0,
288 url: getURL('empty.html') }}],
289 [ navigationOrder("a-"),
290 navigationOrder("c-"),
291 navigationOrder("b-"),
292 [ "a-onCompleted", "b-onBeforeNavigate", "c-onBeforeNavigate",
293 "c-onCommitted", "b-onCommitted"] ]);
295 // Note: d.html expects the redirect path to follow the port
296 // number.
297 chrome.tabs.update(
298 tabId,
299 { url: getURL('d.html?' + config.testServer.port + "/test1") });
303 // Navigates cross-site, but then starts a same-site,
304 // renderer-initiated navigation with user gesture.
305 // The expectation is that the cross-process navigation
306 // will be cancelled and the API should dispatch an onErrorOccurred
307 // event.
308 function crossProcessAbortUserGesture() {
309 expect([
310 { label: "a-onBeforeNavigate",
311 event: "onBeforeNavigate",
312 details: { frameId: 0,
313 parentFrameId: -1,
314 processId: 0,
315 tabId: 0,
316 timeStamp: 0,
317 url: getURL('d.html') }},
318 { label: "a-onCommitted",
319 event: "onCommitted",
320 details: { frameId: 0,
321 processId: 0,
322 tabId: 0,
323 timeStamp: 0,
324 transitionQualifiers: [],
325 transitionType: "link",
326 url: getURL('d.html') }},
327 { label: "a-onDOMContentLoaded",
328 event: "onDOMContentLoaded",
329 details: { frameId: 0,
330 processId: 0,
331 tabId: 0,
332 timeStamp: 0,
333 url: getURL('d.html') }},
334 { label: "a-onCompleted",
335 event: "onCompleted",
336 details: { frameId: 0,
337 processId: 0,
338 tabId: 0,
339 timeStamp: 0,
340 url: getURL('d.html') }},
341 { label: "b-onBeforeNavigate",
342 event: "onBeforeNavigate",
343 details: { frameId: 0,
344 parentFrameId: -1,
345 processId: 1,
346 tabId: 0,
347 timeStamp: 0,
348 url: URL_TEST + "2" }},
349 { label: "b-onErrorOccurred",
350 event: "onErrorOccurred",
351 details: { error: "net::ERR_ABORTED",
352 frameId: 0,
353 processId: 1,
354 tabId: 0,
355 timeStamp: 0,
356 url: URL_TEST + "2" }},
357 { label: "c-onBeforeNavigate",
358 event: "onBeforeNavigate",
359 details: { frameId: 0,
360 parentFrameId: -1,
361 processId: 0,
362 tabId: 0,
363 timeStamp: 0,
364 url: getURL('empty.html') }},
365 { label: "c-onCommitted",
366 event: "onCommitted",
367 details: { frameId: 0,
368 processId: 0,
369 tabId: 0,
370 timeStamp: 0,
371 transitionQualifiers: ["client_redirect"],
372 transitionType: "link",
373 url: getURL('empty.html') }},
374 { label: "c-onDOMContentLoaded",
375 event: "onDOMContentLoaded",
376 details: { frameId: 0,
377 processId: 0,
378 tabId: 0,
379 timeStamp: 0,
380 url: getURL('empty.html') }},
381 { label: "c-onCompleted",
382 event: "onCompleted",
383 details: { frameId: 0,
384 processId: 0,
385 tabId: 0,
386 timeStamp: 0,
387 url: getURL('empty.html') }}],
388 [ navigationOrder("a-"),
389 navigationOrder("c-"),
390 [ "a-onCompleted", "b-onBeforeNavigate", "b-onErrorOccurred",
391 "c-onCommitted"] ]);
393 // Note: d.html expects the redirect path to follow the port
394 // number.
395 chrome.tabs.update(
396 tabId,
397 { url: getURL('d.html?' + config.testServer.port + "/test2") });