OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 // webpagereplay/start.js - Start Web Page Replay (WPR) test. |
| 6 // |
| 7 // This script is included by webpagereplay/start.html. |
| 8 // The query parameter "test=TEST_NAME" is required to load the |
| 9 // test configuration from webpagereplay/tests/TEST_NAME.js |
| 10 // That JavaScript file defines a global, "pageSets", as a list of lists: |
| 11 // [ [url_1, url_2], [url_3], ...], |
| 12 // - Before each sublist: |
| 13 // Run chrome.browingData.remove and close the connections. |
| 14 // - Before each url in a sublist: |
| 15 // Close the connections. |
| 16 // |
| 17 // These WPR tests use a Chrome extension to load the test URLs. |
| 18 // The extension loads the test configuration via a DOM elemment |
| 19 // (id=json). This script sets the content of that DOM element. |
| 20 // |
| 21 // The test runs immediately after being loaded. |
| 22 // |
| 23 |
| 24 |
| 25 var options = location.search.substring(1).split('&'); |
| 26 function getopt(name) { |
| 27 var r = new RegExp('^' + name + '='); |
| 28 for (i = 0; i < options.length; ++i) { |
| 29 if (options[i].match(r)) { |
| 30 return options[i].substring(name.length + 1); |
| 31 } |
| 32 } |
| 33 return null; |
| 34 } |
| 35 |
| 36 function LoadTestConfigurationScript(testUrl, callback) { |
| 37 var testjs = document.createElement('script'); |
| 38 testjs.type = 'text/javascript'; |
| 39 testjs.async = true; |
| 40 testjs.src = testUrl |
| 41 var s = document.getElementsByTagName('script')[0]; |
| 42 testjs.addEventListener('load', callback, false); |
| 43 s.parentNode.insertBefore(testjs, s); |
| 44 } |
| 45 |
| 46 function ReloadIfStuck() { |
| 47 setTimeout(function() { |
| 48 var status = document.getElementById('status'); |
| 49 // The status text is set to 'STARTING' by the extension. |
| 50 if (status.textContent != 'STARTING') { |
| 51 console.log('Benchmark stuck? Reloading.'); |
| 52 window.location.reload(true); |
| 53 } |
| 54 }, 30000); |
| 55 } |
| 56 |
| 57 function RenderForm() { |
| 58 var form = document.createElement('FORM'); |
| 59 form.setAttribute('action', 'start.html'); |
| 60 |
| 61 var label = document.createTextNode('Iterations: '); |
| 62 form.appendChild(label); |
| 63 |
| 64 var input = document.createElement('INPUT'); |
| 65 var iterations = getopt('iterations'); |
| 66 input.setAttribute('name', 'iterations'); |
| 67 input.setAttribute('value', iterations ? iterations : '5'); |
| 68 form.appendChild(input); |
| 69 |
| 70 form.appendChild(document.createElement('P')); |
| 71 |
| 72 var label = document.createTextNode('Test: '); |
| 73 form.appendChild(label); |
| 74 |
| 75 var input = document.createElement('INPUT'); |
| 76 input.setAttribute('name', 'test'); |
| 77 var test = getopt('test'); |
| 78 input.setAttribute('value', test ? test : ''); |
| 79 form.appendChild(input); |
| 80 |
| 81 var input = document.createElement('INPUT'); |
| 82 input.setAttribute('name', 'auto'); |
| 83 var auto = getopt('auto'); |
| 84 input.setAttribute('value', 1); |
| 85 input.setAttribute('type', 'hidden'); |
| 86 form.appendChild(input); |
| 87 |
| 88 form.appendChild(document.createElement('P')); |
| 89 |
| 90 input = document.createElement('INPUT'); |
| 91 input.setAttribute('type', 'submit'); |
| 92 input.setAttribute('value', 'Start'); |
| 93 form.appendChild(input); |
| 94 |
| 95 document.getElementById('startform').appendChild(form); |
| 96 } |
| 97 |
| 98 |
| 99 var iterations = getopt('iterations'); |
| 100 var test_name = getopt('test'); |
| 101 var is_auto_start = getopt('auto'); |
| 102 |
| 103 RenderForm(); |
| 104 if (test_name) { |
| 105 var testUrl = 'tests/' + test_name + '.js'; |
| 106 LoadTestConfigurationScript(testUrl, function() { |
| 107 var testConfig = {}; |
| 108 if (iterations) { |
| 109 testConfig['iterations'] = iterations; |
| 110 } |
| 111 // The pageSets global is set by test configuration script. |
| 112 testConfig['pageSets'] = pageSets; |
| 113 |
| 114 if (is_auto_start) { |
| 115 testConfig['shouldStart'] = 1; |
| 116 ReloadIfStuck(); |
| 117 } |
| 118 // Write testConfig to "json" DOM element for the Chrome extension. |
| 119 document.getElementById('json').textContent = JSON.stringify(testConfig); |
| 120 }); |
| 121 } else { |
| 122 console.log('Need "test=TEST_NAME" query parameter.'); |
| 123 } |
OLD | NEW |