| 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.'); | 
| +} | 
|  |