From a4c5b6095b515e843b870007264c359fdb177ee7 Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Fri, 13 May 2011 00:19:50 -0700 Subject: [PATCH] use defineProperty to shadow getters --- pdf.js | 17 +++++++++++------ test.html | 9 ++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/pdf.js b/pdf.js index 928878893..0461dd340 100644 --- 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. diff --git a/test.html b/test.html index f938b5c94..237207c0e 100644 --- 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);