Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <script> | 1 <script> |
| 2 var expectedEventData; | 2 var expectedEventData; |
| 3 var capturedEventData; | 3 var capturedEventData; |
| 4 var nextFrameId; | 4 var nextFrameId; |
| 5 var frameIds; | 5 var frameIds; |
| 6 var nextTabId; | |
| 7 var tabIds; | |
| 6 | 8 |
| 7 function expect(data) { | 9 function expect(data) { |
| 8 expectedEventData = data; | 10 expectedEventData = data; |
| 9 capturedEventData = []; | 11 capturedEventData = []; |
| 10 nextFrameId = 1; | 12 nextFrameId = 1; |
| 11 frameIds = {}; | 13 frameIds = {}; |
| 14 nextTabId = 0; | |
| 15 tabIds = {}; | |
| 12 } | 16 } |
| 13 | 17 |
| 14 function checkExpectations() { | 18 function checkExpectations() { |
| 15 if (capturedEventData.length < expectedEventData.length) { | 19 if (capturedEventData.length < expectedEventData.length) { |
| 16 return; | 20 return; |
| 17 } | 21 } |
| 18 chrome.test.assertEq(JSON.stringify(expectedEventData), | 22 chrome.test.assertEq(JSON.stringify(expectedEventData), |
| 19 JSON.stringify(capturedEventData)); | 23 JSON.stringify(capturedEventData)); |
| 20 chrome.test.succeed(); | 24 chrome.test.succeed(); |
| 21 } | 25 } |
| 22 | 26 |
| 23 function captureEvent(name, details) { | 27 function captureEvent(name, details) { |
| 24 // normalize details. | 28 // normalize details. |
| 25 details.timeStamp = 0; | 29 if ('timeStamp' in details) { |
| 26 if (details.frameId != 0) { | 30 details.timeStamp = 0; |
| 31 } | |
| 32 if (('frameId' in details) && (details.frameId != 0)) { | |
| 27 if (frameIds[details.frameId] === undefined) { | 33 if (frameIds[details.frameId] === undefined) { |
| 28 frameIds[details.frameId] = nextFrameId++; | 34 frameIds[details.frameId] = nextFrameId++; |
| 29 } | 35 } |
| 30 details.frameId = frameIds[details.frameId]; | 36 details.frameId = frameIds[details.frameId]; |
| 31 } | 37 } |
| 38 if ('tabId' in details) { | |
| 39 if (tabIds[details.tabId] === undefined) { | |
| 40 tabIds[details.tabId] = nextTabId++; | |
| 41 } | |
| 42 details.tabId = tabIds[details.tabId]; | |
| 43 } | |
| 44 if ('sourceTabId' in details) { | |
| 45 if (tabIds[details.sourceTabId] === undefined) { | |
| 46 tabIds[details.sourceTabId] = nextTabId++; | |
| 47 } | |
| 48 details.sourceTabId = tabIds[details.sourceTabId]; | |
| 49 } | |
| 32 capturedEventData.push([name, details]); | 50 capturedEventData.push([name, details]); |
| 33 checkExpectations(); | 51 checkExpectations(); |
| 34 } | 52 } |
| 35 | 53 |
| 36 chrome.experimental.webNavigation.onBeforeNavigate.addListener( | 54 chrome.experimental.webNavigation.onBeforeNavigate.addListener( |
| 37 function(details) { | 55 function(details) { |
| 38 captureEvent("onBeforeNavigate", details); | 56 captureEvent("onBeforeNavigate", details); |
| 39 }); | 57 }); |
| 40 | 58 |
| 41 chrome.experimental.webNavigation.onCommitted.addListener(function(details) { | 59 chrome.experimental.webNavigation.onCommitted.addListener(function(details) { |
| 42 captureEvent("onCommitted", details); | 60 captureEvent("onCommitted", details); |
| 43 }); | 61 }); |
| 44 | 62 |
| 45 chrome.experimental.webNavigation.onDOMContentLoaded.addListener( | 63 chrome.experimental.webNavigation.onDOMContentLoaded.addListener( |
| 46 function(details) { | 64 function(details) { |
| 47 captureEvent("onDOMContentLoaded", details); | 65 captureEvent("onDOMContentLoaded", details); |
| 48 }); | 66 }); |
| 49 | 67 |
| 50 chrome.experimental.webNavigation.onCompleted.addListener( | 68 chrome.experimental.webNavigation.onCompleted.addListener( |
| 51 function(details) { | 69 function(details) { |
| 52 captureEvent("onCompleted", details); | 70 captureEvent("onCompleted", details); |
| 53 }); | 71 }); |
| 54 | 72 |
| 73 chrome.experimental.webNavigation.onBeforeRetarget.addListener( | |
| 74 function(details) { | |
| 75 captureEvent("onBeforeRetarget", details); | |
| 76 }); | |
| 77 | |
| 55 chrome.experimental.webNavigation.onErrorOccurred.addListener( | 78 chrome.experimental.webNavigation.onErrorOccurred.addListener( |
| 56 function(details) { | 79 function(details) { |
| 57 captureEvent("onErrorOccurred", details); | 80 captureEvent("onErrorOccurred", details); |
| 58 }); | 81 }); |
| 59 | 82 |
| 60 var getURL = chrome.extension.getURL; | 83 var getURL = chrome.extension.getURL; |
| 61 chrome.tabs.getSelected(null, function(tab) { | 84 chrome.tabs.getSelected(null, function(tab) { |
| 62 var tabId = tab.id; | 85 var tabId = tab.id; |
| 63 | 86 |
| 64 chrome.test.runTests([ | 87 chrome.test.runTests([ |
| 65 /* Navigates to an URL */ | 88 /* Navigates to an URL */ |
| 66 function simpleLoad() { | 89 function simpleLoad() { |
| 67 expect([ | 90 expect([ |
| 68 [ "onBeforeNavigate", | 91 [ "onBeforeNavigate", |
| 69 { frameId: 0, | 92 { frameId: 0, |
| 70 requestId: 0, | 93 requestId: 0, |
| 71 tabId: tabId, | 94 tabId: 0, |
| 72 timeStamp: 0, | 95 timeStamp: 0, |
| 73 url: getURL('simpleLoad/a.html') }], | 96 url: getURL('simpleLoad/a.html') }], |
| 74 [ "onCommitted", | 97 [ "onCommitted", |
| 75 { frameId: 0, | 98 { frameId: 0, |
| 76 tabId: tabId, | 99 tabId: 0, |
| 77 timeStamp: 0, | 100 timeStamp: 0, |
| 78 transitionQualifiers: "", | 101 transitionQualifiers: "", |
| 79 transitionType: "link", | 102 transitionType: "link", |
| 80 url: getURL('simpleLoad/a.html') }], | 103 url: getURL('simpleLoad/a.html') }], |
| 81 [ "onDOMContentLoaded", | 104 [ "onDOMContentLoaded", |
| 82 { frameId: 0, | 105 { frameId: 0, |
| 83 tabId: tabId, | 106 tabId: 0, |
| 84 timeStamp: 0, | 107 timeStamp: 0, |
| 85 url: getURL('simpleLoad/a.html') }], | 108 url: getURL('simpleLoad/a.html') }], |
| 86 [ "onCompleted", | 109 [ "onCompleted", |
| 87 { frameId: 0, | 110 { frameId: 0, |
| 88 tabId: tabId, | 111 tabId: 0, |
| 89 timeStamp: 0, | 112 timeStamp: 0, |
| 90 url: getURL('simpleLoad/a.html') }]]); | 113 url: getURL('simpleLoad/a.html') }]]); |
| 91 chrome.tabs.update(tabId, { url: getURL('simpleLoad/a.html') }); | 114 chrome.tabs.update(tabId, { url: getURL('simpleLoad/a.html') }); |
| 92 }, | 115 }, |
| 93 | 116 |
| 94 /* Navigates to a.html that redirects to b.html (using javascript) | 117 /* Navigates to a.html that redirects to b.html (using javascript) |
| 95 after a delay of 500ms, so the initial navigation is completed and | 118 after a delay of 500ms, so the initial navigation is completed and |
| 96 the redirection is marked as client_redirect */ | 119 the redirection is marked as client_redirect */ |
| 97 function clientRedirect() { | 120 function clientRedirect() { |
| 98 expect([ | 121 expect([ |
| 99 [ "onBeforeNavigate", | 122 [ "onBeforeNavigate", |
| 100 { frameId: 0, | 123 { frameId: 0, |
| 101 requestId: 0, | 124 requestId: 0, |
| 102 tabId: tabId, | 125 tabId: 0, |
| 103 timeStamp: 0, | 126 timeStamp: 0, |
| 104 url: getURL('clientRedirect/a.html') }], | 127 url: getURL('clientRedirect/a.html') }], |
| 105 [ "onCommitted", | 128 [ "onCommitted", |
| 106 { frameId: 0, | 129 { frameId: 0, |
| 107 tabId: tabId, | 130 tabId: 0, |
| 108 timeStamp: 0, | 131 timeStamp: 0, |
| 109 transitionQualifiers: "", | 132 transitionQualifiers: "", |
| 110 transitionType: "link", | 133 transitionType: "link", |
| 111 url: getURL('clientRedirect/a.html') }], | 134 url: getURL('clientRedirect/a.html') }], |
| 112 [ "onDOMContentLoaded", | 135 [ "onDOMContentLoaded", |
| 113 { frameId: 0, | 136 { frameId: 0, |
| 114 tabId: tabId, | 137 tabId: 0, |
| 115 timeStamp: 0, | 138 timeStamp: 0, |
| 116 url: getURL('clientRedirect/a.html') }], | 139 url: getURL('clientRedirect/a.html') }], |
| 117 [ "onCompleted", | 140 [ "onCompleted", |
| 118 { frameId: 0, | 141 { frameId: 0, |
| 119 tabId: tabId, | 142 tabId: 0, |
| 120 timeStamp: 0, | 143 timeStamp: 0, |
| 121 url: getURL('clientRedirect/a.html') }], | 144 url: getURL('clientRedirect/a.html') }], |
| 122 [ "onBeforeNavigate", | 145 [ "onBeforeNavigate", |
| 123 { frameId: 0, | 146 { frameId: 0, |
| 124 requestId: 0, | 147 requestId: 0, |
| 125 tabId: tabId, | 148 tabId: 0, |
| 126 timeStamp: 0, | 149 timeStamp: 0, |
| 127 url: getURL('clientRedirect/b.html') }], | 150 url: getURL('clientRedirect/b.html') }], |
| 128 [ "onCommitted", | 151 [ "onCommitted", |
| 129 { frameId: 0, | 152 { frameId: 0, |
| 130 tabId: tabId, | 153 tabId: 0, |
| 131 timeStamp: 0, | 154 timeStamp: 0, |
| 132 transitionQualifiers: "client_redirect", | 155 transitionQualifiers: "client_redirect", |
| 133 transitionType: "link", | 156 transitionType: "link", |
| 134 url: getURL('clientRedirect/b.html') }], | 157 url: getURL('clientRedirect/b.html') }], |
| 135 [ "onDOMContentLoaded", | 158 [ "onDOMContentLoaded", |
| 136 { frameId: 0, | 159 { frameId: 0, |
| 137 tabId: tabId, | 160 tabId: 0, |
| 138 timeStamp: 0, | 161 timeStamp: 0, |
| 139 url: getURL('clientRedirect/b.html') }], | 162 url: getURL('clientRedirect/b.html') }], |
| 140 [ "onCompleted", | 163 [ "onCompleted", |
| 141 { frameId: 0, | 164 { frameId: 0, |
| 142 tabId: tabId, | 165 tabId: 0, |
| 143 timeStamp: 0, | 166 timeStamp: 0, |
| 144 url: getURL('clientRedirect/b.html') }]]); | 167 url: getURL('clientRedirect/b.html') }]]); |
| 145 chrome.tabs.update(tabId, { url: getURL('clientRedirect/a.html') }); | 168 chrome.tabs.update(tabId, { url: getURL('clientRedirect/a.html') }); |
| 146 }, | 169 }, |
| 147 | 170 |
| 148 /* First navigates to a.html which redirects to to b.html which uses | 171 /* First navigates to a.html which redirects to to b.html which uses |
| 149 history.back() to navigate back to a.html */ | 172 history.back() to navigate back to a.html */ |
| 150 function forwardBack() { | 173 function forwardBack() { |
| 151 expect([ | 174 expect([ |
| 152 [ "onBeforeNavigate", | 175 [ "onBeforeNavigate", |
| 153 { frameId: 0, | 176 { frameId: 0, |
| 154 requestId: 0, | 177 requestId: 0, |
| 155 tabId: tabId, | 178 tabId: 0, |
| 156 timeStamp: 0, | 179 timeStamp: 0, |
| 157 url: getURL('forwardBack/a.html') }], | 180 url: getURL('forwardBack/a.html') }], |
| 158 [ "onCommitted", | 181 [ "onCommitted", |
| 159 { frameId: 0, | 182 { frameId: 0, |
| 160 tabId: tabId, | 183 tabId: 0, |
| 161 timeStamp: 0, | 184 timeStamp: 0, |
| 162 transitionQualifiers: "", | 185 transitionQualifiers: "", |
| 163 transitionType: "link", | 186 transitionType: "link", |
| 164 url: getURL('forwardBack/a.html') }], | 187 url: getURL('forwardBack/a.html') }], |
| 165 [ "onDOMContentLoaded", | 188 [ "onDOMContentLoaded", |
| 166 { frameId: 0, | 189 { frameId: 0, |
| 167 tabId: tabId, | 190 tabId: 0, |
| 168 timeStamp: 0, | 191 timeStamp: 0, |
| 169 url: getURL('forwardBack/a.html') }], | 192 url: getURL('forwardBack/a.html') }], |
| 170 [ "onCompleted", | 193 [ "onCompleted", |
| 171 { frameId: 0, | 194 { frameId: 0, |
| 172 tabId: tabId, | 195 tabId: 0, |
| 173 timeStamp: 0, | 196 timeStamp: 0, |
| 174 url: getURL('forwardBack/a.html') }], | 197 url: getURL('forwardBack/a.html') }], |
| 175 [ "onBeforeNavigate", | 198 [ "onBeforeNavigate", |
| 176 { frameId: 0, | 199 { frameId: 0, |
| 177 requestId: 0, | 200 requestId: 0, |
| 178 tabId: tabId, | 201 tabId: 0, |
| 179 timeStamp: 0, | 202 timeStamp: 0, |
| 180 url: getURL('forwardBack/b.html') }], | 203 url: getURL('forwardBack/b.html') }], |
| 181 [ "onCommitted", | 204 [ "onCommitted", |
| 182 { frameId: 0, | 205 { frameId: 0, |
| 183 tabId: tabId, | 206 tabId: 0, |
| 184 timeStamp: 0, | 207 timeStamp: 0, |
| 185 transitionQualifiers: "client_redirect", | 208 transitionQualifiers: "client_redirect", |
| 186 transitionType: "link", | 209 transitionType: "link", |
| 187 url: getURL('forwardBack/b.html') }], | 210 url: getURL('forwardBack/b.html') }], |
| 188 [ "onDOMContentLoaded", | 211 [ "onDOMContentLoaded", |
| 189 { frameId: 0, | 212 { frameId: 0, |
| 190 tabId: tabId, | 213 tabId: 0, |
| 191 timeStamp: 0, | 214 timeStamp: 0, |
| 192 url: getURL('forwardBack/b.html') }], | 215 url: getURL('forwardBack/b.html') }], |
| 193 [ "onCompleted", | 216 [ "onCompleted", |
| 194 { frameId: 0, | 217 { frameId: 0, |
| 195 tabId: tabId, | 218 tabId: 0, |
| 196 timeStamp: 0, | 219 timeStamp: 0, |
| 197 url: getURL('forwardBack/b.html') }], | 220 url: getURL('forwardBack/b.html') }], |
| 198 [ "onBeforeNavigate", | 221 [ "onBeforeNavigate", |
| 199 { frameId: 0, | 222 { frameId: 0, |
| 200 requestId: 0, | 223 requestId: 0, |
| 201 tabId: tabId, | 224 tabId: 0, |
| 202 timeStamp: 0, | 225 timeStamp: 0, |
| 203 url: getURL('forwardBack/a.html') }], | 226 url: getURL('forwardBack/a.html') }], |
| 204 [ "onCommitted", | 227 [ "onCommitted", |
| 205 { frameId: 0, | 228 { frameId: 0, |
| 206 tabId: tabId, | 229 tabId: 0, |
| 207 timeStamp: 0, | 230 timeStamp: 0, |
| 208 transitionQualifiers: "forward_back", | 231 transitionQualifiers: "forward_back", |
| 209 transitionType: "link", | 232 transitionType: "link", |
| 210 url: getURL('forwardBack/a.html') }], | 233 url: getURL('forwardBack/a.html') }], |
| 211 [ "onDOMContentLoaded", | 234 [ "onDOMContentLoaded", |
| 212 { frameId: 0, | 235 { frameId: 0, |
| 213 tabId: tabId, | 236 tabId: 0, |
| 214 timeStamp: 0, | 237 timeStamp: 0, |
| 215 url: getURL('forwardBack/a.html') }], | 238 url: getURL('forwardBack/a.html') }], |
| 216 [ "onCompleted", | 239 [ "onCompleted", |
| 217 { frameId: 0, | 240 { frameId: 0, |
| 218 tabId: tabId, | 241 tabId: 0, |
| 219 timeStamp: 0, | 242 timeStamp: 0, |
| 220 url: getURL('forwardBack/a.html') }]]); | 243 url: getURL('forwardBack/a.html') }]]); |
| 221 chrome.tabs.update(tabId, { url: getURL('forwardBack/a.html') }); | 244 chrome.tabs.update(tabId, { url: getURL('forwardBack/a.html') }); |
| 222 }, | 245 }, |
| 223 | 246 |
| 224 /* Navigates to a.html which includes b.html as an iframe. b.html | 247 /* Navigates to a.html which includes b.html as an iframe. b.html |
| 225 redirects to c.html. */ | 248 redirects to c.html. */ |
| 226 function iframe() { | 249 function iframe() { |
| 227 expect([ | 250 expect([ |
| 228 [ "onBeforeNavigate", | 251 [ "onBeforeNavigate", |
| 229 { frameId: 0, | 252 { frameId: 0, |
| 230 requestId: 0, | 253 requestId: 0, |
| 231 tabId: tabId, | 254 tabId: 0, |
| 232 timeStamp: 0, | 255 timeStamp: 0, |
| 233 url: getURL('iframe/a.html') }], | 256 url: getURL('iframe/a.html') }], |
| 234 [ "onCommitted", | 257 [ "onCommitted", |
| 235 { frameId: 0, | 258 { frameId: 0, |
| 236 tabId: tabId, | 259 tabId: 0, |
| 237 timeStamp: 0, | 260 timeStamp: 0, |
| 238 transitionQualifiers: "", | 261 transitionQualifiers: "", |
| 239 transitionType: "link", | 262 transitionType: "link", |
| 240 url: getURL('iframe/a.html') }], | 263 url: getURL('iframe/a.html') }], |
| 241 [ "onBeforeNavigate", | 264 [ "onBeforeNavigate", |
| 242 { frameId: 1, | 265 { frameId: 1, |
| 243 requestId: 0, | 266 requestId: 0, |
| 244 tabId: tabId, | 267 tabId: 0, |
| 245 timeStamp: 0, | 268 timeStamp: 0, |
| 246 url: getURL('iframe/b.html') }], | 269 url: getURL('iframe/b.html') }], |
| 247 [ "onDOMContentLoaded", | 270 [ "onDOMContentLoaded", |
| 248 { frameId: 0, | 271 { frameId: 0, |
| 249 tabId: tabId, | 272 tabId: 0, |
| 250 timeStamp: 0, | 273 timeStamp: 0, |
| 251 url: getURL('iframe/a.html') }], | 274 url: getURL('iframe/a.html') }], |
| 252 [ "onCommitted", | 275 [ "onCommitted", |
| 253 { frameId: 1, | 276 { frameId: 1, |
| 254 tabId: tabId, | 277 tabId: 0, |
| 255 timeStamp: 0, | 278 timeStamp: 0, |
| 256 transitionQualifiers: "", | 279 transitionQualifiers: "", |
| 257 transitionType: "auto_subframe", | 280 transitionType: "auto_subframe", |
| 258 url: getURL('iframe/b.html') }], | 281 url: getURL('iframe/b.html') }], |
| 259 [ "onDOMContentLoaded", | 282 [ "onDOMContentLoaded", |
| 260 { frameId: 1, | 283 { frameId: 1, |
| 261 tabId: tabId, | 284 tabId: 0, |
| 262 timeStamp: 0, | 285 timeStamp: 0, |
| 263 url: getURL('iframe/b.html') }], | 286 url: getURL('iframe/b.html') }], |
| 264 [ "onCompleted", | 287 [ "onCompleted", |
| 265 { frameId: 1, | 288 { frameId: 1, |
| 266 tabId: tabId, | 289 tabId: 0, |
| 267 timeStamp: 0, | 290 timeStamp: 0, |
| 268 url: getURL('iframe/b.html') }], | 291 url: getURL('iframe/b.html') }], |
| 269 [ "onCompleted", | 292 [ "onCompleted", |
| 270 { frameId: 0, | 293 { frameId: 0, |
| 271 tabId: tabId, | 294 tabId: 0, |
| 272 timeStamp: 0, | 295 timeStamp: 0, |
| 273 url: getURL('iframe/a.html') }], | 296 url: getURL('iframe/a.html') }], |
| 274 [ "onBeforeNavigate", | 297 [ "onBeforeNavigate", |
| 275 { frameId: 1, | 298 { frameId: 1, |
| 276 requestId: 0, | 299 requestId: 0, |
| 277 tabId: tabId, | 300 tabId: 0, |
| 278 timeStamp: 0, | 301 timeStamp: 0, |
| 279 url: getURL('iframe/c.html') }], | 302 url: getURL('iframe/c.html') }], |
| 280 [ "onCommitted", | 303 [ "onCommitted", |
| 281 { frameId: 1, | 304 { frameId: 1, |
| 282 tabId: tabId, | 305 tabId: 0, |
| 283 timeStamp: 0, | 306 timeStamp: 0, |
| 284 transitionQualifiers: "", | 307 transitionQualifiers: "", |
| 285 transitionType: "manual_subframe", | 308 transitionType: "manual_subframe", |
| 286 url: getURL('iframe/c.html') }], | 309 url: getURL('iframe/c.html') }], |
| 287 [ "onDOMContentLoaded", | 310 [ "onDOMContentLoaded", |
| 288 { frameId: 1, | 311 { frameId: 1, |
| 289 tabId: tabId, | 312 tabId: 0, |
| 290 timeStamp: 0, | 313 timeStamp: 0, |
| 291 url: getURL('iframe/c.html') }], | 314 url: getURL('iframe/c.html') }], |
| 292 [ "onCompleted", | 315 [ "onCompleted", |
| 293 { frameId: 1, | 316 { frameId: 1, |
| 294 tabId: tabId, | 317 tabId: 0, |
| 295 timeStamp: 0, | 318 timeStamp: 0, |
| 296 url: getURL('iframe/c.html') }]]); | 319 url: getURL('iframe/c.html') }]]); |
| 297 chrome.tabs.update(tabId, { url: getURL('iframe/a.html') }); | 320 chrome.tabs.update(tabId, { url: getURL('iframe/a.html') }); |
| 298 }, | 321 }, |
| 299 | 322 |
| 300 /* Navigates to d.html which includes e.html and f.html as iframes. To be | 323 /* Navigates to d.html which includes e.html and f.html as iframes. To be |
| 301 able to predict which iframe has which id, the iframe for f.html is | 324 able to predict which iframe has which id, the iframe for f.html is |
| 302 created by javascript. f.html then navigates to g.html. */ | 325 created by javascript. f.html then navigates to g.html. */ |
| 303 function iframe2() { | 326 function iframe2() { |
| 304 expect([ | 327 expect([ |
| 305 [ "onBeforeNavigate", | 328 [ "onBeforeNavigate", |
| 306 { frameId: 0, | 329 { frameId: 0, |
| 307 requestId: 0, | 330 requestId: 0, |
| 308 tabId: tabId, | 331 tabId: 0, |
| 309 timeStamp: 0, | 332 timeStamp: 0, |
| 310 url: getURL('iframe/d.html') }], | 333 url: getURL('iframe/d.html') }], |
| 311 [ "onCommitted", | 334 [ "onCommitted", |
| 312 { frameId: 0, | 335 { frameId: 0, |
| 313 tabId: tabId, | 336 tabId: 0, |
| 314 timeStamp: 0, | 337 timeStamp: 0, |
| 315 transitionQualifiers: "", | 338 transitionQualifiers: "", |
| 316 transitionType: "link", | 339 transitionType: "link", |
| 317 url: getURL('iframe/d.html') }], | 340 url: getURL('iframe/d.html') }], |
| 318 [ "onBeforeNavigate", | 341 [ "onBeforeNavigate", |
| 319 { frameId: 1, | 342 { frameId: 1, |
| 320 requestId: 0, | 343 requestId: 0, |
| 321 tabId: tabId, | 344 tabId: 0, |
| 322 timeStamp: 0, | 345 timeStamp: 0, |
| 323 url: getURL('iframe/e.html') }], | 346 url: getURL('iframe/e.html') }], |
| 324 [ "onDOMContentLoaded", | 347 [ "onDOMContentLoaded", |
| 325 { frameId: 0, | 348 { frameId: 0, |
| 326 tabId: tabId, | 349 tabId: 0, |
| 327 timeStamp: 0, | 350 timeStamp: 0, |
| 328 url: getURL('iframe/d.html') }], | 351 url: getURL('iframe/d.html') }], |
| 329 [ "onCommitted", | 352 [ "onCommitted", |
| 330 { frameId: 1, | 353 { frameId: 1, |
| 331 tabId: tabId, | 354 tabId: 0, |
| 332 timeStamp: 0, | 355 timeStamp: 0, |
| 333 transitionQualifiers: "", | 356 transitionQualifiers: "", |
| 334 transitionType: "auto_subframe", | 357 transitionType: "auto_subframe", |
| 335 url: getURL('iframe/e.html') }], | 358 url: getURL('iframe/e.html') }], |
| 336 [ "onDOMContentLoaded", | 359 [ "onDOMContentLoaded", |
| 337 { frameId: 1, | 360 { frameId: 1, |
| 338 tabId: tabId, | 361 tabId: 0, |
| 339 timeStamp: 0, | 362 timeStamp: 0, |
| 340 url: getURL('iframe/e.html') }], | 363 url: getURL('iframe/e.html') }], |
| 341 [ "onBeforeNavigate", | 364 [ "onBeforeNavigate", |
| 342 { frameId: 2, | 365 { frameId: 2, |
| 343 requestId: 0, | 366 requestId: 0, |
| 344 tabId: tabId, | 367 tabId: 0, |
| 345 timeStamp: 0, | 368 timeStamp: 0, |
| 346 url: getURL('iframe/f.html') }], | 369 url: getURL('iframe/f.html') }], |
| 347 [ "onCompleted", | 370 [ "onCompleted", |
| 348 { frameId: 1, | 371 { frameId: 1, |
| 349 tabId: tabId, | 372 tabId: 0, |
| 350 timeStamp: 0, | 373 timeStamp: 0, |
| 351 url: getURL('iframe/e.html') }], | 374 url: getURL('iframe/e.html') }], |
| 352 [ "onCommitted", | 375 [ "onCommitted", |
| 353 { frameId: 2, | 376 { frameId: 2, |
| 354 tabId: tabId, | 377 tabId: 0, |
| 355 timeStamp: 0, | 378 timeStamp: 0, |
| 356 transitionQualifiers: "", | 379 transitionQualifiers: "", |
| 357 transitionType: "auto_subframe", | 380 transitionType: "auto_subframe", |
| 358 url: getURL('iframe/f.html') }], | 381 url: getURL('iframe/f.html') }], |
| 359 [ "onDOMContentLoaded", | 382 [ "onDOMContentLoaded", |
| 360 { frameId: 2, | 383 { frameId: 2, |
| 361 tabId: tabId, | 384 tabId: 0, |
| 362 timeStamp: 0, | 385 timeStamp: 0, |
| 363 url: getURL('iframe/f.html') }], | 386 url: getURL('iframe/f.html') }], |
| 364 [ "onCompleted", | 387 [ "onCompleted", |
| 365 { frameId: 2, | 388 { frameId: 2, |
| 366 tabId: tabId, | 389 tabId: 0, |
| 367 timeStamp: 0, | 390 timeStamp: 0, |
| 368 url: getURL('iframe/f.html') }], | 391 url: getURL('iframe/f.html') }], |
| 369 [ "onCompleted", | 392 [ "onCompleted", |
| 370 { frameId: 0, | 393 { frameId: 0, |
| 371 tabId: tabId, | 394 tabId: 0, |
| 372 timeStamp: 0, | 395 timeStamp: 0, |
| 373 url: getURL('iframe/d.html') }], | 396 url: getURL('iframe/d.html') }], |
| 374 [ "onBeforeNavigate", | 397 [ "onBeforeNavigate", |
| 375 { frameId: 2, | 398 { frameId: 2, |
| 376 requestId: 0, | 399 requestId: 0, |
| 377 tabId: tabId, | 400 tabId: 0, |
| 378 timeStamp: 0, | 401 timeStamp: 0, |
| 379 url: getURL('iframe/g.html') }], | 402 url: getURL('iframe/g.html') }], |
| 380 [ "onCommitted", | 403 [ "onCommitted", |
| 381 { frameId: 2, | 404 { frameId: 2, |
| 382 tabId: tabId, | 405 tabId: 0, |
| 383 timeStamp: 0, | 406 timeStamp: 0, |
| 384 transitionQualifiers: "", | 407 transitionQualifiers: "", |
| 385 transitionType: "manual_subframe", | 408 transitionType: "manual_subframe", |
| 386 url: getURL('iframe/g.html') }], | 409 url: getURL('iframe/g.html') }], |
| 387 [ "onDOMContentLoaded", | 410 [ "onDOMContentLoaded", |
| 388 { frameId: 2, | 411 { frameId: 2, |
| 389 tabId: tabId, | 412 tabId: 0, |
| 390 timeStamp: 0, | 413 timeStamp: 0, |
| 391 url: getURL('iframe/g.html') }], | 414 url: getURL('iframe/g.html') }], |
| 392 [ "onCompleted", | 415 [ "onCompleted", |
| 393 { frameId: 2, | 416 { frameId: 2, |
| 394 tabId: tabId, | 417 tabId: 0, |
| 395 timeStamp: 0, | 418 timeStamp: 0, |
| 396 url: getURL('iframe/g.html') }]]); | 419 url: getURL('iframe/g.html') }]]); |
| 397 chrome.tabs.update(tabId, { url: getURL('iframe/d.html') }); | 420 chrome.tabs.update(tabId, { url: getURL('iframe/d.html') }); |
| 398 }, | 421 }, |
| 422 | |
| 423 /* Opens a new tab from javascript. */ | |
| 424 function openTab() { | |
| 425 expect([ | |
| 426 [ "onBeforeNavigate", | |
| 427 { frameId: 0, | |
| 428 requestId: 0, | |
| 429 tabId: 0, | |
| 430 timeStamp: 0, | |
| 431 url: getURL('openTab/a.html') }], | |
| 432 [ "onCommitted", | |
| 433 { frameId: 0, | |
| 434 tabId: 0, | |
| 435 timeStamp: 0, | |
| 436 transitionQualifiers: "", | |
| 437 transitionType: "link", | |
| 438 url: getURL('openTab/a.html') }], | |
| 439 [ "onDOMContentLoaded", | |
| 440 { frameId: 0, | |
| 441 tabId: 0, | |
| 442 timeStamp: 0, | |
| 443 url: getURL('openTab/a.html') }], | |
| 444 [ "onCompleted", | |
| 445 { frameId: 0, | |
| 446 tabId: 0, | |
| 447 timeStamp: 0, | |
| 448 url: getURL('openTab/a.html') }], | |
| 449 [ "onBeforeRetarget", | |
| 450 { sourceTabId: 0, | |
| 451 sourceUrl: getURL('openTab/a.html'), | |
|
yzshen1
2011/01/18 21:49:24
[Nice to have, optional]
Test the scenario that a
| |
| 452 targetUrl: getURL('openTab/b.html'), | |
| 453 timeStamp: 0 }], | |
| 454 [ "onBeforeNavigate", | |
| 455 { frameId: 0, | |
| 456 requestId: 0, | |
| 457 tabId: 1, | |
| 458 timeStamp: 0, | |
| 459 url: getURL('openTab/b.html') }], | |
| 460 [ "onCommitted", | |
| 461 { frameId: 0, | |
| 462 tabId: 1, | |
| 463 timeStamp: 0, | |
| 464 transitionQualifiers: "", | |
| 465 transitionType: "link", | |
| 466 url: getURL('openTab/b.html') }], | |
| 467 [ "onDOMContentLoaded", | |
| 468 { frameId: 0, | |
| 469 tabId: 1, | |
| 470 timeStamp: 0, | |
| 471 url: getURL('openTab/b.html') }], | |
| 472 [ "onCompleted", | |
| 473 { frameId: 0, | |
| 474 tabId: 1, | |
| 475 timeStamp: 0, | |
| 476 url: getURL('openTab/b.html') }]]); | |
| 477 chrome.tabs.update(tabId, { url: getURL('openTab/a.html') }); | |
| 478 }, | |
| 399 ]); | 479 ]); |
| 400 }); | 480 }); |
| 401 </script> | 481 </script> |
| OLD | NEW |