| 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 a non-existant page. */ | 88 /* Navigates to a non-existant page. */ |
| 66 function nonExistant() { | 89 function nonExistant() { |
| 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('nonexistant.html') }], | 96 url: getURL('nonexistant.html') }], |
| 74 [ "onErrorOccurred", | 97 [ "onErrorOccurred", |
| 75 { error: "net::ERR_FILE_NOT_FOUND", | 98 { error: "net::ERR_FILE_NOT_FOUND", |
| 76 frameId: 0, | 99 frameId: 0, |
| 77 tabId: tabId, | 100 tabId: 0, |
| 78 timeStamp: 0, | 101 timeStamp: 0, |
| 79 url: getURL('nonexistant.html') }]]); | 102 url: getURL('nonexistant.html') }]]); |
| 80 chrome.tabs.update(tabId, { url: getURL('nonexistant.html') }); | 103 chrome.tabs.update(tabId, { url: getURL('nonexistant.html') }); |
| 81 }, | 104 }, |
| 82 | 105 |
| 83 /* An page that tries to load an non-existant iframe. */ | 106 /* An page that tries to load an non-existant iframe. */ |
| 84 function nonExistantIframe() { | 107 function nonExistantIframe() { |
| 85 expect([ | 108 expect([ |
| 86 [ "onBeforeNavigate", | 109 [ "onBeforeNavigate", |
| 87 { frameId: 0, | 110 { frameId: 0, |
| 88 requestId: 0, | 111 requestId: 0, |
| 89 tabId: tabId, | 112 tabId: 0, |
| 90 timeStamp: 0, | 113 timeStamp: 0, |
| 91 url: getURL('iframeFail/d.html') }], | 114 url: getURL('iframeFail/d.html') }], |
| 92 [ "onCommitted", | 115 [ "onCommitted", |
| 93 { frameId: 0, | 116 { frameId: 0, |
| 94 tabId: tabId, | 117 tabId: 0, |
| 95 timeStamp: 0, | 118 timeStamp: 0, |
| 96 transitionQualifiers: "", | 119 transitionQualifiers: "", |
| 97 transitionType: "link", | 120 transitionType: "link", |
| 98 url: getURL('iframeFail/d.html') }], | 121 url: getURL('iframeFail/d.html') }], |
| 99 [ "onBeforeNavigate", | 122 [ "onBeforeNavigate", |
| 100 { frameId: 1, | 123 { frameId: 1, |
| 101 requestId: 0, | 124 requestId: 0, |
| 102 tabId: tabId, | 125 tabId: 0, |
| 103 timeStamp: 0, | 126 timeStamp: 0, |
| 104 url: getURL('iframeFail/c.html') }], | 127 url: getURL('iframeFail/c.html') }], |
| 105 [ "onDOMContentLoaded", | 128 [ "onDOMContentLoaded", |
| 106 { frameId: 0, | 129 { frameId: 0, |
| 107 tabId: tabId, | 130 tabId: 0, |
| 108 timeStamp: 0, | 131 timeStamp: 0, |
| 109 url: getURL('iframeFail/d.html') }], | 132 url: getURL('iframeFail/d.html') }], |
| 110 [ "onErrorOccurred", | 133 [ "onErrorOccurred", |
| 111 { error: "net::ERR_FILE_NOT_FOUND", | 134 { error: "net::ERR_FILE_NOT_FOUND", |
| 112 frameId: 1, | 135 frameId: 1, |
| 113 tabId: tabId, | 136 tabId: 0, |
| 114 timeStamp: 0, | 137 timeStamp: 0, |
| 115 url: getURL('iframeFail/c.html') }], | 138 url: getURL('iframeFail/c.html') }], |
| 116 [ "onCompleted", | 139 [ "onCompleted", |
| 117 { frameId: 0, | 140 { frameId: 0, |
| 118 tabId: tabId, | 141 tabId: 0, |
| 119 timeStamp: 0, | 142 timeStamp: 0, |
| 120 url: getURL('iframeFail/d.html') }]]); | 143 url: getURL('iframeFail/d.html') }]]); |
| 121 chrome.tabs.update(tabId, { url: getURL('iframeFail/d.html') }); | 144 chrome.tabs.update(tabId, { url: getURL('iframeFail/d.html') }); |
| 122 }, | 145 }, |
| 123 | 146 |
| 124 /* An iframe navigates to a non-existant page. */ | 147 /* An iframe navigates to a non-existant page. */ |
| 125 function nonExistantIframeNavigation() { | 148 function nonExistantIframeNavigation() { |
| 126 expect([ | 149 expect([ |
| 127 [ "onBeforeNavigate", | 150 [ "onBeforeNavigate", |
| 128 { frameId: 0, | 151 { frameId: 0, |
| 129 requestId: 0, | 152 requestId: 0, |
| 130 tabId: tabId, | 153 tabId: 0, |
| 131 timeStamp: 0, | 154 timeStamp: 0, |
| 132 url: getURL('iframeFail/a.html') }], | 155 url: getURL('iframeFail/a.html') }], |
| 133 [ "onCommitted", | 156 [ "onCommitted", |
| 134 { frameId: 0, | 157 { frameId: 0, |
| 135 tabId: tabId, | 158 tabId: 0, |
| 136 timeStamp: 0, | 159 timeStamp: 0, |
| 137 transitionQualifiers: "", | 160 transitionQualifiers: "", |
| 138 transitionType: "link", | 161 transitionType: "link", |
| 139 url: getURL('iframeFail/a.html') }], | 162 url: getURL('iframeFail/a.html') }], |
| 140 [ "onBeforeNavigate", | 163 [ "onBeforeNavigate", |
| 141 { frameId: 1, | 164 { frameId: 1, |
| 142 requestId: 0, | 165 requestId: 0, |
| 143 tabId: tabId, | 166 tabId: 0, |
| 144 timeStamp: 0, | 167 timeStamp: 0, |
| 145 url: getURL('iframeFail/b.html') }], | 168 url: getURL('iframeFail/b.html') }], |
| 146 [ "onDOMContentLoaded", | 169 [ "onDOMContentLoaded", |
| 147 { frameId: 0, | 170 { frameId: 0, |
| 148 tabId: tabId, | 171 tabId: 0, |
| 149 timeStamp: 0, | 172 timeStamp: 0, |
| 150 url: getURL('iframeFail/a.html') }], | 173 url: getURL('iframeFail/a.html') }], |
| 151 [ "onCommitted", | 174 [ "onCommitted", |
| 152 { frameId: 1, | 175 { frameId: 1, |
| 153 tabId: tabId, | 176 tabId: 0, |
| 154 timeStamp: 0, | 177 timeStamp: 0, |
| 155 transitionQualifiers: "", | 178 transitionQualifiers: "", |
| 156 transitionType: "auto_subframe", | 179 transitionType: "auto_subframe", |
| 157 url: getURL('iframeFail/b.html') }], | 180 url: getURL('iframeFail/b.html') }], |
| 158 [ "onDOMContentLoaded", | 181 [ "onDOMContentLoaded", |
| 159 { frameId: 1, | 182 { frameId: 1, |
| 160 tabId: tabId, | 183 tabId: 0, |
| 161 timeStamp: 0, | 184 timeStamp: 0, |
| 162 url: getURL('iframeFail/b.html') }], | 185 url: getURL('iframeFail/b.html') }], |
| 163 [ "onCompleted", | 186 [ "onCompleted", |
| 164 { frameId: 1, | 187 { frameId: 1, |
| 165 tabId: tabId, | 188 tabId: 0, |
| 166 timeStamp: 0, | 189 timeStamp: 0, |
| 167 url: getURL('iframeFail/b.html') }], | 190 url: getURL('iframeFail/b.html') }], |
| 168 [ "onCompleted", | 191 [ "onCompleted", |
| 169 { frameId: 0, | 192 { frameId: 0, |
| 170 tabId: tabId, | 193 tabId: 0, |
| 171 timeStamp: 0, | 194 timeStamp: 0, |
| 172 url: getURL('iframeFail/a.html') }], | 195 url: getURL('iframeFail/a.html') }], |
| 173 [ "onBeforeNavigate", | 196 [ "onBeforeNavigate", |
| 174 { frameId: 1, | 197 { frameId: 1, |
| 175 requestId: 0, | 198 requestId: 0, |
| 176 tabId: tabId, | 199 tabId: 0, |
| 177 timeStamp: 0, | 200 timeStamp: 0, |
| 178 url: getURL('iframeFail/c.html') }], | 201 url: getURL('iframeFail/c.html') }], |
| 179 [ "onErrorOccurred", | 202 [ "onErrorOccurred", |
| 180 { error: "net::ERR_FILE_NOT_FOUND", | 203 { error: "net::ERR_FILE_NOT_FOUND", |
| 181 frameId: 1, | 204 frameId: 1, |
| 182 tabId: tabId, | 205 tabId: 0, |
| 183 timeStamp: 0, | 206 timeStamp: 0, |
| 184 url: getURL('iframeFail/c.html') }]]); | 207 url: getURL('iframeFail/c.html') }]]); |
| 185 chrome.tabs.update(tabId, { url: getURL('iframeFail/a.html') }); | 208 chrome.tabs.update(tabId, { url: getURL('iframeFail/a.html') }); |
| 186 }, | 209 }, |
| 187 ]); | 210 ]); |
| 188 }); | 211 }); |
| 189 </script> | 212 </script> |
| OLD | NEW |