Index: chrome/test/data/extensions/api_test/webrequest/test_websocket_auth.js |
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_websocket_auth.js b/chrome/test/data/extensions/api_test/webrequest/test_websocket_auth.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2c9b14a0bf0bf00ff62b70e66979829d24950bd2 |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/webrequest/test_websocket_auth.js |
@@ -0,0 +1,331 @@ |
+// 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([ |
+ // onAuthRequired is not a blocking function. |
+ function webSocketAuthRequiredNonBlocking() { |
+ var url = getWSTestURL(testWebSocketPort); |
+ expect( |
+ [ //events |
+ { label: 'onBeforeRequest', |
+ event: 'onBeforeRequest', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ frameUrl: 'unknown frame URL', |
+ }, |
+ }, |
+ { 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: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ responseHeadersExist: true, |
+ } |
+ }, |
+ { label: 'onAuthRequired', |
+ event: 'onAuthRequired', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ isProxy: false, |
+ scheme: 'basic', |
+ realm: 'Pywebsocket', |
+ challenger: {host: 'localhost', port: testWebSocketPort}, |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ responseHeadersExist: true, |
+ } |
+ }, |
+ { label: 'onResponseStarted', |
+ event: 'onResponseStarted', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ ip: '127.0.0.1', |
+ fromCache: false, |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ responseHeadersExist: true, |
+ } |
+ }, |
+ { label: 'onErrorOccurred', |
+ event: 'onErrorOccurred', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ fromCache: false, |
+ error: 'net::ERR_ABORTED', |
+ } |
+ }, |
+ ], |
+ [ // event order |
+ ['onBeforeRequest', 'onBeforeSendHeaders', 'onSendHeaders', |
+ 'onHeadersReceived', 'onAuthRequired', 'onResponseStarted', |
+ 'onErrorOccurred'] |
+ ], |
+ {urls: ['<all_urls>']}, // filter |
+ ['responseHeaders'] // extraInfoSpec |
+ ); |
+ testWebSocketConnection(url, false); |
+ }, |
+ |
+ // onAuthRequired is a blocking function but takes no action. |
+ function webSocketAuthRequiredSyncNoAction() { |
+ var url = getWSTestURL(testWebSocketPort); |
+ expect( |
+ [ // events |
+ { label: 'onBeforeRequest', |
+ event: 'onBeforeRequest', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ frameUrl: 'unknown frame URL', |
+ } |
+ }, |
+ { 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: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onAuthRequired', |
+ event: 'onAuthRequired', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ isProxy: false, |
+ scheme: 'basic', |
+ realm: 'Pywebsocket', |
+ challenger: {host: 'localhost', port: testWebSocketPort}, |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onResponseStarted', |
+ event: 'onResponseStarted', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ fromCache: false, |
+ ip: '127.0.0.1', |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onErrorOccurred', |
+ event: 'onErrorOccurred', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ fromCache: false, |
+ error: 'net::ERR_ABORTED', |
+ } |
+ }, |
+ ], |
+ [ // event order |
+ ['onBeforeRequest', 'onBeforeSendHeaders', 'onSendHeaders', |
+ 'onHeadersReceived', 'onAuthRequired', 'onResponseStarted', |
+ 'onErrorOccurred'] |
+ ], |
+ {urls: ['<all_urls>']}, ['blocking']); |
+ testWebSocketConnection(url, false); |
+ }, |
+ |
+ // onAuthRequired is a blocking function that cancels the auth attempt. |
+ function webSocketAuthRequiredSyncCancelAuth() { |
+ var url = getWSTestURL(testWebSocketPort); |
+ expect( |
+ [ // events |
+ { label: 'onBeforeRequest', |
+ event: 'onBeforeRequest', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ frameUrl: 'unknown frame URL', |
+ } |
+ }, |
+ { 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: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onAuthRequired', |
+ event: 'onAuthRequired', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ isProxy: false, |
+ scheme: 'basic', |
+ realm: 'Pywebsocket', |
+ challenger: {host: 'localhost', port: testWebSocketPort}, |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ }, |
+ retval: {cancel: true} |
+ }, |
+ { label: 'onResponseStarted', |
+ event: 'onResponseStarted', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ fromCache: false, |
+ ip: '127.0.0.1', |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onErrorOccurred', |
+ event: 'onErrorOccurred', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ fromCache: false, |
+ error: 'net::ERR_ABORTED', |
+ } |
+ }, |
+ ], |
+ [ // event order |
+ ['onBeforeRequest', 'onBeforeSendHeaders', 'onSendHeaders', |
+ 'onHeadersReceived', 'onAuthRequired', 'onResponseStarted', |
+ 'onErrorOccurred'] |
+ ], |
+ {urls: ['<all_urls>']}, ['blocking']); |
+ testWebSocketConnection(url, false); |
+ }, |
+ |
+ // onAuthRequired is a blocking function setting authentication credentials. |
+ function webSocketAuthRequiredSyncSetAuth() { |
+ var url = getWSTestURL(testWebSocketPort); |
+ expect( |
+ [ // events |
+ { label: 'onBeforeRequest', |
+ event: 'onBeforeRequest', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ frameUrl: 'unknown frame URL', |
+ } |
+ }, |
+ { 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: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ } |
+ }, |
+ { label: 'onAuthRequired', |
+ event: 'onAuthRequired', |
+ details: { |
+ url: url, |
+ type: 'websocket', |
+ isProxy: false, |
+ scheme: 'basic', |
+ realm: 'Pywebsocket', |
+ challenger: {host: 'localhost', port: testWebSocketPort}, |
+ statusCode: 401, |
+ statusLine: 'HTTP/1.0 401 Unauthorized', |
+ }, |
+ retval: {authCredentials: {username: 'test', password: 'test'}} |
Devlin
2017/02/21 16:10:44
Do we verify anywhere if the authCredentials were
pkalinnikov
2017/02/21 19:18:16
As discussed offline, I put a comment elaborating
|
+ }, |
+ { 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', 'onAuthRequired', 'onResponseStarted', |
+ 'onCompleted'] |
+ ], |
+ {urls: ['<all_urls>']}, ['blocking']); |
+ testWebSocketConnection(url, true); |
+ }, |
+ ], tab); |
+}); |