Index: tools/page_cycler/webpagereplay/start.js |
diff --git a/tools/page_cycler/webpagereplay/start.js b/tools/page_cycler/webpagereplay/start.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6ff5e6dc9c6c216feb23968d1cc72e1fccc649df |
--- /dev/null |
+++ b/tools/page_cycler/webpagereplay/start.js |
@@ -0,0 +1,123 @@ |
+// 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.'); |
+} |