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 @@
/**
* Base class for image metadata parsers that only need to look at a short
* 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 {RegExp} urlFilter RegExp to match URLs.
* @param {!RegExp} urlFilter RegExp to match URLs.
* @param {number} headerSize Size of header.
* @constructor
* @struct
* @extends {ImageParser}
*/
function SimpleImageParser(parent, type, urlFilter, headerSize) {
ImageParser.call(this, parent, type, urlFilter);
constructor(parent, type, urlFilter, headerSize) {
super(parent, type, urlFilter);
/** @public @const {number} */
this.headerSize = headerSize;
}
SimpleImageParser.prototype.__proto__ = ImageParser.prototype;
}
/**
/**
* @param {File} file File to be parses.
* @param {Object} metadata Metadata object of the file.
* @param {function(Object)} callback Success callback.
* @param {function(string)} errorCallback Error callback.
*/
SimpleImageParser.prototype.parse = function(
file, metadata, callback, errorCallback) {
parse(file, metadata, callback, errorCallback) {
const self = this;
MetadataParser.readFileBytes(file, 0, this.headerSize, (file, br) => {
try {
......@@ -37,34 +36,33 @@ SimpleImageParser.prototype.parse = function(
errorCallback(e.toString());
}
}, errorCallback);
};
}
/**
/**
* Parse header of an image. Inherited class must implement this.
* @abstract
* @param {Object} metadata Dictionary to store the parsed metadata.
* @param {ByteReader} byteReader Reader for header binary data.
*/
SimpleImageParser.prototype.parseHeader = (metadata, byteReader) => {};
parseHeader(metadata, byteReader) {}
}
/**
* Parser for the header of png files.
* @param {MetadataParserLogger} parent Parent object.
* @extends {SimpleImageParser}
* @constructor
* @struct
* @final
*/
function PngParser(parent) {
SimpleImageParser.call(this, parent, 'png', /\.png$/i, 24);
}
PngParser.prototype = {
__proto__: SimpleImageParser.prototype
};
class PngParser extends SimpleImageParser {
/**
* @param {!MetadataParserLogger} parent Parent object.
*/
constructor(parent) {
super(parent, 'png', /\.png$/i, 24);
}
/**
/**
* @override
*/
PngParser.prototype.parseHeader = (metadata, br) => {
parseHeader(metadata, br) {
br.setByteOrder(ByteReader.BIG_ENDIAN);
const signature = br.readString(8);
......@@ -80,29 +78,27 @@ PngParser.prototype.parseHeader = (metadata, br) => {
metadata.width = br.readScalar(4);
metadata.height = br.readScalar(4);
};
}
}
registerParserClass(PngParser);
/**
* Parser for the header of bmp files.
* @param {MetadataParserLogger} parent Parent object.
* @constructor
* @extends {SimpleImageParser}
* @struct
* @final
*/
function BmpParser(parent) {
SimpleImageParser.call(this, parent, 'bmp', /\.bmp$/i, 28);
}
BmpParser.prototype = {
__proto__: SimpleImageParser.prototype
};
class BmpParser extends SimpleImageParser {
/**
* @param {!MetadataParserLogger} parent Parent object.
*/
constructor(parent) {
super(parent, 'bmp', /\.bmp$/i, 28);
}
/**
/**
* @override
*/
BmpParser.prototype.parseHeader = (metadata, br) => {
parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = br.readString(2);
......@@ -113,29 +109,27 @@ BmpParser.prototype.parseHeader = (metadata, br) => {
br.seek(18);
metadata.width = br.readScalar(4);
metadata.height = br.readScalar(4);
};
}
}
registerParserClass(BmpParser);
/**
* Parser for the header of gif files.
* @param {MetadataParserLogger} parent Parent object.
* @constructor
* @extends {SimpleImageParser}
* @struct
* @final
*/
function GifParser(parent) {
SimpleImageParser.call(this, parent, 'gif', /\.Gif$/i, 10);
}
GifParser.prototype = {
__proto__: SimpleImageParser.prototype
};
class GifParser extends SimpleImageParser {
/**
* @param {!MetadataParserLogger} parent Parent object.
*/
constructor(parent) {
super(parent, 'gif', /\.Gif$/i, 10);
}
/**
/**
* @override
*/
GifParser.prototype.parseHeader = (metadata, br) => {
parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = br.readString(6);
......@@ -145,29 +139,27 @@ GifParser.prototype.parseHeader = (metadata, br) => {
metadata.width = br.readScalar(2);
metadata.height = br.readScalar(2);
};
}
}
registerParserClass(GifParser);
/**
* Parser for the header of webp files.
* @param {MetadataParserLogger} parent Parent object.
* @constructor
* @extends {SimpleImageParser}
* @struct
* @final
*/
function WebpParser(parent) {
SimpleImageParser.call(this, parent, 'webp', /\.webp$/i, 30);
}
WebpParser.prototype = {
__proto__: SimpleImageParser.prototype
};
class WebpParser extends SimpleImageParser {
/**
* @param {!MetadataParserLogger} parent Parent object.
*/
constructor(parent) {
super(parent, 'webp', /\.webp$/i, 30);
}
/**
/**
* @override
*/
WebpParser.prototype.parseHeader = (metadata, br) => {
parseHeader(metadata, br) {
br.setByteOrder(ByteReader.LITTLE_ENDIAN);
const riffSignature = br.readString(4);
......@@ -220,28 +212,27 @@ WebpParser.prototype.parseHeader = (metadata, br) => {
default:
throw new Error('Invalid chunk format: ' + chunkFormat);
}
};
}
}
registerParserClass(WebpParser);
/**
* Parser for the header of .ico icon files.
* @param {MetadataParserLogger} parent Parent metadata dispatcher object.
* @constructor
* @extends {SimpleImageParser}
* @final
*/
function IcoParser(parent) {
SimpleImageParser.call(this, parent, 'ico', /\.ico$/i, 8);
}
IcoParser.prototype = {
__proto__: SimpleImageParser.prototype
};
class IcoParser extends SimpleImageParser {
/**
* @param {!MetadataParserLogger} parent Parent metadata dispatcher object.
*/
constructor(parent) {
super(parent, 'ico', /\.ico$/i, 8);
}
/**
/**
* @override
*/
IcoParser.prototype.parseHeader = (metadata, byteReader) => {
parseHeader(metadata, byteReader) {
byteReader.setByteOrder(ByteReader.LITTLE_ENDIAN);
const signature = byteReader.readString(4);
......@@ -252,6 +243,7 @@ IcoParser.prototype.parseHeader = (metadata, byteReader) => {
byteReader.seek(2);
metadata.width = byteReader.readScalar(1);
metadata.height = byteReader.readScalar(1);
};
}
}
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