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 |