Commit d9bade00 authored by Trent Apted's avatar Trent Apted Committed by Commit Bot

Add some missing closure annotations for piex_loader.js.

These changes allow the file to be consumed by targets compiled with
null checks and reportUnknownTypes.

Bug: 1030935, 1132695
Change-Id: Ib898151aeecaeb0636e12b7d79ed4a2335ef8278
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2428274
Commit-Queue: Trent Apted <tapted@chromium.org>
Commit-Queue: Noel Gordon <noel@chromium.org>
Reviewed-by: default avatarNoel Gordon <noel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811991}
parent e4ce6f4e
...@@ -51,12 +51,15 @@ PiexModule.onAbort = (error) => { ...@@ -51,12 +51,15 @@ PiexModule.onAbort = (error) => {
* Loading the entire page is the only reliable way to recover from broken * Loading the entire page is the only reliable way to recover from broken
* Module state. Log the error, and return true to tell caller to initiate * Module state. Log the error, and return true to tell caller to initiate
* failure recovery steps. * failure recovery steps.
*
* @return {boolean}
*/ */
function piexModuleFailed() { function piexModuleFailed() {
if (piexFailed || !PiexModule.calledRun) { if (piexFailed || !PiexModule.calledRun) {
console.error('[PiexLoader] piex wasm module failed'); console.error('[PiexLoader] piex wasm module failed');
return true; return true;
} }
return false;
} }
/** /**
...@@ -127,6 +130,7 @@ function readSourceData(source) { ...@@ -127,6 +130,7 @@ function readSourceData(source) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
/** /**
* Reject the Promise on fileEntry URL resolve or file read failures. * Reject the Promise on fileEntry URL resolve or file read failures.
* @param {!Error|string|!ProgressEvent<!FileReader>|!FileError} error
*/ */
function failure(error) { function failure(error) {
reject(new Error('Reading file system: ' + (error.message || error))); reject(new Error('Reading file system: ' + (error.message || error)));
...@@ -150,7 +154,9 @@ function readSourceData(source) { ...@@ -150,7 +154,9 @@ function readSourceData(source) {
if (valid(file.size)) { if (valid(file.size)) {
const reader = new FileReader(); const reader = new FileReader();
reader.onerror = failure; reader.onerror = failure;
reader.onload = (_) => resolve(reader.result); reader.onload = (_) => {
resolve(reader.result);
};
reader.readAsArrayBuffer(file); reader.readAsArrayBuffer(file);
} else { } else {
failure('invalid file size: ' + file.size); failure('invalid file size: ' + file.size);
...@@ -447,8 +453,11 @@ class ImageBuffer { ...@@ -447,8 +453,11 @@ class ImageBuffer {
return null; return null;
} }
/** @type {!Object<string|number, number|string>} */
const format = {}; const format = {};
for (const [key, value] of Object.entries(details)) { /** @type {!Array<!Array<string|number>>} */
const entries = Object.entries(details);
for (const [key, value] of entries) {
if (typeof value === 'string') { if (typeof value === 'string') {
format[key] = value.replace(/\0+$/, '').trim(); format[key] = value.replace(/\0+$/, '').trim();
} else if (typeof value === 'number') { } else if (typeof value === 'number') {
...@@ -462,9 +471,9 @@ class ImageBuffer { ...@@ -462,9 +471,9 @@ class ImageBuffer {
const usesWidthAsHeight = orientation >= 5; const usesWidthAsHeight = orientation >= 5;
if (usesWidthAsHeight) { if (usesWidthAsHeight) {
const width = format.width; const width = format['width'];
format.width = format.height; format['width'] = format['height'];
format.height = width; format['height'] = width;
} }
return JSON.stringify(format); return JSON.stringify(format);
...@@ -498,27 +507,29 @@ function PiexLoader() {} ...@@ -498,27 +507,29 @@ function PiexLoader() {}
* the caller should initiate failure recovery steps. * the caller should initiate failure recovery steps.
* *
* @param {!ArrayBuffer|!File|string} source * @param {!ArrayBuffer|!File|string} source
* @param {!function()} onPiexModuleFailed * @param {function()} onPiexModuleFailed
* @return {!Promise<!PiexLoaderResponse>} * @return {!Promise<!PiexLoaderResponse>}
*/ */
PiexLoader.prototype.load = function(source, onPiexModuleFailed) { PiexLoader.prototype.load = function(source, onPiexModuleFailed) {
/** @type {?ImageBuffer} */
let imageBuffer; let imageBuffer;
return readSourceData(source) return readSourceData(source)
.then((buffer) => { .then((buffer) => {
if (piexModuleFailed() === true) { if (piexModuleFailed()) {
// Just reject here: handle in the .catch() clause below. // Just reject here: handle in the .catch() clause below.
return Promise.reject('piex wasm module failed'); return Promise.reject('piex wasm module failed');
} }
imageBuffer = new ImageBuffer(buffer); imageBuffer = new ImageBuffer(buffer);
return imageBuffer.process(); return imageBuffer.process();
}) })
.then((result) => { .then((/** !PiexWasmImageResult */ result) => {
imageBuffer.close(); const buffer = /** @type {!ImageBuffer} */ (imageBuffer);
return new PiexLoaderResponse(imageBuffer.preview(result)); buffer.close();
return new PiexLoaderResponse(buffer.preview(result));
}) })
.catch((error) => { .catch((error) => {
if (piexModuleFailed() === true) { if (piexModuleFailed()) {
setTimeout(onPiexModuleFailed, 0); setTimeout(onPiexModuleFailed, 0);
return Promise.reject('piex wasm module failed'); return Promise.reject('piex wasm module failed');
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment