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

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

Issue 2449913002: Support WebSocket in WebRequest API. (Closed)
Patch Set: Add tests for onAuthRequired path for WS handshake. 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/webrequest/test_websocket.js
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_websocket.js b/chrome/test/data/extensions/api_test/webrequest/test_websocket.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d2791ef98529cecf210b1245c024bbf3d036d6c
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webrequest/test_websocket.js
@@ -0,0 +1,184 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.tabs.getCurrent(function(tab) {
+ runTestsForTab([
+ // Opens a WebSocket connection, writes a message to it, and closes the
+ // connection. WebRequest API should observe the entire handshake.
+ function handshakeSucceeds() {
+ var url = getWSTestURL(testWebSocketPort);
+ expect(
+ [ //events
+ { label: 'onBeforeRequest',
+ event: 'onBeforeRequest',
+ details: {
+ url: url,
+ type: 'websocket',
+ frameUrl: 'unknown frame URL',
Devlin 2017/02/21 16:10:44 Can we not determine the url that initiated the re
pkalinnikov 2017/02/21 19:18:16 This field is not the API's thing, it is added by
Devlin 2017/02/21 20:34:11 Whoops, mistook this for url from the API. Not an
+ },
+ },
+ { label: 'onBeforeSendHeaders',
+ event: 'onBeforeSendHeaders',
+ details: {
+ url: url,
+ type: 'websocket',
+ },
+ },
+ { label: 'onSendHeaders',
+ event: 'onSendHeaders',
+ details: {
+ url: url,
+ type: 'websocket',
+ },
+ },
+ { label: 'onHeadersReceived',
+ event: 'onHeadersReceived',
+ details: {
+ url: url,
+ type: 'websocket',
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ },
+ },
+ { label: 'onResponseStarted',
+ event: 'onResponseStarted',
+ details: {
+ url: url,
+ type: 'websocket',
+ ip: '127.0.0.1',
+ fromCache: false,
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ },
+ },
+ { label: 'onCompleted',
+ event: 'onCompleted',
+ details: {
+ url: url,
+ type: 'websocket',
+ fromCache: false,
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ }
+ },
+ ],
+ [ // event order
+ ['onBeforeRequest', 'onBeforeSendHeaders', 'onSendHeaders',
+ 'onHeadersReceived', 'onResponseStarted', 'onCompleted']
+ ],
+ {urls: ['<all_urls>']}, // filter
+ ['blocking'] // extraInfoSpec
+ );
+ testWebSocketConnection(url, true);
Devlin 2017/02/21 16:10:44 document what 'true' is (same for line 108, 181)
pkalinnikov 2017/02/21 19:18:16 Done.
+ },
+
+ // Tries to open a WebSocket connection, with a blocking handler that
+ // cancels the request. The connection will not be established.
+ function handshakeRequestCancelled() {
+ var url = getWSTestURL(testWebSocketPort);
+ expect(
+ [ // events
+ { label: 'onBeforeRequest',
+ event: 'onBeforeRequest',
+ details: {
+ url: url,
+ type: 'websocket',
+ frameUrl: 'unknown frame URL',
+ },
+ retval: {cancel: true}
+ },
+ // Cancelling is considered an error.
+ { label: 'onErrorOccurred',
+ event: 'onErrorOccurred',
+ details: {
+ url: url,
+ type: 'websocket',
+ fromCache: false,
+ error: 'net::ERR_BLOCKED_BY_CLIENT'
+ }
+ },
+ ],
+ [ // event order
+ ['onBeforeRequest', 'onErrorOccurred']
+ ],
+ {urls: ['<all_urls>']}, // filter
+ ['blocking'] // extraInfoSpec
+ );
+ testWebSocketConnection(url, false);
+ },
+
+ // Opens a WebSocket connection, with a blocking handler that tries to
+ // redirect the request. The redirect will be ignored.
+ function redirectIsIgnoredAndHandshakeSucceeds() {
+ var url = getWSTestURL(testWebSocketPort);
+ var redirectedUrl1 = getWSTestURL(testWebSocketPort) + '?redirected1';
+ var redirectedUrl2 = getWSTestURL(testWebSocketPort) + '?redirected2';
+ expect(
+ [ // events
+ { label: 'onBeforeRequest',
+ event: 'onBeforeRequest',
+ details: {
+ url: url,
+ type: 'websocket',
+ frameUrl: 'unknown frame URL',
+ },
+ retval: {redirectUrl: redirectedUrl1}
+ },
+ { label: 'onBeforeSendHeaders',
+ event: 'onBeforeSendHeaders',
+ details: {
+ url: url,
+ type: 'websocket',
+ },
+ },
+ { label: 'onSendHeaders',
+ event: 'onSendHeaders',
+ details: {
+ url: url,
+ type: 'websocket',
+ },
+ },
+ { label: 'onHeadersReceived',
+ event: 'onHeadersReceived',
+ details: {
+ url: url,
+ type: 'websocket',
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ },
+ retval: {redirectUrl: redirectedUrl2}
+ },
+ { label: 'onResponseStarted',
+ event: 'onResponseStarted',
+ details: {
+ url: url,
+ type: 'websocket',
+ ip: '127.0.0.1',
+ fromCache: false,
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ },
+ },
+ { label: 'onCompleted',
+ event: 'onCompleted',
+ details: {
+ url: url,
+ type: 'websocket',
+ fromCache: false,
+ statusCode: 101,
+ statusLine: 'HTTP/1.1 101 Switching Protocols',
+ }
+ },
+ ],
+ [ // event order
+ ['onBeforeRequest', 'onBeforeSendHeaders', 'onHeadersReceived',
+ 'onResponseStarted', 'onCompleted']
+ ],
+ {urls: ['<all_urls>']}, // filter
+ ['blocking'] // extraInfoSpec
+ );
+ testWebSocketConnection(url, true);
+ },
+ ], tab);
+});

Powered by Google App Engine
This is Rietveld 408576698