124 lines
3.8 KiB
JavaScript
124 lines
3.8 KiB
JavaScript
|
// Copyright (c) 2012 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.
|
||
|
|
||
|
// webpagereplay/start.js - Start Web Page Replay (WPR) test.
|
||
|
//
|
||
|
// This script is included by webpagereplay/start.html.
|
||
|
// The query parameter "test=TEST_NAME" is required to load the
|
||
|
// test configuration from webpagereplay/tests/TEST_NAME.js
|
||
|
// That JavaScript file defines a global, "pageSets", as a list of lists:
|
||
|
// [ [url_1, url_2], [url_3], ...],
|
||
|
// - Before each sublist:
|
||
|
// Run chrome.browingData.remove and close the connections.
|
||
|
// - Before each url in a sublist:
|
||
|
// Close the connections.
|
||
|
//
|
||
|
// These WPR tests use a Chrome extension to load the test URLs.
|
||
|
// The extension loads the test configuration via a DOM elemment
|
||
|
// (id=json). This script sets the content of that DOM element.
|
||
|
//
|
||
|
// The test runs immediately after being loaded.
|
||
|
//
|
||
|
|
||
|
|
||
|
var options = location.search.substring(1).split('&');
|
||
|
function getopt(name) {
|
||
|
var r = new RegExp('^' + name + '=');
|
||
|
for (i = 0; i < options.length; ++i) {
|
||
|
if (options[i].match(r)) {
|
||
|
return options[i].substring(name.length + 1);
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
function LoadTestConfigurationScript(testUrl, callback) {
|
||
|
var testjs = document.createElement('script');
|
||
|
testjs.type = 'text/javascript';
|
||
|
testjs.async = true;
|
||
|
testjs.src = testUrl
|
||
|
var s = document.getElementsByTagName('script')[0];
|
||
|
testjs.addEventListener('load', callback, false);
|
||
|
s.parentNode.insertBefore(testjs, s);
|
||
|
}
|
||
|
|
||
|
function ReloadIfStuck() {
|
||
|
setTimeout(function() {
|
||
|
var status = document.getElementById('status');
|
||
|
// The status text is set to 'STARTING' by the extension.
|
||
|
if (status.textContent != 'STARTING') {
|
||
|
console.log('Benchmark stuck? Reloading.');
|
||
|
window.location.reload(true);
|
||
|
}
|
||
|
}, 30000);
|
||
|
}
|
||
|
|
||
|
function RenderForm() {
|
||
|
var form = document.createElement('FORM');
|
||
|
form.setAttribute('action', 'start.html');
|
||
|
|
||
|
var label = document.createTextNode('Iterations: ');
|
||
|
form.appendChild(label);
|
||
|
|
||
|
var input = document.createElement('INPUT');
|
||
|
var iterations = getopt('iterations');
|
||
|
input.setAttribute('name', 'iterations');
|
||
|
input.setAttribute('value', iterations ? iterations : '5');
|
||
|
form.appendChild(input);
|
||
|
|
||
|
form.appendChild(document.createElement('P'));
|
||
|
|
||
|
var label = document.createTextNode('Test: ');
|
||
|
form.appendChild(label);
|
||
|
|
||
|
var input = document.createElement('INPUT');
|
||
|
input.setAttribute('name', 'test');
|
||
|
var test = getopt('test');
|
||
|
input.setAttribute('value', test ? test : '');
|
||
|
form.appendChild(input);
|
||
|
|
||
|
var input = document.createElement('INPUT');
|
||
|
input.setAttribute('name', 'auto');
|
||
|
var auto = getopt('auto');
|
||
|
input.setAttribute('value', 1);
|
||
|
input.setAttribute('type', 'hidden');
|
||
|
form.appendChild(input);
|
||
|
|
||
|
form.appendChild(document.createElement('P'));
|
||
|
|
||
|
input = document.createElement('INPUT');
|
||
|
input.setAttribute('type', 'submit');
|
||
|
input.setAttribute('value', 'Start');
|
||
|
form.appendChild(input);
|
||
|
|
||
|
document.getElementById('startform').appendChild(form);
|
||
|
}
|
||
|
|
||
|
|
||
|
var iterations = getopt('iterations');
|
||
|
var test_name = getopt('test');
|
||
|
var is_auto_start = getopt('auto');
|
||
|
|
||
|
RenderForm();
|
||
|
if (test_name) {
|
||
|
var testUrl = 'tests/' + test_name + '.js';
|
||
|
LoadTestConfigurationScript(testUrl, function() {
|
||
|
var testConfig = {};
|
||
|
if (iterations) {
|
||
|
testConfig['iterations'] = iterations;
|
||
|
}
|
||
|
// The pageSets global is set by test configuration script.
|
||
|
testConfig['pageSets'] = pageSets;
|
||
|
|
||
|
if (is_auto_start) {
|
||
|
testConfig['shouldStart'] = 1;
|
||
|
ReloadIfStuck();
|
||
|
}
|
||
|
// Write testConfig to "json" DOM element for the Chrome extension.
|
||
|
document.getElementById('json').textContent = JSON.stringify(testConfig);
|
||
|
});
|
||
|
} else {
|
||
|
console.log('Need "test=TEST_NAME" query parameter.');
|
||
|
}
|