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