OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 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. | |
4 | |
5 function getEchoTestURL(port) { | |
6 return 'ws://localhost:' + port + '/echo-with-no-extension'; | |
7 } | |
8 | |
9 // Tries to: open a WebSocket, write a test message to it, close it. Verifies | |
10 // that all the necessary events are triggered if |expectedToConnect|, otherwise | |
11 // makes sure WebSocket terminates with an error. | |
12 function testWebSocketConnection(url, expectedToConnect = true) { | |
Devlin
2017/02/15 22:12:58
nitty nit: I don't think the default argument here
pkalinnikov
2017/02/16 21:31:07
Done.
| |
13 var ws = new WebSocket(url); | |
14 var kMessage = 'test message'; | |
15 | |
16 var keepAlive = chrome.test.callbackAdded(); | |
17 | |
18 ws.onerror = function(error) { | |
19 chrome.test.log('WebSocket error: ' + error); | |
20 chrome.test.assertFalse(expectedToConnect); | |
21 keepAlive(); | |
22 }; | |
23 ws.onmessage = function(messageEvent) { | |
24 chrome.test.log('Message received: ' + messageEvent.data); | |
25 chrome.test.assertTrue(expectedToConnect); | |
26 chrome.test.assertEq(kMessage, messageEvent.data); | |
27 ws.close(); | |
28 }; | |
29 ws.onclose = function(event) { | |
30 chrome.test.log('WebSocket closed.'); | |
31 chrome.test.assertEq(expectedToConnect, event.wasClean); | |
32 } | |
33 | |
34 ws.onopen = function() { | |
35 chrome.test.log('WebSocket opened.'); | |
36 chrome.test.assertTrue(expectedToConnect); | |
37 keepAlive(); | |
38 ws.send(kMessage); | |
39 }; | |
40 } | |
41 | |
42 chrome.tabs.getCurrent(function(tab) { | |
43 runTestsForTab([ | |
44 // Opens a WebSocket connection, writes a message to it, and closes the | |
45 // connection. WebRequest API should observe the entire handshake. | |
46 function handshakeSucceeds() { | |
47 var webSocketUrl = getEchoTestURL(testWebSocketPort); | |
48 expect( | |
49 [ //events | |
50 { label: 'onBeforeRequest', | |
51 event: 'onBeforeRequest', | |
52 details: { | |
53 url: webSocketUrl, | |
54 type: 'websocket', | |
55 frameUrl: 'unknown frame URL', | |
56 }, | |
57 }, | |
58 { label: 'onBeforeSendHeaders', | |
59 event: 'onBeforeSendHeaders', | |
60 details: { | |
61 url: webSocketUrl, | |
62 type: 'websocket', | |
63 }, | |
64 }, | |
65 { label: 'onSendHeaders', | |
66 event: 'onSendHeaders', | |
67 details: { | |
68 url: webSocketUrl, | |
69 type: 'websocket', | |
70 }, | |
71 }, | |
72 { label: 'onHeadersReceived', | |
73 event: 'onHeadersReceived', | |
74 details: { | |
75 url: webSocketUrl, | |
76 type: 'websocket', | |
77 statusCode: 101, | |
78 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
79 }, | |
80 }, | |
81 { label: 'onResponseStarted', | |
82 event: 'onResponseStarted', | |
83 details: { | |
84 url: webSocketUrl, | |
85 type: 'websocket', | |
86 ip: '127.0.0.1', | |
87 fromCache: false, | |
88 statusCode: 101, | |
89 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
90 }, | |
91 }, | |
92 { label: 'onCompleted', | |
93 event: 'onCompleted', | |
94 details: { | |
95 url: webSocketUrl, | |
96 type: 'websocket', | |
97 fromCache: false, | |
98 statusCode: 101, | |
99 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
100 } | |
101 }, | |
102 ], | |
103 [ // event order | |
104 ['onBeforeRequest', 'onBeforeSendHeaders', 'onSendHeaders', | |
105 'onHeadersReceived', 'onResponseStarted', 'onCompleted'] | |
106 ], | |
107 {urls: ['<all_urls>']}, // filter | |
108 ['blocking'] // extraInfoSpec | |
109 ); | |
110 testWebSocketConnection(webSocketUrl); | |
111 }, | |
112 | |
113 // Tries to open a WebSocket connection, with a blocking handler that | |
114 // cancels the request. The connection will not establish. | |
115 function handshakeRequestCancelled() { | |
116 var webSocketUrl = getEchoTestURL(testWebSocketPort); | |
117 expect( | |
118 [ // events | |
119 { label: 'onBeforeRequest', | |
120 event: 'onBeforeRequest', | |
121 details: { | |
122 url: webSocketUrl, | |
123 type: 'websocket', | |
124 frameUrl: 'unknown frame URL', | |
125 }, | |
126 retval: {cancel: true} | |
127 }, | |
128 // Cancelling is considered an error. | |
129 { label: 'onErrorOccurred', | |
130 event: 'onErrorOccurred', | |
131 details: { | |
132 url: webSocketUrl, | |
133 type: 'websocket', | |
134 fromCache: false, | |
135 error: 'net::ERR_BLOCKED_BY_CLIENT' | |
136 } | |
137 }, | |
138 ], | |
139 [ // event order | |
140 ['onBeforeRequest', 'onErrorOccurred'] | |
141 ], | |
142 {urls: ['<all_urls>']}, // filter | |
143 ['blocking'] // extraInfoSpec | |
144 ); | |
145 testWebSocketConnection(webSocketUrl, false); | |
146 }, | |
147 | |
148 // Opens a WebSocket connection, with a blocking handler that tries to | |
149 // redirect the request. The redirect will be ignored. | |
150 function redirectIsIgnoredAndHandshakeSucceeds() { | |
151 var webSocketUrl = getEchoTestURL(testWebSocketPort); | |
152 var webSocketRedirectedUrl1 = getEchoTestURL(testWebSocketPort) | |
153 + '?redirected1'; | |
154 var webSocketRedirectedUrl2 = getEchoTestURL(testWebSocketPort) | |
155 + '?redirected2'; | |
156 expect( | |
157 [ // events | |
158 { label: 'onBeforeRequest', | |
159 event: 'onBeforeRequest', | |
160 details: { | |
161 url: webSocketUrl, | |
162 type: 'websocket', | |
163 frameUrl: 'unknown frame URL', | |
164 }, | |
165 retval: {redirectUrl: webSocketRedirectedUrl1} | |
166 }, | |
167 { label: 'onBeforeSendHeaders', | |
168 event: 'onBeforeSendHeaders', | |
169 details: { | |
170 url: webSocketUrl, | |
171 type: 'websocket', | |
172 }, | |
173 }, | |
174 { label: 'onSendHeaders', | |
175 event: 'onSendHeaders', | |
176 details: { | |
177 url: webSocketUrl, | |
178 type: 'websocket', | |
179 }, | |
180 }, | |
181 { label: 'onHeadersReceived', | |
182 event: 'onHeadersReceived', | |
183 details: { | |
184 url: webSocketUrl, | |
185 type: 'websocket', | |
186 statusCode: 101, | |
187 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
188 }, | |
189 retval: {redirectUrl: webSocketRedirectedUrl2} | |
190 }, | |
191 { label: 'onResponseStarted', | |
192 event: 'onResponseStarted', | |
193 details: { | |
194 url: webSocketUrl, | |
195 type: 'websocket', | |
196 ip: '127.0.0.1', | |
197 fromCache: false, | |
198 statusCode: 101, | |
199 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
200 }, | |
201 }, | |
202 { label: 'onCompleted', | |
203 event: 'onCompleted', | |
204 details: { | |
205 url: webSocketUrl, | |
206 type: 'websocket', | |
207 fromCache: false, | |
208 statusCode: 101, | |
209 statusLine: 'HTTP/1.1 101 Switching Protocols', | |
210 } | |
211 }, | |
212 ], | |
213 [ // event order | |
214 ['onBeforeRequest', 'onBeforeSendHeaders', 'onHeadersReceived', | |
215 'onResponseStarted', 'onCompleted'] | |
216 ], | |
217 {urls: ['<all_urls>']}, // filter | |
218 ['blocking'] // extraInfoSpec | |
219 ); | |
220 testWebSocketConnection(webSocketUrl); | |
221 }, | |
222 ], tab); | |
223 }); | |
OLD | NEW |