blob: 87c8198b5d913210cf4ef2f903ddb8e1e2c9fa9c [file] [log] [blame]
// 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',
// TODO(pkalinnikov): Figure out why the frame URL is unknown.
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: 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 /* expectedToConnect*/);
},
// 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 /* expectedToConnect*/);
},
// 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 /* expectedToConnect*/);
},
], tab);
});