]> git.parisson.com Git - pdf.js.git/commitdiff
use defineProperty to shadow getters
authorAndreas Gal <andreas.gal@gmail.com>
Fri, 13 May 2011 07:19:50 +0000 (00:19 -0700)
committerAndreas Gal <andreas.gal@gmail.com>
Fri, 13 May 2011 07:19:50 +0000 (00:19 -0700)
pdf.js
test.html

diff --git a/pdf.js b/pdf.js
index 9288788939baca06c3c0eea3feff5899c3c8cffd..0461dd34042d6a2a956ea487f2dbf7bcdce252bb 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -12,9 +12,14 @@ function error(msg) {
     throw new Error(msg);
 }
 
+function shadow(obj, prop, value) {
+    Object.defineProperty(obj, prop, { value: value, enumerable: true });
+    return value;
+}
+
 var Stream = (function() {
     function constructor(arrayBuffer) {
-        this.bytes = Uint8Array(arrayBuffer);
+        this.bytes = new Uint8Array(arrayBuffer);
         this.pos = 0;
         this.start = 0;
     }
@@ -1857,14 +1862,14 @@ var Catalog = (function() {
             if (!IsDict(obj))
                 error("invalid top-level pages dictionary");
             // shadow the prototype getter
-            return this.toplevelPagesDict = obj;
+            return shadow(this, "toplevelPagesDict", obj);
         },
         get numPages() {
             obj = this.toplevelPagesDict.get("Count");
             if (!IsInt(obj))
                 error("page count in top level pages object is not an integer");
             // shadow the prototype getter
-            return this.numPages = obj;
+            return shadow(this, "num", obj);
         },
         traverseKids: function(pagesDict) {
             var pageCache = this.pageCache;
@@ -1930,7 +1935,7 @@ var PDFDoc = (function() {
                     linearization = false;
             }
             // shadow the prototype getter with a data property
-            return this.linearization = linearization;
+            return shadow(this, "linearization", linearization);
         },
         get startXRef() {
             var stream = this.stream;
@@ -1963,7 +1968,7 @@ var PDFDoc = (function() {
                 }
             }
             // shadow the prototype getter with a data property
-            return this.startXRef = startXRef;
+            return shadow(this, "startXRef", startXRef);
         },
         get mainXRefEntriesOffset() {
             var mainXRefEntriesOffset = 0;
@@ -1971,7 +1976,7 @@ var PDFDoc = (function() {
             if (linearization)
                 mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;
             // shadow the prototype getter with a data property
-            return this.mainXRefEntriesOffset = mainXRefEntriesOffset;
+            return shadow(this, "mainXRefEntriesOffset", mainXRefEntriesOffset);
         },
         // Find the header, remove leading garbage and setup the stream
         // starting from the header.
index f938b5c94b7eb9cb469f796a03c0721816684362..237207c0eb193619d5acc6ddabd052eb17a9528a 100644 (file)
--- a/test.html
+++ b/test.html
@@ -29,15 +29,18 @@ function load() {
 
     req = new XMLHttpRequest();
     req.open("GET", "uncompressed.tracemonkey-pldi-09.pdf");
-    req.mozResponseType = "arraybuffer";
-    req.expected = 0; // 200 for HTTP
+    req.mozResponseType = req.responseType = "arraybuffer";
+    req.expected = (document.URL.indexOf("file:") == 0) ? 0 : 200;
     req.onreadystatechange = xhrstate;
     req.send(null);
 }
 
 function xhrstate() {
     if (req.readyState == 4 && req.status == req.expected) {
-        var data = req.mozResponseArrayBuffer || req.mozResponse;
+        var data = req.mozResponseArrayBuffer ||
+                   req.mozResponse ||
+                   req.responseArrayBuffer ||
+                   req.response;
         pdf = new PDFDoc(new Stream(data));
         numPages = pdf.numPages;
         displayPage(1);