OLD | NEW |
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 /** | 5 /** |
6 * @type {string} | 6 * @type {string} |
7 * @const | 7 * @const |
8 */ | 8 */ |
9 var SRT_DOWNLOAD_PAGE = 'https://www.google.com/chrome/cleanup-tool/'; | 9 var SRT_DOWNLOAD_PAGE = 'https://www.google.com/chrome/cleanup-tool/'; |
10 | 10 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 var description = $('description-text'); | 153 var description = $('description-text'); |
154 description.placeholder = loadTimeData.getString('no-description'); | 154 description.placeholder = loadTimeData.getString('no-description'); |
155 description.focus(); | 155 description.focus(); |
156 return false; | 156 return false; |
157 } | 157 } |
158 | 158 |
159 // Prevent double clicking from sending additional reports. | 159 // Prevent double clicking from sending additional reports. |
160 $('send-report-button').disabled = true; | 160 $('send-report-button').disabled = true; |
161 console.log('Feedback: Sending report'); | 161 console.log('Feedback: Sending report'); |
162 if (!feedbackInfo.attachedFile && attachedFileBlob) { | 162 if (!feedbackInfo.attachedFile && attachedFileBlob) { |
163 feedbackInfo.attachedFile = { name: $('attach-file').value, | 163 feedbackInfo.attachedFile = { |
164 data: attachedFileBlob }; | 164 name: $('attach-file').value, |
| 165 data: attachedFileBlob |
| 166 }; |
165 } | 167 } |
166 | 168 |
167 feedbackInfo.description = $('description-text').value; | 169 feedbackInfo.description = $('description-text').value; |
168 feedbackInfo.pageUrl = $('page-url-text').value; | 170 feedbackInfo.pageUrl = $('page-url-text').value; |
169 feedbackInfo.email = $('user-email-text').value; | 171 feedbackInfo.email = $('user-email-text').value; |
170 | 172 |
171 var useSystemInfo = false; | 173 var useSystemInfo = false; |
172 var useHistograms = false; | 174 var useHistograms = false; |
173 if ($('sys-info-checkbox') != null && | 175 if ($('sys-info-checkbox') != null && $('sys-info-checkbox').checked) { |
174 $('sys-info-checkbox').checked) { | |
175 // Send histograms along with system info. | 176 // Send histograms along with system info. |
176 useSystemInfo = useHistograms = true; | 177 useSystemInfo = useHistograms = true; |
177 } | 178 } |
178 <if expr="chromeos"> | 179 // <if expr="chromeos"> |
179 if ($('performance-info-checkbox') == null || | 180 if ($('performance-info-checkbox') == null || |
180 !($('performance-info-checkbox').checked)) { | 181 !($('performance-info-checkbox').checked)) { |
181 feedbackInfo.traceId = null; | 182 feedbackInfo.traceId = null; |
182 } | 183 } |
183 </if> | 184 // </if> |
184 | 185 |
185 feedbackInfo.sendHistograms = useHistograms; | 186 feedbackInfo.sendHistograms = useHistograms; |
186 | 187 |
187 // If the user doesn't want to send the screenshot. | 188 // If the user doesn't want to send the screenshot. |
188 if (!$('screenshot-checkbox').checked) | 189 if (!$('screenshot-checkbox').checked) |
189 feedbackInfo.screenshot = null; | 190 feedbackInfo.screenshot = null; |
190 | 191 |
191 var productId = parseInt('' + feedbackInfo.productId); | 192 var productId = parseInt('' + feedbackInfo.productId); |
192 if (isNaN(productId)) { | 193 if (isNaN(productId)) { |
193 // For apps that still use a string value as the |productId|, we must clear | 194 // For apps that still use a string value as the |productId|, we must clear |
(...skipping 28 matching lines...) Expand all Loading... |
222 function dataUrlToBlob(url) { | 223 function dataUrlToBlob(url) { |
223 var mimeString = url.split(',')[0].split(':')[1].split(';')[0]; | 224 var mimeString = url.split(',')[0].split(':')[1].split(';')[0]; |
224 var data = atob(url.split(',')[1]); | 225 var data = atob(url.split(',')[1]); |
225 var dataArray = []; | 226 var dataArray = []; |
226 for (var i = 0; i < data.length; ++i) | 227 for (var i = 0; i < data.length; ++i) |
227 dataArray.push(data.charCodeAt(i)); | 228 dataArray.push(data.charCodeAt(i)); |
228 | 229 |
229 return new Blob([new Uint8Array(dataArray)], {type: mimeString}); | 230 return new Blob([new Uint8Array(dataArray)], {type: mimeString}); |
230 } | 231 } |
231 | 232 |
232 <if expr="chromeos"> | 233 // <if expr="chromeos"> |
233 /** | 234 /** |
234 * Update the page when performance feedback state is changed. | 235 * Update the page when performance feedback state is changed. |
235 */ | 236 */ |
236 function performanceFeedbackChanged() { | 237 function performanceFeedbackChanged() { |
237 if ($('performance-info-checkbox').checked) { | 238 if ($('performance-info-checkbox').checked) { |
238 $('attach-file').disabled = true; | 239 $('attach-file').disabled = true; |
239 $('attach-file').checked = false; | 240 $('attach-file').checked = false; |
240 | 241 |
241 $('screenshot-checkbox').disabled = true; | 242 $('screenshot-checkbox').disabled = true; |
242 $('screenshot-checkbox').checked = false; | 243 $('screenshot-checkbox').checked = false; |
243 } else { | 244 } else { |
244 $('attach-file').disabled = false; | 245 $('attach-file').disabled = false; |
245 $('screenshot-checkbox').disabled = false; | 246 $('screenshot-checkbox').disabled = false; |
246 } | 247 } |
247 } | 248 } |
248 </if> | 249 // </if> |
249 | 250 |
250 function resizeAppWindow() { | 251 function resizeAppWindow() { |
251 // We pick the width from the titlebar, which has no margins. | 252 // We pick the width from the titlebar, which has no margins. |
252 var width = $('title-bar').scrollWidth; | 253 var width = $('title-bar').scrollWidth; |
253 if (width < FEEDBACK_MIN_WIDTH) | 254 if (width < FEEDBACK_MIN_WIDTH) |
254 width = FEEDBACK_MIN_WIDTH; | 255 width = FEEDBACK_MIN_WIDTH; |
255 | 256 |
256 // We get the height by adding the titlebar height and the content height + | 257 // We get the height by adding the titlebar height and the content height + |
257 // margins. We can't get the margins for the content-pane here by using | 258 // margins. We can't get the margins for the content-pane here by using |
258 // style.margin - the variable seems to not exist. | 259 // style.margin - the variable seems to not exist. |
259 var height = $('title-bar').scrollHeight + | 260 var height = $('title-bar').scrollHeight + $('content-pane').scrollHeight + |
260 $('content-pane').scrollHeight + CONTENT_MARGIN_HEIGHT; | 261 CONTENT_MARGIN_HEIGHT; |
261 | 262 |
262 var minHeight = FEEDBACK_MIN_HEIGHT; | 263 var minHeight = FEEDBACK_MIN_HEIGHT; |
263 if (feedbackInfo.flow == FeedbackFlow.LOGIN) | 264 if (feedbackInfo.flow == FeedbackFlow.LOGIN) |
264 minHeight = FEEDBACK_MIN_HEIGHT_LOGIN; | 265 minHeight = FEEDBACK_MIN_HEIGHT_LOGIN; |
265 height = Math.max(height, minHeight); | 266 height = Math.max(height, minHeight); |
266 | 267 |
267 chrome.app.window.current().resizeTo(width, height); | 268 chrome.app.window.current().resizeTo(width, height); |
268 } | 269 } |
269 | 270 |
270 /** | 271 /** |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 takeScreenshot(function(screenshotCanvas) { | 332 takeScreenshot(function(screenshotCanvas) { |
332 // We've taken our screenshot, show the feedback page without any | 333 // We've taken our screenshot, show the feedback page without any |
333 // further delay. | 334 // further delay. |
334 window.webkitRequestAnimationFrame(function() { | 335 window.webkitRequestAnimationFrame(function() { |
335 resizeAppWindow(); | 336 resizeAppWindow(); |
336 }); | 337 }); |
337 chrome.app.window.current().show(); | 338 chrome.app.window.current().show(); |
338 | 339 |
339 var screenshotDataUrl = screenshotCanvas.toDataURL('image/png'); | 340 var screenshotDataUrl = screenshotCanvas.toDataURL('image/png'); |
340 $('screenshot-image').src = screenshotDataUrl; | 341 $('screenshot-image').src = screenshotDataUrl; |
341 $('screenshot-image').classList.toggle('wide-screen', | 342 $('screenshot-image') |
342 $('screenshot-image').width > MAX_SCREENSHOT_WIDTH); | 343 .classList.toggle( |
| 344 'wide-screen', |
| 345 $('screenshot-image').width > MAX_SCREENSHOT_WIDTH); |
343 feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl); | 346 feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl); |
344 }); | 347 }); |
345 | 348 |
346 chrome.feedbackPrivate.getUserEmail(function(email) { | 349 chrome.feedbackPrivate.getUserEmail(function(email) { |
347 $('user-email-text').value = email; | 350 $('user-email-text').value = email; |
348 }); | 351 }); |
349 | 352 |
350 // Initiate getting the system info. | 353 // Initiate getting the system info. |
351 isSystemInfoReady = false; | 354 isSystemInfoReady = false; |
352 getSystemInformation(onSystemInformation); | 355 getSystemInformation(onSystemInformation); |
353 | 356 |
354 // An extension called us with an attached file. | 357 // An extension called us with an attached file. |
355 if (feedbackInfo.attachedFile) { | 358 if (feedbackInfo.attachedFile) { |
356 $('attached-filename-text').textContent = | 359 $('attached-filename-text').textContent = |
357 feedbackInfo.attachedFile.name; | 360 feedbackInfo.attachedFile.name; |
358 attachedFileBlob = feedbackInfo.attachedFile.data; | 361 attachedFileBlob = feedbackInfo.attachedFile.data; |
359 $('custom-file-container').hidden = false; | 362 $('custom-file-container').hidden = false; |
360 $('attach-file').hidden = true; | 363 $('attach-file').hidden = true; |
361 } | 364 } |
362 | 365 |
363 // No URL and file attachment for login screen feedback. | 366 // No URL and file attachment for login screen feedback. |
364 if (feedbackInfo.flow == FeedbackFlow.LOGIN) { | 367 if (feedbackInfo.flow == FeedbackFlow.LOGIN) { |
365 $('page-url').hidden = true; | 368 $('page-url').hidden = true; |
366 $('attach-file-container').hidden = true; | 369 $('attach-file-container').hidden = true; |
367 $('attach-file-note').hidden = true; | 370 $('attach-file-note').hidden = true; |
368 } | 371 } |
369 | 372 |
370 <if expr="chromeos"> | 373 // <if expr="chromeos"> |
371 if (feedbackInfo.traceId && ($('performance-info-area'))) { | 374 if (feedbackInfo.traceId && ($('performance-info-area'))) { |
372 $('performance-info-area').hidden = false; | 375 $('performance-info-area').hidden = false; |
373 $('performance-info-checkbox').checked = true; | 376 $('performance-info-checkbox').checked = true; |
374 performanceFeedbackChanged(); | 377 performanceFeedbackChanged(); |
375 $('performance-info-link').onclick = openSlowTraceWindow; | 378 $('performance-info-link').onclick = openSlowTraceWindow; |
376 } | 379 } |
377 </if> | 380 // </if> |
378 chrome.feedbackPrivate.getStrings(function(strings) { | 381 chrome.feedbackPrivate.getStrings(function(strings) { |
379 loadTimeData.data = strings; | 382 loadTimeData.data = strings; |
380 i18nTemplate.process(document, loadTimeData); | 383 i18nTemplate.process(document, loadTimeData); |
381 | 384 |
382 if ($('sys-info-url')) { | 385 if ($('sys-info-url')) { |
383 // Opens a new window showing the full anonymized system+app | 386 // Opens a new window showing the full anonymized system+app |
384 // information. | 387 // information. |
385 $('sys-info-url').onclick = function() { | 388 $('sys-info-url').onclick = function() { |
386 var win = chrome.app.window.get(SYSINFO_WINDOW_ID); | 389 var win = chrome.app.window.get(SYSINFO_WINDOW_ID); |
387 if (win) { | 390 if (win) { |
388 win.show(); | 391 win.show(); |
389 return; | 392 return; |
390 } | 393 } |
391 chrome.app.window.create( | 394 chrome.app.window.create( |
392 '/html/sys_info.html', { | 395 '/html/sys_info.html', { |
393 frame: 'chrome', | 396 frame: 'chrome', |
394 id: SYSINFO_WINDOW_ID, | 397 id: SYSINFO_WINDOW_ID, |
395 width: 640, | 398 width: 640, |
396 height: 400, | 399 height: 400, |
397 hidden: false, | 400 hidden: false, |
398 resizable: true | 401 resizable: true |
399 }, function(appWindow) { | 402 }, |
400 // Define functions for the newly created window. | 403 function(appWindow) { |
| 404 // Define functions for the newly created window. |
401 | 405 |
402 // Gets the full system information for the new window. | 406 // Gets the full system information for the new window. |
403 appWindow.contentWindow.getFullSystemInfo = | 407 appWindow.contentWindow.getFullSystemInfo = function( |
404 function(callback) { | 408 callback) { |
405 if (isSystemInfoReady) { | 409 if (isSystemInfoReady) { |
406 callback(feedbackInfo.systemInformation); | 410 callback(feedbackInfo.systemInformation); |
407 return; | 411 return; |
408 } | 412 } |
409 | 413 |
410 sysInfoPageOnSysInfoReadyCallback = callback; | 414 sysInfoPageOnSysInfoReadyCallback = callback; |
411 }; | 415 }; |
412 | 416 |
413 // Returns the loadTimeData for the new window. | 417 // Returns the loadTimeData for the new window. |
414 appWindow.contentWindow.getLoadTimeData = function() { | 418 appWindow.contentWindow.getLoadTimeData = function() { |
415 return loadTimeData; | 419 return loadTimeData; |
416 }; | 420 }; |
417 }); | 421 }); |
418 }; | 422 }; |
419 } | 423 } |
420 if ($('histograms-url')) { | 424 if ($('histograms-url')) { |
421 // Opens a new window showing the histogram metrics. | 425 // Opens a new window showing the histogram metrics. |
422 $('histograms-url').onclick = | 426 $('histograms-url').onclick = |
423 windowOpener(STATS_WINDOW_ID, 'chrome://histograms'); | 427 windowOpener(STATS_WINDOW_ID, 'chrome://histograms'); |
424 } | 428 } |
425 // Make sure our focus starts on the description field. | 429 // Make sure our focus starts on the description field. |
426 $('description-text').focus(); | 430 $('description-text').focus(); |
427 }); | 431 }); |
428 } | 432 } |
429 }); | 433 }); |
430 | 434 |
431 window.addEventListener('DOMContentLoaded', function() { | 435 window.addEventListener('DOMContentLoaded', function() { |
432 // Ready to receive the feedback object. | 436 // Ready to receive the feedback object. |
433 chrome.runtime.sendMessage({ready: true}); | 437 chrome.runtime.sendMessage({ready: true}); |
434 | 438 |
435 // Setup our event handlers. | 439 // Setup our event handlers. |
436 $('attach-file').addEventListener('change', onFileSelected); | 440 $('attach-file').addEventListener('change', onFileSelected); |
437 $('send-report-button').onclick = sendReport; | 441 $('send-report-button').onclick = sendReport; |
438 $('cancel-button').onclick = cancel; | 442 $('cancel-button').onclick = cancel; |
439 $('remove-attached-file').onclick = clearAttachedFile; | 443 $('remove-attached-file').onclick = clearAttachedFile; |
440 <if expr="chromeos"> | 444 // <if expr="chromeos"> |
441 $('performance-info-checkbox').addEventListener( | 445 $('performance-info-checkbox') |
442 'change', performanceFeedbackChanged); | 446 .addEventListener('change', performanceFeedbackChanged); |
443 </if> | 447 // </if> |
444 }); | 448 }); |
445 } | 449 } |
446 | 450 |
447 initialize(); | 451 initialize(); |
OLD | NEW |