Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: chrome/browser/resources/instant/instant.js

Issue 12386019: Instant: Use only one hidden WebContents per profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Redefine '$' here rather than including 'cr.js', since this is 5 // Redefine '$' here rather than including util.js, since this is the only
6 // the only function needed. This allows this file to be loaded 6 // function needed.
7 // in a browser directly for layout and some testing purposes.
8 var $ = function(id) { return document.getElementById(id); }; 7 var $ = function(id) { return document.getElementById(id); };
9 8
10 /** 9 /**
11 * WebUI for configuring instant.* preference values used by 10 * WebUI for displaying Instant debug event information.
12 * Chrome's instant search system.
13 */ 11 */
14 var instantConfig = (function() { 12 var instantConfig = (function() {
15 'use strict'; 13 'use strict';
16 14
17 /** List of fields used to dynamically build form. **/
18 var FIELDS = [
19 {
20 key: 'instant_ui.zero_suggest_url_prefix',
21 label: 'Prefix URL for the experimental Instant ZeroSuggest provider',
22 type: 'string',
23 size: 40,
24 units: '',
25 default: ''
26 },
27 ];
28
29 /** 15 /**
30 * Returns a DOM element of the given type and class name. 16 * Request debug events; results arrive asynchronously via setDebugEvents().
31 */ 17 */
32 function createElementWithClass(elementType, className) { 18 function getDebugEvents() {
33 var element = document.createElement(elementType); 19 chrome.send('getDebugEvents');
34 element.className = className;
35 return element;
36 } 20 }
37 21
38 /** 22 /**
39 * Dynamically builds web-form based on FIELDS list. 23 * Handles callback from getDebugEvents().
40 * @return {string} The form's HTML. 24 * @param {Array} events A list of debug events.
41 */ 25 */
42 function buildForm() { 26 function setDebugEvents(events) {
43 var buf = []; 27 var debugEvents = $('debug-events');
44 28
45 for (var i = 0; i < FIELDS.length; i++) { 29 for (var i = 0; i < events.length; ++i) {
46 var field = FIELDS[i]; 30 var event = document.createElement('p');
47 31
48 var row = createElementWithClass('div', 'row'); 32 var time = document.createElement('span');
49 row.id = ''; 33 time.className = 'time';
34 time.textContent = events[i].time;
35 event.appendChild(time);
50 36
51 var label = createElementWithClass('label', 'row-label'); 37 var text = document.createElement('span');
52 label.setAttribute('for', field.key); 38 text.textContent = events[i].text;
53 label.textContent = field.label; 39 event.appendChild(text);
54 row.appendChild(label);
55 40
56 var input = createElementWithClass('input', 'row-input'); 41 debugEvents.appendChild(event);
57 input.type = field.type;
58 input.id = field.key;
59 input.title = "Default Value: " + field.default;
60 if (field.size) input.size = field.size;
61 input.min = field.min || 0;
62 if (field.max) input.max = field.max;
63 if (field.step) input.step = field.step;
64 row.appendChild(input);
65
66 var units = createElementWithClass('div', 'row-units');
67 if (field.units) units.innerHTML = field.units;
68 row.appendChild(units);
69
70 $('instant-form').appendChild(row);
71 } 42 }
72 } 43 }
73 44
74 /** 45 /**
75 * Initialize the form by adding 'onChange' listeners to all fields. 46 * Resets the list of debug events.
76 */ 47 */
77 function initForm() { 48 function clearDebugEvents() {
78 for (var i = 0; i < FIELDS.length; i++) { 49 $('debug-events').innerHTML = '';
79 var field = FIELDS[i]; 50 chrome.send('clearDebugEvents');
80 $(field.key).onchange = (function(key) {
81 setPreferenceValue(key);
82 }).bind(null, field.key);
83 }
84 } 51 }
85 52
86 /**
87 * Request a preference setting's value.
88 * This method is asynchronous; the result is provided by a call to
89 * getPreferenceValueResult.
90 * @param {string} prefName The name of the preference value being requested.
91 */
92 function getPreferenceValue(prefName) {
93 chrome.send('getPreferenceValue', [prefName]);
94 }
95
96 /**
97 * Handle callback from call to getPreferenceValue.
98 * @param {string} prefName The name of the requested preference value.
99 * @param {value} value The current value associated with prefName.
100 */
101 function getPreferenceValueResult(prefName, value) {
102 if ($(prefName).type == 'checkbox')
103 $(prefName).checked = value;
104 else
105 $(prefName).value = value;
106 }
107
108 /**
109 * Set a preference setting's value stored in the element with prefName.
110 * @param {string} prefName The name of the preference value being set.
111 */
112 function setPreferenceValue(prefName) {
113 var value;
114 if ($(prefName).type == 'checkbox')
115 value = $(prefName).checked;
116 else if ($(prefName).type == 'number')
117 value = parseFloat($(prefName).value);
118 else
119 value = $(prefName).value;
120 chrome.send('setPreferenceValue', [prefName, value]);
121 }
122
123 /**
124 * Saves data back into Chrome preferences.
125 */
126 function onSave() {
127 for (var i = 0; i < FIELDS.length; i++) {
128 var field = FIELDS[i];
129 setPreferenceValue(field.key);
130 }
131 return false;
132 }
133
134 /**
135 * Request debug info.
136 * The method is asynchronous, results being provided via getDebugInfoResult.
137 */
138 function getDebugInfo() {
139 chrome.send('getDebugInfo');
140 }
141
142 /**
143 * Handles callback from getDebugInfo.
144 * @param {Object} info The debug info.
145 */
146 function getDebugInfoResult(info) {
147 for (var i = 0; i < info.entries.length; ++i) {
148 var entry = info.entries[i];
149 var row = createElementWithClass('p', 'debug');
150 row.appendChild(createElementWithClass('span', 'timestamp')).textContent =
151 entry.time;
152 row.appendChild(document.createElement('span')).textContent = entry.text;
153 $('instant-debug-info').appendChild(row);
154 }
155 }
156
157 /**
158 * Resets list of debug events.
159 */
160 function clearDebugInfo() {
161 $('instant-debug-info').innerHTML = '';
162 chrome.send('clearDebugInfo');
163 }
164
165 function loadForm() {
166 for (var i = 0; i < FIELDS.length; i++)
167 getPreferenceValue(FIELDS[i].key);
168 }
169
170 /**
171 * Build and initialize the configuration form.
172 */
173 function initialize() { 53 function initialize() {
174 buildForm(); 54 $('clear-debug-events').onclick = clearDebugEvents.bind(this);
175 loadForm(); 55 getDebugEvents();
176 initForm();
177 getDebugInfo();
178
179 $('save-button').onclick = onSave.bind(this);
180 $('clear-button').onclick = clearDebugInfo.bind(this);
181 } 56 }
182 57
183 return { 58 return {
184 initialize: initialize, 59 initialize: initialize,
185 getDebugInfoResult: getDebugInfoResult, 60 setDebugEvents: setDebugEvents,
186 getPreferenceValueResult: getPreferenceValueResult
187 }; 61 };
188 })(); 62 })();
189 63
190 document.addEventListener('DOMContentLoaded', instantConfig.initialize); 64 document.addEventListener('DOMContentLoaded', instantConfig.initialize);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698