blob: 1422858591393f7cec4cf866883d067ea64d7eee [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
/**
* Encodes an image to data URL by using ImageEncoder.getBlob.
*/
function encodeAnImageAsDataURL(canvas, metadata, imageQuality) {
return new Promise(function(resolve, reject) {
// Thumbnail quality is fixed to 1.0 in this test.
var encoder = ImageEncoder.encodeMetadata(metadata, canvas, 1.0);
var blob = ImageEncoder.getBlob(canvas, encoder, imageQuality);
var fileReader = new FileReader();
fileReader.onerror = function() {
reject(fileReader.error);
};
fileReader.onloadend = function() {
resolve(fileReader.result);
};
fileReader.readAsDataURL(blob);
});
}
/**
* Test case for png image.
* Png image should be saved as a png image.
*/
function testPngImage(callback) {
var canvas = getSampleCanvas();
var metadata = {
mediaMimeType: 'image/png'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then(
function(result) {
assertEquals(canvas.toDataURL('image/png'), result);
}), callback);
}
/**
* Test case for jpeg image.
* Jpeg image should be saved as a jpeg image. Since we don't include
* exif_encoder.js in this test, no metadata is added to the blob.
*/
function testJpegImage(callback) {
var canvas = getSampleCanvas();
var metadata = {
mediaMimeType: 'image/jpeg'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then(
function(result) {
assertEquals(canvas.toDataURL('image/jpeg', 0.9), result);
}), callback);
}
/**
* Test case of webp image.
* Image should be saved as a image/png since chrome doesn't support to
* encode other than image/jpeg or image/png.
*/
function testWebpImage(callback) {
var canvas = getSampleCanvas();
var metadata = {
mediaMimeType: 'image/webp'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then(
function(result) {
assertEquals(canvas.toDataURL('image/png'), result);
}), callback);
}
/**
* Test case for broken metadata.
*/
function testWithBrokenMetadata() {
var canvas = getSampleCanvas();
var metadata = /** @type {!MetadataItem} */ ({
// No mimetype field.
});
// An exception should be thrown if metadata is broken.
const quality = 0.5;
assertThrows(function() {
var encoder = ImageEncoder.encodeMetadata(metadata, canvas, quality);
});
}