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

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

Issue 55363003: Send compressed histograms with system logs when sending feedback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unit test Created 7 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 /** @type {string} 5 /** @type {string}
6 * @const 6 * @const
7 */ 7 */
8 var FEEDBACK_LANDING_PAGE = 8 var FEEDBACK_LANDING_PAGE =
9 'https://www.google.com/support/chrome/go/feedback_confirmation'; 9 'https://www.google.com/support/chrome/go/feedback_confirmation';
10 /** @type {number} 10 /** @type {number}
11 * @const 11 * @const
12 */ 12 */
13 var MAX_ATTACH_FILE_SIZE = 3 * 1024 * 1024; 13 var MAX_ATTACH_FILE_SIZE = 3 * 1024 * 1024;
14 14
15 var attachedFileBlob = null; 15 var attachedFileBlob = null;
16 var lastReader = null; 16 var lastReader = null;
17 17
18 var feedbackInfo = null; 18 var feedbackInfo = null;
19 var systemInfo = null; 19 var systemInfo = null;
20 20
21 var systemInfoWindowId = 0; 21 var systemInfoWindow = {id: 0};
22 var histogramsWindow = {id: 0};
22 23
23 /** 24 /**
24 * Reads the selected file when the user selects a file. 25 * Reads the selected file when the user selects a file.
25 * @param {Event} fileSelectedEvent The onChanged event for the file input box. 26 * @param {Event} fileSelectedEvent The onChanged event for the file input box.
26 */ 27 */
27 function onFileSelected(fileSelectedEvent) { 28 function onFileSelected(fileSelectedEvent) {
28 $('attach-error').hidden = true; 29 $('attach-error').hidden = true;
29 var file = fileSelectedEvent.target.files[0]; 30 var file = fileSelectedEvent.target.files[0];
30 if (!file) { 31 if (!file) {
31 // User canceled file selection. 32 // User canceled file selection.
(...skipping 19 matching lines...) Expand all
51 * attach another file. 52 * attach another file.
52 */ 53 */
53 function clearAttachedFile() { 54 function clearAttachedFile() {
54 $('custom-file-container').hidden = true; 55 $('custom-file-container').hidden = true;
55 attachedFileBlob = null; 56 attachedFileBlob = null;
56 feedbackInfo.attachedFile = null; 57 feedbackInfo.attachedFile = null;
57 $('attach-file').hidden = false; 58 $('attach-file').hidden = false;
58 } 59 }
59 60
60 /** 61 /**
61 * Opens a new window with chrome://system, showing the current system info. 62 * Creates and shows a window with the given url, if the window is not already
63 * open.
64 * @param {Object} window An object with the id of the window to update, or 0.
65 * @param {string} url The destination URL of the new window.
66 * @return {function()} A function to be called to open the window.
62 */ 67 */
63 function openSystemInfoWindow() { 68 function windowOpener(window, url) {
64 if (systemInfoWindowId == 0) { 69 return function() {
65 chrome.windows.create({url: 'chrome://system'}, function(win) { 70 if (window.id == 0) {
66 systemInfoWindowId = win.id; 71 chrome.windows.create({url: url}, function(win) {
67 chrome.app.window.current().show(); 72 window.id = win.id;
68 }); 73 chrome.app.window.current().show();
69 } else { 74 });
70 chrome.windows.update(systemInfoWindowId, {drawAttention: true}); 75 } else {
71 } 76 chrome.windows.update(window.id, {drawAttention: true});
77 }
78 };
72 } 79 }
73 80
74 /** 81 /**
75 * Opens a new window with chrome://slow_trace, downloading performance data. 82 * Opens a new window with chrome://slow_trace, downloading performance data.
76 */ 83 */
77 function openSlowTraceWindow() { 84 function openSlowTraceWindow() {
78 chrome.windows.create( 85 chrome.windows.create(
79 {url: 'chrome://slow_trace/tracing.zip#' + feedbackInfo.traceId}, 86 {url: 'chrome://slow_trace/tracing.zip#' + feedbackInfo.traceId},
80 function(win) {}); 87 function(win) {});
81 } 88 }
(...skipping 18 matching lines...) Expand all
100 if (!feedbackInfo.attachedFile && attachedFileBlob) { 107 if (!feedbackInfo.attachedFile && attachedFileBlob) {
101 feedbackInfo.attachedFile = { name: $('attach-file').value, 108 feedbackInfo.attachedFile = { name: $('attach-file').value,
102 data: attachedFileBlob }; 109 data: attachedFileBlob };
103 } 110 }
104 111
105 feedbackInfo.description = $('description-text').value; 112 feedbackInfo.description = $('description-text').value;
106 feedbackInfo.pageUrl = $('page-url-text').value; 113 feedbackInfo.pageUrl = $('page-url-text').value;
107 feedbackInfo.email = $('user-email-text').value; 114 feedbackInfo.email = $('user-email-text').value;
108 115
109 var useSystemInfo = false; 116 var useSystemInfo = false;
117 var useHistograms = false;
110 // On ChromeOS, since we gather System info, check if the user has given his 118 // On ChromeOS, since we gather System info, check if the user has given his
111 // permission for us to send system info. 119 // permission for us to send system info.
112 <if expr="pp_ifdef('chromeos')"> 120 <if expr="pp_ifdef('chromeos')">
113 if ($('sys-info-checkbox') != null && 121 if ($('sys-info-checkbox') != null &&
114 $('sys-info-checkbox').checked && 122 $('sys-info-checkbox').checked &&
115 systemInfo != null) { 123 systemInfo != null) {
116 useSystemInfo = true; 124 // Send histograms along with system info.
125 useSystemInfo = useHistograms = true;
117 } 126 }
118 if ($('performance-info-checkbox') == null || 127 if ($('performance-info-checkbox') == null ||
119 !($('performance-info-checkbox').checked)) { 128 !($('performance-info-checkbox').checked)) {
120 feedbackInfo.traceId = null; 129 feedbackInfo.traceId = null;
121 } 130 }
122 </if> 131 </if>
123 132
124 // On NonChromeOS, we don't have any system information gathered except the 133 // On NonChromeOS, we don't have any system information gathered except the
125 // Chrome version and the OS version. Hence for Chrome, pass the system info 134 // Chrome version and the OS version. Hence for Chrome, pass the system info
126 // through. 135 // through.
127 <if expr="not pp_ifdef('chromeos')"> 136 <if expr="not pp_ifdef('chromeos')">
128 if (systemInfo != null) 137 if (systemInfo != null)
129 useSystemInfo = true; 138 useSystemInfo = true;
130 </if> 139 </if>
131 140
132 if (useSystemInfo) { 141 if (useSystemInfo) {
133 if (feedbackInfo.systemInformation != null) { 142 if (feedbackInfo.systemInformation != null) {
134 // Concatenate sysinfo if we had any initial system information 143 // Concatenate sysinfo if we had any initial system information
135 // sent with the feedback request event. 144 // sent with the feedback request event.
136 feedbackInfo.systemInformation = 145 feedbackInfo.systemInformation =
137 feedbackInfo.systemInformation.concat(systemInfo); 146 feedbackInfo.systemInformation.concat(systemInfo);
138 } else { 147 } else {
139 feedbackInfo.systemInformation = systemInfo; 148 feedbackInfo.systemInformation = systemInfo;
140 } 149 }
141 } 150 }
142 151
152 feedbackInfo.sendHistograms = useHistograms;
153
143 // If the user doesn't want to send the screenshot. 154 // If the user doesn't want to send the screenshot.
144 if (!$('screenshot-checkbox').checked) 155 if (!$('screenshot-checkbox').checked)
145 feedbackInfo.screenshot = null; 156 feedbackInfo.screenshot = null;
146 157
147 chrome.feedbackPrivate.sendFeedback(feedbackInfo, function(result) { 158 chrome.feedbackPrivate.sendFeedback(feedbackInfo, function(result) {
148 window.open(FEEDBACK_LANDING_PAGE, '_blank'); 159 window.open(FEEDBACK_LANDING_PAGE, '_blank');
149 window.close(); 160 window.close();
150 }); 161 });
151 162
152 return true; 163 return true;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 $('performance-info-area').hidden = false; 264 $('performance-info-area').hidden = false;
254 $('performance-info-checkbox').checked = true; 265 $('performance-info-checkbox').checked = true;
255 performanceFeedbackChanged(); 266 performanceFeedbackChanged();
256 $('performance-info-link').onclick = openSlowTraceWindow; 267 $('performance-info-link').onclick = openSlowTraceWindow;
257 } 268 }
258 </if> 269 </if>
259 270
260 chrome.feedbackPrivate.getStrings(function(strings) { 271 chrome.feedbackPrivate.getStrings(function(strings) {
261 loadTimeData.data = strings; 272 loadTimeData.data = strings;
262 i18nTemplate.process(document, loadTimeData); 273 i18nTemplate.process(document, loadTimeData);
274
275 if ($('sys-info-url')) {
276 // Opens a new window showing the current system info.
277 $('sys-info-url').onclick =
278 windowOpener(systemInfoWindow, 'chrome://system');
279 }
280 if ($('histograms-url')) {
281 // Opens a new window showing the histogram metrics.
282 $('histograms-url').onclick =
283 windowOpener(histogramsWindow, 'chrome://histograms');
284 }
263 }); 285 });
264 } 286 }
265 }); 287 });
266 288
267 window.addEventListener('DOMContentLoaded', function() { 289 window.addEventListener('DOMContentLoaded', function() {
268 // TODO(rkc): Remove logging once crbug.com/284662 is closed. 290 // TODO(rkc): Remove logging once crbug.com/284662 is closed.
269 console.log('FEEDBACK_DEBUG: feedback.js: DOMContentLoaded'); 291 console.log('FEEDBACK_DEBUG: feedback.js: DOMContentLoaded');
270 // Ready to receive the feedback object. 292 // Ready to receive the feedback object.
271 chrome.runtime.sendMessage({ready: true}); 293 chrome.runtime.sendMessage({ready: true});
272 294
273 // Setup our event handlers. 295 // Setup our event handlers.
274 $('attach-file').addEventListener('change', onFileSelected); 296 $('attach-file').addEventListener('change', onFileSelected);
275 $('send-report-button').onclick = sendReport; 297 $('send-report-button').onclick = sendReport;
276 $('cancel-button').onclick = cancel; 298 $('cancel-button').onclick = cancel;
277 $('remove-attached-file').onclick = clearAttachedFile; 299 $('remove-attached-file').onclick = clearAttachedFile;
278 <if expr="pp_ifdef('chromeos')"> 300 <if expr="pp_ifdef('chromeos')">
279 $('performance-info-checkbox').addEventListener( 301 $('performance-info-checkbox').addEventListener(
280 'change', performanceFeedbackChanged); 302 'change', performanceFeedbackChanged);
281 </if> 303 </if>
282 304
283 chrome.windows.onRemoved.addListener(function(windowId, removeInfo) { 305 chrome.windows.onRemoved.addListener(function(windowId, removeInfo) {
284 if (windowId == systemInfoWindowId) 306 if (windowId == systemInfoWindow.id)
285 systemInfoWindowId = 0; 307 systemInfoWindow.id = 0;
308 else if (windowId == histogramsWindow.id)
309 histogramsWindow.id = 0;
286 }); 310 });
287 if ($('sysinfo-url')) {
288 $('sysinfo-url').onclick = openSystemInfoWindow;
289 }
290 }); 311 });
291 } 312 }
292 313
293 initialize(); 314 initialize();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698