// Copyright (c) 2010 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. /** * This view displays the progress and results from the "connection tester". * * - Has an input box to specify the URL. * - Has a button to start running the tests. * - Shows the set of experiments that have been run so far, and their * result. * * @constructor */ function TestView(mainBoxId, urlInputId, formId, summaryDivId) { DivView.call(this, mainBoxId); this.urlInput_ = document.getElementById(urlInputId); this.summaryDiv_ = document.getElementById(summaryDivId); var form = document.getElementById(formId); form.addEventListener('submit', this.onSubmitForm_.bind(this), false); g_browser.addConnectionTestsObserver(this); } inherits(TestView, DivView); TestView.prototype.onSubmitForm_ = function(event) { g_browser.sendStartConnectionTests(this.urlInput_.value); event.preventDefault(); }; /** * Callback for when the connection tests have begun. */ TestView.prototype.onStartedConnectionTestSuite = function() { this.summaryDiv_.innerHTML = ''; var p = addNode(this.summaryDiv_, 'p'); addTextNode(p, 'Started connection test suite suite on ' + (new Date()).toLocaleString()); // Add a table that will hold the individual test results. var table = addNode(this.summaryDiv_, 'table'); table.className = 'styledTable'; var thead = addNode(table, 'thead'); thead.innerHTML = '<tr><th>Result</th><th>Experiment</th>' + '<th>Error</th><th>Time (ms)</th></tr>'; this.tbody_ = addNode(table, 'tbody'); }; /** * Callback for when an individual test in the suite has begun. */ TestView.prototype.onStartedConnectionTestExperiment = function(experiment) { var tr = addNode(this.tbody_, 'tr'); var passFailCell = addNode(tr, 'td'); var experimentCell = addNode(tr, 'td'); var resultCell = addNode(tr, 'td'); addTextNode(resultCell, '?'); var dtCell = addNode(tr, 'td'); addTextNode(dtCell, '?'); // We will fill in result cells with actual values (to replace the // placeholder '?') once the test has completed. For now we just // save references to these cells. this.currentExperimentRow_ = { experimentCell: experimentCell, dtCell: dtCell, resultCell: resultCell, passFailCell: passFailCell, startTime: (new Date()).getTime() }; addTextNode(experimentCell, 'Fetch ' + experiment.url); if (experiment.proxy_settings_experiment || experiment.host_resolver_experiment) { var ul = addNode(experimentCell, 'ul'); if (experiment.proxy_settings_experiment) { var li = addNode(ul, 'li'); addTextNode(li, experiment.proxy_settings_experiment); } if (experiment.host_resolver_experiment) { var li = addNode(ul, 'li'); addTextNode(li, experiment.host_resolver_experiment); } } }; /** * Callback for when an individual test in the suite has finished. */ TestView.prototype.onCompletedConnectionTestExperiment = function( experiment, result) { var r = this.currentExperimentRow_; var endTime = (new Date()).getTime(); r.dtCell.innerHTML = ''; addTextNode(r.dtCell, (endTime - r.startTime)); r.resultCell.innerHTML = ''; if (result == 0) { r.passFailCell.style.color = 'green'; addTextNode(r.passFailCell, 'PASS'); } else { // TODO(eroman): stringize the error code. addTextNode(r.resultCell, result); r.passFailCell.style.color = 'red'; addTextNode(r.passFailCell, 'FAIL'); } this.currentExperimentRow_ = null; }; /** * Callback for when the last test in the suite has finished. */ TestView.prototype.onCompletedConnectionTestSuite = function() { var p = addNode(this.summaryDiv_, 'p'); addTextNode(p, 'Completed connection test suite suite'); };