- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / net_internals / test_view.js
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6  * This view displays the progress and results from the "connection tester".
7  *
8  *   - Has an input box to specify the URL.
9  *   - Has a button to start running the tests.
10  *   - Shows the set of experiments that have been run so far, and their
11  *     result.
12  */
13 var TestView = (function() {
14   'use strict';
15
16   // We inherit from DivView.
17   var superClass = DivView;
18
19   /**
20    * @constructor
21    */
22   function TestView() {
23     assertFirstConstructorCall(TestView);
24
25     // Call superclass's constructor.
26     superClass.call(this, TestView.MAIN_BOX_ID);
27
28     this.urlInput_ = $(TestView.URL_INPUT_ID);
29     this.summaryDiv_ = $(TestView.SUMMARY_DIV_ID);
30
31     var form = $(TestView.FORM_ID);
32     form.addEventListener('submit', this.onSubmitForm_.bind(this), false);
33
34     // Register to test information as it's received.
35     g_browser.addConnectionTestsObserver(this);
36   }
37
38   TestView.TAB_ID = 'tab-handle-tests';
39   TestView.TAB_NAME = 'Tests';
40   TestView.TAB_HASH = '#tests';
41
42   // IDs for special HTML elements in test_view.html
43   TestView.MAIN_BOX_ID = 'test-view-tab-content';
44   TestView.FORM_ID = 'test-view-connection-tests-form';
45   TestView.URL_INPUT_ID = 'test-view-url-input';
46   TestView.SUMMARY_DIV_ID = 'test-view-summary';
47   // Needed by tests.
48   TestView.SUBMIT_BUTTON_ID = 'test-view-connection-tests-submit';
49
50
51   cr.addSingletonGetter(TestView);
52
53   TestView.prototype = {
54     // Inherit the superclass's methods.
55     __proto__: superClass.prototype,
56
57     onSubmitForm_: function(event) {
58       g_browser.sendStartConnectionTests(this.urlInput_.value);
59       event.preventDefault();
60     },
61
62     /**
63      * Callback for when the connection tests have begun.
64      */
65     onStartedConnectionTestSuite: function() {
66       this.summaryDiv_.innerHTML = '';
67
68       var p = addNode(this.summaryDiv_, 'p');
69       addTextNode(p, 'Started connection test suite suite on ');
70       timeutil.addNodeWithDate(p, new Date());
71
72       // Add a table that will hold the individual test results.
73       var table = addNode(this.summaryDiv_, 'table');
74       table.className = 'styled-table';
75       var thead = addNode(table, 'thead');
76       thead.innerHTML = '<tr><th>Result</th><th>Experiment</th>' +
77                         '<th>Error</th><th>Time (ms)</th></tr>';
78
79       this.tbody_ = addNode(table, 'tbody');
80     },
81
82     /**
83      * Callback for when an individual test in the suite has begun.
84      */
85     onStartedConnectionTestExperiment: function(experiment) {
86       var tr = addNode(this.tbody_, 'tr');
87
88       var passFailCell = addNode(tr, 'td');
89
90       var experimentCell = addNode(tr, 'td');
91
92       var resultCell = addNode(tr, 'td');
93       addTextNode(resultCell, '?');
94
95       var dtCell = addNode(tr, 'td');
96       addTextNode(dtCell, '?');
97
98       // We will fill in result cells with actual values (to replace the
99       // placeholder '?') once the test has completed. For now we just
100       // save references to these cells.
101       this.currentExperimentRow_ = {
102         experimentCell: experimentCell,
103         dtCell: dtCell,
104         resultCell: resultCell,
105         passFailCell: passFailCell,
106         startTime: timeutil.getCurrentTime()
107       };
108
109       addTextNode(experimentCell, 'Fetch ' + experiment.url);
110
111       if (experiment.proxy_settings_experiment ||
112           experiment.host_resolver_experiment) {
113         var ul = addNode(experimentCell, 'ul');
114
115         if (experiment.proxy_settings_experiment) {
116           var li = addNode(ul, 'li');
117           addTextNode(li, experiment.proxy_settings_experiment);
118         }
119
120         if (experiment.host_resolver_experiment) {
121           var li = addNode(ul, 'li');
122           addTextNode(li, experiment.host_resolver_experiment);
123         }
124       }
125     },
126
127     /**
128      * Callback for when an individual test in the suite has finished.
129      */
130     onCompletedConnectionTestExperiment: function(experiment, result) {
131       var r = this.currentExperimentRow_;
132
133       var endTime = timeutil.getCurrentTime();
134
135       r.dtCell.innerHTML = '';
136       addTextNode(r.dtCell, (endTime - r.startTime));
137
138       r.resultCell.innerHTML = '';
139
140       if (result == 0) {
141         r.passFailCell.style.color = 'green';
142         addTextNode(r.passFailCell, 'PASS');
143       } else {
144         addTextNode(r.resultCell,
145                     netErrorToString(result) + ' (' + result + ')');
146         r.passFailCell.style.color = '#e00';
147         addTextNode(r.passFailCell, 'FAIL');
148       }
149
150       this.currentExperimentRow_ = null;
151     },
152
153     /**
154      * Callback for when the last test in the suite has finished.
155      */
156     onCompletedConnectionTestSuite: function() {
157       var p = addNode(this.summaryDiv_, 'p');
158       addTextNode(p, 'Completed connection test suite suite');
159     }
160   };
161
162   return TestView;
163 })();