]> git.parisson.com Git - pdf.js.git/commitdiff
Add Objects.setData and Promise.data to set the data before the object/promise is...
authorJulian Vierec <jviereck@Mozilla-Corporations-MacBook-Pro-7.local>
Tue, 13 Sep 2011 14:49:35 +0000 (07:49 -0700)
committerJulian Viereck <julian.viereck@gmail.com>
Thu, 15 Sep 2011 20:17:09 +0000 (13:17 -0700)
fonts.js
pdf.js
worker.js

index 6fb99a4d21d48aa6f7ec52419027f1b6e75b2ffe..59a654aeb17e1d15ba26ada4538fff7b19b7698e 100755 (executable)
--- a/fonts.js
+++ b/fonts.js
@@ -192,7 +192,6 @@ var FontLoader = {
     for (var i = 0; i < this.waitingFontObjs.length; i++) {
       var fontObj = this.waitingFontObjs[i];
       var rule = this.bindDOM(fontObj);
-      this.fonts[objIds[i]] = fontObj;
       names.push(fontObj.loadedName);
       rules.push(rule);
     }
@@ -205,8 +204,7 @@ var FontLoader = {
   fontLoadEvent: function(objIds) {
     for (var i = 0; i < objIds.length; i++) {
       var objId = objIds[i];
-      Objects.resolve(objId, this.fonts[objId]);
-      delete this.fonts[objId];
+      Objects.resolve(objId);
     }
     
     this.fontsLoading = false;
diff --git a/pdf.js b/pdf.js
index e7c3d6efa1a7772e257ec11b6e374102f1d928b3..6068785ba3fd933ced1b0622880494c8bcc0f53b 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -4884,12 +4884,8 @@ var CanvasGraphics = (function() {
             var deps = argsArray[i];
             for (var n = 0; n < deps.length; n++) {
               var depObjId = deps[n];
-              var promise;
-              if (!Objects[depObjId]) {
-                promise = Objects[depObjId] = new Promise(depObjId);
-              } else {
-                promise = Objects[depObjId];
-              }
+              var promise = Objects.getPromise(depObjId);
+
               // If the promise isn't resolved yet, add the continueCallback
               // to the promise and bail out.
               if (!promise.isResolved) {
index 9c6bf40df562e9ee917dde202b141ba8eb60ad45..a1bbf85a621de0db5347ded9da7ffac7ef07ab5c 100644 (file)
--- a/worker.js
+++ b/worker.js
@@ -60,6 +60,19 @@ var WorkerPage = (function() {
 
 // This holds a list of objects the IR queue depends on.
 var Objects = {
+  getPromise: function(objId) {
+         if (Objects[objId]) {
+           return this[objId];
+         } else {
+           return this[objId] = new Promise(objId);
+         }
+  },
+  
+  setData: function(objId, data) {
+    var promise = this.getPromise(objId);
+    promise.data = data;
+  },
+       
   resolve: function(objId, data) {
     // In case there is a promise already on this object, just resolve it.
     if (Objects[objId]) {
@@ -79,19 +92,39 @@ var Objects = {
 };
 
 var Promise = (function() {
+  var EMPTY_PROMISE = {};
+
   function Promise(name, data) {
     this.name = name;
     // If you build a promise and pass in some data it's already resolved.
     if (data != null) {
       this.isResolved = true;
-      this.data = data;
+      this.$data = data;
     } else {
       this.isResolved = false;      
+      this.$data = EMPTY_PROMISE;
     }
     this.callbacks = [];
   };
   
   Promise.prototype = {
+    set data(data) {
+      if (data === undefined) {
+        return;
+      }
+      if (this.$data !== EMPTY_PROMISE) {
+        throw "Promise " + this.name + ": Cannot set the data of a promise twice";
+      }
+      this.$data = data;
+    },
+    
+    get data() {
+      if (this.$data === EMPTY_PROMISE) {
+        throw "Promise " + this.name + ": Cannot get data that isn't set";
+      }
+      return this.$data;
+    },
+    
     resolve: function(data) {
       if (this.isResolved) {
         throw "A Promise can be resolved only once";
@@ -109,7 +142,8 @@ var Promise = (function() {
     then: function(callback) {
       // If the promise is already resolved, call the callback directly.
       if (this.isResolved) {
-        callback.call(null, this.data);
+        var data = this.data;
+        callback.call(null, data);
       } else {
         this.callbacks.push(callback);        
       }
@@ -128,7 +162,7 @@ var WorkerPDFDoc = (function() {
     
     this.pageCache = [];
     
-    var useWorker = true;
+    var useWorker = false;
     
     if (useWorker) {
       var worker = new Worker("../worker/boot_processor.js");
@@ -181,6 +215,7 @@ var WorkerPDFDoc = (function() {
       if (!fontObj.str) {
         Objects.resolve(objId, fontObj);
       } else {
+        Objects.setData(objId, fontObj);
         FontLoader.bind(objId, fontObj);
       }
     });