| 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-drop-down').value; | 171 feedbackInfo.email = $('user-email-drop-down').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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 == chrome.feedbackPrivate.FeedbackFlow.LOGIN) | 264 if (feedbackInfo.flow == chrome.feedbackPrivate.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 /** |
| 271 * A callback to be invoked when the background page of this extension receives | 272 * A callback to be invoked when the background page of this extension receives |
| 272 * the system information. | 273 * the system information. |
| 273 */ | 274 */ |
| 274 function onSystemInformation() { | 275 function onSystemInformation() { |
| 275 isSystemInfoReady = true; | 276 isSystemInfoReady = true; |
| 276 // In case the sys_info_page needs to be notified by this event, do so. | 277 // In case the sys_info_page needs to be notified by this event, do so. |
| 277 if (sysInfoPageOnSysInfoReadyCallback != null) { | 278 if (sysInfoPageOnSysInfoReadyCallback != null) { |
| 278 sysInfoPageOnSysInfoReadyCallback(feedbackInfo.systemInformation); | 279 sysInfoPageOnSysInfoReadyCallback(feedbackInfo.systemInformation); |
| 279 sysInfoPageOnSysInfoReadyCallback = null; | 280 sysInfoPageOnSysInfoReadyCallback = null; |
| 280 } | 281 } |
| 281 } | 282 } |
| 282 | 283 |
| 283 /** | 284 /** |
| 284 * Close the window after 100ms delay. | 285 * Close the window after 100ms delay. |
| 285 */ | 286 */ |
| 286 function scheduleWindowClose() { | 287 function scheduleWindowClose() { |
| 287 setTimeout(function() { window.close();}, 100); | 288 setTimeout(function() { |
| 289 window.close(); |
| 290 }, 100); |
| 288 } | 291 } |
| 289 | 292 |
| 290 /** | 293 /** |
| 291 * Initializes our page. | 294 * Initializes our page. |
| 292 * Flow: | 295 * Flow: |
| 293 * .) DOMContent Loaded -> . Request feedbackInfo object | 296 * .) DOMContent Loaded -> . Request feedbackInfo object |
| 294 * . Setup page event handlers | 297 * . Setup page event handlers |
| 295 * .) Feedback Object Received -> . take screenshot | 298 * .) Feedback Object Received -> . take screenshot |
| 296 * . request email | 299 * . request email |
| 297 * . request System info | 300 * . request System info |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 takeScreenshot(function(screenshotCanvas) { | 342 takeScreenshot(function(screenshotCanvas) { |
| 340 // We've taken our screenshot, show the feedback page without any | 343 // We've taken our screenshot, show the feedback page without any |
| 341 // further delay. | 344 // further delay. |
| 342 window.webkitRequestAnimationFrame(function() { | 345 window.webkitRequestAnimationFrame(function() { |
| 343 resizeAppWindow(); | 346 resizeAppWindow(); |
| 344 }); | 347 }); |
| 345 chrome.app.window.current().show(); | 348 chrome.app.window.current().show(); |
| 346 | 349 |
| 347 var screenshotDataUrl = screenshotCanvas.toDataURL('image/png'); | 350 var screenshotDataUrl = screenshotCanvas.toDataURL('image/png'); |
| 348 $('screenshot-image').src = screenshotDataUrl; | 351 $('screenshot-image').src = screenshotDataUrl; |
| 349 $('screenshot-image').classList.toggle('wide-screen', | 352 $('screenshot-image') |
| 350 $('screenshot-image').width > MAX_SCREENSHOT_WIDTH); | 353 .classList.toggle( |
| 354 'wide-screen', |
| 355 $('screenshot-image').width > MAX_SCREENSHOT_WIDTH); |
| 351 feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl); | 356 feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl); |
| 352 }); | 357 }); |
| 353 | 358 |
| 354 chrome.feedbackPrivate.getUserEmail(function(email) { | 359 chrome.feedbackPrivate.getUserEmail(function(email) { |
| 355 // Never add an empty option. | 360 // Never add an empty option. |
| 356 if (!email) | 361 if (!email) |
| 357 return; | 362 return; |
| 358 var optionElement = document.createElement('option'); | 363 var optionElement = document.createElement('option'); |
| 359 optionElement.value = email; | 364 optionElement.value = email; |
| 360 optionElement.text = email; | 365 optionElement.text = email; |
| 361 optionElement.selected = true; | 366 optionElement.selected = true; |
| 362 // Make sure the "Report anonymously" option comes last. | 367 // Make sure the "Report anonymously" option comes last. |
| 363 $('user-email-drop-down').insertBefore(optionElement, | 368 $('user-email-drop-down') |
| 364 $('anonymous-user-option')); | 369 .insertBefore(optionElement, $('anonymous-user-option')); |
| 365 | 370 |
| 366 // Now we can unhide the user email section: | 371 // Now we can unhide the user email section: |
| 367 $('user-email').hidden = false; | 372 $('user-email').hidden = false; |
| 368 }); | 373 }); |
| 369 | 374 |
| 370 // Initiate getting the system info. | 375 // Initiate getting the system info. |
| 371 isSystemInfoReady = false; | 376 isSystemInfoReady = false; |
| 372 getSystemInformation(onSystemInformation); | 377 getSystemInformation(onSystemInformation); |
| 373 | 378 |
| 374 // An extension called us with an attached file. | 379 // An extension called us with an attached file. |
| 375 if (feedbackInfo.attachedFile) { | 380 if (feedbackInfo.attachedFile) { |
| 376 $('attached-filename-text').textContent = | 381 $('attached-filename-text').textContent = |
| 377 feedbackInfo.attachedFile.name; | 382 feedbackInfo.attachedFile.name; |
| 378 attachedFileBlob = feedbackInfo.attachedFile.data; | 383 attachedFileBlob = feedbackInfo.attachedFile.data; |
| 379 $('custom-file-container').hidden = false; | 384 $('custom-file-container').hidden = false; |
| 380 $('attach-file').hidden = true; | 385 $('attach-file').hidden = true; |
| 381 } | 386 } |
| 382 | 387 |
| 383 // No URL and file attachment for login screen feedback. | 388 // No URL and file attachment for login screen feedback. |
| 384 if (feedbackInfo.flow == chrome.feedbackPrivate.FeedbackFlow.LOGIN) { | 389 if (feedbackInfo.flow == chrome.feedbackPrivate.FeedbackFlow.LOGIN) { |
| 385 $('page-url').hidden = true; | 390 $('page-url').hidden = true; |
| 386 $('attach-file-container').hidden = true; | 391 $('attach-file-container').hidden = true; |
| 387 $('attach-file-note').hidden = true; | 392 $('attach-file-note').hidden = true; |
| 388 } | 393 } |
| 389 | 394 |
| 390 // <if expr="chromeos"> | 395 // <if expr="chromeos"> |
| 391 if (feedbackInfo.traceId && ($('performance-info-area'))) { | 396 if (feedbackInfo.traceId && ($('performance-info-area'))) { |
| 392 $('performance-info-area').hidden = false; | 397 $('performance-info-area').hidden = false; |
| 393 $('performance-info-checkbox').checked = true; | 398 $('performance-info-checkbox').checked = true; |
| 394 performanceFeedbackChanged(); | 399 performanceFeedbackChanged(); |
| 395 $('performance-info-link').onclick = openSlowTraceWindow; | 400 $('performance-info-link').onclick = openSlowTraceWindow; |
| 396 } | 401 } |
| 397 // </if> | 402 // </if> |
| 398 chrome.feedbackPrivate.getStrings(feedbackInfo.flow, function(strings) { | 403 chrome.feedbackPrivate.getStrings(feedbackInfo.flow, function(strings) { |
| 399 loadTimeData.data = strings; | 404 loadTimeData.data = strings; |
| 400 i18nTemplate.process(document, loadTimeData); | 405 i18nTemplate.process(document, loadTimeData); |
| 401 | 406 |
| 402 if ($('sys-info-url')) { | 407 if ($('sys-info-url')) { |
| 403 // Opens a new window showing the full anonymized system+app | 408 // Opens a new window showing the full anonymized system+app |
| 404 // information. | 409 // information. |
| 405 $('sys-info-url').onclick = function() { | 410 $('sys-info-url').onclick = function() { |
| 406 var win = chrome.app.window.get(SYSINFO_WINDOW_ID); | 411 var win = chrome.app.window.get(SYSINFO_WINDOW_ID); |
| 407 if (win) { | 412 if (win) { |
| 408 win.show(); | 413 win.show(); |
| 409 return; | 414 return; |
| 410 } | 415 } |
| 411 chrome.app.window.create( | 416 chrome.app.window.create( |
| 412 '/html/sys_info.html', { | 417 '/html/sys_info.html', { |
| 413 frame: 'chrome', | 418 frame: 'chrome', |
| 414 id: SYSINFO_WINDOW_ID, | 419 id: SYSINFO_WINDOW_ID, |
| 415 width: 640, | 420 width: 640, |
| 416 height: 400, | 421 height: 400, |
| 417 hidden: false, | 422 hidden: false, |
| 418 resizable: true | 423 resizable: true |
| 419 }, function(appWindow) { | 424 }, |
| 420 // Define functions for the newly created window. | 425 function(appWindow) { |
| 426 // Define functions for the newly created window. |
| 421 | 427 |
| 422 // Gets the full system information for the new window. | 428 // Gets the full system information for the new window. |
| 423 appWindow.contentWindow.getFullSystemInfo = | 429 appWindow.contentWindow.getFullSystemInfo = function( |
| 424 function(callback) { | 430 callback) { |
| 425 if (isSystemInfoReady) { | 431 if (isSystemInfoReady) { |
| 426 callback(feedbackInfo.systemInformation); | 432 callback(feedbackInfo.systemInformation); |
| 427 return; | 433 return; |
| 428 } | 434 } |
| 429 | 435 |
| 430 sysInfoPageOnSysInfoReadyCallback = callback; | 436 sysInfoPageOnSysInfoReadyCallback = callback; |
| 431 }; | 437 }; |
| 432 | 438 |
| 433 // Returns the loadTimeData for the new window. | 439 // Returns the loadTimeData for the new window. |
| 434 appWindow.contentWindow.getLoadTimeData = function() { | 440 appWindow.contentWindow.getLoadTimeData = function() { |
| 435 return loadTimeData; | 441 return loadTimeData; |
| 436 }; | 442 }; |
| 437 }); | 443 }); |
| 438 }; | 444 }; |
| 439 } | 445 } |
| 440 if ($('histograms-url')) { | 446 if ($('histograms-url')) { |
| 441 // Opens a new window showing the histogram metrics. | 447 // Opens a new window showing the histogram metrics. |
| 442 $('histograms-url').onclick = | 448 $('histograms-url').onclick = |
| 443 windowOpener(STATS_WINDOW_ID, 'chrome://histograms'); | 449 windowOpener(STATS_WINDOW_ID, 'chrome://histograms'); |
| 444 } | 450 } |
| 445 // Make sure our focus starts on the description field. | 451 // Make sure our focus starts on the description field. |
| 446 $('description-text').focus(); | 452 $('description-text').focus(); |
| 447 }); | 453 }); |
| 448 } | 454 } |
| 449 }); | 455 }); |
| 450 | 456 |
| 451 window.addEventListener('DOMContentLoaded', function() { | 457 window.addEventListener('DOMContentLoaded', function() { |
| 452 // Ready to receive the feedback object. | 458 // Ready to receive the feedback object. |
| 453 chrome.runtime.sendMessage({ready: true}); | 459 chrome.runtime.sendMessage({ready: true}); |
| 454 | 460 |
| 455 // Setup our event handlers. | 461 // Setup our event handlers. |
| 456 $('attach-file').addEventListener('change', onFileSelected); | 462 $('attach-file').addEventListener('change', onFileSelected); |
| 457 $('send-report-button').onclick = sendReport; | 463 $('send-report-button').onclick = sendReport; |
| 458 $('cancel-button').onclick = cancel; | 464 $('cancel-button').onclick = cancel; |
| 459 $('remove-attached-file').onclick = clearAttachedFile; | 465 $('remove-attached-file').onclick = clearAttachedFile; |
| 460 // <if expr="chromeos"> | 466 // <if expr="chromeos"> |
| 461 $('performance-info-checkbox').addEventListener( | 467 $('performance-info-checkbox') |
| 462 'change', performanceFeedbackChanged); | 468 .addEventListener('change', performanceFeedbackChanged); |
| 463 // </if> | 469 // </if> |
| 464 }); | 470 }); |
| 465 } | 471 } |
| 466 | 472 |
| 467 initialize(); | 473 initialize(); |
| OLD | NEW |