Chromium Code Reviews| 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 |