Commit f47cd2af authored by Jérémie Boulic's avatar Jérémie Boulic Committed by Commit Bot

Audio player: Convert //ui/.../metadata/exif_parser and dependencies

JS Modules for the following files:

//ui/file_manager/file_manager/foreground/js/metadata/:
- exif_parser.js
- exif_parser_unittest.js

//ui/file_manager/externs/:
- exif_entry.js

//ui/file_manager/gallery/js/image_editor/:
- test_util.js
- image_util.js
- image_encoder.js
- image_encoder_unittest.js
- exif_encoder.js
- exif_encoder_unittest.js
- exif_parser.js
- exif_parser_unittest.js

Bug: 1133186
Change-Id: I696fde015e7f8bbea44544ef8721aed2e9a1a59d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2536660
Commit-Queue: Jeremie Boulic <jboulic@chromium.org>
Auto-Submit: Jeremie Boulic <jboulic@chromium.org>
Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827723}
parent 6bf9b8c8
...@@ -62,7 +62,7 @@ IN_PROC_BROWSER_TEST_F(FileManagerJsTest, DuplicateFinderTest) { ...@@ -62,7 +62,7 @@ IN_PROC_BROWSER_TEST_F(FileManagerJsTest, DuplicateFinderTest) {
} }
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ExifParser) { IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ExifParser) {
RunTestURL("foreground/js/metadata/exif_parser_unittest_gen.html"); RunTestURL("foreground/js/metadata/exif_parser_unittest.m_gen.html");
} }
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ExternalMetadataProvider) { IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ExternalMetadataProvider) {
......
...@@ -13,7 +13,7 @@ class GalleryJsTest : public FileManagerJsTestBase { ...@@ -13,7 +13,7 @@ class GalleryJsTest : public FileManagerJsTestBase {
}; };
IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageEncoderTest) { IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageEncoderTest) {
RunTestURL("image_editor/image_encoder_unittest_gen.html"); RunTestURL("image_editor/image_encoder_unittest.m_gen.html");
} }
// Disabled on ASan builds due to a consistent failure. https://crbug.com/762831 // Disabled on ASan builds due to a consistent failure. https://crbug.com/762831
...@@ -23,7 +23,7 @@ IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageEncoderTest) { ...@@ -23,7 +23,7 @@ IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageEncoderTest) {
#define MAYBE_ExifEncoderTest ExifEncoderTest #define MAYBE_ExifEncoderTest ExifEncoderTest
#endif #endif
IN_PROC_BROWSER_TEST_F(GalleryJsTest, MAYBE_ExifEncoderTest) { IN_PROC_BROWSER_TEST_F(GalleryJsTest, MAYBE_ExifEncoderTest) {
RunTestURL("image_editor/exif_encoder_unittest_gen.html"); RunTestURL("image_editor/exif_encoder_unittest.m_gen.html");
} }
IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageViewTest) { IN_PROC_BROWSER_TEST_F(GalleryJsTest, ImageViewTest) {
......
...@@ -68,6 +68,7 @@ group("unit_test_data") { ...@@ -68,6 +68,7 @@ group("unit_test_data") {
"file_manager/foreground/js/ui:js_test_gen_html", "file_manager/foreground/js/ui:js_test_gen_html",
"gallery/js:js_test_gen_html", "gallery/js:js_test_gen_html",
"gallery/js/image_editor:js_test_gen_html", "gallery/js/image_editor:js_test_gen_html",
"gallery/js/image_editor:js_test_gen_html_modules",
"image_loader:js_test_gen_html", "image_loader:js_test_gen_html",
"image_loader:js_test_gen_html_modules", "image_loader:js_test_gen_html_modules",
"video_player/js:js_test_gen_html", "video_player/js:js_test_gen_html",
......
...@@ -37,6 +37,16 @@ js_library("entry_location.m") { ...@@ -37,6 +37,16 @@ js_library("entry_location.m") {
extra_deps = [ ":modulize" ] extra_deps = [ ":modulize" ]
} }
js_library("exif_entry.m") {
sources = [ "$root_gen_dir/ui/file_manager/externs/exif_entry.m.js" ]
deps = [
"//ui/file_manager/file_manager/foreground/js/metadata:exif_constants.m",
]
extra_deps = [ ":modulize" ]
}
js_library("files_app_entry_interfaces.m") { js_library("files_app_entry_interfaces.m") {
sources = [ sources = [
"$root_gen_dir/ui/file_manager/externs/files_app_entry_interfaces.m.js", "$root_gen_dir/ui/file_manager/externs/files_app_entry_interfaces.m.js",
...@@ -105,6 +115,7 @@ js_modulizer("modulize") { ...@@ -105,6 +115,7 @@ js_modulizer("modulize") {
input_files = [ input_files = [
"background_window.js", "background_window.js",
"entry_location.js", "entry_location.js",
"exif_entry.js",
"files_app_entry_interfaces.js", "files_app_entry_interfaces.js",
"metadata_worker_window.js", "metadata_worker_window.js",
"volume_info.js", "volume_info.js",
......
...@@ -2,9 +2,13 @@ ...@@ -2,9 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// clang-format off
// #import * as wrappedExif from '../file_manager/foreground/js/metadata/exif_constants.m.js'; const {Exif} = wrappedExif;
// clang-format on
/** /**
* Type definition of exif entry. * Type definition of exif entry.
* @typedef {{id:!Exif.Tag, format:number, componentCount:number, * @typedef {{id:!Exif.Tag, format:number, componentCount:number,
* value:(undefined|*)}} * value:(undefined|*)}}
*/ */
var ExifEntry; /* #export */ let ExifEntry;
...@@ -25,6 +25,7 @@ js_type_check("closure_compile_jsmodules") { ...@@ -25,6 +25,7 @@ js_type_check("closure_compile_jsmodules") {
deps = [ deps = [
":byte_reader.m", ":byte_reader.m",
":exif_constants.m", ":exif_constants.m",
":exif_parser.m",
":external_metadata_provider.m", ":external_metadata_provider.m",
":file_system_metadata_provider.m", ":file_system_metadata_provider.m",
":function_parallel.m", ":function_parallel.m",
...@@ -109,11 +110,28 @@ js_library("exif_parser") { ...@@ -109,11 +110,28 @@ js_library("exif_parser") {
externs_list = [ "//ui/file_manager/externs/exif_entry.js" ] externs_list = [ "//ui/file_manager/externs/exif_entry.js" ]
} }
js_unittest("exif_parser_unittest") { js_library("exif_parser.m") {
sources = [ "$root_gen_dir/ui/file_manager/file_manager/foreground/js/metadata/exif_parser.m.js" ]
deps = [ deps = [
":exif_parser", ":byte_reader.m",
"//ui/file_manager/base/js:test_error_reporting", ":exif_constants.m",
"//ui/file_manager/gallery/js/image_editor:exif_encoder", ":metadata_parser.m",
"//ui/file_manager/externs:exif_entry.m",
"//ui/file_manager/externs:metadata_worker_window.m",
]
extra_deps = [ ":modulize" ]
}
js_unittest("exif_parser_unittest.m") {
deps = [
":byte_reader.m",
":exif_constants.m",
":exif_parser.m",
"//chrome/test/data/webui:chai_assert",
"//ui/file_manager/externs:exif_entry.m",
"//ui/file_manager/externs:metadata_worker_window.m",
"//ui/file_manager/gallery/js/image_editor:exif_encoder.m",
] ]
} }
...@@ -410,6 +428,7 @@ js_unittest("thumbnail_model_unittest") { ...@@ -410,6 +428,7 @@ js_unittest("thumbnail_model_unittest") {
js_test_gen_html("js_test_gen_html_modules") { js_test_gen_html("js_test_gen_html_modules") {
deps = [ deps = [
":exif_parser_unittest.m",
":external_metadata_provider_unittest.m", ":external_metadata_provider_unittest.m",
":file_system_metadata_provider_unittest.m", ":file_system_metadata_provider_unittest.m",
":image_orientation_unittest.m", ":image_orientation_unittest.m",
...@@ -417,17 +436,17 @@ js_test_gen_html("js_test_gen_html_modules") { ...@@ -417,17 +436,17 @@ js_test_gen_html("js_test_gen_html_modules") {
] ]
js_module = true js_module = true
closure_flags = strict_error_checking_closure_args + [ closure_flags =
"js_module_root=./gen/ui/file_manager/file_manager/foreground/js/metadata", strict_error_checking_closure_args + [
"js_module_root=../../ui/file_manager/file_manager/foreground/js/metadata", "js_module_root=./gen/ui",
"browser_resolver_prefix_replacements=\"chrome://test/=./\"", "js_module_root=../../ui",
] "browser_resolver_prefix_replacements=\"chrome://test/=./\"",
]
} }
js_test_gen_html("js_test_gen_html") { js_test_gen_html("js_test_gen_html") {
deps = [ deps = [
":content_metadata_provider_unittest", ":content_metadata_provider_unittest",
":exif_parser_unittest",
":metadata_cache_set_unittest", ":metadata_cache_set_unittest",
":metadata_model_unittest", ":metadata_model_unittest",
":multi_metadata_provider_unittest", ":multi_metadata_provider_unittest",
...@@ -440,6 +459,7 @@ js_modulizer("modulize") { ...@@ -440,6 +459,7 @@ js_modulizer("modulize") {
input_files = [ input_files = [
"byte_reader.js", "byte_reader.js",
"exif_constants.js", "exif_constants.js",
"exif_parser.js",
"external_metadata_provider.js", "external_metadata_provider.js",
"file_system_metadata_provider.js", "file_system_metadata_provider.js",
"function_parallel.js", "function_parallel.js",
......
...@@ -2,11 +2,19 @@ ...@@ -2,11 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
importScripts( // clang-format off
'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/exif_constants.js'); // #import {ByteReader} from './byte_reader.m.js';
// #import * as wrappedExif from './exif_constants.m.js'; const {Exif} = wrappedExif;
// #import {ImageParser} from './metadata_parser.m.js';
// #import {ExifEntry} from '../../../../externs/exif_entry.m.js';
// #import {MetadataParserLogger} from '../../../../externs/metadata_worker_window.m.js';
/* #ignore */ importScripts(
/* #ignore */ 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/exif_constants.js');
// clang-format on
/** @final */ /** @final */
class ExifParser extends ImageParser { /* #export */ class ExifParser extends ImageParser {
/** /**
* @param {!MetadataParserLogger} parent Parent object. * @param {!MetadataParserLogger} parent Parent object.
*/ */
...@@ -274,7 +282,7 @@ class ExifParser extends ImageParser { ...@@ -274,7 +282,7 @@ class ExifParser extends ImageParser {
readDirectory(br, tags) { readDirectory(br, tags) {
const entryCount = br.readScalar(2); const entryCount = br.readScalar(2);
for (let i = 0; i < entryCount; i++) { for (let i = 0; i < entryCount; i++) {
const tagId = /** @type Exif.Tag<number> */ (br.readScalar(2)); const tagId = /** @type !Exif.Tag<number> */ (br.readScalar(2));
const tag = tags[tagId] = {id: tagId}; const tag = tags[tagId] = {id: tagId};
tag.format = br.readScalar(2); tag.format = br.readScalar(2);
tag.componentCount = br.readScalar(4); tag.componentCount = br.readScalar(4);
......
...@@ -2,6 +2,15 @@ ...@@ -2,6 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import {assertEquals, assertTrue} from 'chrome://test/chai_assert.js';
import {ByteWriter} from '../../../../gallery/js/image_editor/exif_encoder.m.js';
import {ByteReader} from './byte_reader.m.js';
import * as wrappedExif from './exif_constants.m.js';
import {ExifParser} from './exif_parser.m.js';
const {Exif} = wrappedExif;
import {ExifEntry} from '../../../../externs/exif_entry.m.js';
import {MetadataParserLogger} from '../../../../externs/metadata_worker_window.m.js';
/** /**
* Creates a directory with specified tag. This method only supports string * Creates a directory with specified tag. This method only supports string
* format tag, which is longer than 4 characters. * format tag, which is longer than 4 characters.
...@@ -68,7 +77,7 @@ function parseExifData_(bytes) { ...@@ -68,7 +77,7 @@ function parseExifData_(bytes) {
/** /**
* Tests that parsed exif strings have a null character termination. * Tests that parsed exif strings have a null character termination.
*/ */
function testWithoutNullCharacterTermination() { export function testWithoutNullCharacterTermination() {
// Create exif with a value that does not end with null character. // Create exif with a value that does not end with null character.
const data = new Uint8Array(0x10000); const data = new Uint8Array(0x10000);
writeDirectory_(data, /** @type {!ExifEntry} */ ({ writeDirectory_(data, /** @type {!ExifEntry} */ ({
......
...@@ -5,6 +5,17 @@ ...@@ -5,6 +5,17 @@
import("//third_party/closure_compiler/compile_js.gni") import("//third_party/closure_compiler/compile_js.gni")
import("//third_party/closure_compiler/js_unit_tests.gni") import("//third_party/closure_compiler/js_unit_tests.gni")
import("//ui/file_manager/base/gn/js_test_gen_html.gni") import("//ui/file_manager/base/gn/js_test_gen_html.gni")
import("//ui/webui/resources/tools/js_modulizer.gni")
js_type_check("closure_compile_jsmodules") {
uses_js_modules = true
deps = [
":exif_encoder.m",
":image_encoder.m",
":image_util.m",
":test_util.m",
]
}
js_type_check("closure_compile_module") { js_type_check("closure_compile_module") {
deps = [ deps = [
...@@ -48,12 +59,31 @@ js_library("exif_encoder") { ...@@ -48,12 +59,31 @@ js_library("exif_encoder") {
externs_list = [ "//ui/file_manager/externs/exif_entry.js" ] externs_list = [ "//ui/file_manager/externs/exif_entry.js" ]
} }
js_unittest("exif_encoder_unittest") { js_library("exif_encoder.m") {
sources = [
"$root_gen_dir/ui/file_manager/gallery/js/image_editor/exif_encoder.m.js",
]
deps = [ deps = [
":exif_encoder", ":image_encoder.m",
":test_util", "//ui/file_manager/externs:exif_entry.m",
"//ui/file_manager/file_manager/foreground/js/metadata:exif_parser", "//ui/file_manager/file_manager/foreground/js/metadata:exif_constants.m",
"//ui/webui/resources/js:webui_resource_test", "//ui/file_manager/file_manager/foreground/js/metadata:metadata_item.m",
"//ui/webui/resources/js:assert.m",
]
extra_deps = [ ":modulize" ]
}
js_unittest("exif_encoder_unittest.m") {
deps = [
":exif_encoder.m",
":image_encoder.m",
":test_util.m",
"//chrome/test/data/webui:chai_assert",
"//ui/file_manager/externs:metadata_worker_window.m",
"//ui/file_manager/file_manager/foreground/js/metadata:byte_reader.m",
"//ui/file_manager/file_manager/foreground/js/metadata:exif_parser.m",
"//ui/file_manager/file_manager/foreground/js/metadata:metadata_item.m",
] ]
} }
...@@ -117,12 +147,26 @@ js_library("image_encoder") { ...@@ -117,12 +147,26 @@ js_library("image_encoder") {
] ]
} }
js_unittest("image_encoder_unittest") { js_library("image_encoder.m") {
sources = [
"$root_gen_dir/ui/file_manager/gallery/js/image_editor/image_encoder.m.js",
]
deps = [ deps = [
":image_encoder", ":image_util.m",
":test_util", "//ui/file_manager/file_manager/foreground/js/metadata:metadata_item.m",
"//ui/file_manager/base/js:test_error_reporting", "//ui/webui/resources/js:assert.m",
"//ui/file_manager/file_manager/foreground/js/metadata:metadata_parser", ]
extra_deps = [ ":modulize" ]
}
js_unittest("image_encoder_unittest.m") {
deps = [
":image_encoder.m",
":test_util.m",
"//chrome/test/data/webui:chai_assert",
"//ui/file_manager/base/js:test_error_reporting.m",
"//ui/file_manager/file_manager/foreground/js/metadata:metadata_item.m",
] ]
externs_list = [ "//ui/file_manager/externs/metadata_worker_window.js" ] externs_list = [ "//ui/file_manager/externs/metadata_worker_window.js" ]
} }
...@@ -161,6 +205,15 @@ js_library("image_util") { ...@@ -161,6 +205,15 @@ js_library("image_util") {
deps = [ "//ui/webui/resources/js:assert" ] deps = [ "//ui/webui/resources/js:assert" ]
} }
js_library("image_util.m") {
sources = [
"$root_gen_dir/ui/file_manager/gallery/js/image_editor/image_util.m.js",
]
deps = [ "//ui/webui/resources/js:assert.m" ]
extra_deps = [ ":modulize" ]
}
js_library("image_view") { js_library("image_view") {
deps = [ deps = [
":image_buffer", ":image_buffer",
...@@ -185,6 +238,14 @@ js_unittest("image_view_unittest") { ...@@ -185,6 +238,14 @@ js_unittest("image_view_unittest") {
js_library("test_util") { js_library("test_util") {
} }
js_library("test_util.m") {
sources =
[ "$root_gen_dir/ui/file_manager/gallery/js/image_editor/test_util.m.js" ]
deps = [ "//ui/webui/resources/js:assert.m" ]
extra_deps = [ ":modulize" ]
}
js_library("viewport") { js_library("viewport") {
deps = [ deps = [
":image_util", ":image_util",
...@@ -192,19 +253,41 @@ js_library("viewport") { ...@@ -192,19 +253,41 @@ js_library("viewport") {
] ]
} }
js_test_gen_html("js_test_gen_html") { js_test_gen_html("js_test_gen_html_modules") {
deps = [ deps = [
":exif_encoder_unittest", ":exif_encoder_unittest.m",
":image_encoder_unittest", ":image_encoder_unittest.m",
":image_view_unittest",
] ]
js_module = true
closure_flags =
strict_error_checking_closure_args + [
"js_module_root=./gen/ui",
"js_module_root=../../ui",
"browser_resolver_prefix_replacements=\"chrome://test/=./\"",
]
}
js_test_gen_html("js_test_gen_html") {
deps = [ ":image_view_unittest" ]
mocks = [ "//ui/file_manager/file_manager/foreground/js/metadata/metadata_dispatcher_mock_deps.js" ] mocks = [ "//ui/file_manager/file_manager/foreground/js/metadata/metadata_dispatcher_mock_deps.js" ]
} }
group("closure_compile") { group("closure_compile") {
testonly = true testonly = true
deps = [ deps = [
":closure_compile_jsmodules",
":closure_compile_module", ":closure_compile_module",
":js_test_gen_html_modules_type_check_auto",
":js_test_gen_html_type_check_auto", ":js_test_gen_html_type_check_auto",
] ]
} }
js_modulizer("modulize") {
input_files = [
"exif_encoder.js",
"image_encoder.js",
"image_util.js",
"test_util.js",
]
}
...@@ -2,6 +2,16 @@ ...@@ -2,6 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/* eslint-disable no-var */
// clang-format off
// #import {ImageEncoder} from './image_encoder.m.js';
// #import * as wrappedExif from '../../../file_manager/foreground/js/metadata/exif_constants.m.js'; const {Exif} = wrappedExif;
// #import {MetadataItem} from '../../../file_manager/foreground/js/metadata/metadata_item.m.js';
// #import {assert} from 'chrome://resources/js/assert.m.js'
// #import {ExifEntry} from '../../../externs/exif_entry.m.js';
// clang-format on
/** /**
* The Exif metadata encoder. * The Exif metadata encoder.
* Uses the metadata format as defined by ExifParser. * Uses the metadata format as defined by ExifParser.
...@@ -10,7 +20,7 @@ ...@@ -10,7 +20,7 @@
* @extends {ImageEncoder.MetadataEncoder} * @extends {ImageEncoder.MetadataEncoder}
* @struct * @struct
*/ */
function ExifEncoder(originalMetadata) { /* #export */ function ExifEncoder(originalMetadata) {
ImageEncoder.MetadataEncoder.apply(this, arguments); ImageEncoder.MetadataEncoder.apply(this, arguments);
/** /**
* Image File Directory obtained from EXIF header. * Image File Directory obtained from EXIF header.
...@@ -473,7 +483,7 @@ ExifEncoder.findOrCreateTag = function(directory, id, opt_format, ...@@ -473,7 +483,7 @@ ExifEncoder.findOrCreateTag = function(directory, id, opt_format,
* @constructor * @constructor
* @struct * @struct
*/ */
function ByteWriter(arrayBuffer, offset, opt_length) { /* #export */ function ByteWriter(arrayBuffer, offset, opt_length) {
var length = opt_length || (arrayBuffer.byteLength - offset); var length = opt_length || (arrayBuffer.byteLength - offset);
this.view_ = new DataView(arrayBuffer, offset, length); this.view_ = new DataView(arrayBuffer, offset, length);
this.littleEndian_ = false; this.littleEndian_ = false;
......
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
'use strict'; import {assertEquals, assertTrue} from 'chrome://test/chai_assert.js';
import {MetadataParserLogger} from '../../../externs/metadata_worker_window.m.js';
import {ByteReader} from '../../../file_manager/foreground/js/metadata/byte_reader.m.js';
import {ExifParser} from '../../../file_manager/foreground/js/metadata/exif_parser.m.js';
import {MetadataItem} from '../../../file_manager/foreground/js/metadata/metadata_item.m.js';
import {ExifEncoder} from './exif_encoder.m.js';
import {ImageEncoder} from './image_encoder.m.js';
import {getSampleCanvas} from './test_util.m.js';
/** /**
* @implements {MetadataParserLogger} * @implements {MetadataParserLogger}
...@@ -21,7 +28,7 @@ class NoLogger { ...@@ -21,7 +28,7 @@ class NoLogger {
/** /**
* Test case for ordinal exif encoding and decoding. * Test case for ordinal exif encoding and decoding.
*/ */
function testExifEncodeAndDecode() { export function testExifEncodeAndDecode() {
const canvas = getSampleCanvas(); const canvas = getSampleCanvas();
const data = canvas.toDataURL('image/jpeg'); const data = canvas.toDataURL('image/jpeg');
...@@ -166,7 +173,7 @@ function largeExifDataTestHelper_(largeFieldValueSize, expectThumbnail) { ...@@ -166,7 +173,7 @@ function largeExifDataTestHelper_(largeFieldValueSize, expectThumbnail) {
/** /**
* Test case when other exif data is small as the thumbnail can fit in. * Test case when other exif data is small as the thumbnail can fit in.
*/ */
function testLargeExifDataSmallCase() { export function testLargeExifDataSmallCase() {
// 158 bytes: other exif data except value of the large field. // 158 bytes: other exif data except value of the large field.
largeExifDataTestHelper_( largeExifDataTestHelper_(
ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() - ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() -
...@@ -177,7 +184,7 @@ function testLargeExifDataSmallCase() { ...@@ -177,7 +184,7 @@ function testLargeExifDataSmallCase() {
/** /**
* Test case when other exif data is large as the thumbnail can just fit in. * Test case when other exif data is large as the thumbnail can just fit in.
*/ */
function testLargeExifDataBoundaryCase() { export function testLargeExifDataBoundaryCase() {
largeExifDataTestHelper_( largeExifDataTestHelper_(
ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() - ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() -
ExifEncoder.THUMBNAIL_METADATA_SIZE - 158, ExifEncoder.THUMBNAIL_METADATA_SIZE - 158,
...@@ -187,7 +194,7 @@ function testLargeExifDataBoundaryCase() { ...@@ -187,7 +194,7 @@ function testLargeExifDataBoundaryCase() {
/** /**
* Test case when other exif data is large as the thumbnail cannot fit in. * Test case when other exif data is large as the thumbnail cannot fit in.
*/ */
function testLargeExifDataExceedsCase() { export function testLargeExifDataExceedsCase() {
largeExifDataTestHelper_( largeExifDataTestHelper_(
ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() - ExifEncoder.MAXIMUM_EXIF_DATA_SIZE - measureExpectedThumbnailSize_() -
ExifEncoder.THUMBNAIL_METADATA_SIZE - 158 + 1, ExifEncoder.THUMBNAIL_METADATA_SIZE - 158 + 1,
......
...@@ -2,11 +2,19 @@ ...@@ -2,11 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/* eslint-disable no-var */
// clang-format off
// #import * as wrappedImageUtil from './image_util.m.js'; const {ImageUtil} = wrappedImageUtil;
// #import {MetadataItem} from '../../../file_manager/foreground/js/metadata/metadata_item.m.js';
// #import {assert, assertInstanceof} from 'chrome://resources/js/assert.m.js'
// clang-format on
/** /**
* A namespace class for image encoding functions. All methods are static. * A namespace class for image encoding functions. All methods are static.
* @constructor * @constructor
*/ */
function ImageEncoder() {} /* #export */ function ImageEncoder() {}
/** /**
* The value 360 px is enough in the Files app grid view for HiDPI devices. * The value 360 px is enough in the Files app grid view for HiDPI devices.
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
'use strict';
/* eslint-disable no-var */
import {assertEquals, assertThrows} from 'chrome://test/chai_assert.js';
import {reportPromise} from '../../../base/js/test_error_reporting.m.js';
import {MetadataItem} from '../../../file_manager/foreground/js/metadata/metadata_item.m.js';
import {ImageEncoder} from './image_encoder.m.js';
import {getSampleCanvas} from './test_util.m.js';
/** /**
* Encodes an image to data URL by using ImageEncoder.getBlob. * Encodes an image to data URL by using ImageEncoder.getBlob.
...@@ -27,17 +34,16 @@ function encodeAnImageAsDataURL(canvas, metadata, imageQuality) { ...@@ -27,17 +34,16 @@ function encodeAnImageAsDataURL(canvas, metadata, imageQuality) {
* Test case for png image. * Test case for png image.
* Png image should be saved as a png image. * Png image should be saved as a png image.
*/ */
function testPngImage(callback) { export function testPngImage(callback) {
var canvas = getSampleCanvas(); var canvas = getSampleCanvas();
var metadata = { var metadata = {mediaMimeType: 'image/png'};
mediaMimeType: 'image/png'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then( reportPromise(
function(result) { encodeAnImageAsDataURL(canvas, metadata, 0.9).then(function(result) {
assertEquals(canvas.toDataURL('image/png'), result); assertEquals(canvas.toDataURL('image/png'), result);
}), callback); }),
callback);
} }
/** /**
...@@ -45,17 +51,16 @@ function testPngImage(callback) { ...@@ -45,17 +51,16 @@ function testPngImage(callback) {
* Jpeg image should be saved as a jpeg image. Since we don't include * 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. * exif_encoder.js in this test, no metadata is added to the blob.
*/ */
function testJpegImage(callback) { export function testJpegImage(callback) {
var canvas = getSampleCanvas(); var canvas = getSampleCanvas();
var metadata = { var metadata = {mediaMimeType: 'image/jpeg'};
mediaMimeType: 'image/jpeg'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then( reportPromise(
function(result) { encodeAnImageAsDataURL(canvas, metadata, 0.9).then(function(result) {
assertEquals(canvas.toDataURL('image/jpeg', 0.9), result); assertEquals(canvas.toDataURL('image/jpeg', 0.9), result);
}), callback); }),
callback);
} }
...@@ -64,23 +69,22 @@ function testJpegImage(callback) { ...@@ -64,23 +69,22 @@ function testJpegImage(callback) {
* Image should be saved as a image/png since chrome doesn't support to * Image should be saved as a image/png since chrome doesn't support to
* encode other than image/jpeg or image/png. * encode other than image/jpeg or image/png.
*/ */
function testWebpImage(callback) { export function testWebpImage(callback) {
var canvas = getSampleCanvas(); var canvas = getSampleCanvas();
var metadata = { var metadata = {mediaMimeType: 'image/webp'};
mediaMimeType: 'image/webp'
};
reportPromise(encodeAnImageAsDataURL(canvas, metadata, 0.9).then( reportPromise(
function(result) { encodeAnImageAsDataURL(canvas, metadata, 0.9).then(function(result) {
assertEquals(canvas.toDataURL('image/png'), result); assertEquals(canvas.toDataURL('image/png'), result);
}), callback); }),
callback);
} }
/** /**
* Test case for broken metadata. * Test case for broken metadata.
*/ */
function testWithBrokenMetadata() { export function testWithBrokenMetadata() {
var canvas = getSampleCanvas(); var canvas = getSampleCanvas();
var metadata = /** @type {!MetadataItem} */ ({ var metadata = /** @type {!MetadataItem} */ ({
......
...@@ -2,6 +2,17 @@ ...@@ -2,6 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/**
* @fileoverview
* @suppress {uselessCode} Temporary suppress because of the line exporting.
*/
/* eslint-disable no-var */
// clang-format off
// #import {assert, assertInstanceof} from 'chrome://resources/js/assert.m.js';
// clang-format on
// Namespace object for the utilities. // Namespace object for the utilities.
var ImageUtil = {}; var ImageUtil = {};
...@@ -88,7 +99,7 @@ ImageUtil.between = function(min, value, max) { ...@@ -88,7 +99,7 @@ ImageUtil.between = function(min, value, max) {
* @constructor * @constructor
* @struct * @struct
*/ */
function ImageRect(left, top, width, height) { /* #export */ function ImageRect(left, top, width, height) {
this.left = left; this.left = left;
this.top = top; this.top = top;
this.width = width; this.width = width;
...@@ -490,3 +501,6 @@ ImageUtil.ensureCanvas = function(imgOrCanvas) { ...@@ -490,3 +501,6 @@ ImageUtil.ensureCanvas = function(imgOrCanvas) {
* @const * @const
*/ */
ImageUtil.FILE_TYPES = ['jpg', 'png', 'gif', 'bmp', 'webp']; ImageUtil.FILE_TYPES = ['jpg', 'png', 'gif', 'bmp', 'webp'];
// eslint-disable-next-line semi,no-extra-semi
/* #export */ {ImageUtil};
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
'use strict';
/* eslint-disable no-var */
// #import {assert, assertInstanceof} from 'chrome://resources/js/assert.m.js'
/* #ignore */ 'use strict';
/** /**
* Creates a sample canvas. * Creates a sample canvas.
* @return {!HTMLCanvasElement} * @return {!HTMLCanvasElement}
*/ */
function getSampleCanvas() { /* #export */ function getSampleCanvas() {
var canvas = var canvas =
assertInstanceof(document.createElement('canvas'), HTMLCanvasElement); assertInstanceof(document.createElement('canvas'), HTMLCanvasElement);
canvas.width = 1920; canvas.width = 1920;
......
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