1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/** 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * This view displays the progress and results from the "connection tester". 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * - Has an input box to specify the URL. 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * - Has a button to start running the tests. 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * - Shows the set of experiments that have been run so far, and their 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * result. 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * @constructor 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochfunction TestView(mainBoxId, urlInputId, formId, summaryDivId) { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DivView.call(this, mainBoxId); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.urlInput_ = document.getElementById(urlInputId); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.summaryDiv_ = document.getElementById(summaryDivId); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var form = document.getElementById(formId); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch form.addEventListener('submit', this.onSubmitForm_.bind(this), false); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_browser.addConnectionTestsObserver(this); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinherits(TestView, DivView); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestView.prototype.onSubmitForm_ = function(event) { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_browser.sendStartConnectionTests(this.urlInput_.value); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch event.preventDefault(); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/** 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Callback for when the connection tests have begun. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestView.prototype.onStartedConnectionTestSuite = function() { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.summaryDiv_.innerHTML = ''; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var p = addNode(this.summaryDiv_, 'p'); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(p, 'Started connection test suite suite on ' + 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (new Date()).toLocaleString()); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add a table that will hold the individual test results. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var table = addNode(this.summaryDiv_, 'table'); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch table.className = 'styledTable'; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var thead = addNode(table, 'thead'); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch thead.innerHTML = '<tr><th>Result</th><th>Experiment</th>' + 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch '<th>Error</th><th>Time (ms)</th></tr>'; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.tbody_ = addNode(table, 'tbody'); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/** 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Callback for when an individual test in the suite has begun. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestView.prototype.onStartedConnectionTestExperiment = function(experiment) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var tr = addNode(this.tbody_, 'tr'); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var passFailCell = addNode(tr, 'td'); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var experimentCell = addNode(tr, 'td'); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var resultCell = addNode(tr, 'td'); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(resultCell, '?'); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var dtCell = addNode(tr, 'td'); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(dtCell, '?'); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We will fill in result cells with actual values (to replace the 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // placeholder '?') once the test has completed. For now we just 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // save references to these cells. 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.currentExperimentRow_ = { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch experimentCell: experimentCell, 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dtCell: dtCell, 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch resultCell: resultCell, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch passFailCell: passFailCell, 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch startTime: (new Date()).getTime() 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(experimentCell, 'Fetch ' + experiment.url); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (experiment.proxy_settings_experiment || 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch experiment.host_resolver_experiment) { 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var ul = addNode(experimentCell, 'ul'); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (experiment.proxy_settings_experiment) { 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var li = addNode(ul, 'li'); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(li, experiment.proxy_settings_experiment); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (experiment.host_resolver_experiment) { 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var li = addNode(ul, 'li'); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(li, experiment.host_resolver_experiment); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/** 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Callback for when an individual test in the suite has finished. 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestView.prototype.onCompletedConnectionTestExperiment = function( 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch experiment, result) { 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var r = this.currentExperimentRow_; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var endTime = (new Date()).getTime(); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch r.dtCell.innerHTML = ''; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(r.dtCell, (endTime - r.startTime)); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch r.resultCell.innerHTML = ''; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (result == 0) { 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch r.passFailCell.style.color = 'green'; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(r.passFailCell, 'PASS'); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(eroman): stringize the error code. 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(r.resultCell, result); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch r.passFailCell.style.color = 'red'; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(r.passFailCell, 'FAIL'); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this.currentExperimentRow_ = null; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/** 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Callback for when the last test in the suite has finished. 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTestView.prototype.onCompletedConnectionTestSuite = function() { 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch var p = addNode(this.summaryDiv_, 'p'); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch addTextNode(p, 'Completed connection test suite suite'); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134