WebUI tests: Migrate remaining Polymer() syntax to use PolymerElement.

This is in preparation of disallowing the use of Polymer() using
presubmit ESLint checks.

It also addresses two related TODOs in chrome/test/data/pdf/.

Bug: 720034
Change-Id: I7a690aa33832992b41c097399ef95c5715dbb77b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4411045
Reviewed-by: Cole Horvitz <colehorvitz@chromium.org>
Commit-Queue: Cole Horvitz <colehorvitz@chromium.org>
Auto-Submit: Demetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1128413}
diff --git a/chrome/test/data/pdf/BUILD.gn b/chrome/test/data/pdf/BUILD.gn
index c994bb1..da97472 100644
--- a/chrome/test/data/pdf/BUILD.gn
+++ b/chrome/test/data/pdf/BUILD.gn
@@ -12,6 +12,7 @@
 ts_library("build_ts") {
   root_dir = "."
   out_dir = "$target_gen_dir/tsc"
+  tsconfig_base = "../../../../tools/typescript/tsconfig_base_polymer.json"
   path_mappings = [
     "chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/*|" +
         rebase_path("$root_gen_dir/chrome/browser/resources/pdf/tsc/*",
diff --git a/chrome/test/data/pdf/bookmarks_test.ts b/chrome/test/data/pdf/bookmarks_test.ts
index 383c92f..df4a2987 100644
--- a/chrome/test/data/pdf/bookmarks_test.ts
+++ b/chrome/test/data/pdf/bookmarks_test.ts
@@ -2,17 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {Bookmark, ChangePageAndXyDetail, ChangePageDetail, ChangeZoomDetail, NavigateDetail} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
+import {ChangePageAndXyDetail, ChangePageDetail, ChangeZoomDetail, NavigateDetail} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {createBookmarksForTest} from './test_util.js';
 
-// TODO(crbug.com/1305967): Remove this interface when test_util.js is
-// migrated to TypeScript.
-interface TestBookmarksElement extends HTMLElement {
-  bookmarks: Bookmark[];
-}
-
 chrome.test.runTests([
   /**
    * Test that the correct bookmarks were loaded for
@@ -70,7 +64,7 @@
    */
   function testFollowBookmark() {
     const viewer = document.body.querySelector('pdf-viewer')!;
-    const bookmarkContent = createBookmarksForTest() as TestBookmarksElement;
+    const bookmarkContent = createBookmarksForTest();
     bookmarkContent.bookmarks = viewer.bookmarks;
     document.body.appendChild(bookmarkContent);
 
diff --git a/chrome/test/data/pdf/material_elements_test.ts b/chrome/test/data/pdf/material_elements_test.ts
index d99ad46..1906382 100644
--- a/chrome/test/data/pdf/material_elements_test.ts
+++ b/chrome/test/data/pdf/material_elements_test.ts
@@ -2,17 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {Bookmark} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
+import 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
+
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {createBookmarksForTest} from './test_util.js';
 
-// TODO(crbug.com/1305967): Remove this interface when test_util.js is
-// migrated to TypeScript.
-interface TestBookmarksElement extends HTMLElement {
-  bookmarks: Bookmark[];
-}
-
 /**
  * Standalone unit tests of the PDF Polymer elements.
  */
@@ -82,7 +77,7 @@
    */
   function testBookmarkStructure() {
     document.body.innerHTML = '';
-    const bookmarkContent = createBookmarksForTest() as TestBookmarksElement;
+    const bookmarkContent = createBookmarksForTest();
     bookmarkContent.bookmarks = [{
       title: 'Test 1',
       page: 1,
diff --git a/chrome/test/data/pdf/test_util.ts b/chrome/test/data/pdf/test_util.ts
index 4298ec44..e8873862 100644
--- a/chrome/test/data/pdf/test_util.ts
+++ b/chrome/test/data/pdf/test_util.ts
@@ -4,8 +4,8 @@
 
 // Utilities that are used in multiple tests.
 
-import {DocumentDimensions, LayoutOptions, Viewport} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
-import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {Bookmark, DocumentDimensions, LayoutOptions, Viewport} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer_wrapper.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 export class MockElement {
   dir: string = '';
@@ -192,23 +192,41 @@
       MockUnseasonedPdfPluginElement;
 }
 
+class TestBookmarksElement extends PolymerElement {
+  static get is() {
+    return 'test-bookmarks';
+  }
+
+  static get template() {
+    return html`
+      <template is="dom-repeat" items="[[bookmarks]]">
+        <viewer-bookmark bookmark="[[item]]" depth="0"></viewer-bookmark>
+      </template>
+    `;
+  }
+
+  static get properties() {
+    return {
+      bookmarks: Array,
+    };
+  }
+
+  bookmarks: Bookmark[];
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'test-bookmarks': TestBookmarksElement;
+  }
+}
+
+customElements.define(TestBookmarksElement.is, TestBookmarksElement);
+
 /**
  * @return An element containing a dom-repeat of bookmarks, for
  *     testing the bookmarks outside of the toolbar.
  */
-export function createBookmarksForTest(): HTMLElement {
-  Polymer({
-    is: 'test-bookmarks',
-
-    _template: html`
-      <template is="dom-repeat" items="[[bookmarks]]">
-        <viewer-bookmark bookmark="[[item]]" depth="0"></viewer-bookmark>
-      </template>`,
-
-    properties: {
-      bookmarks: Array,
-    },
-  });
+export function createBookmarksForTest(): TestBookmarksElement {
   return document.createElement('test-bookmarks');
 }
 
diff --git a/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js b/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
index b5e2f9b8..d18ce5e 100644
--- a/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
+++ b/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
@@ -7,16 +7,18 @@
 import {CrPolicyIndicatorType} from 'chrome://resources/ash/common/cr_policy_indicator_behavior.js';
 import {CrPolicyNetworkBehaviorMojo} from 'chrome://resources/ash/common/network/cr_policy_network_behavior_mojo.js';
 import {PolicySource} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-webui.js';
-import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 suite('CrPolicyNetworkBehaviorMojo', function() {
-  suiteSetup(async () => {
-    Polymer({
-      is: 'test-behavior',
+  const TestElementBase =
+      mixinBehaviors([CrPolicyNetworkBehaviorMojo], PolymerElement);
 
-      behaviors: [CrPolicyNetworkBehaviorMojo],
-    });
-  });
+  class TestBehaviorElement extends TestElementBase {
+    static get is() {
+      return 'test-behavior';
+    }
+  }
+  customElements.define(TestBehaviorElement.is, TestBehaviorElement);
 
   let testBehavior;
 
diff --git a/chrome/test/data/webui/cr_components/chromeos/network/network_config_element_behavior_test.js b/chrome/test/data/webui/cr_components/chromeos/network/network_config_element_behavior_test.js
index a768274..fe5224f 100644
--- a/chrome/test/data/webui/cr_components/chromeos/network/network_config_element_behavior_test.js
+++ b/chrome/test/data/webui/cr_components/chromeos/network/network_config_element_behavior_test.js
@@ -4,7 +4,7 @@
 
 import {NetworkConfigElementBehavior} from 'chrome://resources/ash/common/network/network_config_element_behavior.js';
 import {OncMojo} from 'chrome://resources/ash/common/network/onc_mojo.js';
-import {flush, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {flush, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 suite('CrComponentsNetworkConfigElementBehaviorTest', function() {
   /** @type {!NetworkConfigElementBehavior} */
@@ -27,24 +27,26 @@
     },
   };
 
-  suiteSetup(function() {
-    Polymer({
-      is: 'test-network-config-element',
+  const TestElementBase = mixinBehaviors(
+      [NetworkConfigElementBehavior, TestNetworkPolicyEnforcer],
+      PolymerElement);
 
-      behaviors: [
-        NetworkConfigElementBehavior,
-        TestNetworkPolicyEnforcer,
-      ],
+  class TestNetworkConfigElement extends TestElementBase {
+    static get is() {
+      return 'test-network-config-element';
+    }
 
-      properties: {
+    static get properties() {
+      return {
         showPolicyIndicator: {
           type: Boolean,
           value: false,
           computed: 'getDisabled_(disabled, property)',
         },
-      },
-    });
-  });
+      };
+    }
+  }
+  customElements.define(TestNetworkConfigElement.is, TestNetworkConfigElement);
 
   setup(function() {
     config = document.createElement('test-network-config-element');
diff --git a/chrome/test/data/webui/cr_elements/cr_action_menu_test.ts b/chrome/test/data/webui/cr_elements/cr_action_menu_test.ts
index 40b3d1b..2b5f54c 100644
--- a/chrome/test/data/webui/cr_elements/cr_action_menu_test.ts
+++ b/chrome/test/data/webui/cr_elements/cr_action_menu_test.ts
@@ -11,7 +11,7 @@
 import {FocusOutlineManager} from 'chrome://resources/js/focus_outline_manager.js';
 import {getDeepActiveElement} from 'chrome://resources/js/util_ts.js';
 import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
-import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {eventToPromise} from 'chrome://webui-test/test_util.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -473,11 +473,13 @@
     const containerTop = 10000;
     const containerWidth = 500;
 
-    suiteSetup(function() {
-      Polymer({
-        is: 'test-element',
+    class TestElement extends PolymerElement {
+      static get is() {
+        return 'test-element';
+      }
 
-        _template: html`
+      static get template() {
+        return html`
           <style>
             #container {
               overflow: auto;
@@ -505,9 +507,11 @@
               </cr-action-menu>
             </div>
           </div>
-        `,
-      });
-    });
+        `;
+      }
+    }
+
+    customElements.define(TestElement.is, TestElement);
 
     setup(function() {
       document.body.scrollTop = 0;