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 |