Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(577)

Side by Side Diff: chrome/test/data/extensions/api_test/webrequest/test_websocket.js

Issue 2449913002: Support WebSocket in WebRequest API. (Closed)
Patch Set: Fix unittest; add 'websocket' type to WebRequest API. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698