blob: a902bd0c2fa58664d93af1bdfe75aa77dd5262db [file] [log] [blame]
// 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.
/**
* 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.
*/
var TestView = (function() {
'use strict';
// We inherit from DivView.
var superClass = DivView;
/**
* @constructor
*/
function TestView() {
assertFirstConstructorCall(TestView);
// Call superclass's constructor.
superClass.call(this, TestView.MAIN_BOX_ID);
this.urlInput_ = $(TestView.URL_INPUT_ID);
this.summaryDiv_ = $(TestView.SUMMARY_DIV_ID);
var form = $(TestView.FORM_ID);
form.addEventListener('submit', this.onSubmitForm_.bind(this), false);
// Register to test information as it's received.
g_browser.addConnectionTestsObserver(this);
}
TestView.TAB_ID = 'tab-handle-tests';
TestView.TAB_NAME = 'Tests';
TestView.TAB_HASH = '#tests';
// IDs for special HTML elements in test_view.html
TestView.MAIN_BOX_ID = 'test-view-tab-content';
TestView.FORM_ID = 'test-view-connection-tests-form';
TestView.URL_INPUT_ID = 'test-view-url-input';
TestView.SUMMARY_DIV_ID = 'test-view-summary';
// Needed by tests.
TestView.SUBMIT_BUTTON_ID = 'test-view-connection-tests-submit';
cr.addSingletonGetter(TestView);
TestView.prototype = {
// Inherit the superclass's methods.
__proto__: superClass.prototype,
onSubmitForm_: function(event) {
g_browser.sendStartConnectionTests(this.urlInput_.value);
event.preventDefault();
},
/**
* Callback for when the connection tests have begun.
*/
onStartedConnectionTestSuite: function() {
this.summaryDiv_.innerHTML = '';
var p = addNode(this.summaryDiv_, 'p');
addTextNode(p, 'Started connection test suite suite on ');
timeutil.addNodeWithDate(p, new Date());
// Add a table that will hold the individual test results.
var table = addNode(this.summaryDiv_, 'table');
table.className = 'styled-table';
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.
*/
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: timeutil.getCurrentTime()
};
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.
*/
onCompletedConnectionTestExperiment: function(experiment, result) {
var r = this.currentExperimentRow_;
var endTime = timeutil.getCurrentTime();
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 {
addTextNode(r.resultCell,
netErrorToString(result) + ' (' + result + ')');
r.passFailCell.style.color = '#e00';
addTextNode(r.passFailCell, 'FAIL');
}
this.currentExperimentRow_ = null;
},
/**
* Callback for when the last test in the suite has finished.
*/
onCompletedConnectionTestSuite: function() {
var p = addNode(this.summaryDiv_, 'p');
addTextNode(p, 'Completed connection test suite suite');
}
};
return TestView;
})();