Commit fedca72d authored by François Degros's avatar François Degros Committed by Commit Bot

[Files app] ES6 class for image_parsers.js

Bug: 778674
Change-Id: I4f545b2c914adc2dff16489610f4134b062609e8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1647494
Commit-Queue: François Degros <fdegros@chromium.org>
Commit-Queue: Luciano Pacheco <lucmult@chromium.org>
Auto-Submit: François Degros <fdegros@chromium.org>
Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
Cr-Commit-Position: refs/heads/master@{#666563}
parent 0f7f51bb
...@@ -5,29 +5,28 @@ ...@@ -5,29 +5,28 @@
/** /**
* Base class for image metadata parsers that only need to look at a short * Base class for image metadata parsers that only need to look at a short
* fragment at the start of the file. * fragment at the start of the file.
* @param {MetadataParserLogger} parent Parent object. * @abstract
*/
class SimpleImageParser extends ImageParser {
/**
* @param {!MetadataParserLogger} parent Parent object.
* @param {string} type Image type. * @param {string} type Image type.
* @param {RegExp} urlFilter RegExp to match URLs. * @param {!RegExp} urlFilter RegExp to match URLs.
* @param {number} headerSize Size of header. * @param {number} headerSize Size of header.
* @constructor
* @struct
* @extends {ImageParser}
*/ */
function SimpleImageParser(parent, type, urlFilter, headerSize) { constructor(parent, type, urlFilter, headerSize) {
ImageParser.call(this, parent, type, urlFilter); super(parent, type, urlFilter);
/** @public @const {number} */
this.headerSize = headerSize; this.headerSize = headerSize;
} }
SimpleImageParser.prototype.__proto__ = ImageParser.prototype;
/** /**
* @param {File} file File to be parses. * @param {File} file File to be parses.
* @param {Object} metadata Metadata object of the file. * @param {Object} metadata Metadata object of the file.
* @param {function(Object)} callback Success callback. * @param {function(Object)} callback Success callback.
* @param {function(string)} errorCallback Error callback. * @param {function(string)} errorCallback Error callback.
*/ */
SimpleImageParser.prototype.parse = function( parse(file, metadata, callback, errorCallback) {
file, metadata, callback, errorCallback) {
const self = this; const self = this;
MetadataParser.readFileBytes(file, 0, this.headerSize, (file, br) => { MetadataParser.readFileBytes(file, 0, this.headerSize, (file, br) => {
try { try {
...@@ -37,34 +36,33 @@ SimpleImageParser.prototype.parse = function( ...@@ -37,34 +36,33 @@ SimpleImageParser.prototype.parse = function(
errorCallback(e.toString()); errorCallback(e.toString());
} }
}, errorCallback); }, errorCallback);
}; }
/** /**
* Parse header of an image. Inherited class must implement this. * Parse header of an image. Inherited class must implement this.
* @abstract
* @param {Object} metadata Dictionary to store the parsed metadata. * @param {Object} metadata Dictionary to store the parsed metadata.
* @param {ByteReader} byteReader Reader for header binary data. * @param {ByteReader} byteReader Reader for header binary data.
*/ */
SimpleImageParser.prototype.parseHeader = (metadata, byteReader) => {}; parseHeader(metadata, byteReader) {}
}
/** /**
* Parser for the header of png files. * Parser for the header of png files.
* @param {MetadataParserLogger} parent Parent object. * @final
* @extends {SimpleImageParser}
* @constructor
* @struct
*/ */
function PngParser(parent) { class PngParser extends SimpleImageParser {
SimpleImageParser.call(this, parent, 'png', /\.png$/i, 24); /**
} * @param {!MetadataParserLogger} parent Parent object.
*/
PngParser.prototype = { constructor(parent) {
__proto__: SimpleImageParser.prototype super(parent, 'png', /\.png$/i, 24);
}; }
/** /**
* @override * @override
*/ */
PngParser.prototype.parseHeader = (metadata, br) => { parseHeader(metadata, br) {
br.setByteOrder(ByteReader.BIG_ENDIAN); br.setByteOrder(ByteReader.BIG_ENDIAN);
const signature = br.readString(8); const signature = br.readString(8);
...@@ -80,29 +78,27 @@ PngParser.prototype.parseHeader = (metadata, br) => { ...@@ -80,29 +78,27 @@ PngParser.prototype.parseHeader = (metadata, br) => {
metadata.width = br.readScalar(4); metadata.width = br.readScalar(4);
metadata.height = br.readScalar(4); metadata.height = br.readScalar(4);
}; }
}
registerParserClass(PngParser); registerParserClass(PngParser);
/** /**
* Parser for the header of bmp files. * Parser for the header of bmp files.
* @param {MetadataParserLogger} parent Parent object. * @final
* @constructor
* @extends {SimpleImageParser}
* @struct
*/ */
function BmpParser(parent) { class BmpParser extends SimpleImageParser {
SimpleImageParser.call(this, parent, 'bmp', /\.bmp$/i, 28); /**
} * @param {!MetadataParserLogger} parent Parent object.
*/
BmpParser.prototype = { constructor(parent) {
__proto__: SimpleImageParser.prototype super(parent, 'bmp', /\.bmp$/i, 28);
}; }
/** /**
* @override * @override
*/ */
BmpParser.prototype.parseHeader = (metadata, br) => { parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN); br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = br.readString(2); const signature = br.readString(2);
...@@ -113,29 +109,27 @@ BmpParser.prototype.parseHeader = (metadata, br) => { ...@@ -113,29 +109,27 @@ BmpParser.prototype.parseHeader = (metadata, br) => {
br.seek(18); br.seek(18);
metadata.width = br.readScalar(4); metadata.width = br.readScalar(4);
metadata.height = br.readScalar(4); metadata.height = br.readScalar(4);
}; }
}
registerParserClass(BmpParser); registerParserClass(BmpParser);
/** /**
* Parser for the header of gif files. * Parser for the header of gif files.
* @param {MetadataParserLogger} parent Parent object. * @final
* @constructor
* @extends {SimpleImageParser}
* @struct
*/ */
function GifParser(parent) { class GifParser extends SimpleImageParser {
SimpleImageParser.call(this, parent, 'gif', /\.Gif$/i, 10); /**
} * @param {!MetadataParserLogger} parent Parent object.
*/
GifParser.prototype = { constructor(parent) {
__proto__: SimpleImageParser.prototype super(parent, 'gif', /\.Gif$/i, 10);
}; }
/** /**
* @override * @override
*/ */
GifParser.prototype.parseHeader = (metadata, br) => { parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN); br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = br.readString(6); const signature = br.readString(6);
...@@ -145,29 +139,27 @@ GifParser.prototype.parseHeader = (metadata, br) => { ...@@ -145,29 +139,27 @@ GifParser.prototype.parseHeader = (metadata, br) => {
metadata.width = br.readScalar(2); metadata.width = br.readScalar(2);
metadata.height = br.readScalar(2); metadata.height = br.readScalar(2);
}; }
}
registerParserClass(GifParser); registerParserClass(GifParser);
/** /**
* Parser for the header of webp files. * Parser for the header of webp files.
* @param {MetadataParserLogger} parent Parent object. * @final
* @constructor
* @extends {SimpleImageParser}
* @struct
*/ */
function WebpParser(parent) { class WebpParser extends SimpleImageParser {
SimpleImageParser.call(this, parent, 'webp', /\.webp$/i, 30); /**
} * @param {!MetadataParserLogger} parent Parent object.
*/
WebpParser.prototype = { constructor(parent) {
__proto__: SimpleImageParser.prototype super(parent, 'webp', /\.webp$/i, 30);
}; }
/** /**
* @override * @override
*/ */
WebpParser.prototype.parseHeader = (metadata, br) => { parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN); br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const riffSignature = br.readString(4); const riffSignature = br.readString(4);
...@@ -220,28 +212,27 @@ WebpParser.prototype.parseHeader = (metadata, br) => { ...@@ -220,28 +212,27 @@ WebpParser.prototype.parseHeader = (metadata, br) => {
default: default:
throw new Error('Invalid chunk format: ' + chunkFormat); throw new Error('Invalid chunk format: ' + chunkFormat);
} }
}; }
}
registerParserClass(WebpParser); registerParserClass(WebpParser);
/** /**
* Parser for the header of .ico icon files. * Parser for the header of .ico icon files.
* @param {MetadataParserLogger} parent Parent metadata dispatcher object. * @final
* @constructor
* @extends {SimpleImageParser}
*/ */
function IcoParser(parent) { class IcoParser extends SimpleImageParser {
SimpleImageParser.call(this, parent, 'ico', /\.ico$/i, 8); /**
} * @param {!MetadataParserLogger} parent Parent metadata dispatcher object.
*/
IcoParser.prototype = { constructor(parent) {
__proto__: SimpleImageParser.prototype super(parent, 'ico', /\.ico$/i, 8);
}; }
/** /**
* @override * @override
*/ */
IcoParser.prototype.parseHeader = (metadata, byteReader) => { parseHeader(metadata, byteReader) {
byteReader.setByteOrder(ByteReader.LITTLE_ENDIAN); byteReader.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = byteReader.readString(4); const signature = byteReader.readString(4);
...@@ -252,6 +243,7 @@ IcoParser.prototype.parseHeader = (metadata, byteReader) => { ...@@ -252,6 +243,7 @@ IcoParser.prototype.parseHeader = (metadata, byteReader) => {
byteReader.seek(2); byteReader.seek(2);
metadata.width = byteReader.readScalar(1); metadata.width = byteReader.readScalar(1);
metadata.height = byteReader.readScalar(1); metadata.height = byteReader.readScalar(1);
}; }
}
registerParserClass(IcoParser); registerParserClass(IcoParser);
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