diff --git a/chrome/browser/chromeos/file_manager/file_manager_jstest.cc b/chrome/browser/chromeos/file_manager/file_manager_jstest.cc
index d7a6dd2..61b54cfa9 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_jstest.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_jstest.cc
@@ -114,8 +114,8 @@
 }
 
 IN_PROC_BROWSER_TEST_F(FileManagerJsTest, MultiMetadataProvider) {
-  RunTest(base::FilePath(FILE_PATH_LITERAL(
-      "foreground/js/metadata/multi_metadata_provider_unittest.html")));
+  RunGeneratedTest(
+      "/foreground/js/metadata/multi_metadata_provider_unittest.html");
 }
 
 IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ListThumbnailLoader) {
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/BUILD.gn b/ui/file_manager/file_manager/foreground/js/metadata/BUILD.gn
index 484fd96..0df86b1 100644
--- a/ui/file_manager/file_manager/foreground/js/metadata/BUILD.gn
+++ b/ui/file_manager/file_manager/foreground/js/metadata/BUILD.gn
@@ -204,6 +204,13 @@
   ]
 }
 
+js_unittest("multi_metadata_provider_unittest") {
+  deps = [
+    ":multi_metadata_provider",
+    "//ui/file_manager/base/js:test_error_reporting",
+  ]
+}
+
 js_library("thumbnail_model") {
   deps = [
     ":metadata_model",
@@ -222,6 +229,7 @@
   deps = [
     ":image_orientation_unittest",
     ":metadata_cache_item_unittest",
+    ":multi_metadata_provider_unittest",
     ":thumbnail_model_unittest",
   ]
 }
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.html b/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.html
deleted file mode 100644
index 13875ba..0000000
--- a/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<!-- Copyright 2015 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.
-  -->
-<!-- Base classes -->
-<script src="../../../../../webui/resources/js/cr.js"></script>
-<script src="../../../../../webui/resources/js/cr/event_target.js"></script>
-<script src="metadata_cache_set.js"></script>
-<script src="metadata_provider.js"></script>
-<script src="metadata_request.js"></script>
-
-<!-- Others -->
-<script src="../../../../../webui/resources/js/assert.js"></script>
-<script src="../../../common/js/lru_cache.js"></script>
-<script src="../../../../base/js/test_error_reporting.js"></script>
-<script src="../../../../base/js/volume_manager_types.js"></script>
-<script src="content_metadata_provider.js"></script>
-<script src="external_metadata_provider.js"></script>
-<script src="file_system_metadata_provider.js"></script>
-<script src="metadata_cache_item.js"></script>
-<script src="metadata_item.js"></script>
-<script src="multi_metadata_provider.js"></script>
-
-<script src="multi_metadata_provider_unittest.js"></script>
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.js b/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.js
index 1f367a8..77292d71 100644
--- a/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.js
+++ b/ui/file_manager/file_manager/foreground/js/metadata/multi_metadata_provider_unittest.js
@@ -2,41 +2,46 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-var entryA = {
-  toURL: function() { return 'filesystem://A'; }
-};
+var entryA = /** @type {!Entry} */ ({
+  toURL: function() {
+    return 'filesystem://A';
+  },
+});
 
-var entryB = {
-  toURL: function() { return 'filesystem://B'; }
-};
+var entryB = /** @type {!Entry} */ ({
+  toURL: function() {
+    return 'filesystem://B';
+  },
+});
 
-var entryC = {
-  toURL: function() { return 'filesystem://C'; }
-};
+var entryC = /** @type {!Entry} */ ({
+  toURL: function() {
+    return 'filesystem://C';
+  },
+});
 
-var volumeManager = {
+var volumeManager = /** @type {!VolumeManager} */ ({
   getVolumeInfo: function(entry) {
     if (entry.toURL() === 'filesystem://A') {
       return {
-        volumeType: VolumeManagerCommon.VolumeType.DOWNLOADS
+        volumeType: VolumeManagerCommon.VolumeType.DOWNLOADS,
       };
     } else if (entry.toURL() === 'filesystem://B') {
       return {
-        volumeType: VolumeManagerCommon.VolumeType.DRIVE
+        volumeType: VolumeManagerCommon.VolumeType.DRIVE,
       };
     } else if (entry.toURL() === 'filesystem://C') {
       return {
-        volumeType: VolumeManagerCommon.VolumeType.DRIVE
+        volumeType: VolumeManagerCommon.VolumeType.DRIVE,
       };
     }
     assertNotReached();
   }
-};
+});
 
 function testMultiMetadataProviderBasic(callback) {
   var model = new MultiMetadataProvider(
-      // Mocking FileSystemMetadataProvider.
-      {
+      /** @type {!FileSystemMetadataProvider} */ ({
         get: function(requests) {
           assertEquals(1, requests.length);
           assertEquals('filesystem://A', requests[0].entry.toURL());
@@ -44,9 +49,8 @@
           return Promise.resolve(
               [{modificationTime: new Date(2015, 0, 1), size: 1024}]);
         }
-      },
-      // Mocking ExternalMetadataProvider.
-      {
+      }),
+      /** @type {!ExternalMetadataProvider} */ ({
         get: function(requests) {
           assertEquals(1, requests.length);
           assertEquals('filesystem://B', requests[0].entry.toURL());
@@ -54,9 +58,8 @@
           return Promise.resolve(
               [{modificationTime: new Date(2015, 1, 2), size: 2048}]);
         }
-      },
-      // Mocking ContentMetadataProvider.
-      {
+      }),
+      /** @type {!ContentMetadataProvider} */ ({
         get: function(requests) {
           if (requests.length === 0)
             return Promise.resolve([]);
@@ -70,9 +73,9 @@
             {contentThumbnailUrl: 'THUMBNAIL_URL_B'}
           ]);
         }
-      },
-      // Mocking VolumeManager.
+      }),
       volumeManager);
+
   reportPromise(model.get([
     new MetadataRequest(
         entryA, ['size', 'modificationTime', 'contentThumbnailUrl']),
@@ -95,15 +98,13 @@
 
 function testMultiMetadataProviderExternalAndContentProperty(callback) {
   var model = new MultiMetadataProvider(
-      // Mocking FileSystemMetadataProvider.
-      {
+      /** @type {!FileSystemMetadataProvider} */ ({
         get: function(requests) {
           assertEquals(0, requests.length);
           return Promise.resolve([]);
         }
-      },
-      // Mocking ExternalMetadataProvider.
-      {
+      }),
+      /** @type {!ExternalMetadataProvider} */ ({
         get: function(requests) {
           assertEquals(2, requests.length);
           assertEquals('filesystem://B', requests[0].entry.toURL());
@@ -115,23 +116,20 @@
             {present: true, imageWidth: 400}
           ]);
         }
-      },
-      // Mocking ContentMetadataProvider.
-      {
+      }),
+      /** @type {!ContentMetadataProvider} */ ({
         get: function(requests) {
+          const results = {
+            'filesystem://A': {imageWidth: 100},
+            'filesystem://C': {imageWidth: 300},
+          };
           assertEquals(1, requests.length);
-          assertTrue(requests[0].entry.toURL() in this.results_);
-          return Promise.resolve([
-            this.results_[requests[0].entry.toURL()]
-          ]);
+          assertTrue(requests[0].entry.toURL() in results);
+          return Promise.resolve([results[requests[0].entry.toURL()]]);
         },
-        results_: {
-          'filesystem://A': {imageWidth: 100},
-          'filesystem://C': {imageWidth: 300}
-        }
-      },
-      // Mocking VolumeManager.
+      }),
       volumeManager);
+
   reportPromise(model.get([
     new MetadataRequest(entryA, ['imageWidth']),
     new MetadataRequest(entryB, ['imageWidth']),
