Commit 49da6702 authored by Peter Kvitek's avatar Peter Kvitek Committed by Commit Bot

Implemented headless browser redirection tests.

Change-Id: I1e772fc31ede9a85d6cea1726c3c7fa9d3cd34ca
Reviewed-on: https://chromium-review.googlesource.com/1147741Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Commit-Queue: Peter Kvitek <kvitekp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578737}
parent d858be33
......@@ -99,7 +99,7 @@
}
getFrameId_(frameId) {
return frameId === this.mainFrameId_ ? 'MainFrame' : frameId
return frameId === this.mainFrameId_ ? 'MainFrame' : `<${typeof frameId}>`
}
});
......@@ -15,7 +15,10 @@
constructor(testRunner, dp) {
this.testRunner_ = testRunner;
this.dp_ = dp;
this.disabledRequestedUrlsLogging = false;
this.responses_ = new Map();
this.requestedUrls_ = [];
this.requestedMethods_ = [];
}
/**
......@@ -29,9 +32,17 @@
{ patterns: [{ urlPattern: '*' }] });
this.dp_.Network.onRequestIntercepted(event => {
const url = event.params.request.url;
const method = event.params.request.method;
this.requestedMethods_.push(method);
const url = event.params.request.url
+ (event.params.request.urlFragment || '');
this.requestedUrls_.push(url);
if (this.responses_.has(url)) {
this.testRunner_.log(`requested url: ${url}`);
if (!this.disabledRequestedUrlsLogging) {
this.testRunner_.log(`requested url: ${url}`);
}
} else {
this.testRunner_.log(`requested url: ${url} is not known`);
this.logResponses();
......@@ -48,15 +59,74 @@
return this;
}
/**
* Prevents requested urls from being logged. This helps to stabilize tests
* that request urls in arbitrary order. Use hasRequestedUrls(urls) function
* to check if expected urls has been requested.
*
* @param {boolean} value True if requested url logging is disabled, false
* otherwise.
*/
setDisableRequestedUrlsLogging(value) {
this.disabledRequestedUrlsLogging = value;
}
/**
* Adds request response.
*
* @param {!string} url Request url, including #fragment.
* @param {?string} body Request response body, optional.
* @param {?[string]} headers Request response headers, optional.
*/
addResponse(url, body, headers) {
this.responses_.set(url, {body, headers});
}
/**
* Logs registered request responses.
*/
logResponses() {
this.testRunner_.log(`Responses: ${this.responses_.size}`);
for (const [url, value] of this.responses_.entries()) {
this.testRunner_.log(
`url=${url}\nbody=${value.body}\nheaders=${value.headers}`);
}
}
/**
* Logs requested methods in the order requests have been received.
*/
logRequestedMethods() {
this.testRunner_.log(`Requested methods: ${this.requestedMethods_.length}`);
for (const method of this.requestedMethods_) {
this.testRunner_.log(` ${method}`);
}
}
/**
* Logs requested urls in the order requests have been received.
*/
logRequestedUrls() {
this.testRunner_.log(`Requested urls: ${this.requestedUrls_.length}`);
for (const url of this.requestedUrls_) {
this.testRunner_.log(` ${url}`);
}
}
/**
* Checks if specified urls have been requested.
*
* @param {[string]} urls Array of urls to check against requested urls.
*/
hasRequestedUrls(urls) {
this.testRunner_.log(`Expected requested urls:`);
for (const url of urls) {
if (this.requestedUrls_.indexOf(url) >= 0) {
this.testRunner_.log(` ${url}`);
} else {
this.testRunner_.log(` ${url} is MISSING`);
}
}
}
});
......@@ -24,7 +24,6 @@
* virtualTimeController references.
*/
async init() {
await this.dp_.Target.enable();
await this.dp_.Page.enable();
let HttpInterceptor = await this.testRunner_.loadScript(
......@@ -45,6 +44,12 @@
let virtualTimeController =
new VirtualTimeController(this.testRunner_, this.dp_, 25);
this.dp_.Runtime.enable();
this.dp_.Runtime.onConsoleAPICalled(data => {
const text = data.params.args[0].value;
this.testRunner_.log(text);
});
return {httpInterceptor, frameNavigationHelper, virtualTimeController};
}
......
......@@ -11,12 +11,6 @@
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
dp.Runtime.enable();
dp.Runtime.onConsoleAPICalled(data => {
const text = data.params.args[0].value;
testRunner.log(text);
});
// Only first 3 scripts of 4 on the page are white listed for execution.
// Therefore only 3 lines in the log are expected.
httpInterceptor.addResponse(`http://example.com/`,
......
Tests renderer: canvas.
requested url: http://www.example.com/
requested url: http://www.example.com/circle.svg
requested url: http://www.example.com/blur.svg
requested url: http://www.example.com/blur.svg#blur
Screenshot size: 100 x 100
rgba @(0,0): 163,163,163,255
rgba @(1,1): 222,225,231,255
......
......@@ -46,7 +46,7 @@
// A blur filter stored inside an svg file.
httpInterceptor.addResponse(
`http://www.example.com/blur.svg`,
`http://www.example.com/blur.svg#blur`,
`<svg width="100" height="100" version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
......
Tests renderer: double redirection.
requested url: http://www.example.com/
requested url: http://www.example.com/2
<p>Pass</p>
Frames: 1
frameId=MainFrame
url=http://www.example.com/
url=http://www.example.com/2
ScheduledNavigations: 1
frameId=MainFrame
url=http://www.example.com/1 reason=scriptInitiated
url=http://www.example.com/2 reason=scriptInitiated
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: double redirection.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
// Two navigations have been scheduled while the document was loading, but
// only the second one was started. It canceled the first one.
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<head>
<title>Hello, World 1</title>
<script>
document.location='http://www.example.com/1';
document.location='http://www.example.com/2';
</script>
</head>
<body>http://www.example.com/1</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/2',
'<p>Pass</p>');
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: frame load events.
FRAME A 1
IFRAME 1
Frames: 4
frameId=MainFrame
url=http://example.com/1
frameId=<string>
url=http://example.com/frameA/
url=http://example.com/frameA/1
frameId=<string>
url=http://example.com/frameB/
url=http://example.com/frameB/1
frameId=<string>
url=http://example.com/frameB/1/iframe/
url=http://example.com/frameB/1/iframe/1
ScheduledNavigations: 3
frameId=<string>
url=http://example.com/frameA/1 reason=scriptInitiated
frameId=<string>
url=http://example.com/frameB/1 reason=scriptInitiated
frameId=<string>
url=http://example.com/frameB/1/iframe/1 reason=scriptInitiated
Expected requested urls:
http://example.com/
http://example.com/1
http://example.com/frameA/
http://example.com/frameA/1
http://example.com/frameB/
http://example.com/frameB/1
http://example.com/frameB/1/iframe/
http://example.com/frameB/1/iframe/1
\ No newline at end of file
......@@ -4,7 +4,7 @@
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: content security policy.');
'Tests renderer: frame load events.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
......@@ -16,8 +16,8 @@
httpInterceptor.addResponse(`http://example.com/1`,
`<html><frameset>
<frame src="http://example.com/frameA/" id="frameA">
<frame src="http://example.com/frameB/" id="frameB">
<frame id="frameA" src="http://example.com/frameA/">
<frame id="frameB" src="http://example.com/frameB/">
</frameset></html>`);
httpInterceptor.addResponse(`http://example.com/frameA/`,
......@@ -35,7 +35,7 @@
httpInterceptor.addResponse(`http://example.com/frameB/1`,
`<html><body>FRAME B 1
<iframe src="http://example.com/frameB/1/iframe/" id="iframe"></iframe>
<iframe id="iframe" src="http://example.com/frameB/1/iframe/"></iframe>
</body></html>`);
httpInterceptor.addResponse(`http://example.com/frameB/1/iframe/`,
......@@ -46,12 +46,33 @@
httpInterceptor.addResponse(`http://example.com/frameB/1/iframe/1`,
`<html><body>IFRAME 1</body><html>`);
// Frame redirection requests are handled in an arbitrary order, so disable
// requested url logging to ensure test's stability.
httpInterceptor.setDisableRequestedUrlsLogging(true);
await virtualTimeController.grantInitialTime(500, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.log(await session.evaluate(
`document.getElementById('frameA').contentDocument.body.innerText`));
testRunner.log(await session.evaluate(
`document.getElementById('frameB').contentDocument.` +
`getElementById('iframe').contentDocument.body.innerHTML`));
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
httpInterceptor.hasRequestedUrls([
'http://example.com/',
'http://example.com/1',
'http://example.com/frameA/',
'http://example.com/frameA/1',
'http://example.com/frameB/',
'http://example.com/frameB/1',
'http://example.com/frameB/1/iframe/',
'http://example.com/frameB/1/iframe/1'
]);
testRunner.completeTest();
}
);
......
Tests renderer: frames redirection chain.
<p>FRAME A</p>
<p>IFRAME B</p>
Frames: 4
frameId=MainFrame
url=http://www.example.com/1
frameId=<string>
url=http://www.example.com/frameA/
url=http://www.example.com/frameA/2
frameId=<string>
url=http://www.example.com/frameB/
frameId=<string>
url=http://www.example.com/iframe/
url=http://www.example.com/iframe/3
ScheduledNavigations: 2
frameId=<string>
url=http://www.example.com/frameA/1 reason=scriptInitiated
frameId=<string>
url=http://www.example.com/iframe/1 reason=scriptInitiated
Expected requested urls:
http://www.example.com/
http://www.example.com/1
http://www.example.com/frameA/
http://www.example.com/frameA/1
http://www.example.com/frameA/2
http://www.example.com/frameB/
http://www.example.com/iframe/
http://www.example.com/iframe/1
http://www.example.com/iframe/2
http://www.example.com/iframe/3
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: frames redirection chain.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found', 'Location: http://www.example.com/1']);
httpInterceptor.addResponse('http://www.example.com/1',
`<html>
<frameset>
<frame id="frameA" src='http://www.example.com/frameA/'>
<frame id="frameB" src='http://www.example.com/frameB/'>
</frameset>
</html>`);
// Frame A
httpInterceptor.addResponse('http://www.example.com/frameA/',
`<html>
<head>
<script>document.location='http://www.example.com/frameA/1'</script>
</head>
<body>HELLO WORLD 1</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/frameA/1', null,
['HTTP/1.1 301 Moved', 'Location: /frameA/2']);
httpInterceptor.addResponse('http://www.example.com/frameA/2',
`<p>FRAME A</p>`);
// Frame B
httpInterceptor.addResponse('http://www.example.com/frameB/',
`<html>
<head><title>HELLO WORLD 2</title></head>
<body>
<iframe id="iframe" src='http://www.example.com/iframe/'></iframe>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/iframe/',
`<html>
<head>
<script>document.location='http://www.example.com/iframe/1'</script>
</head>
<body>HELLO WORLD 1</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/iframe/1', null,
['HTTP/1.1 302 Found', 'Location: /iframe/2']);
httpInterceptor.addResponse('http://www.example.com/iframe/2', null,
['HTTP/1.1 301 Moved', 'Location: 3']);
httpInterceptor.addResponse('http://www.example.com/iframe/3',
`<p>IFRAME B</p>`);
// Frame redirection requests are handled in an arbitrary order, so disable
// requested url logging to ensure test's stability.
httpInterceptor.setDisableRequestedUrlsLogging(true);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate(
`document.getElementById('frameA').contentDocument.body.innerHTML`));
testRunner.log(await session.evaluate(
`document.getElementById('frameB').contentDocument.` +
`getElementById('iframe').contentDocument.body.innerHTML`));
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
httpInterceptor.hasRequestedUrls([
'http://www.example.com/',
'http://www.example.com/1',
'http://www.example.com/frameA/',
'http://www.example.com/frameA/1',
'http://www.example.com/frameA/2',
'http://www.example.com/frameB/',
'http://www.example.com/iframe/',
'http://www.example.com/iframe/1',
'http://www.example.com/iframe/2',
'http://www.example.com/iframe/3']);
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: in cross origin object.
requested url: http://foo.com/
requested url: http://bar.com/
Blocked a frame with origin "http://foo.com" from accessing a cross-origin frame.
Pass
\ No newline at end of file
......@@ -11,12 +11,6 @@
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
dp.Runtime.enable();
dp.Runtime.onConsoleAPICalled(data => {
const text = data.params.args[0].value;
testRunner.log(text);
});
httpInterceptor.addResponse(
`http://foo.com/`,
`<html>
......@@ -24,11 +18,10 @@
<iframe id='myframe' src='http://bar.com/'></iframe>
<script>
window.onload = function() {
console.log('onLoad');
try {
var a = 0 in document.getElementById('myframe').contentWindow;
} catch (e) {
console.log('caught: ' + e.message);
console.log(e.message);
}
};
</script>
......@@ -43,7 +36,6 @@
await virtualTimeController.grantInitialTime(500, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.title'));
testRunner.log(await session.evaluate('document.body.innerText'));
testRunner.completeTest();
}
......
......@@ -36,13 +36,6 @@
</body>
</html>`);
await dp.Runtime.enable();
dp.Runtime.onConsoleAPICalled(data => {
const text = data.params.args[0].value;
testRunner.log(`${text}`);
});
dp.Runtime.onExceptionThrown(data => {
const details = data.params.exceptionDetails;
testRunner.log(
......
Tests renderer: mixed redirection chain.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
requested url: http://www.example.com/3
requested url: http://www.example.com/4
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: mixed redirection chain.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<head>
<meta http-equiv="refresh" content="0; url=http://www.example.com/1"/>
<title>Hello, World 0</title>
</head>
<body>http://www.example.com/</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1',
`<html>
<head>
<title>Hello, World 1</title>
<script>
document.location='http://www.example.com/2';
</script>
</head>
<body>http://www.example.com/1</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/2', null,
['HTTP/1.1 302 Found', 'Location: 3']);
httpInterceptor.addResponse('http://www.example.com/3', null,
['HTTP/1.1 301 Moved', 'Location: http://www.example.com/4']);
httpInterceptor.addResponse('http://www.example.com/4',
`<p>Pass</p>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect 303 put get.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
<p>Pass</p>
Requested methods: 3
GET
PUT
GET
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect 303 put get.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<head>
<script>
function doPut() {
var xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://www.example.com/1');
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.addEventListener('load', function() {
document.getElementById('content').textContent =
this.responseText;
});
xhr.send('some data');
}
</script>
</head>
<body onload='doPut();'>
<p id="content"></p>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 303 See Other', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2',
'<p>Pass</p>',
['Content-Type: text/plain']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerText'));
httpInterceptor.logRequestedMethods();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirection 307 post method.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
<p>Pass</p>
Requested methods: 3
GET
POST
POST
Frames: 1
frameId=MainFrame
url=http://www.example.com/
url=http://www.example.com/2
ScheduledNavigations: 1
frameId=MainFrame
url=http://www.example.com/1 reason=formSubmissionPost
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirection 307 post method.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<body onload='document.forms[0].submit();'>
<form action='1' method='post'>
<input name='foo' value='bar'>
</form>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 307 Temporary Redirect', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2',
'<p>Pass</p>');
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
httpInterceptor.logRequestedMethods();
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect 307 put method.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
<p>Pass</p>
Requested methods: 3
GET
PUT
PUT
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect 307 put method.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<head>
<script>
function doPut() {
var xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://www.example.com/1');
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.addEventListener('load', function() {
document.getElementById('content').textContent =
this.responseText;
});
xhr.send('some data');
}
</script>
</head>
<body onload='doPut();'>
<p id="content"></p>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 307 Temporary Redirect', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2',
'<p>Pass</p>',
['Content-Type: text/plain']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerText'));
httpInterceptor.logRequestedMethods();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirection after completion.
requested url: http://www.example.com/
<p>Pass</p>
Frames: 1
frameId=MainFrame
url=http://www.example.com/
ScheduledNavigations: 1
frameId=MainFrame
url=http://www.example.com/1 reason=metaTagRefresh
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirection after completion.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
// While the document was loading, one navigation has been scheduled, but
// because of the timeout, it has not been started yet.
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<head>
<meta http-equiv='refresh'
content='120; url=http://www.example.com/1'>
</head>
<body><p>Pass</p></body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1',
'<p>FAIL</p>');
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect base url.
requested url: http://foo.com/
requested url: http://bar.com/
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect base url.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://foo.com/', null,
['HTTP/1.1 302 Found', 'Location: http://bar.com/']);
httpInterceptor.addResponse('http://bar.com/',
`<p>Pass</p>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://foo.com/');
})
Tests renderer: redirect empty url.
requested url: http://www.example.com/
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect empty url.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<!DOCTYPE html><p>Pass</p>`,
['HTTP/1.1 302 Found',
'Location: ',
'Content-Type: text/html']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect invalid url.
requested url: http://www.example.com/
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect invalid url.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<!DOCTYPE html><p>Pass</p>`,
['HTTP/1.1 302 Found', 'Location: http://']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect keeps fragment.
requested url: http://www.example.com/#foo
requested url: http://www.example.com/1#foo
requested url: http://www.example.com/2#foo
http://www.example.com/2#foo
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect keeps fragment.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/#foo', null,
['HTTP/1.1 302 Found', 'Location: /1']);
httpInterceptor.addResponse('http://www.example.com/1#foo', null,
['HTTP/1.1 302 Found', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2#foo',
`<html>
<body>
<p id="content"></p>
<script>
document.getElementById('content').textContent =
window.location.href;
</script>
</body>
</html>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate(
`document.getElementById('content').innerText`));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/#foo');
})
Tests renderer: redirect new fragment.
requested url: http://www.example.com/
requested url: http://www.example.com/1#foo
requested url: http://www.example.com/2#foo
http://www.example.com/2#foo
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect new fragment.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found', 'Location: /1#foo']);
httpInterceptor.addResponse('http://www.example.com/1#foo', null,
['HTTP/1.1 302 Found', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2#foo',
`<html>
<body>
<p id="content"></p>
<script>
document.getElementById('content').textContent =
window.location.href;
</script>
</body>
</html>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate(
`document.getElementById('content').innerText`));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect non ascii url.
requested url: http://www.example.com/
requested url: http://www.example.com/%E4%B8%AD%E6%96%87
requested url: http://www.example.com/pass#%E4%B8%AD%E6%96%87
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect non ascii url.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
// "中文" is 0xE4 0xB8 0xAD, 0xE6 0x96 0x87
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found',
'Location: http://www.example.com/%E4%B8%AD%E6%96%87']);
httpInterceptor.addResponse('http://www.example.com/%E4%B8%AD%E6%96%87', null,
['HTTP/1.1 303 Moved',
'Location: http://www.example.com/pass#%E4%B8%AD%E6%96%87']);
httpInterceptor.addResponse('http://www.example.com/pass#%E4%B8%AD%E6%96%87',
`<p>Pass</p>`);
httpInterceptor.addResponse(
'http://www.example.com/%C3%A4%C2%B8%C2%AD%C3%A6%C2%96%C2%87',
`Fail`,
['HTTP/1.1 500 Bad Response', 'Content-Type: text/html']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: post chain redirection.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
requested url: http://www.example.com/3
requested url: http://www.example.com/4
<p>Pass</p>
Requested methods: 5
GET
POST
POST
POST
POST
Frames: 1
frameId=MainFrame
url=http://www.example.com/
url=http://www.example.com/2
url=http://www.example.com/4
ScheduledNavigations: 1
frameId=MainFrame
url=http://www.example.com/1 reason=formSubmissionPost
url=http://www.example.com/3 reason=formSubmissionPost
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: post chain redirection.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/',
`<html>
<body onload='document.forms[0].submit();'>
<form action='1' method='post'>
<input name='foo' value='bar'>
</form>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 307 Temporary Redirect', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2',
`<html>
<body onload='document.forms[0].submit();'>
<form action='3' method='post'>
</form>
</body>
</html>`);
httpInterceptor.addResponse('http://www.example.com/3', null,
['HTTP/1.1 307 Temporary Redirect', 'Location: /4']);
httpInterceptor.addResponse('http://www.example.com/4',
'<p>Pass</p>');
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
httpInterceptor.logRequestedMethods();
frameNavigationHelper.logFrames();
frameNavigationHelper.logScheduledNavigations();
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: redirect replaces fragment.
requested url: http://www.example.com/#foo
requested url: http://www.example.com/1#bar
requested url: http://www.example.com/2#bar
http://www.example.com/2#bar
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: redirect replaces fragment.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/#foo', null,
['HTTP/1.1 302 Found', 'Location: /1#bar']);
httpInterceptor.addResponse('http://www.example.com/1#bar', null,
['HTTP/1.1 302 Found', 'Location: /2']);
httpInterceptor.addResponse('http://www.example.com/2#bar',
`<html>
<body>
<p id="content"></p>
<script>
document.getElementById('content').textContent =
window.location.href;
</script>
</body>
</html>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate(
`document.getElementById('content').innerText`));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/#foo');
})
Tests renderer: server redirection chain.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/2
requested url: http://www.example.com/3
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: server redirection chain.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found', 'Location: http://www.example.com/1']);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 301 Moved', 'Location: http://www.example.com/2']);
httpInterceptor.addResponse('http://www.example.com/2', null,
['HTTP/1.1 302 Found', 'Location: http://www.example.com/3']);
httpInterceptor.addResponse('http://www.example.com/3',
'<p>Pass</p>');
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: relative server redirection chain.
requested url: http://www.example.com/
requested url: http://www.mysite.com/1
requested url: http://www.mysite.com/2
<p>Pass</p>
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: relative server redirection chain.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found', 'Location: http://www.mysite.com/1']);
httpInterceptor.addResponse('http://www.mysite.com/1', null,
['HTTP/1.1 301 Moved', 'Location: /2']);
httpInterceptor.addResponse('http://www.mysite.com/2',
`<p>Pass</p>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate('document.body.innerHTML'));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: server redirection to failure.
requested url: http://www.example.com/
requested url: http://www.example.com/1
requested url: http://www.example.com/FAIL
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: server redirection to failure.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/', null,
['HTTP/1.1 302 Found', 'Location: http://www.example.com/1']);
httpInterceptor.addResponse('http://www.example.com/1', null,
['HTTP/1.1 302 Found', 'Location: http://www.example.com/FAIL']);
httpInterceptor.addResponse('http://www.example.com/FAIL', null,
['HTTP/1.1 404 Not Found']);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/');
})
Tests renderer: window location fragments.
requested url: http://www.example.com/#fragment1
requested url: http://www.example.com/iframe#fragment2
requested url: http://www.example.com/pass
Pass
\ No newline at end of file
// Copyright 2018 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.
(async function(testRunner) {
let {page, session, dp} = await testRunner.startBlank(
'Tests renderer: window location fragments.');
let RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
httpInterceptor.addResponse('http://www.example.com/#fragment1',
`<script>
if (window.location.hash == '#fragment1') {
document.write('<iframe id="frame" src="iframe#fragment2"></iframe>');
}
</script>`);
httpInterceptor.addResponse('http://www.example.com/iframe#fragment2',
`<script>
if (window.location.hash == '#fragment2') {
document.location = 'http://www.example.com/pass';
}
</script>)`);
httpInterceptor.addResponse('http://www.example.com/pass',
`<p>Pass</p>`);
await virtualTimeController.grantInitialTime(1000, 1000,
null,
async () => {
testRunner.log(await session.evaluate(
`document.getElementById('frame').contentDocument.body.innerText`));
testRunner.completeTest();
}
);
await frameNavigationHelper.navigate('http://www.example.com/#fragment1');
})
......@@ -341,6 +341,50 @@ HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererClientRedirectChain,
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererClientRedirectChainNoJs,
"sanity/renderer-client-redirect-chain-no-js.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererServerRedirectChain,
"sanity/renderer-server-redirect-chain.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererServerRedirectToFailure,
"sanity/renderer-server-redirect-to-failure.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererServerRedirectRelativeChain,
"sanity/renderer-server-redirect-relative-chain.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererMixedRedirectChain,
"sanity/renderer-mixed-redirect-chain.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererFramesRedirectChain,
"sanity/renderer-frames-redirect-chain.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererDoubleRedirect,
"sanity/renderer-double-redirect.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererRedirectAfterCompletion,
"sanity/renderer-redirect-after-completion.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererRedirect307PostMethod,
"sanity/renderer-redirect-307-post-method.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectPostChain,
"sanity/renderer-redirect-post-chain.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirect307PutMethod,
"sanity/renderer-redirect-307-put-method.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirect303PutGet,
"sanity/renderer-redirect-303-put-get.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectBaseUrl,
"sanity/renderer-redirect-base-url.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectNonAsciiUrl,
"sanity/renderer-redirect-non-ascii-url.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectEmptyUrl,
"sanity/renderer-redirect-empty-url.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectInvalidUrl,
"sanity/renderer-redirect-invalid-url.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectKeepsFragment,
"sanity/renderer-redirect-keeps-fragment.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererRedirectReplacesFragment,
"sanity/renderer-redirect-replaces-fragment.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererRedirectNewFragment,
"sanity/renderer-redirect-new-fragment.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
RendererWindowLocationFragments,
"sanity/renderer-window-location-fragments.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererCookieSetFromJs,
"sanity/renderer-cookie-set-from-js.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(
......@@ -348,16 +392,13 @@ HEADLESS_PROTOCOL_COMPOSITOR_TEST(
"sanity/renderer-cookie-set-from-js-no-cookies.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererCookieUpdatedFromJs,
"sanity/renderer-cookie-updated-from-js.js");
// TODO(kvitekp): investigating...
HEADLESS_PROTOCOL_COMPOSITOR_TEST(DISABLED_RendererInCrossOriginObject,
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererInCrossOriginObject,
"sanity/renderer-in-cross-origin-object.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererContentSecurityPolicy,
"sanity/renderer-content-security-policy.js");
// TODO(crbug.com/867274): frame navigation is currently broken.
HEADLESS_PROTOCOL_COMPOSITOR_TEST(DISABLED_RendererFrameLoadEvents,
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererFrameLoadEvents,
"sanity/renderer-frame-load-events.js");
HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererCssUrlFilter,
"sanity/renderer-css-url-filter.js");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment