| // 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 /* expectedToConnect*/); |
| }, |
| |
| // 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 /* expectedToConnect*/); |
| }, |
| |
| // 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 /* expectedToConnect*/); |
| }, |
| |
| // 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', |
| }, |
| // Note: The test WebSocket server accepts only these credentials. |
| retval: {authCredentials: {username: 'test', password: 'test'}} |
| }, |
| { 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 /* expectedToConnect*/); |
| }, |
| ], tab); |
| }); |