Chromium Code Reviews| 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); |
| +}); |