From b74a5653a8941ba3fd9e7ea90b29ea788f690b21 Mon Sep 17 00:00:00 2001
From: "rkc@chromium.org"
 <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Tue, 12 Nov 2013 23:20:39 +0000
Subject: [PATCH] Reduce delay when showing feedback. Move the toDataURL
 operation of the canvas containing the screenshot to after we show the
 feedback page. This will significantly increase the response time from when a
 user requests feedback to the time that the feedback window is shown.

R=xiyuan@chromium.org
BUG=308414

Review URL: https://codereview.chromium.org/61153007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234660 0039d316-1c4b-4281-b951-d872f2087c98
---
 chrome/browser/resources/feedback/js/feedback.js      | 11 ++++++++---
 .../browser/resources/feedback/js/take_screenshot.js  |  6 +++---
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/chrome/browser/resources/feedback/js/feedback.js b/chrome/browser/resources/feedback/js/feedback.js
index f79e0946feac0..9e39158dd40ef 100644
--- a/chrome/browser/resources/feedback/js/feedback.js
+++ b/chrome/browser/resources/feedback/js/feedback.js
@@ -235,13 +235,18 @@ function initialize() {
       if (feedbackInfo.pageUrl)
         $('page-url-text').value = feedbackInfo.pageUrl;
 
-      takeScreenshot(function(screenshotDataUrl) {
-        $('screenshot-image').src = screenshotDataUrl;
-        feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl);
+      takeScreenshot(function(screenshotCanvas) {
         // TODO(rkc):  Remove logging once crbug.com/284662 is closed.
         console.log('FEEDBACK_DEBUG: Taken screenshot. Showing window.');
+
+        // We've taken our screenshot, show the feedback page without any
+        // further delay.
         resizeAppWindow();
         chrome.app.window.current().show();
+
+        var screenshotDataUrl = screenshotCanvas.toDataURL('image/png');
+        $('screenshot-image').src = screenshotDataUrl;
+        feedbackInfo.screenshot = dataUrlToBlob(screenshotDataUrl);
       });
 
       chrome.feedbackPrivate.getUserEmail(function(email) {
diff --git a/chrome/browser/resources/feedback/js/take_screenshot.js b/chrome/browser/resources/feedback/js/take_screenshot.js
index ae9543c8751d1..2985e64fd43a6 100644
--- a/chrome/browser/resources/feedback/js/take_screenshot.js
+++ b/chrome/browser/resources/feedback/js/take_screenshot.js
@@ -4,8 +4,8 @@
 
 /**
  * Function to take the screenshot of the current screen.
- * @param {function(string)} callback Callback for returning the data URL to the
- *                           screenshot.
+ * @param {function(HTMLCanvasElement)} callback Callback for returning the
+ *                                      canvas with the screenshot on it.
  */
 function takeScreenshot(callback) {
   var screenshotStream = null;
@@ -25,7 +25,7 @@ function takeScreenshot(callback) {
       screenshotStream.stop();
       screenshotStream = null;
 
-      callback(canvas.toDataURL('image/png'));
+      callback(canvas);
     }
   }, false);