OLD | NEW |
1 <script> | 1 <script> |
2 var expectedEventData; | 2 var expectedEventData; |
3 var capturedEventData; | 3 var capturedEventData; |
| 4 var nextFrameId; |
| 5 var frameIds; |
4 | 6 |
5 function expect(data) { | 7 function expect(data) { |
6 expectedEventData = data; | 8 expectedEventData = data; |
7 capturedEventData = []; | 9 capturedEventData = []; |
| 10 nextFrameId = 1; |
| 11 frameIds = {}; |
8 } | 12 } |
9 | 13 |
10 function checkExpectations() { | 14 function checkExpectations() { |
11 if (capturedEventData.length < expectedEventData.length) { | 15 if (capturedEventData.length < expectedEventData.length) { |
12 return; | 16 return; |
13 } | 17 } |
14 chrome.test.assertEq(JSON.stringify(expectedEventData), | 18 chrome.test.assertEq(JSON.stringify(expectedEventData), |
15 JSON.stringify(capturedEventData)); | 19 JSON.stringify(capturedEventData)); |
16 chrome.test.succeed(); | 20 chrome.test.succeed(); |
17 } | 21 } |
18 | 22 |
| 23 function captureEvent(name, details) { |
| 24 // normalize details. |
| 25 details.timeStamp = 0; |
| 26 if (details.frameId != 0) { |
| 27 if (frameIds[details.frameId] === undefined) { |
| 28 frameIds[details.frameId] = nextFrameId++; |
| 29 } |
| 30 details.frameId = frameIds[details.frameId]; |
| 31 } |
| 32 capturedEventData.push([name, details]); |
| 33 checkExpectations(); |
| 34 } |
| 35 |
19 chrome.experimental.webNavigation.onBeforeNavigate.addListener( | 36 chrome.experimental.webNavigation.onBeforeNavigate.addListener( |
20 function(details) { | 37 function(details) { |
21 console.log('---onBeforeNavigate: ' + details.url); | 38 captureEvent("onBeforeNavigate", details); |
22 // normalize details. | |
23 details.timeStamp = 0; | |
24 if (details.frameId != 0) { | |
25 details.frameId = 1; | |
26 } | |
27 capturedEventData.push(["onBeforeNavigate", details]); | |
28 checkExpectations(); | |
29 }); | 39 }); |
30 | 40 |
31 chrome.experimental.webNavigation.onCommitted.addListener(function(details) { | 41 chrome.experimental.webNavigation.onCommitted.addListener(function(details) { |
32 console.log('---onCommitted: ' + details.url); | 42 captureEvent("onCommitted", details); |
33 // normalize details. | |
34 details.timeStamp = 0; | |
35 if (details.frameId != 0) { | |
36 details.frameId = 1; | |
37 } | |
38 capturedEventData.push(["onCommitted", details]); | |
39 checkExpectations(); | |
40 }); | 43 }); |
41 | 44 |
42 chrome.experimental.webNavigation.onErrorOccurred.addListener( | 45 chrome.experimental.webNavigation.onErrorOccurred.addListener( |
43 function(details) { | 46 function(details) { |
44 console.log('---onErrorOccurred: ' + details.url); | 47 captureEvent("onErrorOccurred", details); |
45 // normalize details. | |
46 details.timeStamp = 0; | |
47 if (details.frameId != 0) { | |
48 details.frameId = 1; | |
49 } | |
50 capturedEventData.push(["onErrorOccurred", details]); | |
51 checkExpectations(); | |
52 }); | 48 }); |
53 | 49 |
54 var getURL = chrome.extension.getURL; | 50 var getURL = chrome.extension.getURL; |
55 chrome.tabs.getSelected(null, function(tab) { | 51 chrome.tabs.getSelected(null, function(tab) { |
56 var tabId = tab.id; | 52 var tabId = tab.id; |
57 | 53 |
58 chrome.test.runTests([ | 54 chrome.test.runTests([ |
59 /* Navigates to an URL */ | 55 /* Navigates to an URL */ |
60 function simpleLoad() { | 56 function simpleLoad() { |
61 expect([ | 57 expect([ |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 timeStamp: 0, | 162 timeStamp: 0, |
167 url: getURL('iframe/a.html') }], | 163 url: getURL('iframe/a.html') }], |
168 [ "onCommitted", | 164 [ "onCommitted", |
169 { frameId: 0, | 165 { frameId: 0, |
170 tabId: tabId, | 166 tabId: tabId, |
171 timeStamp: 0, | 167 timeStamp: 0, |
172 transitionQualifiers: "", | 168 transitionQualifiers: "", |
173 transitionType: "link", | 169 transitionType: "link", |
174 url: getURL('iframe/a.html') }], | 170 url: getURL('iframe/a.html') }], |
175 [ "onBeforeNavigate", | 171 [ "onBeforeNavigate", |
176 { frameId: 0, | 172 { frameId: 1, |
177 requestId: 0, | 173 requestId: 0, |
178 tabId: tabId, | 174 tabId: tabId, |
179 timeStamp: 0, | 175 timeStamp: 0, |
180 url: getURL('iframe/b.html') }], | 176 url: getURL('iframe/b.html') }], |
181 [ "onCommitted", | 177 [ "onCommitted", |
182 { frameId: 0, | 178 { frameId: 1, |
183 tabId: tabId, | 179 tabId: tabId, |
184 timeStamp: 0, | 180 timeStamp: 0, |
185 transitionQualifiers: "", | 181 transitionQualifiers: "", |
186 transitionType: "auto_subframe", | 182 transitionType: "auto_subframe", |
187 url: getURL('iframe/b.html') }], | 183 url: getURL('iframe/b.html') }], |
188 [ "onBeforeNavigate", | 184 [ "onBeforeNavigate", |
189 { frameId: 0, | 185 { frameId: 1, |
190 requestId: 0, | 186 requestId: 0, |
191 tabId: tabId, | 187 tabId: tabId, |
192 timeStamp: 0, | 188 timeStamp: 0, |
193 url: getURL('iframe/c.html') }], | 189 url: getURL('iframe/c.html') }], |
194 [ "onCommitted", | 190 [ "onCommitted", |
195 { frameId: 0, | 191 { frameId: 1, |
196 tabId: tabId, | 192 tabId: tabId, |
197 timeStamp: 0, | 193 timeStamp: 0, |
198 transitionQualifiers: "", | 194 transitionQualifiers: "", |
199 transitionType: "manual_subframe", | 195 transitionType: "manual_subframe", |
200 url: getURL('iframe/c.html') }]]); | 196 url: getURL('iframe/c.html') }]]); |
201 chrome.tabs.update(tabId, { url: getURL('iframe/a.html') }); | 197 chrome.tabs.update(tabId, { url: getURL('iframe/a.html') }); |
202 }, | 198 }, |
203 | 199 |
| 200 /* Navigates to d.html which includes e.html and f.html as iframes. To be |
| 201 able to predict which iframe has which id, the iframe for f.html is |
| 202 created by javascript. f.html then navigates to g.html. */ |
| 203 function iframe2() { |
| 204 expect([ |
| 205 [ "onBeforeNavigate", |
| 206 { frameId: 0, |
| 207 requestId: 0, |
| 208 tabId: tabId, |
| 209 timeStamp: 0, |
| 210 url: getURL('iframe/d.html') }], |
| 211 [ "onCommitted", |
| 212 { frameId: 0, |
| 213 tabId: tabId, |
| 214 timeStamp: 0, |
| 215 transitionQualifiers: "", |
| 216 transitionType: "link", |
| 217 url: getURL('iframe/d.html') }], |
| 218 [ "onBeforeNavigate", |
| 219 { frameId: 1, |
| 220 requestId: 0, |
| 221 tabId: tabId, |
| 222 timeStamp: 0, |
| 223 url: getURL('iframe/e.html') }], |
| 224 [ "onCommitted", |
| 225 { frameId: 1, |
| 226 tabId: tabId, |
| 227 timeStamp: 0, |
| 228 transitionQualifiers: "", |
| 229 transitionType: "auto_subframe", |
| 230 url: getURL('iframe/e.html') }], |
| 231 [ "onBeforeNavigate", |
| 232 { frameId: 2, |
| 233 requestId: 0, |
| 234 tabId: tabId, |
| 235 timeStamp: 0, |
| 236 url: getURL('iframe/f.html') }], |
| 237 [ "onCommitted", |
| 238 { frameId: 2, |
| 239 tabId: tabId, |
| 240 timeStamp: 0, |
| 241 transitionQualifiers: "", |
| 242 transitionType: "auto_subframe", |
| 243 url: getURL('iframe/f.html') }], |
| 244 [ "onBeforeNavigate", |
| 245 { frameId: 2, |
| 246 requestId: 0, |
| 247 tabId: tabId, |
| 248 timeStamp: 0, |
| 249 url: getURL('iframe/g.html') }], |
| 250 [ "onCommitted", |
| 251 { frameId: 2, |
| 252 tabId: tabId, |
| 253 timeStamp: 0, |
| 254 transitionQualifiers: "", |
| 255 transitionType: "manual_subframe", |
| 256 url: getURL('iframe/g.html') }]]); |
| 257 chrome.tabs.update(tabId, { url: getURL('iframe/d.html') }); |
| 258 }, |
| 259 |
204 /* Navigates to a non-existant page. */ | 260 /* Navigates to a non-existant page. */ |
205 function nonExistant() { | 261 function nonExistant() { |
206 expect([ | 262 expect([ |
207 [ "onBeforeNavigate", | 263 [ "onBeforeNavigate", |
208 { frameId: 0, | 264 { frameId: 0, |
209 requestId: 0, | 265 requestId: 0, |
210 tabId: tabId, | 266 tabId: tabId, |
211 timeStamp: 0, | 267 timeStamp: 0, |
212 url: getURL('nonexistant.html') }], | 268 url: getURL('nonexistant.html') }], |
213 [ "onErrorOccurred", | 269 [ "onErrorOccurred", |
(...skipping 10 matching lines...) Expand all Loading... |
224 url: "chrome://chromewebdata/"}], | 280 url: "chrome://chromewebdata/"}], |
225 [ "onCommitted", | 281 [ "onCommitted", |
226 { frameId: 0, | 282 { frameId: 0, |
227 tabId: tabId, | 283 tabId: tabId, |
228 timeStamp: 0, | 284 timeStamp: 0, |
229 transitionQualifiers: "", | 285 transitionQualifiers: "", |
230 transitionType: "link", | 286 transitionType: "link", |
231 url: getURL('nonexistant.html') }]]); | 287 url: getURL('nonexistant.html') }]]); |
232 chrome.tabs.update(tabId, { url: getURL('nonexistant.html') }); | 288 chrome.tabs.update(tabId, { url: getURL('nonexistant.html') }); |
233 }, | 289 }, |
| 290 |
| 291 /* An page that tries to load an non-existant iframe. */ |
| 292 function nonExistantIframe() { |
| 293 expect([ |
| 294 [ "onBeforeNavigate", |
| 295 { frameId: 0, |
| 296 requestId: 0, |
| 297 tabId: tabId, |
| 298 timeStamp: 0, |
| 299 url: getURL('iframeFail/d.html') }], |
| 300 [ "onCommitted", |
| 301 { frameId: 0, |
| 302 tabId: tabId, |
| 303 timeStamp: 0, |
| 304 transitionQualifiers: "", |
| 305 transitionType: "link", |
| 306 url: getURL('iframeFail/d.html') }], |
| 307 [ "onBeforeNavigate", |
| 308 { frameId: 1, |
| 309 requestId: 0, |
| 310 tabId: tabId, |
| 311 timeStamp: 0, |
| 312 url: getURL('iframeFail/c.html') }], |
| 313 [ "onErrorOccurred", |
| 314 { error: "net::ERR_FILE_NOT_FOUND", |
| 315 frameId: 1, |
| 316 tabId: tabId, |
| 317 timeStamp: 0, |
| 318 url: getURL('iframeFail/c.html') }], |
| 319 [ "onBeforeNavigate", |
| 320 { frameId: 1, |
| 321 requestId: 0, |
| 322 tabId: tabId, |
| 323 timeStamp: 0, |
| 324 url: "chrome://chromewebdata/"}], |
| 325 [ "onCommitted", |
| 326 { frameId: 1, |
| 327 tabId: tabId, |
| 328 timeStamp: 0, |
| 329 transitionQualifiers: "", |
| 330 transitionType: "auto_subframe", |
| 331 url: getURL('iframeFail/c.html') }]]); |
| 332 chrome.tabs.update(tabId, { url: getURL('iframeFail/d.html') }); |
| 333 }, |
| 334 |
| 335 /* An iframe navigates to a non-existant page. */ |
| 336 function nonExistantIframeNavigation() { |
| 337 expect([ |
| 338 [ "onBeforeNavigate", |
| 339 { frameId: 0, |
| 340 requestId: 0, |
| 341 tabId: tabId, |
| 342 timeStamp: 0, |
| 343 url: getURL('iframeFail/a.html') }], |
| 344 [ "onCommitted", |
| 345 { frameId: 0, |
| 346 tabId: tabId, |
| 347 timeStamp: 0, |
| 348 transitionQualifiers: "", |
| 349 transitionType: "link", |
| 350 url: getURL('iframeFail/a.html') }], |
| 351 [ "onBeforeNavigate", |
| 352 { frameId: 1, |
| 353 requestId: 0, |
| 354 tabId: tabId, |
| 355 timeStamp: 0, |
| 356 url: getURL('iframeFail/b.html') }], |
| 357 [ "onCommitted", |
| 358 { frameId: 1, |
| 359 tabId: tabId, |
| 360 timeStamp: 0, |
| 361 transitionQualifiers: "", |
| 362 transitionType: "auto_subframe", |
| 363 url: getURL('iframeFail/b.html') }], |
| 364 [ "onBeforeNavigate", |
| 365 { frameId: 1, |
| 366 requestId: 0, |
| 367 tabId: tabId, |
| 368 timeStamp: 0, |
| 369 url: getURL('iframeFail/c.html') }], |
| 370 [ "onErrorOccurred", |
| 371 { error: "net::ERR_FILE_NOT_FOUND", |
| 372 frameId: 1, |
| 373 tabId: tabId, |
| 374 timeStamp: 0, |
| 375 url: getURL('iframeFail/c.html') }], |
| 376 [ "onBeforeNavigate", |
| 377 { frameId: 1, |
| 378 requestId: 0, |
| 379 tabId: tabId, |
| 380 timeStamp: 0, |
| 381 url: "chrome://chromewebdata/"}], |
| 382 [ "onCommitted", |
| 383 { frameId: 1, |
| 384 tabId: tabId, |
| 385 timeStamp: 0, |
| 386 transitionQualifiers: "", |
| 387 transitionType: "manual_subframe", |
| 388 url: getURL('iframeFail/c.html') }]]); |
| 389 chrome.tabs.update(tabId, { url: getURL('iframeFail/a.html') }); |
| 390 }, |
234 ]); | 391 ]); |
235 }); | 392 }); |
236 </script> | 393 </script> |
OLD | NEW |