[ct] Cleanup after lit conversion, remove Polymer, Vulcanize, Bower, webtools.mk.

Change-Id: I81c5e238cbcf7c70cabe57f9f2dede9e13601e15
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/306653
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Weston Tracey <westont@google.com>
diff --git a/ct/.bowerrc b/ct/.bowerrc
deleted file mode 100644
index 3841514..0000000
--- a/ct/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "third_party/bower_components"
-}
diff --git a/ct/Makefile b/ct/Makefile
index 6267a8f..e0853a5 100644
--- a/ct/Makefile
+++ b/ct/Makefile
@@ -1,25 +1,13 @@
-# The list of files we want to go into core.js, which is concat'd and
-# minified. These files should be either present in the project, brought
-# into third_party/bower_compoents via bower, or in node_modules.
-CORE_SOURCE_FILES = node_modules/native-promise-only/npo.js \
-          third_party/bower_components/webcomponentsjs/webcomponents.min.js \
-          ../res/js/common.js \
-          res/js/ctfe.js
-
-BOWER_DIR=third_party/bower_components
-
-VULCANIZE1=true
-
 # Require clean_webtools to ensure changes to res/common/imp/*.html are reflected.
 .PHONY: ctfe
-ctfe: res/css/ctfe.css clean_webtools core_js elements_html
+ctfe:
 	cd ../infra-sk && npm ci
 	npm ci
 	npx webpack --mode=production
 	go install -v ./go/ctfe
 
 .PHONY: ctfe_debug
-ctfe_debug: res/css/ctfe.css debug
+ctfe_debug:
 	npx webpack --mode=development
 	go install -v ./go/ctfe
 
@@ -57,12 +45,6 @@
 push_staging: release
 	pushk ctfe-staging
 
-# Build debug versions of core.js and elements.html.
-.PHONY: debug
-debug: clean_webtools debug_core_js debug_elements_html
-
-include ../webtools/webtools.mk
-
 # Master scripts.
 .PHONY: build_chromium
 build_chromium:
diff --git a/ct/bower.json b/ct/bower.json
deleted file mode 100644
index d53cdc2..0000000
--- a/ct/bower.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "name": "ctfe",
-  "version": "0.1.0",
-  "authors": [],
-  "description": "Cluster Telemetry Frontend",
-  "license": "BSD",
-  "private": true,
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "third_party/bower_components",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.10.1",
-    "iron-elements": "PolymerElements/iron-elements#~1.0.0",
-    "paper-elements": "PolymerElements/paper-elements#~1.0.0"
-  }
-}
diff --git a/ct/build_ctfe_release b/ct/build_ctfe_release
index 2a9b935..80d8123 100755
--- a/ct/build_ctfe_release
+++ b/ct/build_ctfe_release
@@ -19,16 +19,7 @@
 # Copy over all frontend artifacts.
 ${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/dist
 ${INSTALL}     --mode=644    ./dist/*                      ${ROOT}/usr/local/share/${APPNAME}/dist
-${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/templates
-${INSTALL}     --mode=644    ./templates/*                 ${ROOT}/usr/local/share/${APPNAME}/templates
-${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/res/css
-${INSTALL}     --mode=644 -T ./res/css/ctfe.css            ${ROOT}/usr/local/share/${APPNAME}/res/css/ctfe.css
-${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/res/img
-${INSTALL}     --mode=644 -T ./res/img/favicon.ico         ${ROOT}/usr/local/share/${APPNAME}/res/img/favicon.ico
-${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/res/js
-${INSTALL}     --mode=644 -T ./res/js/core.js              ${ROOT}/usr/local/share/${APPNAME}/res/js/core.js
-${INSTALL_DIR} --mode=755                                  ${ROOT}/usr/local/share/${APPNAME}/res/vul
-${INSTALL}     --mode=644 -T ./res/vul/elements.html       ${ROOT}/usr/local/share/${APPNAME}/res/vul/elements.html
+${INSTALL}     --mode=644 -T ./res/img/favicon.ico         ${ROOT}/usr/local/share/${APPNAME}/dist/img/favicon.ico
 
 # Copy over the isolate files and python scripts.
 ${INSTALL_DIR} --mode=755                            ${ROOT}/usr/local/share/${APPNAME}/isolates
diff --git a/ct/elements.html b/ct/elements.html
deleted file mode 100644
index 62e8650..0000000
--- a/ct/elements.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <!--
-      The full set of web components needed for CT's frontend.
-
-      This file will be vulcanized into res/imp/elements.html which is
-      imported via the templates/header.html file.
-    -->
-    <link rel="import" href="/res/imp/bower_components/polymer/polymer.html">
-
-    <link rel="import" href="/res/imp/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-collapse/iron-collapse.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-icon/iron-icon.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-icons/image-icons.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-icons/iron-icons.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-icons/social-icons.html" />
-    <link rel="import" href="/res/imp/bower_components/iron-selector/iron-selector.html" />
-
-    <link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-checkbox/paper-checkbox.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-dialog/paper-dialog.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-dialog-scrollable/paper-dialog-scrollable.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-drawer-panel/paper-drawer-panel.html">
-    <link rel="import" href="/res/imp/bower_components/paper-header-panel/paper-header-panel.html">
-    <link rel="import" href="/res/imp/bower_components/paper-icon-button/paper-icon-button.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-item/paper-item.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-menu/paper-menu.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-spinner/paper-spinner.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-tabs/paper-tabs.html" />
-    <link rel="import" href="/res/imp/bower_components/paper-toolbar/paper-toolbar.html" />
-
-    <link rel="import" href="/res/imp/admin-tasks-sk.html" />
-    <link rel="import" href="/res/imp/admin-task-runs-sk.html" />
-    <link rel="import" href="/res/imp/capture-skps-sk.html" />
-    <link rel="import" href="/res/imp/capture-skp-runs-sk.html" />
-    <link rel="import" href="/res/imp/chromium-builds-sk.html" />
-    <link rel="import" href="/res/imp/chromium-build-runs-sk.html" />
-    <link rel="import" href="/res/imp/chromium-build-selector-sk.html" />
-    <link rel="import" href="/res/imp/chromium-analysis-sk.html" />
-    <link rel="import" href="/res/imp/chromium-analysis-runs-sk.html" />
-    <link rel="import" href="/res/imp/chromium-perf-sk.html" />
-    <link rel="import" href="/res/imp/chromium-perf-runs-sk.html" />
-    <link rel="import" href="/res/imp/ct-runs-summary-sk.html" />
-    <link rel="import" href="/res/imp/drawer-sk.html" />
-    <link rel="import" href="/res/imp/expanding-textarea-sk.html" />
-    <link rel="import" href="/res/imp/metrics-analysis-sk.html" />
-    <link rel="import" href="/res/imp/metrics-analysis-runs-sk.html" />
-    <link rel="import" href="/res/imp/page-set-selector-sk.html" />
-    <link rel="import" href="/res/imp/patch-sk.html" />
-    <link rel="import" href="/res/imp/pending-tasks-sk.html" />
-    <link rel="import" href="/res/imp/repeat-after-days-sk.html" />
-    <link rel="import" href="/res/imp/skp-repository-selector-sk.html" />
-
-    <link rel="import" href="/res/common/imp/autocomplete-input-sk.html">
-    <link rel="import" href="/res/common/imp/confirm-dialog-sk.html" />
-    <link rel="import" href="/res/common/imp/error-toast-sk.html" />
-    <link rel="import" href="/res/common/imp/login.html" />
-    <link rel="import" href="/res/common/imp/paging.html" />
-</head>
diff --git a/ct/package-lock.json b/ct/package-lock.json
index f4e70df..68c649d 100644
--- a/ct/package-lock.json
+++ b/ct/package-lock.json
@@ -52,12 +52,6 @@
       "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
       "dev": true
     },
-    "@types/clone": {
-      "version": "0.1.30",
-      "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
-      "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
-      "dev": true
-    },
     "@types/copy-webpack-plugin": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/@types/copy-webpack-plugin/-/copy-webpack-plugin-5.0.1.tgz",
@@ -114,23 +108,6 @@
       "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==",
       "dev": true
     },
-    "@types/parse5": {
-      "version": "0.0.31",
-      "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz",
-      "integrity": "sha1-6Cekk6RDsVbhtYKi5MO9wAQPLuc=",
-      "dev": true,
-      "requires": {
-        "@types/node": "6.0.*"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "6.0.118",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.118.tgz",
-          "integrity": "sha512-N33cKXGSqhOYaPiT4xUGsYlPPDwFtQM/6QxJxuMXA/7BcySW+lkn2yigWP7vfs4daiL/7NJNU6DMCqg5N4B+xQ==",
-          "dev": true
-        }
-      }
-    },
     "@types/source-list-map": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
@@ -386,21 +363,6 @@
         "negotiator": "0.6.2"
       }
     },
-    "acorn": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
-      "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
-      "dev": true
-    },
-    "acorn-jsx": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
-      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
-      "dev": true,
-      "requires": {
-        "acorn": "^3.0.4"
-      }
-    },
     "after": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
@@ -991,12 +953,6 @@
         }
       }
     },
-    "bower": {
-      "version": "1.8.8",
-      "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz",
-      "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==",
-      "dev": true
-    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1554,12 +1510,6 @@
         }
       }
     },
-    "clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-      "dev": true
-    },
     "clone-deep": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -2032,12 +1982,6 @@
         "type-detect": "^4.0.0"
       }
     },
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-      "dev": true
-    },
     "default-gateway": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
@@ -2232,16 +2176,6 @@
         "buffer-indexof": "^1.0.0"
       }
     },
-    "doctrine": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
-      "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
-      "dev": true,
-      "requires": {
-        "esutils": "^1.1.6",
-        "isarray": "0.0.1"
-      }
-    },
     "dom-serialize": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
@@ -2254,27 +2188,6 @@
         "void-elements": "^2.0.0"
       }
     },
-    "dom5": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz",
-      "integrity": "sha1-pwiKn8XzsI3J9u2kx6uuskGUXg0=",
-      "dev": true,
-      "requires": {
-        "@types/clone": "^0.1.29",
-        "@types/node": "^4.0.30",
-        "@types/parse5": "^0.0.31",
-        "clone": "^1.0.2",
-        "parse5": "^1.4.1"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "4.9.4",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-4.9.4.tgz",
-          "integrity": "sha512-nKoiCZ87x6+fs26bNHjy07AQt6f46nFEitGH0P9JmWbY6tEyum6LLfLf7SIsKFh4DnBWsyUM2gYhaQAt+aA0Sw==",
-          "dev": true
-        }
-      }
-    },
     "domain-browser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -2601,12 +2514,6 @@
         "is-symbol": "^1.0.2"
       }
     },
-    "es6-promise": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
-      "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
-      "dev": true
-    },
     "es6-promisify": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
@@ -2646,46 +2553,6 @@
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true
     },
-    "escodegen": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.13.0.tgz",
-      "integrity": "sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw==",
-      "dev": true,
-      "requires": {
-        "esprima": "^4.0.1",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-          "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-          "dev": true
-        },
-        "estraverse": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-          "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-          "dev": true
-        },
-        "esutils": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-          "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
     "eslint-scope": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
@@ -2704,24 +2571,6 @@
         }
       }
     },
-    "espree": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
-      "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
-      "dev": true,
-      "requires": {
-        "acorn": "^5.5.0",
-        "acorn-jsx": "^3.0.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-          "dev": true
-        }
-      }
-    },
     "esprima": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
@@ -2745,18 +2594,6 @@
         }
       }
     },
-    "estraverse": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz",
-      "integrity": "sha1-FeKKRGuLgrxwDMyLlseK9NoNbLo=",
-      "dev": true
-    },
-    "esutils": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
-      "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=",
-      "dev": true
-    },
     "eventemitter3": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
@@ -3127,12 +2964,6 @@
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "dev": true
     },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
     "fastparse": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
@@ -5281,33 +5112,6 @@
         }
       }
     },
-    "hydrolysis": {
-      "version": "1.25.0",
-      "resolved": "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.25.0.tgz",
-      "integrity": "sha1-pPsUo3oeA7DbUtiqpXxoInKhTYQ=",
-      "dev": true,
-      "requires": {
-        "acorn": "^3.2.0",
-        "babel-polyfill": "^6.2.0",
-        "doctrine": "^0.7.0",
-        "dom5": "1.1.0",
-        "escodegen": "^1.7.0",
-        "espree": "^3.1.3",
-        "estraverse": "^3.1.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "dependencies": {
-        "dom5": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.1.0.tgz",
-          "integrity": "sha1-Ogx3AMCDq0xNJpOKeLDwxtzDd5Q=",
-          "dev": true,
-          "requires": {
-            "parse5": "^1.4.1"
-          }
-        }
-      }
-    },
     "iconv-lite": {
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -5480,13 +5284,6 @@
       "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
       "dev": true
     },
-    "infinity-agent": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz",
-      "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=",
-      "dev": true,
-      "optional": true
-    },
     "inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -5673,13 +5470,6 @@
         "lower-case": "^1.1.0"
       }
     },
-    "is-npm": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
-      "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
-      "dev": true,
-      "optional": true
-    },
     "is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -5733,13 +5523,6 @@
         }
       }
     },
-    "is-redirect": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
-      "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
-      "dev": true,
-      "optional": true
-    },
     "is-regex": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
@@ -6089,16 +5872,6 @@
       "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
       "dev": true
     },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
     "lit-html": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.2.1.tgz",
@@ -6261,13 +6034,6 @@
         "lower-case": "^1.1.2"
       }
     },
-    "lowercase-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
-      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
-      "dev": true,
-      "optional": true
-    },
     "lru-cache": {
       "version": "4.1.5",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
@@ -6957,16 +6723,6 @@
       "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
       "dev": true
     },
-    "nested-error-stacks": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
-      "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "inherits": "~2.0.1"
-      }
-    },
     "nice-try": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -7462,20 +7218,6 @@
         "wordwrap": "~0.0.2"
       }
     },
-    "optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-      "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
-      }
-    },
     "original": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -7491,13 +7233,6 @@
       "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
       "dev": true
     },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true,
-      "optional": true
-    },
     "os-tmpdir": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -7654,12 +7389,6 @@
       "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
       "dev": true
     },
-    "parse5": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
-      "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
-      "dev": true
-    },
     "parseqs": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
@@ -8003,12 +7732,6 @@
       "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
       "dev": true
     },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-      "dev": true
-    },
     "prepend-http": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
@@ -8277,88 +8000,6 @@
         "unpipe": "1.0.0"
       }
     },
-    "rc": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "deep-extend": "^0.6.0",
-        "ini": "~1.3.0",
-        "minimist": "^1.2.0",
-        "strip-json-comments": "~2.0.1"
-      },
-      "dependencies": {
-        "deep-extend": {
-          "version": "0.6.0",
-          "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
-          "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
-          "dev": true,
-          "optional": true
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "read-all-stream": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
-      "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "pinkie-promise": "^2.0.0",
-        "readable-stream": "^2.0.0"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true,
-          "optional": true
-        },
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true,
-          "optional": true
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
     "read-pkg": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -8816,16 +8457,6 @@
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
       "dev": true
     },
-    "repeating": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz",
-      "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-finite": "^1.0.0"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -9349,13 +8980,6 @@
         "supports-color": "^5.5.0"
       }
     },
-    "slide": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
-      "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
-      "dev": true,
-      "optional": true
-    },
     "snake-case": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
@@ -10400,13 +10024,6 @@
       "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
       "dev": true
     },
-    "timed-out": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz",
-      "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=",
-      "dev": true,
-      "optional": true
-    },
     "timers-browserify": {
       "version": "2.0.11",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
@@ -10590,15 +10207,6 @@
       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
       "dev": true
     },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2"
-      }
-    },
     "type-detect": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -10885,13 +10493,6 @@
       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
       "dev": true
     },
-    "uuid": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
-      "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
-      "dev": true,
-      "optional": true
-    },
     "v8-compile-cache": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
@@ -10931,205 +10532,6 @@
       "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
       "dev": true
     },
-    "vulcanize": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/vulcanize/-/vulcanize-1.5.1.tgz",
-      "integrity": "sha1-m/OcFSV61iEiC85UErRUIbGnK6g=",
-      "dev": true,
-      "requires": {
-        "dom5": "^1.0.2",
-        "es6-promise": "^2.1.0",
-        "hydrolysis": "^1.5.0",
-        "nopt": "^3.0.1",
-        "update-notifier": "^0.5.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true,
-          "optional": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true,
-          "optional": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "configstore": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz",
-          "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "mkdirp": "^0.5.0",
-            "object-assign": "^4.0.1",
-            "os-tmpdir": "^1.0.0",
-            "osenv": "^0.1.0",
-            "uuid": "^2.0.1",
-            "write-file-atomic": "^1.1.2",
-            "xdg-basedir": "^2.0.0"
-          }
-        },
-        "got": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz",
-          "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "duplexify": "^3.2.0",
-            "infinity-agent": "^2.0.0",
-            "is-redirect": "^1.0.0",
-            "is-stream": "^1.0.0",
-            "lowercase-keys": "^1.0.0",
-            "nested-error-stacks": "^1.0.0",
-            "object-assign": "^3.0.0",
-            "prepend-http": "^1.0.0",
-            "read-all-stream": "^3.0.0",
-            "timed-out": "^2.0.0"
-          },
-          "dependencies": {
-            "object-assign": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
-              "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "latest-version": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz",
-          "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "package-json": "^1.0.0"
-          }
-        },
-        "package-json": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz",
-          "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "got": "^3.2.0",
-            "registry-url": "^3.0.0"
-          }
-        },
-        "registry-url": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
-          "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "rc": "^1.0.1"
-          }
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true,
-          "optional": true
-        },
-        "semver-diff": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
-          "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "semver": "^5.0.3"
-          }
-        },
-        "string-length": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
-          "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true,
-          "optional": true
-        },
-        "update-notifier": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz",
-          "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^1.0.0",
-            "configstore": "^1.0.0",
-            "is-npm": "^1.0.0",
-            "latest-version": "^1.0.0",
-            "repeating": "^1.1.2",
-            "semver-diff": "^2.0.0",
-            "string-length": "^1.0.0"
-          }
-        },
-        "xdg-basedir": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
-          "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0"
-          }
-        }
-      }
-    },
     "watchpack": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
@@ -12988,12 +12390,6 @@
       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
       "dev": true
     },
-    "word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-      "dev": true
-    },
     "wordwrap": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
@@ -13025,18 +12421,6 @@
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
     },
-    "write-file-atomic": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
-      "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "imurmurhash": "^0.1.4",
-        "slide": "^1.1.5"
-      }
-    },
     "ws": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
diff --git a/ct/package.json b/ct/package.json
index b272bfa..81a8b35 100644
--- a/ct/package.json
+++ b/ct/package.json
@@ -17,7 +17,6 @@
     "@types/node": "^14.0.13",
     "@types/webpack": "^4.41.13",
     "autoprefixer": "^9.6.1",
-    "bower": "^1.8.8",
     "chai": "~4.2.0",
     "css-loader": "^3.5.3",
     "cssmin": "~0.4.2",
@@ -44,7 +43,6 @@
     "ts-node": "^8.10.1",
     "typescript": "^3.9.2",
     "uglify-js": "^2.6.4",
-    "vulcanize": "~1.5.1",
     "webpack": "^4.41.5",
     "webpack-cli": "^3.3.11",
     "webpack-dev-server": "^3.10.3"
diff --git a/ct/pages/admin_tasks.html b/ct/pages/admin_tasks.html
index 2d95175..6d9efec 100644
--- a/ct/pages/admin_tasks.html
+++ b/ct/pages/admin_tasks.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Admin Tasks</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/capture_skp_runs.html b/ct/pages/capture_skp_runs.html
index 816af67..8a6b741 100644
--- a/ct/pages/capture_skp_runs.html
+++ b/ct/pages/capture_skp_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Capture SkPictures Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/capture_skps.html b/ct/pages/capture_skps.html
index 6afecea..1d94800 100644
--- a/ct/pages/capture_skps.html
+++ b/ct/pages/capture_skps.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Capture SKPictures</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_analysis.html b/ct/pages/chromium_analysis.html
index a03d300..73191bb 100644
--- a/ct/pages/chromium_analysis.html
+++ b/ct/pages/chromium_analysis.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Analysis</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_analysis_runs.html b/ct/pages/chromium_analysis_runs.html
index 2b93fd9..2a592df 100644
--- a/ct/pages/chromium_analysis_runs.html
+++ b/ct/pages/chromium_analysis_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Analysis Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_build_runs.html b/ct/pages/chromium_build_runs.html
index 32cda1c..69b5037 100644
--- a/ct/pages/chromium_build_runs.html
+++ b/ct/pages/chromium_build_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Build Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_builds.html b/ct/pages/chromium_builds.html
index da8108a..c94b234 100644
--- a/ct/pages/chromium_builds.html
+++ b/ct/pages/chromium_builds.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Builds</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_perf.html b/ct/pages/chromium_perf.html
index 99d870b..885c578 100644
--- a/ct/pages/chromium_perf.html
+++ b/ct/pages/chromium_perf.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Perf</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/chromium_perf_runs.html b/ct/pages/chromium_perf_runs.html
index 193d5b8..ff0d510 100644
--- a/ct/pages/chromium_perf_runs.html
+++ b/ct/pages/chromium_perf_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Chromium Perf Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/metrics_analysis.html b/ct/pages/metrics_analysis.html
index fb08698..6840e94 100644
--- a/ct/pages/metrics_analysis.html
+++ b/ct/pages/metrics_analysis.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Metrics Analysis</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/metrics_analysis_runs.html b/ct/pages/metrics_analysis_runs.html
index 76327e6..ebd9ff9 100644
--- a/ct/pages/metrics_analysis_runs.html
+++ b/ct/pages/metrics_analysis_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Metrics Analysis Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/queue.html b/ct/pages/queue.html
index 1b35ea0..080c5df 100644
--- a/ct/pages/queue.html
+++ b/ct/pages/queue.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>CT Task Queue</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
 <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/recreate_page_sets_runs.html b/ct/pages/recreate_page_sets_runs.html
index 63958d8..a92aeb2 100644
--- a/ct/pages/recreate_page_sets_runs.html
+++ b/ct/pages/recreate_page_sets_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Recreate Page Sets Task Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/recreate_webpage_archives_runs.html b/ct/pages/recreate_webpage_archives_runs.html
index ced5c22..cbe88d3 100644
--- a/ct/pages/recreate_webpage_archives_runs.html
+++ b/ct/pages/recreate_webpage_archives_runs.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Recreate Webpage Archives Task Runs</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/pages/runs_history.html b/ct/pages/runs_history.html
index 9542097..307bab9 100644
--- a/ct/pages/runs_history.html
+++ b/ct/pages/runs_history.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title>Runs History</title>
-  <link rel="shortcut icon" href="/res/img/favicon.ico">
+  <link rel="shortcut icon" href="/dist/img/favicon.ico">
 </head>
 <body>
   <ct-scaffold-sk app_title="Cluster Telemetry 3.0">
diff --git a/ct/res/css/ctfe.css b/ct/res/css/ctfe.css
deleted file mode 100644
index fc69c8e..0000000
--- a/ct/res/css/ctfe.css
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * Copyright (c) 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 */
-
-h4 {
-  margin: 0.5em 0;
-}
-
-html /deep/ paper-button {
-  color: #1f78b4;
-}
-
-html /deep/  paper-button:hover {
-  background: #eee;
-}
-
-body {
-  font-family: Arial, sans-serif;
-  font-size: 15px;
-}
-
-#container {
-  padding: 1em;
-  background: white;
-}
-
-html /deep/ a {
-  color: #1f78b4;
-  font-weight: bold;
-}
-
-html /deep/ a:hover {
-  text-decoration: none;
-}
-
-button {
-  margin: 0.5em;
-  border: none;
-  padding: 0.2em 0.4em;
-}
-
-input {
-  margin: 0.5em;
-}
-
-button:hover {
-  color: white;
-  background: #1F78B4;
-}
-
-.waiting {
-    cursor: wait;
-}
-
-table, td {
-  border: none;
-}
-
-.hidden {
-    display: none;
-}
-
-.blank * {
-  display: none;
-}
-
-.centered {
-  flex-grow: 1;
-}
-
-html /deep/ core-toolbar,
-#title {
-  background-color: #1f78b4;
-  color: #fff;
-}
-
-#title login-sk {
-  margin-left: auto;
-}
-
-#title /deep/ a {
-  color: white;
-}
-
-p {
-  margin: 0.2em;
-  padding: 0;
-}
-
-#version {
-  font-size: 10px;
-  margin-left: 1em;
-}
-
-core-item:hover {
-  background: lightgray;
-}
-
-.left_padded {
-  padding-left: 2em;
-}
-
-.top_padded {
-  padding-top: 2em;
-}
-
-.right_padded {
-  padding-right: 2em;
-}
-
-.nolink {
-  text-decoration: none;
-  color: black;
-  font-weight: normal;
-}
-
-.scrollable {
-  height: 80vh;
-  overflow-y: auto;
-}
-
-.fit {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-}
diff --git a/ct/res/imp/admin-task-runs-sk.html b/ct/res/imp/admin-task-runs-sk.html
deleted file mode 100644
index 7b0a2ee..0000000
--- a/ct/res/imp/admin-task-runs-sk.html
+++ /dev/null
@@ -1,326 +0,0 @@
-<!--
-  The <admin-task-runs-sk> custom element declaration. Displays a table with details about each
-  completed and pending admin task, and allows the user to delete pending tasks if applicable.
-
-  Attributes:
-    url: POST URI to request tasks, e.g. "/_/get_recreate_page_sets_tasks". Must be set.
-    deleteUrl: POST URI to delete a task, e.g. "/_/delete_recreate_page_sets_task". Must be set.
-    redoUrl: POST URI to redo a task, e.g. "/_/redo_recreate_page_sets_task". Must be set.
-    taskType: Type of task, e.g. "RecreatePageSets". Must be set.
-    defaultSize: The number of tasks to show per page, default 10.
-    constrainByUser: Whether to show only tasks created by the logged-in user initially, default
-      false.
-    myRunsConstrainText: Button text to constrain by user, default "View only my runs".
-    everyonesRunsConstrainText: Button text to disable constraining by user, default "View
-      everyone's runs".
-    constrainByTestRun: Whether to show only non-test tasks, default true. Test tasks are those that
-      use the "Dummy1k" page sets.
-    nonTestRunsConstrainText: Button text to constrain to non-test tasks, default "Exclude test
-      runs".
-    testRunsConstrainText: Button text to disable constraining by test tasks, default "Include test
-      runs".
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on tasks.
-    resetPagination: Moves to the first page of tasks.
-    constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
-    constrainTestRuns: Toggles constrainByTestRun and reloads the appropriate data.
--->
-<dom-module id="admin-task-runs-sk">
-  <style>
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-    .oldruns {
-      margin-left: 20px;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2><template is="dom-if" if="{{constrainByUser}}">My </template><span>{{taskType}}</span> Task Runs</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-    <paper-button raised on-click="constrainRunsByUser">{{
-      constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
-      }}</paper-button>
-    <paper-button raised on-click="constrainTestRuns">{{
-      constrainButtonText(constrainByTestRun, nonTestRunsConstrainText, testRunsConstrainText)
-      }}</paper-button>
-
-    <br/>
-    <br/>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Task Config</td>
-        <td>Results</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{adminTasks}}" as="adminTask" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <span>{{adminTask.Id}}</span>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!adminTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!adminTask.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- User col -->
-          <td>{{adminTask.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Added:</td>
-                <td class="nowrap">{{ formatTimestamp(adminTask.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(adminTask.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(adminTask.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Task Config col -->
-          <td>
-            <table>
-              <tr>
-                <td>PageSet:</td>
-                <td>{{adminTask.PageSets}}</td>
-              </tr>
-              <template is="dom-if" if="{{isRecreateWebpageArchivesTask()}}">
-                <tr>
-                  <td>ChromiumBuild:</td>
-                  <td class="nowrap">
-                    <a href="{{chromiumCommitUrl(adminTask.ChromiumRev)}}">{{shortHash(adminTask.ChromiumRev)}}</a>-<a href="{{skiaCommitUrl(adminTask.SkiaRev)}}">{{shortHash(adminTask.SkiaRev)}}</a>
-                  </td>
-                </tr>
-              </template>
-            </table>
-          </td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{adminTask.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!adminTask.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if" if="{{isDone(adminTask.Failure, adminTask.TaskDone)}}">
-              Done
-            </template>
-            <br/>
-            <template is="dom-if" if="{{adminTask.SwarmingLogs}}">
-              <a href="{{adminTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Repeat Every -->
-          <td>{{ formatRepeatAfterDays(adminTask.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "admin-task-runs-sk",
-     properties: {
-       url: String,
-       deleteUrl: String,
-       redoUrl: String,
-       taskType: String,
-       adminTasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       constrainByUser: {
-         type: Boolean,
-         value: false,
-       },
-       myRunsConstrainText: {
-         type: String,
-         value: "View only my runs",
-       },
-       everyonesRunsConstrainText: {
-         type: String,
-         value: "View everyone's runs",
-       },
-       constrainByTestRun: {
-         type: Boolean,
-         value: true,
-       },
-       nonTestRunsConstrainText: {
-         type: String,
-         value: "Exclude test runs",
-       },
-       testRunsConstrainText: {
-         type: String,
-         value: "Include test runs",
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Proceed with deleting task?")
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-       this.reload();
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       if (this.constrainByUser) {
-         queryParams["filter_by_logged_in_user"] = true;
-       }
-       if (this.constrainByTestRun) {
-         queryParams["exclude_dummy_page_sets"] = true;
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       sk.post(this.url + queryStr).then(JSON.parse).then(function(json) {
-         this.pagination = json.pagination;
-         this.adminTasks = json.data;
-         for (var i = 0; i < this.adminTasks.length; i++) {
-           this.adminTasks[i].canDelete = json.permissions[i].DeleteAllowed;
-           this.adminTasks[i].canRedo = json.permissions[i].RedoAllowed;
-           this.adminTasks[i].Id = json.ids[i];
-         }
-       }.bind(this)).catch(sk.errorMessage);
-     },
-
-     resetPagination: function() {
-       this.pagination.offset = 0;
-       this.pagination.size = this.defaultSize;
-     },
-
-     constrainRunsByUser: function() {
-       this.constrainByUser = !this.constrainByUser;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainTestRuns: function() {
-       this.constrainByTestRun = !this.constrainByTestRun;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainButtonText: function(constrained, constrainText, unconstrainText) {
-       if (constrained) {
-         return unconstrainText;
-       } else {
-         return constrainText;
-       }
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.adminTasks[deleteIndex].Id;
-       sk.post(this.deleteUrl, JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.adminTasks[redoIndex].Id;
-       sk.post(this.redoUrl, JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     chromiumCommitUrl: ctfe.chromiumBuild.chromiumCommitUrl,
-     skiaCommitUrl: ctfe.chromiumBuild.skiaCommitUrl,
-     shortHash: ctfe.chromiumBuild.shortHash,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-
-     isRecreateWebpageArchivesTask: function() {
-       return this.taskType == "RecreateWebpageArchives";
-     },
-
-     isDone: function(failure, taskDone) {
-       return !failure && taskDone;
-     },
-  });
-</script>
diff --git a/ct/res/imp/admin-tasks-sk.html b/ct/res/imp/admin-tasks-sk.html
deleted file mode 100644
index 5c672c1..0000000
--- a/ct/res/imp/admin-tasks-sk.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<!--
-  The <admin-tasks-sk> custom element declaration. Displays a form that allows the user to queue
-  either a recreate page sets task or recreate webpage archives task.
-
-  Attributes:
-    selectedTab: One of "pagesets" or "archives" to control which tab to display initially, default
-      "pagesets".
-    pageSets: List of all defined page sets, as accepted by page-set-selector-sk property
-      pageSets. Must be set.
-    chromiumBuilds: List of all supported Chromium builds, as accepted by chromium-build-selector-sk
-      attribute chromiumBuilds. Must be set.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="admin-tasks-sk">
-  <style>
-    paper-tabs {
-      background-color: #D6ECF2;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    .hidden {
-      display: none;
-    }
-
-    table.options {
-      margin: auto
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-      margin-right: 10px
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <div class="panel">
-      <paper-tabs id="tabs" attr-for-selected="id" selected="{{selectedTab}}" noink>
-        <paper-tab id="pagesets">Recreate Pagesets</paper-tab>
-        <paper-tab id="archives">Recreate Webpage Archives</paper-tab>
-      </paper-tabs>
-
-      <table class="options">
-        <tr>
-          <td>PageSets Type</td>
-          <td>
-            <page-set-selector-sk id="page_sets" page-sets="{{pageSets}}"></page-set-selector-sk>
-          </td>
-        </tr>
-
-        <tr id="chromium_build_row" class="hidden">
-          <td>Chromium Build</td>
-          <td>
-            <chromium-build-selector-sk id="chromium_build"
-                                        chromium-builds="{{chromiumBuilds}}">
-            </chromium-build-selector-sk>
-          </td>
-        </tr>
-
-        <tr>
-          <td>Repeat this task</td>
-          <td>
-            <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-          </td>
-        </tr>
-
-        <tr>
-          <td colspan="2" class="center">
-            <div class="triggering-spinner">
-              <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-            </div>
-            <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-          </td>
-        </tr>
-        <tr>
-          <td colspan="2" class="center">
-            <paper-button raised id="view_history">View runs history</paper-button>
-          </td>
-        </tr>
-      </table>
-    </div>
-  </template>
-</dom-module>
-
-<script>
-  Polymer({
-    is: "admin-tasks-sk",
-    properties: {
-      selectedTab: {
-        type: String,
-        value: "pagesets",
-        observer: "tabChanged",
-      },
-      pageSets: {
-        type: Array,
-        observer: "pageSetsChanged",
-      },
-      chromiumBuilds: {
-        type: Array,
-        observer: "chromiumBuildsChanged",
-      },
-      triggeringTask: {
-        type: Boolean,
-        value: false,
-      },
-    },
-
-    ready: function() {
-      this.$.tabs.selected = "pagesets";
-      var that = this;
-      this.$.submit_task.addEventListener('click', function(e) {
-        that.validateTask();
-      });
-      this.$.view_history.addEventListener('click', function(e) {
-        that.gotoRunsHistory();
-      });
-    },
-
-    tabChanged: function() {
-      this.$.chromium_build_row.classList
-        .toggle("hidden", this.selectedTab != "archives");
-    },
-
-    pageSetsChanged: function(newValue, oldValue) {
-      if (!oldValue || oldValue.length == 0) {
-        this.$.page_sets.selectFirst();
-      }
-    },
-
-    chromiumBuildsChanged: function(newValue, oldValue) {
-      if (!oldValue || oldValue.length == 0) {
-        this.$.chromium_build.selectFirst();
-      }
-    },
-
-    validateTask: function() {
-      if (this.selectedTab == "archives") {
-        if (!this.$.chromium_build.selected) {
-          sk.errorMessage("Please select a Chromium build");
-          this.$.chromium_build.focus();
-          return;
-        }
-      }
-      if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-        return;
-      }
-      this.$.confirm_dialog.open("Proceed with queueing task?")
-        .then(this.queueTask.bind(this))
-        .catch(function() {
-          sk.errorMessage("Did not queue");
-        })
-    },
-
-    queueTask: function() {
-      if (this.selectedTab == "pagesets") {
-        this.queuePagesetsTask();
-      } else if (this.selectedTab == "archives") {
-        this.queueArchivesTask();
-      } else {
-        sk.errorMessage(new Error("Unknown selectedTab: " + this.selectedTab));
-      }
-    },
-
-    queuePagesetsTask: function() {
-      this.triggeringTask = true;
-      var params = {};
-      params["page_sets"] = this.$.page_sets.selected;
-      params["repeat_after_days"] = this.$.repeat_after_days.selected;
-
-      sk.post("/_/add_recreate_page_sets_task", JSON.stringify(params))
-        .then(function(resp) {
-          this.gotoRunsHistory();
-        }.bind(this)).catch(function(e) {
-          this.triggeringTask = false;
-          sk.errorMessage(e);
-        }.bind(this));
-    },
-
-    queueArchivesTask: function() {
-      this.triggeringTask = true;
-      var params = {};
-      params["page_sets"] = this.$.page_sets.selected;
-      params["chromium_build"] = this.$.chromium_build.selected;
-      params["repeat_after_days"] = this.$.repeat_after_days.selected;
-
-      sk.post("/_/add_recreate_webpage_archives_task", JSON.stringify(params))
-        .then(function(resp) {
-          this.gotoRunsHistory();
-        }.bind(this)).catch(function(e) {
-          this.triggeringTask = false;
-          sk.errorMessage(e);
-        }.bind(this));
-    },
-
-    gotoRunsHistory: function() {
-      if (this.selectedTab == "pagesets") {
-        window.location.href = "/recreate_page_sets_runs/";
-      } else if (this.selectedTab == "archives") {
-        window.location.href = "/recreate_webpage_archives_runs/";
-      } else {
-        sk.errorMessage(new Error("Unknown selectedTab: " + this.selectedTab));
-      }
-    },
-  });
-</script>
diff --git a/ct/res/imp/capture-skp-runs-sk.html b/ct/res/imp/capture-skp-runs-sk.html
deleted file mode 100644
index 887a451..0000000
--- a/ct/res/imp/capture-skp-runs-sk.html
+++ /dev/null
@@ -1,331 +0,0 @@
-<!--
-  The <capture-skp-runs-sk> custom element declaration. Displays a table with details about each
-  completed and pending capture SKPs task.
-
-  Attributes:
-    defaultSize: The number of tasks to show per page, default 10.
-    constrainByUser: Whether to show only tasks created by the logged-in user initially, default
-      false.
-    myRunsConstrainText: Button text to constrain by user, default "View only my runs".
-    everyonesRunsConstrainText: Button text to disable constraining by user, default "View
-      everyone's runs".
-    constrainByTestRun: Whether to show only non-test tasks, default true. Test tasks are those that
-      use the "Dummy1k" page sets.
-    nonTestRunsConstrainText: Button text to constrain to non-test tasks, default "Exclude test
-      runs".
-    testRunsConstrainText: Button text to disable constraining by test tasks, default "Include test
-      runs".
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on tasks.
-    resetPagination: Moves to the first page of tasks.
-    constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
-    constrainTestRuns: Toggles constrainByTestRun and reloads the appropriate data.
--->
-
-<dom-module id="capture-skp-runs-sk">
-  <style>
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-    .oldruns {
-      margin-left: 20px;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2><template is="dom-if" if="{{constrainByUser}}">My </template>Capture SkPicture Runs</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-    <paper-button raised on-click="constrainRunsByUser">{{
-      constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
-      }}</paper-button>
-    <paper-button raised on-click="constrainTestRuns">{{
-      constrainButtonText(constrainByTestRun, nonTestRunsConstrainText, testRunsConstrainText)
-      }}</paper-button>
-
-    <br/>
-    <br/>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Task Config</td>
-        <td>Description</td>
-        <td>Results</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{captureSkpsTasks}}" as="captureSkpsTask" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <span>{{captureSkpsTask.Id}}</span>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!captureSkpsTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!captureSkpsTask.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- User col -->
-          <td>{{captureSkpsTask.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Added:</td>
-                <td class="nowrap">{{ formatTimestamp(captureSkpsTask.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(captureSkpsTask.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(captureSkpsTask.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Task Config col -->
-          <td>
-            <table>
-              <tr>
-                <td>PageSet:</td>
-                <td>{{captureSkpsTask.PageSets}}</td>
-              </tr>
-              <tr>
-                <td>ChromiumBuild:</td>
-                <td class="nowrap">
-                  <a href="{{chromiumCommitUrl(captureSkpsTask.ChromiumRev)}}">{{shortHash(captureSkpsTask.ChromiumRev)}}</a>-<a href="{{skiaCommitUrl(captureSkpsTask.SkiaRev)}}">{{shortHash(captureSkpsTask.SkiaRev)}}</a>
-                </td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Description col -->
-          <td>{{captureSkpsTask.Description}}</td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{captureSkpsTask.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!captureSkpsTask.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if" if="{{isDone(captureSkpsTask.Failure, captureSkpsTask.TaskDone)}}">
-              Done
-            </template>
-            <template is="dom-if" if="{{captureSkpsTask.SwarmingLogs}}">
-              <br/>
-              <a href="{{captureSkpsTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Task Repeats -->
-          <td>{{ formatRepeatAfterDays(captureSkpsTask.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "capture-skp-runs-sk",
-     properties: {
-       captureSkpsTasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       constrainByUser: {
-         type: Boolean,
-         value: false,
-       },
-       myRunsConstrainText: {
-         type: String,
-         value: "View only my runs",
-       },
-       everyonesRunsConstrainText: {
-         type: String,
-         value: "View everyone's runs",
-       },
-       constrainByTestRun: {
-         type: Boolean,
-         value: true,
-       },
-       nonTestRunsConstrainText: {
-         type: String,
-         value: "Exclude test runs",
-       },
-       testRunsConstrainText: {
-         type: String,
-         value: "Include test runs",
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             var note = that.deleteNote(that.captureSkpsTasks, index);
-             that.$.confirm_dialog.open("Proceed with deleting task?" + note)
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-       this.reload();
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       if (this.constrainByUser) {
-         queryParams["filter_by_logged_in_user"] = true;
-       }
-       if (this.constrainByTestRun) {
-         queryParams["exclude_dummy_page_sets"] = true;
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       var that = this;
-       sk.post('/_/get_capture_skp_tasks' + queryStr).then(JSON.parse).then(function(json) {
-         that.captureSkpsTasks = json.data;
-         that.pagination = json.pagination;
-         for (var i = 0; i < that.captureSkpsTasks.length; i++) {
-           that.captureSkpsTasks[i].canDelete = json.permissions[i].DeleteAllowed;
-           that.captureSkpsTasks[i].canRedo = json.permissions[i].RedoAllowed;
-           that.captureSkpsTasks[i].Id = json.ids[i];
-         }
-       }).catch(sk.errorMessage);
-     },
-
-     resetPagination: function() {
-       this.pagination.offset = 0;
-       this.pagination.size = this.defaultSize;
-     },
-
-     constrainRunsByUser: function() {
-       this.constrainByUser = !this.constrainByUser;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainTestRuns: function() {
-       this.constrainByTestRun = !this.constrainByTestRun;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainButtonText: function(constrained, constrainText, unconstrainText) {
-       if (constrained) {
-         return unconstrainText;
-       } else {
-         return constrainText;
-       }
-     },
-
-     deleteNote: function(captureSkpsTasks, deleteIndex) {
-       if (deleteIndex >= 0 &&
-           captureSkpsTasks[deleteIndex].TaskDone &&
-           !captureSkpsTasks[deleteIndex].Failure) {
-         return " Note: This SKP repository will no longer be available.";
-       } else {
-         return "";
-       }
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.captureSkpsTasks[deleteIndex].Id;
-       sk.post("/_/delete_capture_skps_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-         this.$.delete_dialog.close();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.captureSkpsTasks[redoIndex].Id;
-       sk.post("/_/redo_capture_skps_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-         this.$.redo_dialog.close();
-       }.bind(this));
-     },
-
-     chromiumCommitUrl: ctfe.chromiumBuild.chromiumCommitUrl,
-     skiaCommitUrl: ctfe.chromiumBuild.skiaCommitUrl,
-     shortHash: ctfe.chromiumBuild.shortHash,
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-
-     isDone: function(failure, taskDone) {
-       return !failure && taskDone;
-     },
-  });
-</script>
diff --git a/ct/res/imp/capture-skps-sk.html b/ct/res/imp/capture-skps-sk.html
deleted file mode 100644
index 85b37ba..0000000
--- a/ct/res/imp/capture-skps-sk.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!--
-  The <capture-skps-sk> custom element declaration. Displays a form that allows the user to
-  queue a task to capture SKPs.
-
-  Attributes:
-    pageSets: List of all defined page sets, as accepted by page-set-selector-sk property
-      pageSets. Must be set.
-    chromiumBuilds: List of all supported Chromium builds, as accepted by chromium-build-selector-sk
-      attribute chromiumBuilds. Must be set.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="capture-skps-sk">
-  <style>
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <table class="options panel">
-      <tr>
-        <td>PageSets Type</td>
-        <td>
-          <page-set-selector-sk id="page_sets" page-sets="{{pageSets}}"></page-set-selector-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Chromium Build</td>
-        <td>
-          <chromium-build-selector-sk id="chromium_build"
-                                      chromium-builds="{{chromiumBuilds}}">
-          </chromium-build-selector-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Repeat this task</td>
-        <td>
-          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Description</td>
-        <td>
-          <paper-input value="" id="desc"
-                       label="Description is required. Please include SKP version."></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td colspan="2" class="center">
-          <div class="triggering-spinner">
-            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-          </div>
-          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="2" class="center">
-          <paper-button raised id="view_history">View runs history</paper-button>
-        </td>
-      </tr>
-    </table>
-  </template>
-</dom-module>
-
-<script>
-  Polymer({
-    is: "capture-skps-sk",
-    properties: {
-      pageSets: {
-        type: Array,
-        observer: "pageSetsChanged",
-      },
-      chromiumBuilds: {
-        type: Array,
-        observer: "chromiumBuildsChanged"
-      },
-      triggeringTask: {
-        type: Boolean,
-        value: false,
-      },
-    },
-
-    ready: function() {
-      var that = this;
-      this.$.submit_task.addEventListener('click', function(e) {
-        that.validateTask();
-      });
-      this.$.view_history.addEventListener('click', function(e) {
-        that.gotoRunsHistory();
-      });
-    },
-
-    pageSetsChanged: function(newValue, oldValue) {
-      // Capture SKPs does not support 1M anymore.
-      for (var i=this.pageSets.length-1; i>=0; i--) {
-         if (ctfe.pageSets.getKey(this.pageSets[i]) == "All") {
-           this.pageSets.splice(i, 1);
-         }
-       }
-      if (!oldValue || oldValue.length == 0) {
-        this.$.page_sets.selectFirst();
-      }
-    },
-
-    chromiumBuildsChanged: function(newValue, oldValue) {
-      if (!oldValue || oldValue.length == 0) {
-        this.$.chromium_build.selectFirst();
-      }
-    },
-
-    validateTask: function() {
-      if (!this.$.page_sets.selected) {
-        sk.errorMessage("Please select a page set type");
-        this.$.page_sets.focus();
-        return;
-      }
-      if (!this.$.chromium_build.selected) {
-        sk.errorMessage("Please select a Chromium build");
-        this.$.chromium_build.focus();
-        return;
-      }
-      if (!this.$.desc.value) {
-        sk.errorMessage("Please specify a description");
-        this.$.desc.focus();
-        return;
-      }
-      if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-        return;
-      }
-      this.$.confirm_dialog.open("Proceed with queueing task?")
-        .then(this.queueTask.bind(this))
-        .catch(function() {
-          sk.errorMessage("Did not queue");
-        })
-    },
-
-    queueTask: function() {
-      this.triggeringTask = true;
-      var params = {};
-      params["page_sets"] = this.$.page_sets.selected;
-      params["chromium_build"] = this.$.chromium_build.selected;
-      params["desc"] = this.$.desc.value;
-      params["repeat_after_days"] = this.$.repeat_after_days.selected;
-
-      sk.post("/_/add_capture_skps_task", JSON.stringify(params))
-        .then(function(resp) {
-          this.gotoRunsHistory();
-        }.bind(this)).catch(function(e) {
-          this.triggeringTask = false;
-          sk.errorMessage(e);
-        }.bind(this));
-    },
-
-    gotoRunsHistory: function() {
-      window.location.href = "/capture_skp_runs/";
-    },
-  });
-</script>
diff --git a/ct/res/imp/chromium-analysis-runs-sk.html b/ct/res/imp/chromium-analysis-runs-sk.html
deleted file mode 100644
index 184a0ff..0000000
--- a/ct/res/imp/chromium-analysis-runs-sk.html
+++ /dev/null
@@ -1,483 +0,0 @@
-<!--
-  The <chromium-analysis-runs-sk> custom element declaration. Displays a table with details about
-  each completed and pending Chromium Analysis task.
-
-  Attributes:
-    defaultSize: The number of tasks to show per page, default 10.
-    constrainByUser: Whether to show only tasks created by the logged-in user initially, default
-      false.
-    myRunsConstrainText: Button text to constrain by user, default "View only my runs".
-    everyonesRunsConstrainText: Button text to disable constraining by user, default "View
-      everyone's runs".
-    constrainByTestRun: Whether to show only non-test tasks, default true. Test tasks are those that
-      use the "Dummy1k" page sets.
-    nonTestRunsConstrainText: Button text to constrain to non-test tasks, default "Exclude test
-      runs".
-    testRunsConstrainText: Button text to disable constraining by test tasks, default "Include test
-      runs".
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on tasks.
-    resetPagination: Moves to the first page of tasks.
-    constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
-    constrainTestRuns: Toggles constrainByTestRun and reloads the appropriate data.
--->
-
-<dom-module id="chromium-analysis-runs-sk">
-  <style>
-    paper-dialog {
-      min-width: 200px;
-      max-width: calc(100% - 10px);
-    }
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-    .oldruns {
-      margin-left: 20px;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2><template is="dom-if" if="{{constrainByUser}}">My </template>Chromium Analysis Runs</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-    <paper-button raised on-click="constrainRunsByUser">{{
-      constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
-      }}</paper-button>
-    <paper-button raised on-click="constrainTestRuns">{{
-      constrainButtonText(constrainByTestRun, nonTestRunsConstrainText, testRunsConstrainText)
-      }}</paper-button>
-
-    <br/>
-    <br/>
-
-    <!-- Section for popups. -->
-    <template is="dom-repeat" items="{{chromiumAnalysisTasks}}" as="chromiumAnalysisTask" index-as="index">
-
-      <paper-dialog heading="Benchmark Args" id="{{ getBenchmarkArgsId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumAnalysisTask.BenchmarkArgs}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-      <paper-dialog heading="Browser Args" id="{{ getBrowserArgsId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumAnalysisTask.BrowserArgs}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-      <paper-dialog heading="Match Stdout Text" id="{{ getMatchStdoutTxtId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumAnalysisTask.MatchStdoutTxt}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-      <paper-dialog heading="Custom APK Location" id="{{ getApkGsPathId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumAnalysisTask.ApkGsPath}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-    </template>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Task Config</td>
-        <td>Description</td>
-        <td>Results</td>
-        <td>Arguments</td>
-        <td>Patches</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{chromiumAnalysisTasks}}" as="chromiumAnalysisTask" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumAnalysisTask.RawOutput}}">
-              <a href="{{chromiumAnalysisTask.RawOutput}}" target="_blank">{{chromiumAnalysisTask.Id}}</a>
-            </template>
-            <template is="dom-if" if="{{!chromiumAnalysisTask.RawOutput}}">
-              <span>{{chromiumAnalysisTask.Id}}</span>
-            </template>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!chromiumAnalysisTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!chromiumAnalysisTask.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- User col -->
-          <td>{{chromiumAnalysisTask.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Added:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumAnalysisTask.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumAnalysisTask.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumAnalysisTask.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Task Config col -->
-          <td>
-            <table>
-              <tr>
-                <td>Benchmark:</td>
-                <td>{{chromiumAnalysisTask.Benchmark}}</td>
-              </tr>
-              <tr>
-                <td>Platform:</td>
-                <td>{{chromiumAnalysisTask.Platform}}</td>
-              </tr>
-              <tr>
-                <td>RunOnGCE:</td>
-                <td>{{chromiumAnalysisTask.RunOnGCE}}</td>
-              </tr>
-              <tr>
-                <td>PageSet:</td>
-                  <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.CustomWebpagesGSPath) }}">
-                    <a href="{{ getGSLink(chromiumAnalysisTask.CustomWebpagesGSPath) }}" target="_blank">Custom Webpages</a>
-                  </template>
-                  <template is="dom-if" if="{{ isEmptyPatch(chromiumAnalysisTask.CustomWebpagesGSPath) }}">
-                    {{chromiumAnalysisTask.PageSets}}
-                  </template>
-                </td>
-              </tr>
-              <tr>
-                <td>ParallelRun:</td>
-                <td>{{chromiumAnalysisTask.RunInParallel}}</td>
-              </tr>
-              <template is="dom-if" if="{{chromiumAnalysisTask.ValueColumnName}}">
-                <tr>
-                  <td class="nowrap">Value Column:</td>
-                  <td class="nowrap">{{chromiumAnalysisTask.ValueColumnName}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.TaskPriority}}">
-                <tr>
-                  <td>TaskPriority:</td>
-                  <td>{{chromiumAnalysisTask.TaskPriority}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.CCList}}">
-                <tr>
-                  <td>CC List:</td>
-                  <td>{{chromiumAnalysisTask.CCList}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.GroupName}}">
-                <tr>
-                  <td>GroupName:</td>
-                  <td><a href="https://ct-perf.skia.org/e/?request_type=1">{{chromiumAnalysisTask.GroupName}}</a></td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.ChromiumHash}}">
-                <tr>
-                  <td>ChromiumHash:</td>
-                  <td><a href="https://chromium.googlesource.com/chromium/src/+show/{{chromiumAnalysisTask.ChromiumHash}}">{{chromiumAnalysisTask.ChromiumHash}}</a></td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.ApkGsPath}}">
-                <tr>
-                  <td>ApkGsPath:</td>
-                  <td><a href="javascript:void(0);" data-index$="{{index}}" data-type="apkGsPath">Display Path</a></td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumAnalysisTask.TelemetryIsolateHash}}">
-                <tr>
-                  <td>TelemetryIsolateHash:</td>
-                  <td><a href="https://chrome-isolated.appspot.com/browse?digest={{chromiumAnalysisTask.TelemetryIsolateHash}}">{{chromiumAnalysisTask.TelemetryIsolateHash}}</a></td>
-                </tr>
-              </template>
-            </table>
-          </td>
-
-          <!-- Description col -->
-          <td>{{chromiumAnalysisTask.Description}}</td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumAnalysisTask.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!chromiumAnalysisTask.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if" if="{{chromiumAnalysisTask.RawOutput}}">
-              <a href="{{chromiumAnalysisTask.RawOutput}}" target="_blank">Output</a>
-            </template>
-            <template is="dom-if" if="{{chromiumAnalysisTask.SwarmingLogs}}">
-              <br/>
-              <a href="{{chromiumAnalysisTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Arguments -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumAnalysisTask.BenchmarkArgs}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="benchmarkArgs">Benchmark Args</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{chromiumAnalysisTask.BrowserArgs}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="browserArgs">Browser Args</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{chromiumAnalysisTask.MatchStdoutTxt}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="matchStdoutTxt">Match Stdout Text</a>
-              <br/>
-            </template>
-          </td>
-
-          <!-- Patches -->
-          <td>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.ChromiumPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumAnalysisTask.ChromiumPatchGSPath) }}" target="_blank">Chromium</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.SkiaPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumAnalysisTask.SkiaPatchGSPath) }}" target="_blank">Skia</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.V8PatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumAnalysisTask.V8PatchGSPath) }}" target="_blank">V8</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.CatapultPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumAnalysisTask.CatapultPatchGSPath) }}" target="_blank">Catapult</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumAnalysisTask.BenchmarkPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumAnalysisTask.BenchmarkPatchGSPath) }}" target="_blank">Telemetry</a>
-            </template>
-          </td>
-
-          <!-- Task Repeats -->
-          <td>{{ formatRepeatAfterDays(chromiumAnalysisTask.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-analysis-runs-sk",
-     properties: {
-       chromiumAnalysisTasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       constrainByUser: {
-         type: Boolean,
-         value: false,
-       },
-       myRunsConstrainText: {
-         type: String,
-         value: "View only my runs",
-       },
-       everyonesRunsConstrainText: {
-         type: String,
-         value: "View everyone's runs",
-       },
-       constrainByTestRun: {
-         type: Boolean,
-         value: true,
-       },
-       nonTestRunsConstrainText: {
-         type: String,
-         value: "Exclude test runs",
-       },
-       testRunsConstrainText: {
-         type: String,
-         value: "Include test runs",
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       this.reload();
-
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var anchor = sk.findParent(e.target, "A");
-         if (anchor != null) {
-           var id = anchor.dataset.index;
-           if (anchor.dataset.type == "benchmarkArgs") {
-             that.toggleDialog(that.getBenchmarkArgsId(id));
-           } else if (anchor.dataset.type == "browserArgs") {
-             that.toggleDialog(that.getBrowserArgsId(id));
-           } else if (anchor.dataset.type == "matchStdoutTxt") {
-             that.toggleDialog(that.getMatchStdoutTxtId(id));
-           } else if (anchor.dataset.type == "apkGsPath") {
-             that.toggleDialog(that.getApkGsPathId(id));
-           }
-         }
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Proceed with deleting task?")
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       if (this.constrainByUser) {
-         queryParams["filter_by_logged_in_user"] = true;
-       }
-       if (this.constrainByTestRun) {
-         queryParams["exclude_dummy_page_sets"] = true;
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       var that = this;
-       sk.post('/_/get_chromium_analysis_tasks' + queryStr).then(JSON.parse).then(function(json) {
-         that.chromiumAnalysisTasks = json.data;
-         that.pagination = json.pagination;
-         for (var i = 0; i < that.chromiumAnalysisTasks.length; i++) {
-           that.chromiumAnalysisTasks[i].canDelete = json.permissions[i].DeleteAllowed;
-           that.chromiumAnalysisTasks[i].canRedo = json.permissions[i].RedoAllowed;
-           that.chromiumAnalysisTasks[i].Id = json.ids[i];
-         }
-       }).catch(sk.errorMessage);
-     },
-
-     getBenchmarkArgsId: function(index) {
-       return "benchmark_args" + index;
-     },
-
-     getBrowserArgsId: function(index) {
-       return "browser_args" + index;
-     },
-
-     getMatchStdoutTxtId: function(index) {
-       return "match_stdout_txt" + index;
-     },
-
-     getApkGsPathId: function(index) {
-       return "apk_gs_path" + index;
-     },
-
-     resetPagination: function() {
-       this.pagination.offset = 0;
-       this.pagination.size = this.defaultSize;
-     },
-
-     constrainRunsByUser: function() {
-       this.constrainByUser = !this.constrainByUser;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainTestRuns: function() {
-       this.constrainByTestRun = !this.constrainByTestRun;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainButtonText: function(constrained, constrainText, unconstrainText) {
-       if (constrained) {
-         return unconstrainText;
-       } else {
-         return constrainText;
-       }
-     },
-
-     toggleDialog: function(id) {
-       Polymer.dom(this.root).querySelector('#' + id).toggle();
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.chromiumAnalysisTasks[deleteIndex].Id;
-       sk.post("/_/delete_chromium_analysis_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.chromiumAnalysisTasks[redoIndex].Id;
-       sk.post("/_/redo_chromium_analysis_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-     getGSLink: ctfe.getGSLink,
-     isEmptyPatch: ctfe.isEmptyPatch,
-  });
-</script>
diff --git a/ct/res/imp/chromium-analysis-sk.html b/ct/res/imp/chromium-analysis-sk.html
deleted file mode 100644
index a03b52b..0000000
--- a/ct/res/imp/chromium-analysis-sk.html
+++ /dev/null
@@ -1,542 +0,0 @@
-<!--
-  The <chromium-analysis-sk> custom element declaration. Displays a form that allows the user to
-  queue a task to analyse Chromium.
-
-  Attributes:
-    benchmarksToDoc: Map of benchmarks to their descriptions. Must be set.
-    benchmarks: Which benchmarks to show. Must be set.
-    platformsToDesc: Map of platforms to their descriptions. Must be set.
-    platforms: List of all supported platforms. Must be set.
-    pageSets: List of all supported page sets, as accepted by page-set-selector-sk property
-      pageSets. Must be set.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="chromium-analysis-sk">
-  <style>
-    paper-input {
-      width: 20em;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    .long-field {
-      width: 40em;
-    }
-
-    .hidden {
-      display: none;
-    }
-
-    .short-field {
-      width: 5em;
-    }
-
-    .smaller-font {
-      font-size: 80%;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-
-    iron-selector.medium-field > div {
-      width: 20em;
-    }
-
-    iron-selector.short-field > div {
-      width: 5em;
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <table class="options panel">
-      <tr>
-        <td>Benchmark Name</td>
-        <td>
-          <autocomplete-input-sk id="benchmark_name"
-            value="{{selectedBenchmarkName}}"
-            autocomplete="[[benchmarks]]"
-            display-options-on-focus="true"
-            accept-custom-value="true"
-            label="Hit <enter> at end if entering custom benchmark"
-          ></autocomplete-input-sk>
-          <template is="dom-if" if="{{getBenchmarkDoc(selectedBenchmarkName)}}">
-            <div><a href="{{getBenchmarkDoc(selectedBenchmarkName)}}">Documentation</a></div>
-          </template>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Target Platform</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="target_platform" selected="Linux" class="long-field">
-            <template is="dom-repeat" items="{{platforms}}">
-              <div id="{{item}}">{{getPlatformDesc(item, platformsToDesc)}}</div>
-            </template>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Run on GCE</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="run_on_gce" selected="run_on_gce_True" class="long-field">
-            <div id="run_on_gce_True">True</div>
-            <div id="run_on_gce_False">False</div>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>PageSets Type</td>
-        <td>
-          <page-set-selector-sk id="page_sets" page-sets="{{pageSets}}"></page-set-selector-sk>
-          <expanding-textarea-sk id="custom_webpages" display-text="Specify custom list of web pages" placeholder-text="{{getPlaceholderTextForCustomWebpages()}}"></expanding-textarea-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-           Run in Parallel<br/>
-           Read about the trade-offs <a href="https://docs.google.com/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit?pli=1#heading=h.xz46aihphb8z">here</a>
-        </td>
-        <td>
-          <iron-selector attr-for-selected="id" id="run_in_parallel" selected="run_in_parallel_True" class="long-field">
-            <div id="run_in_parallel_True">True</div>
-            <div id="run_in_parallel_False">False</div>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Look for text in stdout</td>
-        <td>
-          <paper-input value="" id="match_stdout_txt" class="long-field"></paper-input>
-          <span class="smaller-font"><b>Note:</b> All lines that contain this field in stdout will show up under CT_stdout_lines in the output CSV.</span><br/>
-          <span class="smaller-font"><b>Note:</b> The count of non-overlapping exact matches of this field in stdout will show up under CT_stdout_count in the output CSV.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Benchmark Arguments</td>
-        <td>
-          <paper-input value="--output-format=csv --skip-typ-expectations-tags-validation --legacy-json-trace-format" id="benchmark_args" class="long-field"></paper-input>
-          <span class="smaller-font"><b>Note:</b> Use --num-analysis-retries=[num] to specify how many times run_benchmark should be retried. 2 is the default. 0 calls run_benchmark once.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --run-benchmark-timeout=[secs] to specify the timeout of the run_benchmark script. 300 is the default.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --max-pages-per-bot=[num] to specify the number of pages to run per bot. 100 is the default.</span><br/>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Browser Arguments</td>
-        <td>
-          <paper-input value="" id="browser_args" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-
-      <tr>
-        <td>Field Value Column Name</td>
-        <td>
-          <paper-input value="avg" id="value_column_name" class="medium-field"></paper-input>
-          <span class="smaller-font">Which column's entries to use as field values.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Chromium Git patch (optional)<br/>
-          Applied to Chromium ToT<br/>
-          or to the hash specified below.
-        </td>
-        <td>
-          <patch-sk id="chromium_patch"
-                    patch-type="chromium"
-                    cl-description="{{chromiumClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Custom APK location (optional)<br/>
-          (See <a href="https://bugs.chromium.org/p/skia/issues/detail?id=9805">skbug/9805</a>)
-        </td>
-        <td>
-          <paper-input value="" id="apk_gs_path" class="long-field" label="Eg: gs://chrome-unsigned/android-B0urB0N/73.0.3655.0/arm_64/ChromeModern.apk"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Telemery Isolate Hash (optional)<br/>
-          (See <a href="https://bugs.chromium.org/p/skia/issues/detail?id=9853">skbug/9853</a>)
-        </td>
-        <td>
-          <paper-input value="" id="telemetry_isolate_hash" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Chromium hash to sync to (optional)<br/></td>
-        <td>
-          <paper-input value="" id="chromium_hash" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Skia Git patch (optional)<br/>
-          Applied to Skia Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="skia_patch"
-                    patch-type="skia"
-                    cl-description="{{skiaClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          V8 Git patch (optional)<br/>
-          Applied to V8 Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="v8_patch"
-                    patch-type="v8"
-                    cl-description="{{v8ClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Catapult Git patch (optional)<br/>
-          Applied to Catapult Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="catapult_patch"
-                    patch-type="catapult"
-                    cl-description="{{catapultClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Repeat this task</td>
-        <td>
-          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Task Priority</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="task_priority" selected="100" class="medium-field">
-            <template is="dom-repeat" items="{{taskPriorities}}">
-              <div id="{{item}}">{{getTaskPriorityDesc(item,taskPrioritiesToDesc)}}</div>
-            </template>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Notifications CC list (optional)<br/>
-          Email will be sent by ct@skia.org
-        </td>
-        <td>
-          <paper-input value="" id="cc_list" label="email1,email2,email3" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Group name (optional)<br/>
-          Will be used to track runs
-        </td>
-        <td>
-          <paper-input value="" id="group_name" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Description</td>
-        <td>
-          <paper-input value="" id="desc" label="Description is required" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td colspan="2" class="center">
-          <div class="triggering-spinner">
-            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-          </div>
-          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="2" class="center">
-          <paper-button raised id="view_history">View runs history</paper-button>
-        </td>
-      </tr>
-    </table>
-
-    <br/><br/>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-analysis-sk",
-     properties: {
-       benchmarks: {
-         type: Array,
-         value: [],
-       },
-       benchmarksToDoc: {
-         type: Object,
-         value: {},
-       },
-       platforms: {
-         type: Array,
-         value: [],
-       },
-       platformsToDesc: {
-         type: Object,
-         value: {},
-       },
-       taskPriorities: {
-         type: Array,
-         value: [],
-       },
-       taskPrioritiesToDesc: {
-         type: Object,
-         value: {},
-       },
-       pageSets: {
-         type: Array,
-         observer: 'pageSetsChanged',
-       },
-       triggeringTask: {
-         type: Boolean,
-         value: false,
-       },
-       chromiumClDescription: String,
-       skiaClDescription: String,
-       v8ClDescription: String,
-       catapultClDescription: String,
-       selectedBenchmarkName: String,
-     },
-
-     observers: [
-       "clDescriptionChanged(chromiumClDescription, skiaClDescription, v8ClDescription, catapultClDescription)"
-     ],
-
-     ready: function() {
-       var that = this;
-       this.$.target_platform.addEventListener('click', function(e) {
-         that.platformChanged();
-       });
-       this.$.run_in_parallel.addEventListener('click', function(e) {
-         that.runInParallelChanged();
-       });
-       this.$.submit_task.addEventListener('click', function(e) {
-         that.validateTask();
-       });
-       this.$.view_history.addEventListener('click', function(e) {
-         that.gotoRunsHistory();
-       });
-       this.$.custom_webpages.addEventListener('click', function(e) {
-         // Do not display the pagesets selector if custom webpages is open.
-         that.$.page_sets.hidden = that.$.custom_webpages.opened;
-         if (!that.$.custom_webpages.opened) {
-           // Clear out webpages if it is no longer open.
-           that.$.custom_webpages.value = '';
-         }
-       });
-     },
-
-     getBenchmarkDoc: function(benchmarkName) {
-       if (! benchmarkName || ! this.benchmarksToDoc[benchmarkName]) {
-         return "";
-       }
-       return this.benchmarksToDoc[benchmarkName];
-     },
-
-     getPlatformDesc: function(platform, platformsToDesc) {
-       if (platformsToDesc) {
-         return platformsToDesc[platform];
-       }
-     },
-
-     getTaskPriorityDesc: function(taskPriority, taskPrioritiesToDesc) {
-       if (taskPrioritiesToDesc) {
-         return taskPrioritiesToDesc[taskPriority];
-       }
-     },
-
-     platformChanged: function() {
-       if (this.$.target_platform.selected == "Android") {
-         // Cannot run on GCE instances if Android is selected.
-         this.$.run_on_gce.selected = "run_on_gce_False";
-         this.$.run_on_gce_True.hidden = "True";
-         this.$.run_on_gce_False.hidden = "";
-
-         // Cannot run in parallel if Android is selected.
-         this.$.run_in_parallel.selected = "run_in_parallel_False";
-         this.$.run_in_parallel_True.hidden = "True";
-       } else if (this.$.target_platform.selected == "Windows") {
-         // Cannot run on bare-metal machines if Windows is selected. One day
-         // this will change.
-         this.$.run_on_gce_True.hidden = "";
-         this.$.run_on_gce_False.hidden = "True";
-         this.$.run_on_gce.selected = "run_on_gce_True";
-       } else {
-         this.$.run_on_gce_True.hidden = "";
-         this.$.run_on_gce_False.hidden = "";
-         this.$.run_on_gce.selected = "run_on_gce_True";
-
-         this.$.run_in_parallel_True.hidden = "";
-         this.$.run_in_parallel.selected = "run_in_parallel_True";
-       }
-       this.runInParallelChanged();
-     },
-
-     runInParallelChanged: function() {
-       if (this.$.run_in_parallel.selected == "run_in_parallel_True") {
-         document.getElementById('100k').hidden = "";
-         document.getElementById('Mobile100k').hidden = "";
-       } else {
-         // Should not run on 100k page sets without parallel because it would
-         // take too long.
-         document.getElementById('100k').hidden = "True";
-         document.getElementById('Mobile100k').hidden = "True";
-         this.$.page_sets.selected = "10k";
-       }
-     },
-
-     pageSetsChanged: function(newValue, oldValue) {
-       // CT's chromium analysis does not support 1M.
-       for (var i=this.pageSets.length-1; i>=0; i--) {
-         if (ctfe.pageSets.getKey(this.pageSets[i]) == "All") {
-           this.pageSets.splice(i, 1);
-         }
-       }
-       if (!oldValue || oldValue.length == 0) {
-         this.$.page_sets.selectFirst();
-       }
-     },
-
-     clDescriptionChanged: function(chromiumClDesc, skiaClDesc, v8ClDesc, catapultClDesc) {
-       this.$.desc.value = ctfe.getDescriptionOfCls(chromiumClDesc, skiaClDesc, v8ClDesc, catapultClDesc, '')
-     },
-
-     validateTask: function() {
-       if (! this.selectedBenchmarkName) {
-         sk.errorMessage("Please specify a benchmark");
-         this.$.benchmark_name.focus();
-         return;
-       }
-       if (!this.$.chromium_patch.validate() ||
-           !this.$.skia_patch.validate() ||
-           !this.$.v8_patch.validate() ||
-           !this.$.catapult_patch.validate()) {
-         return;
-       }
-       if (! this.$.desc.value) {
-         sk.errorMessage("Please specify a description");
-         this.$.desc.focus();
-         return;
-       }
-       if (ctfe.missingLiveSitesWithCustomWebpages(
-               this.$.custom_webpages.value, this.$.benchmark_args.value)) {
-         this.$.benchmark_args.focus();
-         return;
-       }
-       if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-         return;
-       }
-       this.$.confirm_dialog.open("Proceed with queueing task?")
-         .then(this.queueTask.bind(this))
-         .catch(function() {
-           sk.errorMessage("Did not queue");
-         })
-     },
-
-     queueTask: function() {
-       this.triggeringTask = true;
-       var params = {};
-       params["benchmark"] = this.selectedBenchmarkName;
-       params["page_sets"] = this.$.page_sets.selected;
-       params["custom_webpages"] = this.$.custom_webpages.value;
-       params["match_stdout_txt"] = this.$.match_stdout_txt.value;
-       params["benchmark_args"] = this.$.benchmark_args.value;
-       params["browser_args"] = this.$.browser_args.value;
-       params["value_column_name"] = this.$.value_column_name.value;
-       params["desc"] = this.$.desc.value;
-       params["chromium_patch"] = this.$.chromium_patch.patch;
-       params["chromium_hash"] = this.$.chromium_hash.value;
-       params["apk_gs_path"] = this.$.apk_gs_path.value;
-       params["telemetry_isolate_hash"] = this.$.telemetry_isolate_hash.value;
-       params["skia_patch"] = this.$.skia_patch.patch;
-       params["v8_patch"] = this.$.v8_patch.patch;
-       params["catapult_patch"] = this.$.catapult_patch.patch;
-       params["repeat_after_days"] = this.$.repeat_after_days.selected;
-       params["task_priority"] = this.$.task_priority.selected;
-       if (this.$.cc_list.value) {
-         params["cc_list"] = this.$.cc_list.value.split(",")
-       }
-       if (this.$.group_name.value) {
-         params["group_name"] = this.$.group_name.value
-       }
-       params["run_in_parallel"] = this.$.run_in_parallel.selected == "run_in_parallel_True";
-       params["platform"] = this.$.target_platform.selected;
-       params["run_on_gce"] = this.$.run_on_gce.selected == "run_on_gce_True";
-
-       var that = this;
-       sk.post("/_/add_chromium_analysis_task", JSON.stringify(params)).then(function(resp) {
-         that.gotoRunsHistory();
-       }).catch(function(e) {
-         that.triggeringTask = false;
-         sk.errorMessage(e);
-       });
-     },
-
-     gotoRunsHistory: function() {
-       window.location.href = "/chromium_analysis_runs/";
-     },
-
-     getPlaceholderTextForCustomWebpages: ctfe.getPlaceholderTextForCustomWebpages,
-   });
-</script>
diff --git a/ct/res/imp/chromium-build-runs-sk.html b/ct/res/imp/chromium-build-runs-sk.html
deleted file mode 100644
index 00d923b..0000000
--- a/ct/res/imp/chromium-build-runs-sk.html
+++ /dev/null
@@ -1,245 +0,0 @@
-<!--
-  The <chromium-build-runs-sk> custom element declaration. Displays a table with details about each
-  completed and pending Chromium build task.
-
-  Attributes:
-    defaultSize: The number of Chromium build runs to show per page, default 10.
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on Chromium build runs.
--->
-
-<dom-module id="chromium-build-runs-sk">
-  <style>
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-    .oldruns {
-      margin-left: 20px;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2>Chromium Builds</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>Chromium Commit Hash</td>
-        <td>Submitted On</td>
-        <td>Skia Commit Hash</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Results</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{chromiumBuilds}}" as="chromiumBuild" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <span>{{chromiumBuild.Id}}</span>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!chromiumBuild.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!chromiumBuild.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- Chromium Commit Hash col -->
-          <td><a href="{{chromiumCommitUrl(chromiumBuild.ChromiumRev)}}">{{shortHash(chromiumBuild.ChromiumRev)}}</a></td>
-
-          <!-- Submitted On col -->
-          <td class="nowrap">{{ formatTimestamp(chromiumBuild.ChromiumRevTs) }}</td>
-
-          <!-- Skia Commit Hash col -->
-          <td><a href="{{skiaCommitUrl(chromiumBuild.SkiaRev)}}">{{shortHash(chromiumBuild.SkiaRev)}}</a></td>
-
-          <!-- User col -->
-          <td>{{chromiumBuild.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Requested:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumBuild.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumBuild.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumBuild.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumBuild.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!chromiumBuild.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if"
-                      if="{{isDone(chromiumBuild.Failure, chromiumBuild.TaskDone)}}">
-              Done
-            </template>
-            <template is="dom-if" if="{{chromiumBuild.Log}}">
-              <a href="{{chromiumBuild.Log}}" target="_blank">log</a>
-            </template>
-            <template is="dom-if" if="{{chromiumBuild.SwarmingLogs}}">
-              <br/>
-              <a href="{{chromiumBuild.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Task Repeats -->
-          <td>{{ formatRepeatAfterDays(chromiumBuild.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-build-runs-sk",
-     properties: {
-       chromiumBuilds: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             var note = that.deleteNote(that.chromiumBuilds, index);
-             that.$.confirm_dialog.open("Proceed with deleting task?" + note)
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-       this.reload();
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       sk.post("/_/get_chromium_build_tasks" + queryStr).then(JSON.parse).then(function(json) {
-         this.pagination = json.pagination;
-         this.chromiumBuilds = json.data;
-         for (var i = 0; i < this.chromiumBuilds.length; i++) {
-           this.chromiumBuilds[i].canDelete = json.permissions[i].DeleteAllowed;
-           this.chromiumBuilds[i].canRedo = json.permissions[i].RedoAllowed;
-           this.chromiumBuilds[i].Id = json.ids[i];
-         }
-       }.bind(this)).catch(sk.errorMessage);
-     },
-
-     deleteNote: function(chromiumBuilds, deleteIndex) {
-       if (deleteIndex >= 0 &&
-           chromiumBuilds[deleteIndex].TaskDone &&
-           !chromiumBuilds[deleteIndex].Failure) {
-         return " Note: This build will no longer be available for running other tasks.";
-       } else {
-         return "";
-       }
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.chromiumBuilds[deleteIndex].Id;
-       sk.post("/_/delete_chromium_build_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.chromiumBuilds[redoIndex].Id;
-       sk.post("/_/redo_chromium_build_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     chromiumCommitUrl: ctfe.chromiumBuild.chromiumCommitUrl,
-     skiaCommitUrl: ctfe.chromiumBuild.skiaCommitUrl,
-     shortHash: ctfe.chromiumBuild.shortHash,
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-
-     isDone: function(failure, taskDone) {
-       return !failure && taskDone;
-     },
-  });
-</script>
diff --git a/ct/res/imp/chromium-build-selector-sk.html b/ct/res/imp/chromium-build-selector-sk.html
deleted file mode 100644
index 6478e8a..0000000
--- a/ct/res/imp/chromium-build-selector-sk.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-  The <chromium-build-selector-sk> custom element declaration. Displays an iron-selector allowing
-  the user to choose among the available Chromium builds.
-
-  Attributes:
-    chromiumBuilds: array of objects as obtained via ctfe.chromiumBuild.getBuilds. Must be set.
-    selected: Item of chromiumBuilds that is currently selected. Notifies.
-
-  Events:
-    None.
-
-  Methods:
-    selectFirst: Causes the first build in chromiumBuilds to be selected.
--->
-
-<dom-module id="chromium-build-selector-sk">
-  <style>
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-  </style>
-  <template>
-    <iron-selector selected="{{selectedIndex}}" class="long-field">
-      <template is="dom-repeat" items="{{chromiumBuilds}}">
-        <div>{{getDescription(item)}}</div>
-      </template>
-    </iron-selector>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-build-selector-sk",
-     properties: {
-       chromiumBuilds: Array,
-       selectedIndex: {
-         type: String,
-       },
-       selected: {
-         type: Object,
-         notify: true,
-         computed: "getBuild(chromiumBuilds, selectedIndex)",
-       },
-     },
-
-     getBuild: function(chromiumBuilds, selectedIndex) {
-       return chromiumBuilds[selectedIndex];
-     },
-
-     selectFirst: function() {
-       if (this.chromiumBuilds.length > 0) {
-         this.selectedIndex = "0";
-       }
-     },
-
-     getDescription: ctfe.chromiumBuild.getDescription,
-   });
-</script>
diff --git a/ct/res/imp/chromium-builds-sk.html b/ct/res/imp/chromium-builds-sk.html
deleted file mode 100644
index 38a7b5c..0000000
--- a/ct/res/imp/chromium-builds-sk.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<!--
-  The <chromium-builds-sk> custom element declaration. Displays a form that allows the user to queue
-  a task to build a specific revision of Chromium with a specific revision of Skia. The user can
-  specify LKGR to obtain the last known good release. Displays information about the entered
-  revision.
-
-  Attributes:
-    chromiumRev: The Chromium revision that is initially entered, default "LKGR".
-    skiaRev: The Skia revision that is initially entered, default "LKGR".
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="chromium-builds-sk">
-  <style>
-    .hash-field {
-      width: 42ch;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-    }
-
-    .rev-detail-container {
-      position: relative;
-      text-align: center;
-      width: 300px;
-      height: 100px;
-    }
-
-    .loading-rev-spinner {
-      margin: auto;
-      vertical-align: middle
-    }
-
-    .rev-detail {
-      position: absolute;
-      top: 0px;
-      left: 0px;
-      text-align: start;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <table class="options panel">
-      <tr>
-        <td>Chromium Commit Hash</td>
-        <td>
-          <paper-input value="{{chromiumRev}}" class="hash-field"></paper-input>
-        </td>
-        <td>
-          <div class="rev-detail-container">
-            <div class="loading-rev-spinner">
-              <paper-spinner active="{{loadingChromiumRevDetail}}"
-                             alt="Loading Chromium commit details"></paper-spinner>
-            </div>
-            <div class="rev-detail">{{chromiumRevDetail}}</div>
-          </div>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Skia Commit Hash</td>
-        <td>
-          <paper-input value="{{skiaRev}}" class="hash-field"></paper-input>
-        </td>
-        <td>
-          <div class="rev-detail-container">
-            <div class="loading-rev-spinner">
-              <paper-spinner active="{{loadingSkiaRevDetail}}"
-                             alt="Loading Skia commit details"></paper-spinner>
-            </div>
-            <div class="rev-detail">{{skiaRevDetail}}</div>
-          </div>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Repeat this task</td>
-        <td>
-          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td colspan="3" class="center">
-          <div class="triggering-spinner">
-            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-          </div>
-          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="3" class="center">
-          <paper-button raised id="view_history">View runs history</paper-button>
-        </td>
-      </tr>
-    </table>
-  </template>
-</dom-module>
-
-<script>
-  Polymer({
-    is: "chromium-builds-sk",
-    properties: {
-      chromiumRev: {
-        type: String,
-        value: "LKGR",
-        observer: "chromiumRevChanged",
-      },
-      chromiumRevData: Object,
-      loadingChromiumRevDetail: {
-        type: Boolean,
-        value: false,
-      },
-      chromiumRevDetail: {
-        type: String,
-        computed: "formatRevData(chromiumRevData)",
-      },
-      skiaRev: {
-        type: String,
-        value: "LKGR",
-        observer: "skiaRevChanged",
-      },
-      skiaRevData: Object,
-      loadingSkiaRevDetail: {
-        type: Boolean,
-        value: false,
-      },
-      skiaRevDetail: {
-        type: String,
-        computed: "formatRevData(skiaRevData)",
-      },
-      triggeringTask: {
-        type: Boolean,
-        value: false,
-      },
-    },
-
-    ready: function() {
-      var that = this;
-      this.$.submit_task.addEventListener('click', function(e) {
-        that.validateTask();
-      });
-      this.$.view_history.addEventListener('click', function(e) {
-        that.gotoRunsHistory();
-      });
-    },
-
-    chromiumRevChanged: function(newValue) {
-      if (!newValue) {
-        this.chromiumRevData = null;
-        this.loadingChromiumRevDetail = false;
-        return;
-      }
-      this.loadingChromiumRevDetail = true;
-      var params = {rev: newValue};
-      var that = this;
-      sk.post("/_/chromium_rev_data?" + sk.query.fromObject(params)).then(JSON.parse).then(function (json) {
-        if (that.chromiumRev == newValue) {
-          if (json.commit) {
-            that.chromiumRevData = json;
-          } else {
-            that.chromiumRevData = null;
-          }
-          that.loadingChromiumRevDetail = false;
-        }
-      }).catch(function (err) {
-        if (that.chromiumRev == newValue) {
-          that.chromiumRevData = {error: err};
-          that.loadingChromiumRevDetail = false;
-        }
-      });
-    },
-
-    skiaRevChanged: function(newValue) {
-      if (!newValue) {
-        this.skiaRevData = null;
-        this.loadingSkiaRevDetail = false;
-        return;
-      }
-      this.loadingSkiaRevDetail = true;
-      var params = {rev: newValue};
-
-      var that = this;
-      sk.post("/_/skia_rev_data?" + sk.query.fromObject(params)).then(JSON.parse).then(function (json) {
-        if (that.skiaRev == newValue) {
-          if (json.commit) {
-            that.skiaRevData = json;
-          } else {
-            that.skiaRevData = null;
-          }
-          that.loadingSkiaRevDetail = false;
-        }
-      }).catch(function (err) {
-        if (that.skiaRev == newValue) {
-          that.skiaRevData = {error: err};
-          that.loadingSkiaRevDetail = false;
-        }
-      });
-    },
-
-    formatRevData: function(revData) {
-      if (revData) {
-        if (!revData.error) {
-          return revData.commit + " by " + revData.author.name + " submitted " +
-              revData.committer.time;
-        } else {
-          return revData.error;
-        }
-      } else {
-        return "";
-      }
-    },
-
-    validateTask: function() {
-      if (!this.chromiumRevData || !this.chromiumRevData.commit) {
-        sk.errorMessage("Please enter a valid Chromium commit hash.");
-        this.$.chromium_rev.focus();
-        return;
-      }
-      if (!this.skiaRevData || !this.skiaRevData.commit) {
-        sk.errorMessage("Please enter a valid Skia commit hash.");
-        this.$.skia_rev.focus();
-        return;
-      }
-      if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-        return;
-      }
-      this.$.confirm_dialog.open("Proceed with queueing task?")
-        .then(this.queueTask.bind(this))
-        .catch(function() {
-          sk.errorMessage("Did not queue");
-        })
-    },
-
-    queueTask: function() {
-      this.triggeringTask = true;
-      var params = {};
-      params["chromium_rev"] = this.chromiumRevData.commit;
-      params["chromium_rev_ts"] = this.chromiumRevData.committer.time;
-      params["skia_rev"] = this.skiaRevData.commit;
-      params["repeat_after_days"] = this.$.repeat_after_days.selected;
-
-      sk.post("/_/add_chromium_build_task", JSON.stringify(params))
-        .then(function(resp) {
-          this.gotoRunsHistory();
-        }.bind(this)).catch(function(e) {
-          this.triggeringTask = false;
-          sk.errorMessage(e);
-        }.bind(this));
-    },
-
-    gotoRunsHistory: function() {
-      window.location.href = "/chromium_builds_runs/";
-    },
-  });
-</script>
diff --git a/ct/res/imp/chromium-perf-runs-sk.html b/ct/res/imp/chromium-perf-runs-sk.html
deleted file mode 100644
index 29f0f41..0000000
--- a/ct/res/imp/chromium-perf-runs-sk.html
+++ /dev/null
@@ -1,471 +0,0 @@
-<!--
-  The <chromium-perf-runs-sk> custom element declaration. Displays a table with details about each
-  completed and pending Chromium Perf task.
-
-  Attributes:
-    defaultSize: The number of tasks to show per page, default 10.
-    constrainByUser: Whether to show only tasks created by the logged-in user initially, default
-      false.
-    myRunsConstrainText: Button text to constrain by user, default "View only my runs".
-    everyonesRunsConstrainText: Button text to disable constraining by user, default "View
-      everyone's runs".
-    constrainByTestRun: Whether to show only non-test tasks, default true. Test tasks are those that
-      use the "Dummy1k" page sets.
-    nonTestRunsConstrainText: Button text to constrain to non-test tasks, default "Exclude test
-      runs".
-    testRunsConstrainText: Button text to disable constraining by test tasks, default "Include test
-      runs".
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on tasks.
-    resetPagination: Moves to the first page of tasks.
-    constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
-    constrainTestRuns: Toggles constrainByTestRun and reloads the appropriate data.
--->
-
-<dom-module id="chromium-perf-runs-sk">
-  <style>
-    paper-dialog {
-      min-width: 200px;
-      max-width: calc(100% - 10px);
-    }
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-    .oldruns {
-      margin-left: 20px;
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2><template is="dom-if" if="{{constrainByUser}}">My </template>Chromium Perf Runs</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-    <paper-button raised on-click="constrainRunsByUser">{{
-      constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
-      }}</paper-button>
-    <paper-button raised on-click="constrainTestRuns">{{
-      constrainButtonText(constrainByTestRun, nonTestRunsConstrainText, testRunsConstrainText)
-      }}</paper-button>
-
-    <br/>
-    <br/>
-
-    <!-- Section for popups. -->
-    <template is="dom-repeat" items="{{chromiumPerfTasks}}" as="chromiumPerfTask" index-as="index">
-      <paper-dialog heading="Benchmark Args" id="{{ getBenchmarkArgsId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumPerfTask.BenchmarkArgs}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-      <paper-dialog heading="Browser Args NoPatch" id="{{ getBrowserArgsNoPatchId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumPerfTask.BrowserArgsNoPatch}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-      <paper-dialog heading="Browser Args WithPatch" id="{{ getBrowserArgsWithPatchId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{chromiumPerfTask.BrowserArgsWithPatch}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-    </template>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Task Config</td>
-        <td>Description</td>
-        <td>Results</td>
-        <td>Arguments</td>
-        <td>Patches</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{chromiumPerfTasks}}" as="chromiumPerfTask" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumPerfTask.Results}}">
-              <a href="{{chromiumPerfTask.Results}}" target="_blank">{{chromiumPerfTask.Id}}</a>
-            </template>
-            <template is="dom-if" if="{{!chromiumPerfTask.Results}}">
-              <span>{{chromiumPerfTask.Id}}</span>
-            </template>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!chromiumPerfTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!chromiumPerfTask.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- User col -->
-          <td>{{chromiumPerfTask.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Added:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumPerfTask.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumPerfTask.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(chromiumPerfTask.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Task Config col -->
-          <td>
-            <table>
-              <tr>
-                <td>Benchmark:</td>
-                <td>{{chromiumPerfTask.Benchmark}}</td>
-              </tr>
-              <tr>
-                <td>Platform:</td>
-                <td>{{chromiumPerfTask.Platform}}</td>
-              </tr>
-              <tr>
-                <td>PageSet:</td>
-                <td>
-                  <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.CustomWebpagesGSPath) }}">
-                    <a href="{{ getGSLink(chromiumPerfTask.CustomWebpagesGSPath) }}" target="_blank">Custom Webpages</a>
-                  </template>
-                  <template is="dom-if" if="{{ isEmptyPatch(chromiumPerfTask.CustomWebpagesGSPath) }}">
-                    {{chromiumPerfTask.PageSets}}
-                  </template>
-                </td>
-              </tr>
-              <tr>
-                <td>Repeats:</td>
-                <td>{{chromiumPerfTask.RepeatRuns}}</td>
-              </tr>
-              <tr>
-                <td>ParallelRun:</td>
-                <td>{{chromiumPerfTask.RunInParallel}}</td>
-              </tr>
-              <template is="dom-if" if="{{chromiumPerfTask.ValueColumnName}}">
-                <tr>
-                  <td class="nowrap">Value Column:</td>
-                  <td class="nowrap">{{chromiumPerfTask.ValueColumnName}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumPerfTask.TaskPriority}}">
-                <tr>
-                  <td>TaskPriority:</td>
-                  <td>{{chromiumPerfTask.TaskPriority}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumPerfTask.CCList}}">
-                <tr>
-                  <td>CC List:</td>
-                  <td>{{chromiumPerfTask.CCList}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumPerfTask.GroupName}}">
-                <tr>
-                  <td>GroupName:</td>
-                  <td><a href="https://ct-perf.skia.org/e/?request_type=1">{{chromiumPerfTask.GroupName}}</a></td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{chromiumPerfTask.ChromiumHash}}">
-                <tr>
-                  <td>ChromiumHash:</td>
-                  <td><a href="https://chromium.googlesource.com/chromium/src/+show/{{chromiumPerfTask.ChromiumHash}}">{{chromiumPerfTask.ChromiumHash}}</a></td>
-                </tr>
-              </template>
-            </table>
-          </td>
-
-          <!-- Description col -->
-          <td>{{chromiumPerfTask.Description}}</td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumPerfTask.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!chromiumPerfTask.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if" if="{{chromiumPerfTask.Results}}">
-              <a href="{{chromiumPerfTask.Results}}" target="_blank">Overall Result</a>
-              <br/>
-              <a href="{{chromiumPerfTask.NoPatchRawOutput}}" target="_blank">NoPatch Raw Output</a>
-              <br/>
-              <a href="{{chromiumPerfTask.WithPatchRawOutput}}" target="_blank">WithPatch Raw Output</a>
-            </template>
-            <template is="dom-if" if="{{chromiumPerfTask.SwarmingLogs}}">
-              <br/>
-              <a href="{{chromiumPerfTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Arguments -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{chromiumPerfTask.BenchmarkArgs}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="benchmarkArgs">Benchmark Args</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{chromiumPerfTask.BrowserArgsNoPatch}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="nopatchBrowserArgs">NoPatch Browser Args</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{chromiumPerfTask.BrowserArgsWithPatch}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="withpatchBrowserArgs">WithPatch Browser Args</a>
-              <br/>
-            </template>
-          </td>
-
-          <!-- Patches -->
-          <td>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.ChromiumPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.ChromiumPatchGSPath) }}" target="_blank">Chromium</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.BlinkPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.BlinkPatchGSPath) }}" target="_blank">Blink</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.SkiaPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.SkiaPatchGSPath) }}" target="_blank">Skia</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.V8PatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.V8PatchGSPath) }}" target="_blank">V8</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.CatapultPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.CatapultPatchGSPath) }}" target="_blank">Catapult</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.BenchmarkPatchGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.BenchmarkPatchGSPath) }}" target="_blank">Telemetry</a>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(chromiumPerfTask.ChromiumPatchBaseBuildGSPath) }}">
-              <a href="{{ getGSLink(chromiumPerfTask.ChromiumPatchBaseBuildGSPath) }}" target="_blank" class="nowrap">Chromium(base_build)</a>
-            </template>
-          </td>
-
-          <!-- Task Repeats -->
-          <td>{{ formatRepeatAfterDays(chromiumPerfTask.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-perf-runs-sk",
-     properties: {
-       chromiumPerfTasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       constrainByUser: {
-         type: Boolean,
-         value: false,
-       },
-       myRunsConstrainText: {
-         type: String,
-         value: "View only my runs",
-       },
-       everyonesRunsConstrainText: {
-         type: String,
-         value: "View everyone's runs",
-       },
-       constrainByTestRun: {
-         type: Boolean,
-         value: true,
-       },
-       nonTestRunsConstrainText: {
-         type: String,
-         value: "Exclude test runs",
-       },
-       testRunsConstrainText: {
-         type: String,
-         value: "Include test runs",
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       this.reload();
-
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var anchor = sk.findParent(e.target, "A");
-         if (anchor != null) {
-           var id = anchor.dataset.index;
-           if (anchor.dataset.type == "benchmarkArgs") {
-             that.toggleDialog(that.getBenchmarkArgsId(id));
-           } else if (anchor.dataset.type == "nopatchBrowserArgs") {
-             that.toggleDialog(that.getBrowserArgsNoPatchId(id));
-           } else if (anchor.dataset.type == "withpatchBrowserArgs") {
-             that.toggleDialog(that.getBrowserArgsWithPatchId(id));
-           }
-         }
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Proceed with deleting task?")
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       if (this.constrainByUser) {
-         queryParams["filter_by_logged_in_user"] = true;
-       }
-       if (this.constrainByTestRun) {
-         queryParams["exclude_dummy_page_sets"] = true;
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       var that = this;
-       sk.post('/_/get_chromium_perf_tasks' + queryStr).then(JSON.parse).then(function(json) {
-         that.chromiumPerfTasks = json.data;
-         that.pagination = json.pagination;
-         for (var i = 0; i < that.chromiumPerfTasks.length; i++) {
-           that.chromiumPerfTasks[i].canDelete = json.permissions[i].DeleteAllowed;
-           that.chromiumPerfTasks[i].canRedo = json.permissions[i].RedoAllowed;
-           that.chromiumPerfTasks[i].Id = json.ids[i];
-         }
-       }).catch(sk.errorMessage);
-     },
-
-     getBenchmarkArgsId: function(index) {
-       return "benchmark_args" + index;
-     },
-
-     getBrowserArgsNoPatchId: function(index) {
-       return "browser_args_nopatch" + index;
-     },
-
-     getBrowserArgsWithPatchId: function(index) {
-       return "browser_args_withpatch" + index;
-     },
-
-     resetPagination: function() {
-       this.pagination.offset = 0;
-       this.pagination.size = this.defaultSize;
-     },
-
-     constrainRunsByUser: function() {
-       this.constrainByUser = !this.constrainByUser;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainTestRuns: function() {
-       this.constrainByTestRun = !this.constrainByTestRun;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainButtonText: function(constrained, constrainText, unconstrainText) {
-       if (constrained) {
-         return unconstrainText;
-       } else {
-         return constrainText;
-       }
-     },
-
-     toggleDialog: function(id) {
-       Polymer.dom(this.root).querySelector('#' + id).toggle();
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.chromiumPerfTasks[deleteIndex].Id;
-       sk.post("/_/delete_chromium_perf_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.chromiumPerfTasks[redoIndex].Id;
-       sk.post("/_/redo_chromium_perf_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-     getGSLink: ctfe.getGSLink,
-     isEmptyPatch: ctfe.isEmptyPatch,
-  });
-</script>
diff --git a/ct/res/imp/chromium-perf-sk.html b/ct/res/imp/chromium-perf-sk.html
deleted file mode 100644
index 764eab5..0000000
--- a/ct/res/imp/chromium-perf-sk.html
+++ /dev/null
@@ -1,519 +0,0 @@
-<!--
-  The <chromium-perf-sk> custom element declaration. Displays a form that allows the user to queue a
-  task to test Chromium/Skia performance.
-
-  Attributes:
-    benchmarksToDoc: Map of benchmarks to their descriptions. Must be set.
-    benchmarks: Which benchmarks to show. Must be set.
-    platformsToDesc: Map of platforms to their descriptions. Must be set.
-    platforms: List of all supported platforms. Must be set.
-    pageSets: List of all supported page sets, as accepted by page-set-selector-sk property
-      pageSets. Must be set.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="chromium-perf-sk">
-  <style>
-    paper-input {
-      width: 20em;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    .long-field {
-      width: 40em;
-    }
-
-    .hidden {
-      display: none;
-    }
-
-    .short-field {
-      width: 5em;
-    }
-
-    .smaller-font {
-      font-size: 80%;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-
-    iron-selector.medium-field > div {
-      width: 20em;
-    }
-
-    iron-selector.short-field > div {
-      width: 5em;
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <table class="options panel">
-      <tr>
-        <td>Benchmark Name</td>
-        <td>
-          <autocomplete-input-sk id="benchmark_name"
-            value="{{selectedBenchmarkName}}"
-            autocomplete="[[benchmarks]]"
-            display-options-on-focus="true"
-            accept-custom-value="true"
-            label="Hit <enter> at end if entering custom benchmark"
-          ></autocomplete-input-sk>
-          <template is="dom-if" if="{{getBenchmarkDoc(selectedBenchmarkName)}}">
-            <div><a href="{{getBenchmarkDoc(selectedBenchmarkName)}}">Documentation</a></div>
-          </template>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Target Platform</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="target_platform" selected="Linux" class="long-field">
-            <template is="dom-repeat" items="{{platforms}}">
-              <div id="{{item}}">{{getPlatformDesc(item)}}</div>
-            </template>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>PageSets Type</td>
-        <td>
-          <page-set-selector-sk id="page_sets" page-sets="{{pageSets}}"></page-set-selector-sk>
-          <expanding-textarea-sk id="custom_webpages" display-text="Specify custom list of web pages" placeholder-text="{{getPlaceholderTextForCustomWebpages()}}"></expanding-textarea-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-           Run in Parallel<br/>
-           Read about the trade-offs <a href="https://docs.google.com/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit?pli=1#heading=h.xz46aihphb8z">here</a>
-        </td>
-        <td>
-          <iron-selector attr-for-selected="id" id="run_in_parallel" selected="False" class="long-field">
-            <div id="True">True (Works only for Linux rasterize_and_record_micro runs)</div>
-            <div id="False">False</div>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Benchmark Arguments</td>
-        <td>
-          <paper-input value="--output-format=csv --pageset-repeat=1 --skip-typ-expectations-tags-validation --legacy-json-trace-format" id="benchmark_args" class="long-field"></paper-input>
-          <span class="smaller-font"><b>Note:</b> Change the --pageset-repeat value if you would like lower/higher repeats of each web page. 1 is the default.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --run-benchmark-timeout=[secs] to specify the timeout of the run_benchmark script. 300 is the default.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --max-pages-per-bot=[num] to specify the number of pages to run per bot. 100 is the default.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Browser Arguments (nopatch run)</td>
-        <td>
-          <paper-input value="" id="browser_args_nopatch" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Browser Arguments (withpatch run)</td>
-        <td>
-          <paper-input value="" id="browser_args_withpatch" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-
-      <tr>
-        <td>Field Value Column Name</td>
-        <td>
-          <paper-input value="avg" id="value_column_name" class="medium-field"></paper-input>
-          <span class="smaller-font">Which column's entries to use as field values.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Chromium Git patch (optional)<br/>
-          Applied to Chromium ToT<br/>
-          or to the hash specified below.
-        </td>
-        <td>
-          <patch-sk id="chromium_patch"
-                    patch-type="chromium"
-                    cl-description="{{chromiumClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Skia Git patch (optional)<br/>
-          Applied to Skia Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="skia_patch"
-                    patch-type="skia"
-                    cl-description="{{skiaClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          V8 Git patch (optional)<br/>
-          Applied to V8 Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="v8_patch"
-                    patch-type="v8"
-                    cl-description="{{v8ClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Catapult Git patch (optional)<br/>
-          Applied to Catapult Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="catapult_patch"
-                    patch-type="catapult"
-                    cl-description="{{catapultClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Chromium Git metrics patch (optional)<br/>
-          Applied to Chromium ToT<br/>
-          or to the hash specified below.<br/>
-          Used to create the base build (See <a href="http://skbug.com/9029">skbug/9029</a>)
-        </td>
-        <td>
-          <patch-sk id="chromium_patch_base_build"
-                    patch-type="chromium"
-                    cl-description="{{chromiumBaseBuildClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Chromium hash to sync to (optional)<br/></td>
-        <td>
-          <paper-input value="" id="chromium_hash" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Repeat this task</td>
-        <td>
-          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Task Priority</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="task_priority" selected="100" class="medium-field">
-            <template is="dom-repeat" items="{{taskPriorities}}">
-              <div id="{{item}}">{{getTaskPriorityDesc(item,taskPrioritiesToDesc)}}</div>
-            </template>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Notifications CC list (optional)<br/>
-          Email will be sent by ct@skia.org
-        </td>
-        <td>
-          <paper-input value="" id="cc_list" label="email1,email2,email3" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Group name (optional)<br/>
-          Will be used to track runs
-        </td>
-        <td>
-          <paper-input value="" id="group_name" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Description</td>
-        <td>
-          <paper-input value="" id="desc" label="Description is required" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td colspan="2" class="center">
-          <div class="triggering-spinner">
-            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-          </div>
-          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="2" class="center">
-          <paper-button raised id="view_history">View runs history</paper-button>
-        </td>
-      </tr>
-    </table>
-
-    <br/><br/>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "chromium-perf-sk",
-     properties: {
-       benchmarks: {
-         type: Array,
-         value: [],
-       },
-       benchmarksToDoc: {
-         type: Object,
-         value: {},
-       },
-       platforms: {
-         type: Array,
-         value: [],
-       },
-       platformsToDesc: {
-         type: Object,
-         value: {},
-       },
-       taskPriorities: {
-         type: Array,
-         value: [],
-       },
-       taskPrioritiesToDesc: {
-         type: Object,
-         value: {},
-       },
-       pageSets: {
-         type: Array,
-         observer: 'pageSetsChanged',
-       },
-       triggeringTask: {
-         type: Boolean,
-         value: false,
-       },
-       chromiumClDescription: String,
-       skiaClDescription: String,
-       v8ClDescription: String,
-       catapultClDescription: String,
-       chromiumBaseBuildClDescription: String,
-       selectedBenchmarkName: String,
-     },
-
-     observers: [
-       "clDescriptionChanged(chromiumClDescription, skiaClDescription, v8ClDescription, catapultClDescription, chromiumBaseBuildClDescription)"
-     ],
-
-     ready: function() {
-       var that = this;
-       this.$.target_platform.addEventListener('click', function(e) {
-         that.platformChanged();
-         that.setRunInParallel();
-       });
-       this.$.submit_task.addEventListener('click', function(e) {
-         that.validateTask();
-       });
-       this.$.view_history.addEventListener('click', function(e) {
-         that.gotoRunsHistory();
-       });
-       this.$.custom_webpages.addEventListener('click', function(e) {
-         // Do not display the pagesets selector if custom webpages is open.
-         that.$.page_sets.hidden = that.$.custom_webpages.opened;
-         if (!that.$.custom_webpages.opened) {
-           // Clear out webpages if it is no longer open.
-           that.$.custom_webpages.value = '';
-         }
-       });
-       this.platformChanged();
-       this.setRunInParallel();
-     },
-
-     getBenchmarkDoc: function(benchmarkName) {
-       if (! benchmarkName || ! this.benchmarksToDoc[benchmarkName]) {
-         return "";
-       }
-       return this.benchmarksToDoc[benchmarkName];
-     },
-
-     getPlatformDesc: function(platform) {
-       if (this.platformsToDesc) {
-         return this.platformsToDesc[platform];
-       }
-     },
-
-     getTaskPriorityDesc: function(taskPriority, taskPrioritiesToDesc) {
-       if (taskPrioritiesToDesc) {
-         return taskPrioritiesToDesc[taskPriority];
-       }
-     },
-
-     pageSetsChanged: function() {
-       // CT's chromium perf does not support 1M, 100K.
-       for (var i=this.pageSets.length-1; i>=0; i--) {
-         if (ctfe.pageSets.getKey(this.pageSets[i]) == "All" ||
-             ctfe.pageSets.getKey(this.pageSets[i]).endsWith("100k")) {
-           this.pageSets.splice(i, 1);
-         }
-       }
-     },
-
-     setRunInParallel: function() {
-       if (this.selectedBenchmarkName == "rasterize_and_record_micro" &&
-           this.$.target_platform.selected == "Linux") {
-         // Decided to leave this False to give the more consistent results
-         // by default to users. Should be revisited when parallel runs give
-         // better results.
-         this.$.run_in_parallel.selected = "False"
-       } else {
-         this.$.run_in_parallel.selected = "False"
-       }
-     },
-
-     platformChanged: function() {
-       if (this.$.target_platform.selected == "Linux" || this.$.target_platform.selected == "Windows") {
-         this.$.page_sets.selected = "10k";
-       } else {
-         this.$.page_sets.selected = "Mobile10k";
-       }
-     },
-
-     clDescriptionChanged: function(chromiumClDesc, skiaClDesc, v8ClDesc, catapultClDesc, chromiumBaseBuildClDesc) {
-       this.$.desc.value = ctfe.getDescriptionOfCls(chromiumClDesc, skiaClDesc, v8ClDesc, catapultClDesc, chromiumBaseBuildClDesc)
-     },
-
-     validateTask: function() {
-       if (!this.$.chromium_patch.validate() ||
-           !this.$.skia_patch.validate() ||
-           !this.$.v8_patch.validate() ||
-           !this.$.catapult_patch.validate() ||
-           !this.$.chromium_patch_base_build.validate()) {
-         return;
-       }
-       if (! this.$.desc.value) {
-         sk.errorMessage("Please specify a description");
-         this.$.desc.focus();
-         return;
-       }
-       if (! this.selectedBenchmarkName) {
-         sk.errorMessage("Please specify a benchmark");
-         this.$.benchmark_name.focus();
-         return;
-       }
-       if (ctfe.missingLiveSitesWithCustomWebpages(
-               this.$.custom_webpages.value, this.$.benchmark_args.value)) {
-         this.$.benchmark_args.focus();
-         return;
-       }
-       if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-         return;
-       }
-       this.$.confirm_dialog.open("Proceed with queueing task?")
-         .then(this.queueTask.bind(this))
-         .catch(function() {
-           sk.errorMessage("Did not queue");
-         })
-     },
-
-     getRepeatValue: function() {
-       // If "--pageset-repeat" is specified in benchmark args then use that
-       // value else use "1".
-       var rx = /--pageset-repeat[ =](\d+)/gm
-       var m = rx.exec(this.$.benchmark_args.value);
-       if (m) {
-         return m[1];
-       } else {
-         return "1";
-       }
-     },
-
-     queueTask: function() {
-       this.triggeringTask = true;
-       var params = {};
-       params["benchmark"] = this.selectedBenchmarkName;
-       params["platform"] = this.$.target_platform.selected;
-       params["page_sets"] = this.$.page_sets.selected;
-       params["custom_webpages"] = this.$.custom_webpages.value;
-       params["repeat_runs"] = this.getRepeatValue();
-       params["run_in_parallel"] = this.$.run_in_parallel.selected;
-       params["benchmark_args"] = this.$.benchmark_args.value;
-       params["browser_args_nopatch"] = this.$.browser_args_nopatch.value;
-       params["browser_args_withpatch"] = this.$.browser_args_withpatch.value;
-       params["value_column_name"] = this.$.value_column_name.value;
-       params["desc"] = this.$.desc.value;
-       params["chromium_patch"] = this.$.chromium_patch.patch;
-       params["skia_patch"] = this.$.skia_patch.patch;
-       params["v8_patch"] = this.$.v8_patch.patch;
-       params["catapult_patch"] = this.$.catapult_patch.patch;
-       params["chromium_patch_base_build"] = this.$.chromium_patch_base_build.patch;
-       params["chromium_hash"] = this.$.chromium_hash.value;
-       params["repeat_after_days"] = this.$.repeat_after_days.selected;
-       params["task_priority"] = this.$.task_priority.selected;
-       // Run on GCE if it is Windows. This will change in the future if we
-       // get bare-metal Win machines.
-       params["run_on_gce"] = (this.$.target_platform.selected === "Windows").toString();
-       if (this.$.cc_list.value) {
-         params["cc_list"] = this.$.cc_list.value.split(",")
-       }
-       if (this.$.group_name.value) {
-         params["group_name"] = this.$.group_name.value
-       }
-
-       var that = this;
-       sk.post("/_/add_chromium_perf_task", JSON.stringify(params)).then(function(resp) {
-         that.gotoRunsHistory();
-       }).catch(function(e) {
-         that.triggeringTask = false;
-         sk.errorMessage(e);
-       });
-     },
-
-     gotoRunsHistory: function() {
-       window.location.href = "/chromium_perf_runs/";
-     },
-
-     getPlaceholderTextForCustomWebpages: ctfe.getPlaceholderTextForCustomWebpages,
-   });
-</script>
diff --git a/ct/res/imp/ct-runs-summary-sk.html b/ct/res/imp/ct-runs-summary-sk.html
deleted file mode 100644
index d1c2fa1..0000000
--- a/ct/res/imp/ct-runs-summary-sk.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
-  The <ct-runs-summary-sk> custom element declaration. Displays a summary of
-  recent CT runs.
-
-  Attributes:
-    tasks: The successful tasks run by non-admins in the last week/month/year/all-time.
-    findTasksBeforeDays: Find above tasks that completed before these many days.
-    uniqueUsers: The number of unique users who triggered the above tasks.
-
-  Events:
-    None.
-
-  Methods:
-    reload: Queries for updated information on tasks.
-    weeklySummary: Sets findTasksBeforeDays to 7.
-    monthlySummary: Sets findTasksBeforeDays to 30.
-    yearlySummary: Sets findTasksBeforeDays to 365.
-    allTimeSummary: Sets findTasksBeforeDays to 0.
--->
-
-<dom-module id="ct-runs-summary-sk">
-  <style>
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-  </style>
-  <template>
-
-    <h4>CT Runs Summary</h3>
-    <paper-button raised on-click="weeklySummary">Last Week</paper-button>
-    <paper-button raised on-click="monthlySummary">Last Month</paper-button>
-    <paper-button raised on-click="yearlySummary">Last Year</paper-button>
-    <paper-button raised on-click="allTimeSummary">All Time</paper-button>
-    <br/><br/>
-    <span>[[tasks.length]] runs by [[uniqueUsers]] users [[ getDaysText(findTasksBeforeDays) ]]</span>
-    <br/>
-
-    <template is="dom-if" if="{{tasks}}">
-      <table class="runssummary" id="runssummary" cellpadding="5" border="1">
-        <tr class="headers">
-          <td>Type</td>
-          <td>User</td>
-          <td>Description</td>
-          <td>Completed</td>
-        </tr>
-
-        <template is="dom-repeat" items="{{tasks}}" as="task" index-as="index">
-          <tr style="border: 1px solid black;">
-            <!-- Type col -->
-            <td>{{task.Type}}</td>
-
-            <!-- User col -->
-            <td>{{task.Username}}</td>
-
-            <!-- Description col -->
-            <td>{{task.Description}}</td>
-
-            <!-- Timestamps col -->
-            <td class="nowrap">{{task.TsCompleted}}</td>
-          </tr>
-        </template>
-      </table>
-    </template>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "ct-runs-summary-sk",
-     properties: {
-       tasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       findTasksBeforeDays: {
-         type: Number,
-         value: 7,
-       },
-       uniqueUsers: {
-         type: Number,
-         value: 0,
-       },
-     },
-
-     ready: function() {
-       this.reload();
-     },
-
-     reload: function() {
-       if (this.findTasksBeforeDays > 0) {
-         var d = new Date();
-         d.setDate(d.getDate() - this.findTasksBeforeDays);
-         var completedAfter = this.getCtDbTimestamp(d);
-       } else {
-         var completedAfter = this.getCtDbTimestamp(new Date(0));
-       }
-
-       var queryParams = {
-         'completed_after': completedAfter,
-         'exclude_ctadmin_tasks': true,
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       sk.post('/_/completed_tasks' + queryStr).then(JSON.parse).then(function(json) {
-         this.tasks = json.CompletedTasks;
-         this.uniqueUsers = json.UniqueUsers;
-       }.bind(this)).catch(sk.errorMessage);
-     },
-
-     weeklySummary: function() {
-       this.findTasksBeforeDays = 7;
-       this.reload();
-     },
-
-     monthlySummary: function() {
-       this.findTasksBeforeDays = 30;
-       this.reload();
-     },
-
-     yearlySummary: function() {
-       this.findTasksBeforeDays = 365;
-       this.reload();
-     },
-
-     allTimeSummary: function() {
-       this.findTasksBeforeDays = 0;
-       this.reload();
-     },
-
-     getDaysText: function(days) {
-       if (days > 0) {
-         return "last " + days + " days";
-       } else {
-         return "all time";
-       }
-     },
-
-     getCtDbTimestamp: ctfe.getCtDbTimestamp,
-  });
-</script>
diff --git a/ct/res/imp/drawer-sk.html b/ct/res/imp/drawer-sk.html
deleted file mode 100644
index 1b6035a..0000000
--- a/ct/res/imp/drawer-sk.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!--
-  The <drawer-sk> custom element declaration. Displays a menu of the CT pages.
-
-  Attributes:
-    None.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="drawer-sk">
-  <style>
-    paper-menu {
-      padding: 15px 0px 0px 10px;
-    }
-    paper-item {
-      cursor: pointer;
-    }
-  </style>
-  <template>
-
-    <paper-menu id="menu" theme="core-light-theme" selected="{{selected}}">
-
-      <paper-item data-href="/chromium_perf/">
-        <iron-icon icon="trending-up" class="right_padded"></iron-icon>
-        Performance
-      </paper-item>
-
-      <paper-item data-href="/chromium_analysis/">
-        <iron-icon icon="icons:search" class="right_padded"></iron-icon>
-        Analysis
-      </paper-item>
-
-      <paper-item data-href="/metrics_analysis/">
-        <iron-icon icon="icons:assessment" class="right_padded"></iron-icon>
-        Metrics Analysis
-      </paper-item>
-
-      <template is="dom-if" if="{{isAdmin}}">
-
-        <paper-item data-href="/capture_skps/">
-          <iron-icon icon="image:photo-camera" class="right_padded"></iron-icon>
-          SkPictures
-        </paper-item>
-
-        <paper-item data-href="/chromium_builds/">
-          <iron-icon icon="shopping-cart" class="right_padded"></iron-icon>
-          Builds
-        </paper-item>
-
-        <paper-item data-href="/admin_tasks/">
-          <iron-icon icon="social:person" class="right_padded"></iron-icon>
-          Admin Tasks
-        </paper-item>
-
-      </template>
-
-      <paper-item data-href="/queue/">
-        <iron-icon icon="reorder" class="right_padded"></iron-icon>
-        View Queue (<b>{{sizeOfQueue}}</b>)
-      </paper-item>
-
-      <paper-item data-href="/history/">
-        <iron-icon icon="history" class="right_padded"></iron-icon>
-        Runs History
-      </paper-item>
-
-      <paper-item data-href="https://github.com/google/skia-buildbot/tree/master/ct">
-        <iron-icon icon="folder" class="right_padded"></iron-icon>
-        Code
-      </paper-item>
-
-      <paper-item data-href="https://www.chromium.org/developers/cluster-telemetry">
-        <iron-icon icon="help" class="right_padded"></iron-icon>
-        Docs
-      </paper-item>
-
-    </paper-menu>
-  </template>
-</dom-module>
-
-<script>
-  Polymer({
-    is: "drawer-sk",
-    properties: {
-      selected: {
-        type: String,
-        value: "",
-        observer: "selectedChanged",
-      },
-      isAdmin: {
-        type: Boolean,
-        value: false,
-      },
-      sizeOfQueue: {
-        type: Number,
-        value: 0,
-      },
-      sizeOfUserQueue: {
-        type: Number,
-        value: 0,
-      },
-      taskDescriptors: {
-         type: Array,
-         value: function() {
-           return [{type: "ChromiumPerf",
-                    get_url: "/_/get_chromium_perf_tasks"},
-                   {type: "ChromiumAnalysis",
-                    get_url: "/_/get_chromium_analysis_tasks"},
-                   {type: "MetricsAnalysis",
-                    get_url: "/_/get_metrics_analysis_tasks"},
-                   {type: "CaptureSkps",
-                    get_url: "/_/get_capture_skp_tasks"},
-                   {type: "ChromiumBuild",
-                    get_url: "/_/get_chromium_build_tasks"},
-                   {type: "RecreatePageSets",
-                    get_url: "/_/get_recreate_page_sets_tasks"},
-                   {type: "RecreateWebpageArchives",
-                    get_url: "/_/get_recreate_webpage_archives_tasks"},
-                  ];
-         }
-       },
-    },
-
-    ready: function() {
-      this.initSelected();
-      this.initSizeOfQueue();
-      this.initSizeOfUserQueue();
-      this.initIsAdmin();
-    },
-
-    initIsAdmin: function() {
-      var is_admin_url = "/_/is_admin/"
-      sk.get(is_admin_url).then(JSON.parse).then(function(json) {
-        this.isAdmin = json.isAdmin;
-      }.bind(this)).catch(sk.errorMessage);
-    },
-
-    initSizeOfQueue: function() {
-      var queryParams = {
-         "size": 1,
-         "not_completed": true,
-      }
-      var queryStr = "?" + sk.query.fromObject(queryParams);
-      this.taskDescriptors.forEach(function(obj) {
-         sk.post(obj.get_url + queryStr).then(JSON.parse).then(function(json) {
-           this.sizeOfQueue += json.pagination.total;
-         }.bind(this)).catch(sk.errorMessage);
-       }.bind(this));
-    },
-
-    initSizeOfUserQueue: function() {
-      var queryParams = {
-         "size": 1,
-         "not_completed": true,
-         "filter_by_logged_in_user": true,
-      }
-      var queryStr = "?" + sk.query.fromObject(queryParams);
-      this.taskDescriptors.forEach(function(obj) {
-         sk.post(obj.get_url + queryStr).then(JSON.parse).then(function(json) {
-           this.sizeOfUserQueue += json.pagination.total;
-         }.bind(this)).catch(sk.errorMessage);
-       }.bind(this));
-    },
-
-    initSelected: function() {
-      var items = $$("paper-item", this.$.menu);
-      var historyIdx;
-      for (var i = 0; i < items.length; i++) {
-        var ele = items[i];
-        if (window.location.href.endsWith(ele.dataset["href"])) {
-          this.selected = String(i);
-          return;
-        }
-        if (ele.dataset["href"] == "/history/") {
-          historyIdx = i;
-        }
-      }
-      // Special cases.
-      if (historyIdx && window.location.href.endsWith("_runs/")) {
-        this.selected = String(historyIdx);
-        return;
-      }
-      this.selected = "0";
-    },
-
-    selectedChanged: function(newValue, oldValue) {
-      if (!oldValue || oldValue == "") {
-        return;
-      }
-      window.location.href = this.$.menu.focusedItem.dataset["href"];
-    },
-  });
-</script>
diff --git a/ct/res/imp/expanding-textarea-sk.html b/ct/res/imp/expanding-textarea-sk.html
deleted file mode 100644
index 8dbf912..0000000
--- a/ct/res/imp/expanding-textarea-sk.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!--
-  The <expanding-textarea-sk> custom element declaration. Displays a clickable
-  text link that expands a textarea. The value of the textarea is accessible by
-  callers via the value attribute.
-
-  Attributes:
-    value: Contains the text entered into the textarea.
-    displayText: The clickable text that will open/close the textarea.
-    placeholderText: Is used as a placeholder in the textarea.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="expanding-textarea-sk">
-  <style>
-    paper-input {
-      width: 20em;
-    }
-
-    .long-field {
-      width: 40em;
-    }
-  </style>
-  <template>
-    <a href="javascript:void(0);" id="expander">
-      <iron-icon icon="{{expanderIcon(opened)}}"></iron-icon>
-      {{displayText}}
-    </a>
-    <span class="long-field">
-      <iron-collapse id="collapser" opened="{{opened}}">
-        <iron-autogrow-textarea class="long-field" rows=5 max-rows=20 bind-value="{{value}}" placeholder="{{placeholderText}}">
-        </iron-autogrow-textarea>
-      </iron-collapse>
-    </span>
-  </template>
-  <script>
-    Polymer({
-      is: "expanding-textarea-sk",
-      properties: {
-        opened: {
-          type: Boolean,
-          value: false,
-        },
-        value: {
-          type: String,
-          notify: true,
-        },
-        displayText: {
-          type: String,
-          value: "Expand/Collapse textarea",
-        },
-        placeholderText: {
-          type: String,
-          value: "",
-        },
-      },
-
-      ready: function() {
-        var that = this;
-        this.$.expander.addEventListener('click', function(e) {
-          that.$.collapser.toggle();
-        });
-      },
-
-      expanderIcon: function(opened) {
-        if (opened) {
-          return "expand-less";
-        } else {
-          return "expand-more";
-        }
-      },
-    });
-  </script>
-
-</dom-module>
diff --git a/ct/res/imp/metrics-analysis-runs-sk.html b/ct/res/imp/metrics-analysis-runs-sk.html
deleted file mode 100644
index ab5f534..0000000
--- a/ct/res/imp/metrics-analysis-runs-sk.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!--
-  The <metrics-analysis-runs-sk> custom element declaration. Displays a table with details about
-  each completed and pending Metrics Analysis task.
-
-  Attributes:
-    defaultSize: The number of tasks to show per page, default 10.
-    constrainByUser: Whether to show only tasks created by the logged-in user initially, default
-      false.
-    myRunsConstrainText: Button text to constrain by user, default "View only my runs".
-    everyonesRunsConstrainText: Button text to disable constraining by user, default "View
-      everyone's runs".
-
-  Events:
-    None.
-
-  Methods:
-    reload: queries for updated information on tasks.
-    resetPagination: Moves to the first page of tasks.
-    constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
--->
-
-<dom-module id="metrics-analysis-runs-sk">
-  <style>
-    paper-dialog {
-      min-width: 200px;
-      max-width: calc(100% - 10px);
-    }
-    table.runshistory {
-      border-spacing: 0px;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    table.runshistory > tbody > tr > td {
-      padding: 10px;
-      border: solid black 1px;
-    }
-    .delete-button, .redo-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2><template is="dom-if" if="{{constrainByUser}}">My </template>Metrics Analysis Runs</h2>
-    <paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
-    <br/>
-    <paper-button raised on-click="constrainRunsByUser">{{
-      constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
-      }}</paper-button>
-
-    <br/>
-    <br/>
-
-    <!-- Section for popups. -->
-    <template is="dom-repeat" items="{{metricsAnalysisTasks}}" as="metricsAnalysisTask" index-as="index">
-
-      <paper-dialog heading="Benchmark Args" id="{{ getBenchmarkArgsId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{metricsAnalysisTask.BenchmarkArgs}}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-
-    </template>
-
-    <table class="runshistory" id="runshistory" cellpadding="5" border="1">
-      <tr class="headers">
-        <td>Id</td>
-        <td>User</td>
-        <td>Timestamps</td>
-        <td>Task Config</td>
-        <td>Description</td>
-        <td>Results</td>
-        <td>Arguments</td>
-        <td>Patches</td>
-        <td>Task Repeats</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{metricsAnalysisTasks}}" as="metricsAnalysisTask" index-as="index">
-        <tr style="border: 1px solid black;">
-          <!-- Id col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{metricsAnalysisTask.RawOutput}}">
-              <a href="{{metricsAnalysisTask.RawOutput}}" target="_blank">{{metricsAnalysisTask.Id}}</a>
-            </template>
-            <template is="dom-if" if="{{!metricsAnalysisTask.RawOutput}}">
-              <span>{{metricsAnalysisTask.Id}}</span>
-            </template>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!metricsAnalysisTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-            <paper-icon-button icon="redo" mini
-                               class="redo-button"
-                               disabled="{{!metricsAnalysisTask.canRedo}}"
-                               alt="Redo"
-                               data-index$="{{index}}"
-                               data-type="redo">
-            </paper-icon-button>
-          </td>
-
-          <!-- User col -->
-          <td>{{metricsAnalysisTask.Username}}</td>
-
-          <!-- Timestamps col -->
-          <td>
-            <table>
-              <tr>
-                <td>Added:</td>
-                <td class="nowrap">{{ formatTimestamp(metricsAnalysisTask.TsAdded) }}</td>
-              </tr>
-              <tr>
-                <td>Started:</td>
-                <td class="nowrap">{{ formatTimestamp(metricsAnalysisTask.TsStarted) }}</td>
-              </tr>
-              <tr>
-                <td>Completed:</td>
-                <td class="nowrap">{{ formatTimestamp(metricsAnalysisTask.TsCompleted) }}</td>
-              </tr>
-            </table>
-          </td>
-
-          <!-- Task Config col -->
-          <td>
-            <table>
-              <tr>
-                <td class="nowrap">Metric Name:</td>
-                <td class="nowrap">{{metricsAnalysisTask.MetricName}}</td>
-              </tr>
-              <template is="dom-if" if="{{metricsAnalysisTask.ValueColumnName}}">
-                <tr>
-                  <td class="nowrap">Value Column:</td>
-                  <td class="nowrap">{{metricsAnalysisTask.ValueColumnName}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{metricsAnalysisTask.AnalysisOutputLink}}">
-                <tr>
-                  <td class="nowrap">Analysis Task Id:</td>
-                  <td class="nowrap">
-                    <a href="{{metricsAnalysisTask.AnalysisOutputLink}}" target="_blank">{{metricsAnalysisTask.AnalysisTaskId}}</a>
-                  </td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{ !isEmptyPatch(metricsAnalysisTask.CustomTracesGSPath) }}">
-                <tr>
-                  <td class="nowrap">Custom Traces:</td>
-                  <td class="nowrap">
-                    <a href="{{ getGSLink(metricsAnalysisTask.CustomTracesGSPath) }}" target="_blank">traces</a>
-                  </td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{metricsAnalysisTask.TaskPriority}}">
-                <tr>
-                  <td>TaskPriority:</td>
-                  <td>{{metricsAnalysisTask.TaskPriority}}</td>
-                </tr>
-              </template>
-              <template is="dom-if" if="{{metricsAnalysisTask.CCList}}">
-                <tr>
-                  <td>CC List:</td>
-                  <td>{{metricsAnalysisTask.CCList}}</td>
-                </tr>
-              </template>
-            </table>
-          </td>
-
-          <!-- Description col -->
-          <td>{{metricsAnalysisTask.Description}}</td>
-
-          <!-- Results col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{metricsAnalysisTask.Failure}}">
-              <div style="color:red;">Failed</div>
-            </template>
-            <template is="dom-if" if="{{!metricsAnalysisTask.TaskDone}}">
-              <div style="color:green;">Waiting</div>
-            </template>
-            <template is="dom-if" if="{{metricsAnalysisTask.RawOutput}}">
-              <a href="{{metricsAnalysisTask.RawOutput}}" target="_blank">Output</a>
-            </template>
-            <template is="dom-if" if="{{metricsAnalysisTask.SwarmingLogs}}">
-              <br/>
-              <a href="{{metricsAnalysisTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
-            </template>
-          </td>
-
-          <!-- Arguments -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{metricsAnalysisTask.BenchmarkArgs}}">
-              <a href="javascript:void(0);" data-index$="{{index}}" data-type="benchmarkArgs">Benchmark Args</a>
-              <br/>
-            </template>
-          </td>
-
-          <!-- Patches -->
-          <td>
-            <template is="dom-if" if="{{ !isEmptyPatch(metricsAnalysisTask.ChromiumPatchGSPath) }}">
-              <a href="{{ getGSLink(metricsAnalysisTask.ChromiumPatchGSPath) }}" target="_blank">Chromium</a>
-              <br/>
-            </template>
-            <template is="dom-if" if="{{ !isEmptyPatch(metricsAnalysisTask.CatapultPatchGSPath) }}">
-              <a href="{{ getGSLink(metricsAnalysisTask.CatapultPatchGSPath) }}" target="_blank">Catapult</a>
-              <br/>
-            </template>
-          </td>
-
-          <!-- Task Repeats -->
-          <td>{{ formatRepeatAfterDays(metricsAnalysisTask.RepeatAfterDays) }}</td>
-
-        </tr>
-      </template>
-    </table>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "metrics-analysis-runs-sk",
-     properties: {
-       metricsAnalysisTasks: {
-         type: Array,
-         value: function() { return []; },
-       },
-       defaultSize: {
-         type: Number,
-         value: 10,
-       },
-       constrainByUser: {
-         type: Boolean,
-         value: false,
-       },
-       myRunsConstrainText: {
-         type: String,
-         value: "View only my runs",
-       },
-       everyonesRunsConstrainText: {
-         type: String,
-         value: "View everyone's runs",
-       },
-       pagination: {
-         type: Object,
-         value: function() { return {}; },
-       },
-       pageChangedHandler: {
-         type: Object,
-         value: function() { return null; },
-       },
-     },
-
-     ready: function() {
-       this.pagination = {"offset": 0, "size": this.defaultSize};
-       this.pageChangedHandler = this.reload.bind(this);
-       this.reload();
-
-       var that = this;
-       this.$.runshistory.addEventListener('click', function(e) {
-         var anchor = sk.findParent(e.target, "A");
-         if (anchor != null) {
-           var id = anchor.dataset.index;
-           if (anchor.dataset.type == "benchmarkArgs") {
-             that.toggleDialog(that.getBenchmarkArgsId(id));
-           }
-         }
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null) {
-           if (button.dataset.type == "delete") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Proceed with deleting task?")
-               .then(that.deleteTask.bind(that, index));
-           } else if (button.dataset.type == "redo") {
-             var index = button.dataset.index;
-             that.$.confirm_dialog.open("Reschedule this task?")
-               .then(that.redoTask.bind(that, index));
-           }
-         }
-       });
-     },
-
-     reload: function() {
-       var queryParams = {
-         "offset": this.pagination.offset,
-         "size": this.pagination.size,
-       }
-       if (this.constrainByUser) {
-         queryParams["filter_by_logged_in_user"] = true;
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       var that = this;
-       sk.post('/_/get_metrics_analysis_tasks' + queryStr).then(JSON.parse).then(function(json) {
-         that.metricsAnalysisTasks = json.data;
-         that.pagination = json.pagination;
-         for (var i = 0; i < that.metricsAnalysisTasks.length; i++) {
-           that.metricsAnalysisTasks[i].canDelete = json.permissions[i].DeleteAllowed;
-           that.metricsAnalysisTasks[i].canRedo = json.permissions[i].RedoAllowed;
-           that.metricsAnalysisTasks[i].Id = json.ids[i];
-         }
-       }).catch(sk.errorMessage);
-     },
-
-     getBenchmarkArgsId: function(index) {
-       return "benchmark_args" + index;
-     },
-
-     resetPagination: function() {
-       this.pagination.offset = 0;
-       this.pagination.size = this.defaultSize;
-     },
-
-     constrainRunsByUser: function() {
-       this.constrainByUser = !this.constrainByUser;
-       this.resetPagination();
-       this.reload();
-     },
-
-     constrainButtonText: function(constrained, constrainText, unconstrainText) {
-       if (constrained) {
-         return unconstrainText;
-       } else {
-         return constrainText;
-       }
-     },
-
-     toggleDialog: function(id) {
-       Polymer.dom(this.root).querySelector('#' + id).toggle();
-     },
-
-     deleteTask: function(deleteIndex) {
-       var params = {};
-       params["id"] = this.metricsAnalysisTasks[deleteIndex].Id;
-       sk.post("/_/delete_metrics_analysis_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     redoTask: function(redoIndex) {
-       var params = {};
-       params["id"] = this.metricsAnalysisTasks[redoIndex].Id;
-       sk.post("/_/redo_metrics_analysis_task", JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Resubmitted task " + params["id"];
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     formatTimestamp: ctfe.getFormattedTimestamp,
-     formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
-     getGSLink: ctfe.getGSLink,
-     isEmptyPatch: ctfe.isEmptyPatch,
-  });
-</script>
diff --git a/ct/res/imp/metrics-analysis-sk.html b/ct/res/imp/metrics-analysis-sk.html
deleted file mode 100644
index b4310fa..0000000
--- a/ct/res/imp/metrics-analysis-sk.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!--
-  The <metrics-analysis-sk> custom element declaration. Displays a form that allows the user to
-  queue a task to do metrics analysis on trace URLs.
-
-  Attributes:
-    None.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="metrics-analysis-sk">
-  <style>
-    paper-input {
-      width: 20em;
-    }
-
-    .triggering-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    .long-field {
-      width: 40em;
-    }
-
-    .hidden {
-      display: none;
-    }
-
-    .smaller-font {
-      font-size: 80%;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-
-    iron-selector.medium-field > div {
-      width: 20em;
-    }
-
-    table.options td {
-      padding: 1em 2em;
-    }
-
-    td.center {
-      text-align:center;
-      padding-top:2em;
-    }
-
-    .panel {
-      @apply(--shadow-elevation-2dp);
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <table class="options panel">
-
-      <tr>
-        <td>Metric Name</td>
-        <td>
-          <paper-input value="" id="metric_name" class="medium-field"></paper-input>
-          <span class="smaller-font">The metric to parse the provided traces with. Eg: loadingMetric</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Source of traces</td>
-        <td>
-          <paper-input value="" id="analysis_task_id" class="medium-field" label="Analysis Task Id"></paper-input>
-          <expanding-textarea-sk id="custom_traces" display-text="Specify custom list of traces" placeholder-text="Eg: trace1,trace2,trace3"></expanding-textarea-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Benchmark Arguments</td>
-        <td>
-          <paper-input value="--output-format=csv" id="benchmark_args" class="long-field"></paper-input>
-          <span class="smaller-font">These will be the arguments to the analysis_metrics_ct benchmark.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --run-benchmark-timeout=[secs] to specify the timeout of the run_benchmark script. 300 is the default.</span><br/>
-          <span class="smaller-font"><b>Note:</b> Use --max-pages-per-bot=[num] to specify the number of pages to run per bot. 50 is the default.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Field Value Column Name</td>
-        <td>
-          <paper-input value="avg" id="value_column_name" class="medium-field"></paper-input>
-          <span class="smaller-font">Which column's entries to use as field values.</span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Chromium Git patch (optional)<br/>
-          Applied to Chromium ToT
-        </td>
-        <td>
-          <patch-sk id="chromium_patch"
-                    patch-type="chromium"
-                    cl-description="{{chromiumClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Catapult Git patch (optional)<br/>
-          Applied to Catapult Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
-        </td>
-        <td>
-          <patch-sk id="catapult_patch"
-                    patch-type="catapult"
-                    cl-description="{{catapultClDescription}}">
-          </patch-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Repeat this task</td>
-        <td>
-          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Task Priority</td>
-        <td>
-          <iron-selector attr-for-selected="id" id="task_priority" selected="100" class="medium-field">
-            <template is="dom-repeat" items="{{taskPriorities}}">
-              <div id="{{item}}">{{getTaskPriorityDesc(item, taskPrioritiesToDesc)}}</div>
-            </template>
-          </iron-selector>
-        </td>
-      </tr>
-
-      <tr>
-        <td>
-          Notifications CC list (optional)<br/>
-          Email will be sent by ct@skia.org
-        </td>
-        <td>
-          <paper-input value="" id="cc_list" label="email1,email2,email3" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td>Description</td>
-        <td>
-          <paper-input value="" id="desc" label="Description is required" class="long-field"></paper-input>
-        </td>
-      </tr>
-
-      <tr>
-        <td colspan="2" class="center">
-          <div class="triggering-spinner">
-            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
-          </div>
-          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="2" class="center">
-          <paper-button raised id="view_history">View runs history</paper-button>
-        </td>
-      </tr>
-    </table>
-
-    <br/><br/>
-
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "metrics-analysis-sk",
-     properties: {
-       chromiumClDescription: String,
-       catapultClDescription: String,
-       taskPriorities: {
-         type: Array,
-         value: [],
-       },
-       taskPrioritiesToDesc: {
-         type: Object,
-         value: {},
-       },
-       triggeringTask: {
-         type: Boolean,
-         value: false,
-       },
-     },
-
-     observers: [
-       "clDescriptionChanged(chromiumClDescription, catapultClDescription)"
-     ],
-
-     ready: function() {
-       var that = this;
-       this.$.submit_task.addEventListener('click', function(e) {
-         that.validateTask();
-       });
-       this.$.view_history.addEventListener('click', function(e) {
-         that.gotoRunsHistory();
-       });
-       this.$.custom_traces.addEventListener('click', function(e) {
-         // Do not display the analysis task id field if custom traces is open.
-         that.$.analysis_task_id.hidden = that.$.custom_traces.opened;
-         if (that.$.custom_traces.opened) {
-           // Clear out analysis task id if custom traces is open.
-           that.$.analysis_task_id.value = '';
-         } else {
-           // Clear out traces if it is no longer open.
-           that.$.custom_traces.value = '';
-         }
-       });
-     },
-
-     getTaskPriorityDesc: function(taskPriority, taskPrioritiesToDesc) {
-       if (taskPrioritiesToDesc) {
-         return taskPrioritiesToDesc[taskPriority];
-       }
-     },
-
-     clDescriptionChanged: function(chromiumClDesc, catapultClDesc) {
-       this.$.desc.value = ctfe.getDescriptionOfCls(chromiumClDesc, '', '', catapultClDesc, '');
-     },
-
-     validateTask: function() {
-       if (!this.$.metric_name.value) {
-         sk.errorMessage("Please specify a metric name");
-         this.$.metric_name.focus();
-         return;
-       }
-       if (!this.$.analysis_task_id.value && !this.$.custom_traces.value) {
-         sk.errorMessage("Please specify an analysis task id or custom traces");
-         this.$.analysis_task_id.focus();
-         return;
-       };
-       if (!this.$.chromium_patch.validate() ||
-           !this.$.catapult_patch.validate()) {
-         return;
-       }
-       if (!this.$.desc.value) {
-         sk.errorMessage("Please specify a description");
-         this.$.desc.focus();
-         return;
-       }
-       if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
-         return;
-       }
-       this.$.confirm_dialog.open("Proceed with queueing task?")
-         .then(this.queueTask.bind(this))
-         .catch(function(err) {
-           console.log(err);
-           sk.errorMessage("Did not queue");
-         })
-     },
-
-     queueTask: function() {
-       this.triggeringTask = true;
-       var params = {};
-       params["metric_name"] = this.$.metric_name.value;
-       params["analysis_task_id"] = this.$.analysis_task_id.value;
-       params["custom_traces"] = this.$.custom_traces.value;
-       params["benchmark_args"] = this.$.benchmark_args.value;
-       params["value_column_name"] = this.$.value_column_name.value;
-       params["desc"] = this.$.desc.value;
-       params["chromium_patch"] = this.$.chromium_patch.patch;
-       params["catapult_patch"] = this.$.catapult_patch.patch;
-       params["repeat_after_days"] = this.$.repeat_after_days.selected;
-       params["task_priority"] = this.$.task_priority.selected;
-       if (this.$.cc_list.value) {
-         params["cc_list"] = this.$.cc_list.value.split(",")
-       }
-
-       var that = this;
-       sk.post("/_/add_metrics_analysis_task", JSON.stringify(params)).then(function(resp) {
-         that.gotoRunsHistory();
-       }).catch(function(e) {
-         that.triggeringTask = false;
-         sk.errorMessage(e);
-       });
-     },
-
-     gotoRunsHistory: function() {
-       window.location.href = "/metrics_analysis_runs/";
-     },
-   });
-</script>
diff --git a/ct/res/imp/page-set-selector-sk.html b/ct/res/imp/page-set-selector-sk.html
deleted file mode 100644
index 9e1e53b..0000000
--- a/ct/res/imp/page-set-selector-sk.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-  The <page-set-selector-sk> custom element declaration. Displays an iron-selector allowing the user
-  to choose among the defined page set types.
-
-  Attributes:
-    pageSets: array of objects as obtained via ctfe.pageSets.getPageSets. Must be set.
-    selected: ctfe.pageSets.getKey for the currently selected page set. Notifies.
-
-  Events:
-    None.
-
-  Methods:
-    selectFirst: Causes the first page set in pageSets to be selected.
--->
-
-<dom-module id="page-set-selector-sk">
-  <style>
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-  </style>
-  <template>
-    <iron-selector attr-for-selected="id" selected="{{selected}}" class="long-field">
-      <template is="dom-repeat" items="{{pageSets}}">
-        <div id="{{item.key}}">{{item.description}}</div>
-      </template>
-    </iron-selector>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "page-set-selector-sk",
-     properties: {
-       pageSets: Array,
-       selected: {
-         type: String,
-         notify: true,
-       },
-     },
-
-     selectFirst: function() {
-       if (this.pageSets.length > 0) {
-         this.selected = ctfe.pageSets.getKey(this.pageSets[0]);
-       }
-     },
-   });
-</script>
diff --git a/ct/res/imp/patch-sk.html b/ct/res/imp/patch-sk.html
deleted file mode 100644
index 25e1b6a..0000000
--- a/ct/res/imp/patch-sk.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<!--
-  The <patch-sk> custom element declaration. Allows entering a CL in the form of
-  https://codereview.chromium.org/1344993003 (or just the CL number) to retrieve a patch from that
-  CL. Alternatively, allows entering a patch manually in an expanding text area.
-
-  Attributes:
-    patchType: Specifies the project for the patch. Must be set. Supported values include
-      "chromium" and "skia". See also encodeCLData in
-      ct/go/ctfe/chromium_perf/chromium_perf.go.
-    cl: Raw value of the CL input. Does not notify.
-    clDescription: Human-readable description of the CL. Notifies.
-    patch: The patch, either retrieved from the CL or manually entered/modified. Notifies.
-
-  Events:
-    None.
-
-  Methods:
-    validate(): Checks that patch is valid based on cl. If not, shows an error toast and returns
-      false. Otherwise returns true.
--->
-
-<dom-module id="patch-sk">
-  <style>
-    paper-input {
-      width: 25em;
-    }
-
-    .long-field {
-      width: 40em;
-    }
-
-    td.cl-label {
-      vertical-align: middle;
-    }
-
-    .cl-detail-container {
-      position: relative;
-      text-align: center;
-      height: 100px;
-      min-width: 200px;
-      max-width: 300px;
-    }
-
-    .loading-cl-spinner {
-      margin: auto;
-      vertical-align: middle;
-    }
-
-    .cl-detail {
-      position: absolute;
-      top: 0px;
-      left: 0px;
-      text-align: start;
-    }
-
-    .cl-error {
-      color: red;
-    }
-  </style>
-  <template>
-    <table>
-      <tr>
-        <td class="cl-label">CL:</td>
-        <td>
-          <paper-input value="{{cl}}" label="Please paste a complete Gerrit URL" no-label-float></paper-input>
-          <a href="javascript:void(0);" id="patch_expander">
-            <iron-icon icon="{{patchExpanderIcon(patchOpened)}}"></iron-icon>
-            Specify patch manually</a>
-        </td>
-        <td>
-          <div class="cl-detail-container">
-            <div class="loading-cl-spinner">
-              <paper-spinner active="{{loadingClDetail}}"
-                             alt="Loading CL details"></paper-spinner>
-            </div>
-            <div class="cl-detail">
-              <a href$="{{clUrl(clData)}}" target="_blank">{{formatClData(clData)}}</a>
-              <span class="cl-error">{{formatClError(clData)}}</span>
-            </div>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="3">
-          <div class="long-field">
-           <iron-collapse id="patch_collapse" opened="{{patchOpened}}">
-             <iron-autogrow-textarea class="long-field" rows=5 max-rows=20 bind-value="{{patch}}">
-             </iron-autogrow-textarea>
-           </iron-collapse>
-          </div>
-        </td>
-      </tr>
-    </table>
-  </template>
-  <script>
-    Polymer({
-      is: "patch-sk",
-      properties: {
-        patchType: String,
-        cl: {
-          type: String,
-          value: "",
-          observer: "clChanged",
-        },
-        clData: Object,
-        loadingClDetail: {
-          type: Boolean,
-          value: false,
-        },
-        clDescription: {
-          type: String,
-          computed: "formatClDescription(clData)",
-          notify: true,
-        },
-        patchOpened: {
-          type: Boolean,
-          value: false,
-        },
-        patch: {
-          type: String,
-          notify: true,
-        },
-      },
-
-      ready: function() {
-        var that = this;
-        this.$.patch_expander.addEventListener('click', function(e) {
-          that.$.patch_collapse.toggle();
-        });
-      },
-
-      clChanged: function(newValue) {
-        if (!newValue || newValue.length < 3) {
-          this.clData = null;
-          this.loadingClDetail = false;
-          return;
-        }
-        this.loadingClDetail = true;
-        var params = {cl: newValue};
-        sk.post("/_/cl_data?" + sk.query.fromObject(params)).then(JSON.parse).then(function (json) {
-          if (this.cl == newValue) {
-            if (json.cl) {
-              this.clData = json;
-              var patch = this.clData[this.patchType + "_patch"];
-              if (!patch) {
-                this.clData = {error: {response: "This is not a " + this.patchType + " CL."}};
-              } else {
-                this.patch = patch;
-              }
-            } else {
-              this.clData = null;
-            }
-            this.loadingClDetail = false;
-          }
-        }.bind(this)).catch(function (err) {
-          if (this.cl == newValue) {
-            this.clData = {error: err};
-            this.loadingClDetail = false;
-          }
-        }.bind(this));
-      },
-
-      clUrl: function(clData) {
-        if (clData && !clData.error) {
-          return clData.url;
-        }
-        return "javascript:void(0);"
-      },
-
-      formatClData: function(clData) {
-        if (clData && !clData.error) {
-          return clData.subject +
-              " (modified " + ctfe.getFormattedTimestamp(clData.modified) + ")";
-        }
-        return "";
-      },
-
-      formatClError: function(clData) {
-        if (clData && clData.error) {
-          return clData.error.response;
-        }
-        return "";
-      },
-
-      formatClDescription: function(clData) {
-        if (clData && !clData.error) {
-          return this.clUrl(clData) + " (" + clData.subject + ")";
-        }
-        return ""
-      },
-
-      patchExpanderIcon: function(patchOpened) {
-        if (patchOpened) {
-          return "expand-less";
-        } else {
-          return "expand-more";
-        }
-      },
-
-      validate: function() {
-        if (this.cl && !this.clData) {
-          sk.errorMessage("Unable to load " + this.patchType + " CL " + this.cl +
-                          ". Please specify patches manually.");
-          return false;
-        }
-        if (this.cl && !this.patch) {
-          sk.errorMessage("Unable to fetch " + this.patchType + " patch from CL " + this.cl +
-                          ". Please specify patches manually.");
-          return false;
-        }
-        return true;
-      },
-    });
-  </script>
-
-</dom-module>
diff --git a/ct/res/imp/pending-tasks-sk.html b/ct/res/imp/pending-tasks-sk.html
deleted file mode 100644
index 6147c9b..0000000
--- a/ct/res/imp/pending-tasks-sk.html
+++ /dev/null
@@ -1,252 +0,0 @@
-<!--
-  The <pending-tasks-sk> custom element declaration. Displays a table of tasks that are not yet
-  completed, including popups with detailed information.
-
-  Attributes:
-    None.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="pending-tasks-sk">
-  <style>
-    paper-dialog {
-      min-width: 200px;
-      max-width: calc(100% - 10px);
-    }
-    table.queue {
-      border-spacing: 0px;
-      padding-top: 2em;
-    }
-    tr.headers {
-      background-color: #CCCCFF;
-      text-align: center;
-    }
-    td.nowrap {
-      white-space: nowrap;
-    }
-    th,
-    td  {
-      padding: 15px;
-      border: solid black 1px;
-    }
-    .delete-button {
-      --paper-icon-button-disabled: {
-        display: none;
-      }
-    }
-  </style>
-  <template>
-
-    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
-
-    <h2>Tasks in the Queue</h2>
-
-    <!-- Section for popups. -->
-    <template is="dom-repeat" items="{{pendingTasks}}" as="pendingTask" index-as="index">
-      <paper-dialog heading="Task Details" id="{{ getTaskDetailsId(index) }}">
-        <paper-dialog-scrollable>
-          <pre>{{ formatTask(pendingTask) }}</pre>
-        </paper-dialog-scrollable>
-      </paper-dialog>
-    </template>
-
-    <table class="queue" id="queue">
-      <tr class="headers">
-        <td>Queue Position</td>
-        <td>Added</td>
-        <td>Task Type</td>
-        <td>User</td>
-        <td>Swarming Logs</td>
-        <td>Request</td>
-      </tr>
-
-      <template is="dom-repeat" items="{{pendingTasks}}" as="pendingTask" index-as="index">
-        <tr>
-          <!-- Queue Position col -->
-          <td class="nowrap">
-            <span>{{ incrementOne(index) }}</span>
-            <paper-icon-button icon="delete" mini
-                               class="delete-button"
-                               disabled="{{!pendingTask.canDelete}}"
-                               alt="Delete"
-                               data-index$="{{index}}"
-                               data-type="delete">
-            </paper-icon-button>
-          </td>
-
-          <!-- Added col -->
-          <td>{{ formatTimestamp(pendingTask.TsAdded) }}
-            <template is="dom-if" if="{{ pendingTask.FutureDate }}">
-              <br/>
-              <div style="color:red;">(scheduled in the future)</div>
-            </template>
-          </td>
-
-          <!-- Task Type col -->
-          <td>{{pendingTask.TaskType}}</td>
-
-          <!-- User col -->
-          <td>{{pendingTask.Username}}</td>
-
-          <!-- Swarming logs col -->
-          <td class="nowrap">
-            <template is="dom-if" if="{{ pendingTask.FutureDate }}">
-              N/A
-            </template>
-            <template is="dom-if" if="{{ !pendingTask.FutureDate }}">
-              <template is="dom-if" if="{{ pendingTask.SwarmingLogs }}">
-                <a href="{{ pendingTask.SwarmingLogs }}" target="_blank">Swarming Logs</a>
-              </template>
-            </template>
-          </td>
-
-          <!-- Request col -->
-          <td class="nowrap">
-            <a href="javascript:void(0);" data-id$="{{index}}">Task Details</a>
-          </td>
-        </tr>
-      </template>
-    </table>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "pending-tasks-sk",
-     properties: {
-       pendingTasks: {
-         type: Array,
-         value: [],
-       },
-       taskDescriptors: {
-         type: Array,
-         value: function() {
-           return [{type: "ChromiumPerf",
-                    get_url: "/_/get_chromium_perf_tasks",
-                    delete_url: "/_/delete_chromium_perf_task"},
-                   {type: "ChromiumAnalysis",
-                    get_url: "/_/get_chromium_analysis_tasks",
-                    delete_url: "/_/delete_chromium_analysis_task"},
-                   {type: "MetricsAnalysis",
-                    get_url: "/_/get_metrics_analysis_tasks",
-                    delete_url: "/_/delete_metrics_analysis_task"},
-                   {type: "CaptureSkps",
-                    get_url: "/_/get_capture_skp_tasks",
-                    delete_url: "/_/delete_capture_skps_task"},
-                   {type: "ChromiumBuild",
-                    get_url: "/_/get_chromium_build_tasks",
-                    delete_url: "/_/delete_chromium_build_task"},
-                   {type: "RecreatePageSets",
-                    get_url: "/_/get_recreate_page_sets_tasks",
-                    delete_url: "/_/delete_recreate_page_sets_task"},
-                   {type: "RecreateWebpageArchives",
-                    get_url: "/_/get_recreate_webpage_archives_tasks",
-                    delete_url: "/_/delete_recreate_webpage_archives_task"},
-                  ];
-         }
-       },
-     },
-
-     ready: function() {
-       this.reload();
-
-       this.$.queue.addEventListener('click', function(e) {
-         var anchor = sk.findParent(e.target, "A");
-         if (anchor != null) {
-           var index = anchor.dataset.id;
-           this.toggleDialog(this.getTaskDetailsId(index));
-         }
-       }.bind(this));
-
-       this.$.queue.addEventListener('click', function(e) {
-         var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
-         if (button != null && button.dataset.type == "delete") {
-           var index = button.dataset.index;
-           this.$.confirm_dialog.open("Proceed with deleting task?")
-               .then(this.deleteTask.bind(this, index));
-         }
-       }.bind(this));
-     },
-
-     reload: function() {
-       this.pendingTasks = []
-       var queryParams = {
-         "size": 100,
-         "not_completed": true,
-       }
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       this.taskDescriptors.forEach(function(obj) {
-         sk.post(obj.get_url + queryStr).then(JSON.parse).then(function(json) {
-           this.updatePendingTasks(json, obj);
-         }.bind(this)).catch(sk.errorMessage);
-       }.bind(this));
-
-       // Find all tasks scheduled in the future.
-       var queryParams = {"include_future_runs": true,}
-       var queryStr = "?" + sk.query.fromObject(queryParams);
-       this.taskDescriptors.forEach(function(obj) {
-         sk.post(obj.get_url + queryStr).then(JSON.parse).then(function(json) {
-           this.updatePendingTasks(json, obj);
-         }.bind(this)).catch(sk.errorMessage);
-       }.bind(this));
-     },
-
-     incrementOne: function(index) {
-       return index + 1;
-     },
-
-     getTaskDetailsId: function(index) {
-       return "task_details" + index;
-     },
-
-     formatTask: function(task) {
-       return JSON.stringify(task, null, 4);
-     },
-
-     updatePendingTasks: function(json, taskDescriptor) {
-       var tasks = json.data
-       for (index in tasks) {
-         var task = tasks[index];
-         task["canDelete"] = json.permissions[index].DeleteAllowed;
-         task["Id"] = json.ids[index];
-         task["TaskType"] = taskDescriptor.type;
-         task["GetURL"] = taskDescriptor.get_url;
-         task["DeleteURL"] = taskDescriptor.delete_url;
-         // Check if this is a completed task set to repeat.
-         if (task["RepeatAfterDays"] != 0 && task["TaskDone"]) {
-           // Calculate the future date.
-           var timestamp = ctfe.getTimestamp(task["TsAdded"]);
-           timestamp.setDate(timestamp.getDate() + task["RepeatAfterDays"]);
-           task["FutureDate"] = true;
-           task["TsAdded"] = ctfe.getCtDbTimestamp(new Date(timestamp));
-         }
-       }
-       this.pendingTasks = this.pendingTasks.concat(tasks)
-       // Sort pending tasks according to TsAdded.
-       this.pendingTasks.sort(function(a, b){return a["TsAdded"] - b["TsAdded"]});
-     },
-
-     deleteTask: function(deleteIndex) {
-       var pendingTask = this.pendingTasks[deleteIndex];
-       var params = {};
-       params["id"] = pendingTask.Id;
-       sk.post(pendingTask.DeleteURL, JSON.stringify(params)).then(function() {
-         $$$("#confirm_toast").text = "Deleted " + pendingTask.TaskType + " task " + pendingTask.Id;
-         $$$("#confirm_toast").show();
-       }.bind(this)).catch(sk.errorMessage).then(function() {
-         this.reload();
-       }.bind(this));
-     },
-
-     toggleDialog: function(id) {
-       Polymer.dom(this.root).querySelector('#' + id).toggle();
-     },
-
-     formatTimestamp: ctfe.getFormattedTimestamp,
-  });
-</script>
diff --git a/ct/res/imp/repeat-after-days-sk.html b/ct/res/imp/repeat-after-days-sk.html
deleted file mode 100644
index d15f334..0000000
--- a/ct/res/imp/repeat-after-days-sk.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-  The <repeat-after-days-sk> custom element declaration. Displays an iron-selector allowing
-  the user to choose whether their task should be repeated either never, daily, every other day
-  or weekly.
-
-  Attributes:
-    selected: Item of repeat-after-days that is currently selected. Notifies.
-
-  Events:
-    None.
-
-  Methods:
-    None.
--->
-
-<dom-module id="repeat-after-days-sk">
-  <style>
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    iron-selector.short-field > div {
-      width: 5em;
-    }
-  </style>
-  <template>
-    <table>
-      <tr>
-        <td>
-          <iron-selector attr-for-selected="name" selected="{{selected}}" class="short-field">
-            <div name="0">0</div> 
-            <div name="1">1</div> 
-            <div name="2">2</div> 
-            <div name="7">7</div> 
-          </iron-selector>
-        </td>
-        <td>
-          Never repeat <br/>
-          Repeat daily <br/>
-          Repeat every other day <br/>
-          Repeat weekly <br/>
-        </td>
-      </tr>
-    </table>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "repeat-after-days-sk",
-     properties: {
-       selected: {
-         type: String,
-         value: '0',  // Select no repeats by default.
-       },
-     },
-   });
-</script>
diff --git a/ct/res/imp/skp-repository-selector-sk.html b/ct/res/imp/skp-repository-selector-sk.html
deleted file mode 100644
index bf23641..0000000
--- a/ct/res/imp/skp-repository-selector-sk.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-  The <skp-repository-selector-sk> custom element declaration. Displays an iron-selector allowing
-  the user to choose among the available SKP repositories.
-
-  Attributes:
-    skpRepositories: array of objects as obtained via ctfe.skpRepositories.getRepositories. Must be
-      set.
-    selected: Item of skpRepositories that is currently selected. Notifies.
-
-  Events:
-    None.
-
-  Methods:
-    selectFirst: Causes the first repository in skpRepositories to be selected.
--->
-
-<dom-module id="skp-repository-selector-sk">
-  <style>
-    .iron-selected {
-      background-color: #D6ECF2;
-    }
-
-    iron-selector.long-field > div {
-      width: 40em;
-    }
-  </style>
-  <template>
-    <iron-selector selected="{{selectedIndex}}" class="long-field">
-      <template is="dom-repeat" items="{{skpRepositories}}">
-        <div>{{getDescription(item)}}</div>
-      </template>
-    </iron-selector>
-  </template>
-</dom-module>
-
-<script>
-   Polymer({
-     is: "skp-repository-selector-sk",
-     properties: {
-       skpRepositories: Array,
-       selectedIndex: {
-         type: String,
-       },
-       selected: {
-         type: Object,
-         notify: true,
-         computed: "getRepository(skpRepositories, selectedIndex)",
-       },
-     },
-
-     getRepository: function(skpRepositories, selectedIndex) {
-       return skpRepositories[selectedIndex];
-     },
-
-     selectFirst: function() {
-       if (this.skpRepositories.length > 0) {
-         this.selectedIndex = "0";
-       }
-     },
-
-     getDescription: ctfe.skpRepositories.getDescription,
-   });
-</script>
diff --git a/ct/templates/admin_tasks.html b/ct/templates/admin_tasks.html
deleted file mode 100644
index 2bb0039..0000000
--- a/ct/templates/admin_tasks.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Admin Tasks</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <h2>Run Admin Tasks</h2>
-              <p>
-                <span style="text-align: center;">
-                  Must be admin to trigger below admin tasks (contact rmistry@).
-                </span>
-              </p>
-              <br/><br/>
-              <admin-tasks-sk></admin-tasks-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-    <script type="text/javascript" charset="utf-8">
-       (function() {
-         ctfe.pageSets.getPageSets().then(function(pageSets) {
-           $$$('admin-tasks-sk').pageSets = pageSets;
-         }).catch(sk.errorMessage);
-         ctfe.chromiumBuild.getBuilds().then(function (builds) {
-           $$$('admin-tasks-sk').chromiumBuilds = builds;
-         }).catch(sk.errorMessage);
-       })();
-    </script>
-
-  </body>
-</html>
diff --git a/ct/templates/capture_skp_runs_history.html b/ct/templates/capture_skp_runs_history.html
deleted file mode 100644
index c958b0e..0000000
--- a/ct/templates/capture_skp_runs_history.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Capture SkPictures Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <capture-skp-runs-sk></capture-skp-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/capture_skps.html b/ct/templates/capture_skps.html
deleted file mode 100644
index 7057c15..0000000
--- a/ct/templates/capture_skps.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Capture SkPictures</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <h2>Capture SKPs</h2>
-              <capture-skps-sk></capture-skps-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-    <script type="text/javascript" charset="utf-8">
-       (function() {
-         ctfe.pageSets.getPageSets().then(function(pageSets) {
-           $$$('capture-skps-sk').pageSets = pageSets;
-         }).catch(sk.errorMessage);
-         ctfe.chromiumBuild.getBuilds().then(function (builds) {
-           $$$('capture-skps-sk').chromiumBuilds = builds;
-         }).catch(sk.errorMessage);
-       })();
-    </script>
-
-  </body>
-</html>
diff --git a/ct/templates/chromium_analysis.html b/ct/templates/chromium_analysis.html
deleted file mode 100644
index e3aaf63..0000000
--- a/ct/templates/chromium_analysis.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Analysis</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=chromium_analysis class="left_padded">
-              <h2>Get data for analysis using Chromium / Telemetry patches</h2>
-              <p>
-                <span style="text-align: center;">
-                  Read <a href="https://docs.google.com/a/chromium.org/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit?pli=1#heading=h.lgvqzgu7bc4d" target="_blank">this</a> for an explanation of CT's accuracy of results.
-                </span>
-              </p>
-              <br/><br/>
-              <chromium-analysis-sk id="chromium_analysis"></chromium-analysis-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-    <script type="text/javascript" charset="utf-8">
-       (function() {
-         sk.post('/_/benchmarks_platforms/').then(JSON.parse).then(function(json) {
-           $$$('chromium-analysis-sk').benchmarksToDoc = json["benchmarks"];
-           $$$('chromium-analysis-sk').benchmarks = Object.keys(json["benchmarks"]);
-           $$$('chromium-analysis-sk').platformsToDesc = json["platforms"];
-           $$$('chromium-analysis-sk').platforms = Object.keys(json["platforms"]);
-         }).catch(sk.errorMessage);
-         sk.get('/_/task_priorities/').then(JSON.parse).then(function(json) {
-           $$$('chromium-analysis-sk').taskPrioritiesToDesc = json["task_priorities"];
-           $$$('chromium-analysis-sk').taskPriorities = Object.keys(json["task_priorities"]);
-         }).catch(sk.errorMessage);
-         ctfe.pageSets.getPageSets().then(function(pageSets) {
-           $$$('chromium-analysis-sk').pageSets = pageSets;
-         }).catch(sk.errorMessage);
-       })();
-    </script>
-
-  </body>
-</html>
diff --git a/ct/templates/chromium_analysis_runs_history.html b/ct/templates/chromium_analysis_runs_history.html
deleted file mode 100644
index b111319..0000000
--- a/ct/templates/chromium_analysis_runs_history.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Analysis Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=chromium_analysis_runs_history class="left_padded">
-              <chromium-analysis-runs-sk id="chromium_analysis_runs"></chromium-analysis-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/chromium_build_runs_history.html b/ct/templates/chromium_build_runs_history.html
deleted file mode 100644
index 7f5aaec..0000000
--- a/ct/templates/chromium_build_runs_history.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Builds Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <chromium-build-runs-sk></chromium-build-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/chromium_builds.html b/ct/templates/chromium_builds.html
deleted file mode 100644
index 2a3e345..0000000
--- a/ct/templates/chromium_builds.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Builds</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <h2>Add a New Chromium Build</h2>
-              <chromium-builds-sk></chromium-builds-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-  </body>
-</html>
diff --git a/ct/templates/chromium_perf.html b/ct/templates/chromium_perf.html
deleted file mode 100644
index 8b8277e..0000000
--- a/ct/templates/chromium_perf.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Perf</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=chromium_perf class="left_padded">
-              <h2>Test performance of Chromium / Skia patches on the top 10k webpages</h2>
-              <p>
-                <span style="text-align: center;">
-                  Read <a href="https://docs.google.com/a/chromium.org/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit?pli=1#heading=h.lgvqzgu7bc4d" target="_blank">this</a> for an explanation of CT's accuracy of results.
-                </span>
-              </p>
-              <br/><br/>
-              <chromium-perf-sk id="chromium_perf"></chromium-perf-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-    <script type="text/javascript" charset="utf-8">
-       (function() {
-         sk.post('/_/benchmarks_platforms/').then(JSON.parse).then(function(json) {
-           $$$('chromium-perf-sk').benchmarksToDoc = json["benchmarks"];
-           $$$('chromium-perf-sk').benchmarks = Object.keys(json["benchmarks"]);
-           $$$('chromium-perf-sk').platformsToDesc = json["platforms"];
-           $$$('chromium-perf-sk').platforms = Object.keys(json["platforms"]);
-         }).catch(sk.errorMessage);
-         sk.get('/_/task_priorities/').then(JSON.parse).then(function(json) {
-           $$$('chromium-perf-sk').taskPrioritiesToDesc = json["task_priorities"];
-           $$$('chromium-perf-sk').taskPriorities = Object.keys(json["task_priorities"]);
-         }).catch(sk.errorMessage);
-         ctfe.pageSets.getPageSets().then(function(pageSets) {
-           $$$('chromium-perf-sk').pageSets = pageSets;
-         }).catch(sk.errorMessage);
-       })();
-    </script>
-
-  </body>
-</html>
diff --git a/ct/templates/chromium_perf_runs_history.html b/ct/templates/chromium_perf_runs_history.html
deleted file mode 100644
index 8107499..0000000
--- a/ct/templates/chromium_perf_runs_history.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Chromium Perf Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=chromium_perf_runs_history class="left_padded">
-              <chromium-perf-runs-sk id="chromium_perf_runs"></chromium-perf-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/header.html b/ct/templates/header.html
deleted file mode 100644
index 6037aed..0000000
--- a/ct/templates/header.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<meta charset="utf-8">
-<!--For crbug.com/1022379 -->
-<meta http-equiv="origin-trial" content="Ars5fhxpS37f7qCiMIABqYXblkns0x6lkmbqFSHILsU76tNe12QVepybDjG/Li56paBy3ecTTKWZ1MT8EU37DwkAAABneyJvcmlnaW4iOiJodHRwczovL2N0LnNraWEub3JnOjQ0MyIsImZlYXR1cmUiOiJXZWJDb21wb25lbnRzVjAiLCJleHBpcnkiOjE2MDQ2NzU3MDEsImlzU3ViZG9tYWluIjp0cnVlfQ==">
-<meta name="theme-color" content="#526E9C">
-<link rel="shortcut icon" href="/res/img/favicon.ico" />
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<script src="/res/js/core.js"></script>
-<link href="/res/css/ctfe.css" rel="stylesheet" />
-<link href="/res/vul/elements.html" rel="import" />
-<script>
-  // CRDX Feedback button.
-  (function(i,s,o,g,r,a,m){i['CrDXObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','https://storage.googleapis.com/crdx-feedback.appspot.com/feedback.js','crdx');
-
-  crdx('setFeedbackButtonLink',
-       'https://bugs.chromium.org/p/skia/issues/entry?template=CT');
-</script>
diff --git a/ct/templates/metrics_analysis.html b/ct/templates/metrics_analysis.html
deleted file mode 100644
index 8dd3aa5..0000000
--- a/ct/templates/metrics_analysis.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Metrics Analysis</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=metircs_analysis class="left_padded">
-              <h2>Metrics analysis on cloud trace URLs</h2>
-              <p>
-                <span style="text-align: center;">
-                  Design doc is <a href="https://docs.google.com/document/d/1MY95ULhEuKFznBQpF60_uhdhRco5bWzUVfVTp0M2hDw/edit?ts=5accc1eb#" target="_blank">here</a>.
-                </span>
-              </p>
-              <br/><br/>
-              <metrics-analysis-sk id="metrics_analysis"></metrics-analysis-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-    <script type="text/javascript" charset="utf-8">
-       (function() {
-         sk.get('/_/task_priorities/').then(JSON.parse).then(function(json) {
-           $$$('metrics-analysis-sk').taskPrioritiesToDesc = json["task_priorities"];
-           $$$('metrics-analysis-sk').taskPriorities = Object.keys(json["task_priorities"]);
-         }).catch(sk.errorMessage);
-       })();
-    </script>
-
-  </body>
-</html>
diff --git a/ct/templates/metrics_analysis_runs_history.html b/ct/templates/metrics_analysis_runs_history.html
deleted file mode 100644
index a605a5d..0000000
--- a/ct/templates/metrics_analysis_runs_history.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Metrics Analysis Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=metrics_analysis_runs_history class="left_padded">
-              <metrics-analysis-runs-sk id="metrics_analysis_runs"></metrics-analysis-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/recreate_page_sets_runs_history.html b/ct/templates/recreate_page_sets_runs_history.html
deleted file mode 100644
index 22ca774..0000000
--- a/ct/templates/recreate_page_sets_runs_history.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Recreate Page Sets Task Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <admin-task-runs-sk url="/_/get_recreate_page_sets_tasks"
-                                  delete-url="/_/delete_recreate_page_sets_task"
-                                  redo-url="/_/redo_recreate_page_sets_task"
-                                  task-type="RecreatePageSets">
-              </admin-task-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/recreate_webpage_archives_runs_history.html b/ct/templates/recreate_webpage_archives_runs_history.html
deleted file mode 100644
index 3bfe051..0000000
--- a/ct/templates/recreate_webpage_archives_runs_history.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Recreate Webpage Archives Task Runs</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section class="left_padded">
-              <admin-task-runs-sk url="/_/get_recreate_webpage_archives_tasks"
-                                  delete-url="/_/delete_recreate_webpage_archives_task"
-                                  redo-url="/_/redo_recreate_webpage_archives_task"
-                                  task-type="RecreateWebpageArchives">
-              </admin-task-runs-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-      <paper-toast id="confirm_toast" duration="5000"></paper-toast>
-      <error-toast-sk></error-toast-sk>
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/runs_history.html b/ct/templates/runs_history.html
deleted file mode 100644
index 80bb6f7..0000000
--- a/ct/templates/runs_history.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Runs History</title>
-    {{template "header.html" .}}
-  </head>
-  <body>
-
-    <paper-header-panel class="fit">
-
-      {{template "titlebar.html" .}}
-
-      <div class="content">
-        <paper-drawer-panel>
-          <div drawer>
-            <drawer-sk></drawer-sk>
-          </div>
-          <div main class="scrollable">
-            <section id=runs_history class="left_padded top_padded">
-              <h4>View the runs of the following CT tasks</h4>
-              <ul>
-                <li><a href="/chromium_perf_runs/">Chromium Perf Runs</a></li>
-                <li><a href="/chromium_analysis_runs/">Chromium Analysis Runs</a></li>
-                <li><a href="/metrics_analysis_runs/">Metrics Analysis Runs</a></li>
-                <li><a href="/capture_skp_runs/">Capture SKP Runs</a></li>
-                <li><a href="/chromium_builds_runs/">Chromium Builds Runs</a></li>
-                <li><a href="/recreate_page_sets_runs/">Recreate Page Sets Task Runs</a></li>
-                <li><a href="/recreate_webpage_archives_runs/">Recreate Webpage Archives Task Runs</a></li>
-              </ul>
-              <br/><br/>
-              <ct-runs-summary-sk></ct-runs-summary-sk>
-            </section>
-          </div>
-        </paper-drawer-panel>
-      </div>
-
-    </paper-header-panel>
-
-  </body>
-</html>
diff --git a/ct/templates/titlebar.html b/ct/templates/titlebar.html
deleted file mode 100644
index 4de2fc6..0000000
--- a/ct/templates/titlebar.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<paper-toolbar>
-  <span class="title">Cluster Telemetry 3.0</span>
-  <login-sk></login-sk>
-</paper-toolbar>