Re-factor PartialEvaluator.buildPaintImageXObject to make it asynchronous

This is necessary for upcoming changes, which will add fallback code-paths to allow graceful handling of native image decoding failures.
This commit is contained in:
Jonas Jenwald 2018-02-01 15:53:37 +01:00
parent ec85d5c625
commit 7f73fc9ace

View File

@ -357,12 +357,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
if (!(w && isNum(w)) || !(h && isNum(h))) { if (!(w && isNum(w)) || !(h && isNum(h))) {
warn('Image dimensions are missing, or not numbers.'); warn('Image dimensions are missing, or not numbers.');
return; return Promise.resolve();
} }
var maxImageSize = this.options.maxImageSize; var maxImageSize = this.options.maxImageSize;
if (maxImageSize !== -1 && w * h > maxImageSize) { if (maxImageSize !== -1 && w * h > maxImageSize) {
warn('Image exceeded maximum allowed size and was removed.'); warn('Image exceeded maximum allowed size and was removed.');
return; return Promise.resolve();
} }
var imageMask = (dict.get('ImageMask', 'IM') || false); var imageMask = (dict.get('ImageMask', 'IM') || false);
@ -396,7 +396,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args, args,
}; };
} }
return; return Promise.resolve();
} }
var softMask = (dict.get('SMask', 'SM') || false); var softMask = (dict.get('SMask', 'SM') || false);
@ -417,7 +417,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// any other kind. // any other kind.
imgData = imageObj.createImageData(/* forceRGBA = */ true); imgData = imageObj.createImageData(/* forceRGBA = */ true);
operatorList.addOp(OPS.paintInlineImageXObject, [imgData]); operatorList.addOp(OPS.paintInlineImageXObject, [imgData]);
return; return Promise.resolve();
} }
var nativeImageDecoderSupport = this.options.nativeImageDecoderSupport; var nativeImageDecoderSupport = this.options.nativeImageDecoderSupport;
@ -441,7 +441,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args, args,
}; };
} }
return; return Promise.resolve();
} }
// Creates native image decoder only if a JPEG image or mask is present. // Creates native image decoder only if a JPEG image or mask is present.
@ -482,6 +482,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args, args,
}; };
} }
return Promise.resolve();
}, },
handleSMask: function PartialEvaluator_handleSmask(smask, resources, handleSMask: function PartialEvaluator_handleSmask(smask, resources,
@ -993,7 +994,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList, operatorList,
cacheKey: name, cacheKey: name,
imageCache, imageCache,
}); }).then(resolveXObject, rejectXObject);
return;
} else if (type.name === 'PS') { } else if (type.name === 'PS') {
// PostScript XObjects are unused when viewing documents. // PostScript XObjects are unused when viewing documents.
// See section 4.7.1 of Adobe's PDF reference. // See section 4.7.1 of Adobe's PDF reference.
@ -1035,16 +1037,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
continue; continue;
} }
} }
self.buildPaintImageXObject({ next(self.buildPaintImageXObject({
resources, resources,
image: args[0], image: args[0],
isInline: true, isInline: true,
operatorList, operatorList,
cacheKey, cacheKey,
imageCache, imageCache,
}); }));
args = null; return;
continue;
case OPS.showText: case OPS.showText:
args[0] = self.handleText(args[0], stateManager.state); args[0] = self.handleText(args[0], stateManager.state);
break; break;