From 18ce3ebaed503898caa7991877a2484221276c97 Mon Sep 17 00:00:00 2001
From: Julian Viereck <julian.viereck@gmail.com>
Date: Wed, 14 Sep 2011 10:08:10 -0700
Subject: [PATCH] Just use imageData directly on Gecko

---
 pdf.js    | 30 +++++++++++++++++++++---------
 worker.js |  4 ++--
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/pdf.js b/pdf.js
index 23dd910aa..141d10876 100644
--- a/pdf.js
+++ b/pdf.js
@@ -6,6 +6,11 @@
 var ERRORS = 0, WARNINGS = 1, TODOS = 5;
 var verbosity = WARNINGS;
 
+var isGecko = false;
+if (typeof navigator !== 'undefined') {
+  isGecko = navigator.userAgent.indexOf("Gecko/") !== -1;
+}
+
 function log(msg) {
   if (console && console.log)
     console.log(msg);
@@ -5469,19 +5474,26 @@ var CanvasGraphics = (function() {
       // scale the image to the unit square
       ctx.scale(1 / w, -1 / h);
 
-
       var tmpCanvas = new this.ScratchCanvas(w, h);
       var tmpCtx = tmpCanvas.getContext('2d');
-      var tmpImgData = tmpCtx.getImageData(0, 0, w, h);
+      var tmpImgData;
+      
+      // Gecko doesn't care too much of the shape of imgData, but other browser
+      // do.
+      if (isGecko) {
+        tmpImgData = imgData;
+      } else {
+        tmpImgData = tmpCtx.getImageData(0, 0, w, h);
 
-      // Copy over the imageData.
-      var tmpImgDataPixels = tmpImgData.data;
-      var len = tmpImgDataPixels.length;
+        // Copy over the imageData.
+        var tmpImgDataPixels = tmpImgData.data;
+        var len = tmpImgDataPixels.length;
 
-      // TODO: There got to be a better way to copy an ImageData array
-      // then coping over all the bytes one by one :/
-      while (len--) 
-        tmpImgDataPixels[len] = imgData.data[len];
+        // TODO: There got to be a better way to copy an ImageData array
+        // then coping over all the bytes one by one :/
+        while (len--) 
+          tmpImgDataPixels[len] = imgData.data[len];
+      }
 
       tmpCtx.putImageData(tmpImgData, 0, 0);
       ctx.drawImage(tmpCanvas, 0, -h);
diff --git a/worker.js b/worker.js
index a1bbf85a6..b46326160 100644
--- a/worker.js
+++ b/worker.js
@@ -85,7 +85,7 @@ var Objects = {
   get: function(objId) {
     var obj = Objects[objId];
     if (!obj || !obj.isResolved) {
-      throw "Requesting object that isn't resolved yet";
+      throw "Requesting object that isn't resolved yet " + objId;
     }
     return obj.data;
   }
@@ -162,7 +162,7 @@ var WorkerPDFDoc = (function() {
     
     this.pageCache = [];
     
-    var useWorker = false;
+    var useWorker = true;
     
     if (useWorker) {
       var worker = new Worker("../worker/boot_processor.js");