Rename build/trigger to check/checker.

Change-Id: I2e1c536022c8f9ba62787b80931c91d165a76ef7
diff --git a/gr-checks/BUILD b/gr-checks/BUILD
index 9711ad1..e2dd6bd 100644
--- a/gr-checks/BUILD
+++ b/gr-checks/BUILD
@@ -8,9 +8,9 @@
 load("//tools/bzl:js.bzl", "bundle_assets", "polygerrit_plugin")
 
 polygerrit_plugin(
-    name = "build_results",
-    app = "build-results.html",
-    plugin_name = "build_results",
+    name = "gr-checks",
+    app = "gr-checks.html",
+    plugin_name = "checks",
     externs = ["externs.js"],
     srcs = glob([
             "*.html",
diff --git a/gr-checks/build-result-item.js b/gr-checks/build-result-item.js
deleted file mode 100644
index 5405359..0000000
--- a/gr-checks/build-result-item.js
+++ /dev/null
@@ -1,121 +0,0 @@
-(function() {
-'use strict';
-
-const Defs = {};
-/**
- * @typedef {{
- *   id: string,
- *   projectId: string,
- *   buildTriggerId: string,
- *   startTime: string,
- *   finishTime: string,
- * }}
- */
-Defs.Build;
-
-Polymer({
-  is: 'build-result-item',
-
-  properties: {
-    build: Object,
-    /** @type {function(string): !Promise<!Object>} */
-    getTrigger: Function,
-    /** @type {function(string): !Promise<!Object>} */
-    retryBuild: Function,
-    _triggerDescription: String,
-    _startTime: {
-      type: String,
-      computed: '_computeStartTime(build)',
-    },
-    _duration: {
-      type: String,
-      computed: '_computeDuration(build)',
-    },
-  },
-
-  observers: [
-    '_updateTriggerName(build, getTrigger)',
-  ],
-
-  /**
-   * @param {!Defs.Build} build
-   * @param {function(string): !Promise<!Object>} getTrigger
-   */
-  _updateTriggerName(build, getTrigger) {
-    const triggerId = build.buildTriggerId;
-    getTrigger(triggerId)
-        .then(
-            trigger => trigger && trigger.description || triggerId,
-            () => triggerId)
-        .then(triggerDescription => {
-          this.set('_triggerDescription', triggerDescription);
-        });
-  },
-
-  /**
-   * @param {!Defs.Build} build
-   * @return {string}
-   */
-  _computeStartTime(build) {
-    return moment(build.startTime).format('l');
-  },
-
-  /**
-   * @param {!Defs.Build} build
-   * @return {string}
-   */
-  _computeDuration(build) {
-    const startTime = moment(build.startTime);
-    const finishTime = moment(build.finishTime);
-    return generateDurationString(moment.duration(finishTime.diff(startTime)));
-  },
-
-  handleClick(event) {
-    event.preventDefault();
-    this.retryBuild(this.build.id);
-  }
-});
-
-const ZERO_SECONDS = '0 sec';
-
-/**
- * @param {!Moment.Duration} duration a moment object
- * @return {string}
- */
-function generateDurationString(duration) {
-  if (duration.asSeconds() === 0) {
-    return ZERO_SECONDS;
-  }
-
-  const durationSegments = [];
-  if (duration.seconds()) {
-    durationSegments.push(`${duration.seconds()} sec`);
-  }
-  if (duration.minutes()) {
-    durationSegments.push(`${duration.minutes()} min`);
-  }
-  if (duration.hours()) {
-    const hours = pluralize(duration.hours(), 'hour', 'hours');
-    durationSegments.push(`${duration.hours()} ${hours}`);
-  }
-  if (duration.days()) {
-    const days = pluralize(duration.days(), 'day', 'days');
-    durationSegments.push(`${duration.days()} ${days}`);
-  }
-  if (duration.months()) {
-    const months = pluralize(duration.months(), 'month', 'months');
-    durationSegments.push(`${duration.months()} ${months}`);
-  }
-  return durationSegments.join(' ');
-}
-
-/**
- * @param {number} unit
- * @param {string} singular
- * @param {string} plural
- * @return {string}
- */
-function pluralize(unit, singular, plural) {
-  return unit === 1 ? singular : plural;
-}
-})();
diff --git a/gr-checks/build-result-item_test.html b/gr-checks/build-result-item_test.html
deleted file mode 100644
index cbf9309..0000000
--- a/gr-checks/build-result-item_test.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE html>
-<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
-
-<title>build-result-item</title>
-<link rel="import" href="webcomponent_lib/build-result-item.html">
-
-<test-fixture id="basic">
-  <template is="dom-template">
-    <build-result-item
-      build="{{build}}"
-      get-trigger="[[getTrigger]]"
-      retry-build="[[retryBuild]]">
-    </build-result-item>
-  </template>
-</test-fixture>
-
-<script>
-  suite('build-result-item tests', () => {
-    let element;
-    let sandbox;
-    let getTriggerSpy;
-    let resolveGetTrigger;
-    let rejectGetTrigger;
-    let retryBuildSpy;
-
-    setup((done) => {
-      sandbox = sinon.sandbox.create();
-      const getTriggerPromise = new Promise((resolve, reject) => {
-        resolveGetTrigger = resolve;
-        rejectGetTrigger = reject;
-      });
-      getTriggerSpy = sinon.stub();
-      getTriggerSpy.returns(getTriggerPromise);
-      retryBuildSpy = sinon.stub();
-      retryBuildSpy.returns(Promise.resolve());
-
-      element = fixture('basic', {
-        getTrigger: getTriggerSpy,
-        retryBuild: retryBuildSpy,
-        build: {
-          buildTriggerId: 'test-build-trigger-id',
-          logUrl: 'http://example.com/test-log-url',
-          startTime: "2019-02-06T22:25:19.269Z",
-          finishTime: "2019-02-06T22:25:44.574Z",
-        },
-      });
-      flush(done);
-    });
-
-    teardown(() => { sandbox.restore(); });
-
-    suite('trigger name', () => {
-      test('calls getTrigger', () => {
-        assert.isTrue(getTriggerSpy.called);
-        assert.isTrue(getTriggerSpy.calledWith('test-build-trigger-id'));
-      });
-
-      function assertTriggerText(text) {
-        const name = element.$$('td:nth-child(1)');
-        assert.equal(name.textContent.trim(), text);
-      }
-
-      suite('on success', () => {
-        setup(done => {
-          resolveGetTrigger({description: 'test trigger name'});
-          flush(done);
-        });
-
-        test('renders the trigger name on success', () => {
-          assertTriggerText('test trigger name');
-        });
-      });
-
-      suite('on empty response', () => {
-        setup(done => {
-          resolveGetTrigger();
-          flush(done);
-        });
-
-        test('renders the id when there is no description', () => {
-          assertTriggerText('test-build-trigger-id');
-        });
-      });
-
-      suite('on error', () => {
-        setup(done => {
-          rejectGetTrigger(new Error('broken'));
-          flush(done);
-        });
-
-        test('renders the id when the call fails', () => {
-          assertTriggerText('test-build-trigger-id');
-        });
-      });
-    });
-
-    test('renders the status', () => {
-      const status = element.$$('td:nth-child(3) > build-result-status');
-      assert.exists(status);
-    });
-
-    test('renders the checking system', () => {
-      const checkingSystem = element.$$('td:nth-child(4)');
-      assert.equal(checkingSystem .textContent.trim(), "Google Cloud Build");
-    });
-
-    test('renders the run date', () => {
-      const name = element.$$('td:nth-child(5)');
-      assert.equal(name .textContent.trim(), "2/6/2019");
-    });
-
-    suite('duration', () => {
-      test('renders the run duration', () => {
-        const name = element.$$('td:nth-child(6)');
-        assert.equal(name .textContent.trim(), "25 sec");
-      });
-
-      test('renders 0 sec when the start and end time are the same', () => {
-        element.build = {
-          buildTriggerId: 'test-build-trigger-id',
-          logUrl: 'http://example.com/test-log-url',
-          startTime: "2019-02-06T22:25:19.269Z",
-          finishTime: "2019-02-06T22:25:19.269Z",
-        };
-        const name = element.$$('td:nth-child(6)');
-        assert.equal(name .textContent.trim(), "0 sec");
-      });
-    });
-
-    test('renders a link to the log', () => {
-      const logLink = element.$$('td:nth-child(7) > a');
-      assert.equal(logLink.getAttribute('href'), "http://example.com/test-log-url");
-      assert.equal(logLink.textContent.trim(), "View log");
-    });
-
-    suite('retryBuild', () => {
-      let retryBuildLink;
-
-      setup(() => {
-        retryBuildLink = element.$$('td:nth-child(7) > gr-button');
-      });
-
-      test('shows a link to the log url', () => {
-        assert.equal(retryBuildLink.textContent.trim(), "Re-run");
-      });
-
-      test('clicking on the link calls the retryBuild property', () => {
-        assert.isFalse(retryBuildSpy.called);
-        retryBuildLink.click();
-        assert.isTrue(retryBuildSpy.called);
-      });
-    });
-  });
-</script>
diff --git a/gr-checks/build-result-status.js b/gr-checks/build-result-status.js
deleted file mode 100644
index f7f94fd..0000000
--- a/gr-checks/build-result-status.js
+++ /dev/null
@@ -1,37 +0,0 @@
-(function() {
-'use strict';
-
-Polymer({
-  is: 'build-result-status',
-
-  properties: {
-    showText: {
-      type: Boolean,
-      value: false,
-      reflectToAttribute: true,
-    },
-    status: String,
-    _className: {type: String, computed: '_computeClassName(status)'},
-  },
-
-  _isUnevaluated(status) {
-    return window.Gerrit.BuildResults.isUnevaluated(status);
-  },
-
-  _isInProgress(status) {
-    return window.Gerrit.BuildResults.isInProgress(status);
-  },
-
-  _isSuccessful(status) {
-    return window.Gerrit.BuildResults.isSuccessful(status);
-  },
-
-  _isFailed(status) {
-    return window.Gerrit.BuildResults.isFailed(status);
-  },
-
-  _computeClassName(status) {
-    return window.Gerrit.BuildResults.statusClass(status);
-  },
-});
-})();
diff --git a/gr-checks/build-results.html b/gr-checks/build-results.html
deleted file mode 100644
index c47ec37..0000000
--- a/gr-checks/build-results.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<link rel="import" href="build-results-view.html">
-<link rel="import" href="build-result-item.html">
-<link rel="import" href="build-result-status.html">
-<link rel="import" href="builds-chip-view.html">
-<link rel="import" href="builds-results-change-list-item-cell-view.html">
-<link rel="import" href="builds-results-change-list-header-view.html">
-<link rel="import" href="builds-results-change-view-tab-header-view.html">
-<link rel="import" href="build-results-configure-link.html">
-
-<dom-module id="build-results">
-  <script>
-    Gerrit.install(plugin => {
-      plugin.registerDynamicCustomComponent(
-          'change-list-header',
-          'builds-results-change-list-header-view');
-      plugin.registerDynamicCustomComponent(
-          'change-list-item-cell',
-          'builds-results-change-list-item-cell-view');
-      plugin.registerDynamicCustomComponent(
-          'change-view-tab-header',
-          'builds-results-change-view-tab-header-view');
-      plugin.registerDynamicCustomComponent(
-          'change-view-tab-content',
-          'build-results-view').onAttached(
-          buildResultsView => console.log('build-results-view attached'));
-    });
-  </script>
-</dom-module>
diff --git a/gr-checks/builds-chip-view.js b/gr-checks/builds-chip-view.js
deleted file mode 100644
index 2fff5bf..0000000
--- a/gr-checks/builds-chip-view.js
+++ /dev/null
@@ -1,124 +0,0 @@
-(function() {
-'use strict';
-const Statuses = window.Gerrit.BuildResults.Statuses;
-
-const StatusPriorityOrder = [
-  Statuses.INTERNAL_ERROR, Statuses.TIMEOUT, Statuses.FAILURE,
-  Statuses.STATUS_UNKNOWN, Statuses.CANCELLED, Statuses.QUEUED,
-  Statuses.QUEUING, Statuses.WORKING, Statuses.SUCCESS
-];
-
-const HumanizedStatuses = {
-  // non-terminal statuses
-  STATUS_UNKNOWN: 'unevaluated',
-  QUEUING: 'in progress',
-  QUEUED: 'in progress',
-  WORKING: 'in progress',
-
-  // terminal statuses
-  SUCCESS: 'successful',
-  FAILURE: 'failed',
-  INTERNAL_ERROR: 'failed',
-  TIMEOUT: 'failed',
-  CANCELLED: 'unevaluated',
-};
-
-
-const Defs = {};
-/**
- * @typedef {{
- *   revisions: !Object<string, !Object>,
- * }}
- */
-Defs.Change;
-
-/**
- * @param {!Defs.Change} change The current CL.
- * @param {!Object} revision The current patchset.
- * @return {string|undefined}
- */
-function currentRevisionSha(change, revision) {
-  return Object.keys(change.revisions)
-      .find(sha => change.revisions[sha] === revision);
-}
-
-function computeBuildResultStatuses(buildResults) {
-  return buildResults.reduce((accum, buildResult) => {
-    accum[buildResult.status] || (accum[buildResult.status] = 0);
-    accum[buildResult.status]++;
-    return accum;
-  }, {total: buildResults.length});
-}
-
-Polymer({
-  is: 'builds-chip-view',
-
-  properties: {
-    revision: Object,
-    change: Object,
-    // TODO(brohlfs): Implement getBuildResults based on new Rest APIs.
-    /** @type {function(string, (string|undefined)): !Promise<!Object>} */
-    getBuildResults: Function,
-    _buildResultStatuses: Object,
-    _hasBuilds: Boolean,
-    _status: {type: String, computed: '_computeStatus(_buildResultStatuses)'},
-    _statusString: {
-      type: String,
-      computed: '_computeStatusString(_status, _buildResultStatuses)'
-    },
-    _chipClasses: {type: String, computed: '_computeChipClass(_status)'},
-  },
-
-  observers: [
-    '_fetchBuildResults(change, revision, getBuildResults)',
-  ],
-
-  /**
-   * @param {!Defs.Change} change The current CL.
-   * @param {!Object} revision The current patchset.
-   * @param {function(string, (string|undefined)): !Promise<!Object>}
-   *     getBuildResults function to get build results.
-   */
-  _fetchBuildResults(change, revision, getBuildResults) {
-    const repository = change['project'];
-    const gitSha = currentRevisionSha(change, revision);
-
-    getBuildResults(repository, gitSha).then(buildResults => {
-      this.set('_hasBuilds', buildResults.length > 0);
-      if (buildResults.length > 0) {
-        this.set(
-            '_buildResultStatuses', computeBuildResultStatuses(buildResults));
-      }
-    });
-  },
-
-  /**
-   * @param {!Object} buildResultStatuses The number of builds in each status.
-   * @return {string}
-   */
-  _computeStatus(buildResultStatuses) {
-    return StatusPriorityOrder.find(
-               status => buildResultStatuses[status] > 0) ||
-        Statuses.STATUS_UNKNOWN;
-  },
-
-  /**
-   * @param {string} status The overall status of the build results.
-   * @param {!Object} buildResultStatuses The number of builds in each status.
-   * @return {string}
-   */
-  _computeStatusString(status, buildResultStatuses) {
-    if (buildResultStatuses.total === 0) return 'No builds';
-    return `${buildResultStatuses[status]} of ${
-        buildResultStatuses.total} builds ${HumanizedStatuses[status]}`;
-  },
-
-  /**
-   * @param {string} status The overall status of the build results.
-   * @return {string}
-   */
-  _computeChipClass(status) {
-    return `chip ${window.Gerrit.BuildResults.statusClass(status)}`;
-  },
-});
-})();
diff --git a/gr-checks/builds-results-change-list-header-view.html b/gr-checks/builds-results-change-list-header-view.html
deleted file mode 100644
index 596adfe..0000000
--- a/gr-checks/builds-results-change-list-header-view.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<dom-module id="builds-results-change-list-header-view">
-  <style>
-    :host {
-      display: table-cell;
-      padding: 0 3px;
-    }
-  </style>
-  <template>
-    Checks
-  </template>
-
-  <script src="builds-results-change-list-header-view.js"></script>
-</dom-module>
diff --git a/gr-checks/builds-results-change-list-header-view.js b/gr-checks/builds-results-change-list-header-view.js
deleted file mode 100644
index 19aad70..0000000
--- a/gr-checks/builds-results-change-list-header-view.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function() {
-'use strict';
-
-Polymer({
-  is: 'builds-results-change-list-header-view',
-});
-})();
diff --git a/gr-checks/builds-results-change-list-item-cell-view.html b/gr-checks/builds-results-change-list-item-cell-view.html
deleted file mode 100644
index a919c3d..0000000
--- a/gr-checks/builds-results-change-list-item-cell-view.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<dom-module id="builds-results-change-list-item-cell-view">
-  <style>
-    :host {
-      display: inline-block;
-      text-align: center;
-      width: 100%;
-    }
-  </style>
-  <template>
-  </template>
-
-  <script src="builds-results-change-list-item-cell-view.js"></script>
-</dom-module>
diff --git a/gr-checks/builds-results-change-view-tab-header-view.html b/gr-checks/builds-results-change-view-tab-header-view.html
deleted file mode 100644
index 2982f70..0000000
--- a/gr-checks/builds-results-change-view-tab-header-view.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<dom-module id="builds-results-change-view-tab-header-view">
-  <template>
-    Checks
-  </template>
-
-  <script src="builds-results-change-view-tab-header-view.js"></script>
-</dom-module>
diff --git a/gr-checks/builds-results-change-view-tab-header-view.js b/gr-checks/builds-results-change-view-tab-header-view.js
deleted file mode 100644
index 27ccf83..0000000
--- a/gr-checks/builds-results-change-view-tab-header-view.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function() {
-'use strict';
-
-Polymer({
-  is: 'builds-results-change-view-tab-header-view',
-});
-})();
diff --git a/gr-checks/builds-results-change-view-tab-header-view_test.html b/gr-checks/builds-results-change-view-tab-header-view_test.html
deleted file mode 100644
index b71371b..0000000
--- a/gr-checks/builds-results-change-view-tab-header-view_test.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
-
-<title>builds-results-change-view-tab-header-view</title>
-<link rel="import" href="webcomponent_lib/builds-results-change-view-tab-header-view.html">
-
-<test-fixture id="basic">
-  <template is="dom-template">
-    <builds-results-change-view-tab-header-view></builds-results-change-view-tab-header-view>
-  </template>
-</test-fixture>
-
-<script>
-  suite('builds-results-change-view-tab-header-view tests', () => {
-    let element;
-    let sandbox;
-
-    setup((done) => {
-      sandbox = sinon.sandbox.create();
-
-
-      element = fixture('basic');
-      flush(done);
-    });
-
-    teardown(() => { sandbox.restore(); });
-
-    test('renders the header', () => {
-      assert.include(element.textContent.trim(), 'Checks');
-    });
-  });
-</script>
diff --git a/gr-checks/all-statuses.js b/gr-checks/gr-checks-all-statuses.js
similarity index 74%
rename from gr-checks/all-statuses.js
rename to gr-checks/gr-checks-all-statuses.js
index d318830..9f76441 100644
--- a/gr-checks/all-statuses.js
+++ b/gr-checks/gr-checks-all-statuses.js
@@ -2,10 +2,10 @@
 'use strict';
 
 window.Gerrit = (window.Gerrit || {});
-window.Gerrit.BuildResults = (window.Gerrit.BuildResults || {});
+window.Gerrit.Checks = (window.Gerrit.Checks || {});
 
 // Prevent redefinition.
-if (window.Gerrit.BuildResults.Statuses) return;
+if (window.Gerrit.Checks.Statuses) return;
 
 const Statuses = {
   // non-terminal statuses
@@ -63,10 +63,10 @@
   return 'unevaluated';
 }
 
-window.Gerrit.BuildResults.Statuses = Statuses;
-window.Gerrit.BuildResults.isUnevaluated = isUnevaluated;
-window.Gerrit.BuildResults.isInProgress = isInProgress;
-window.Gerrit.BuildResults.isSuccessful = isSuccessful;
-window.Gerrit.BuildResults.isFailed = isFailed;
-window.Gerrit.BuildResults.statusClass = statusClass;
+window.Gerrit.Checks.Statuses = Statuses;
+window.Gerrit.Checks.isUnevaluated = isUnevaluated;
+window.Gerrit.Checks.isInProgress = isInProgress;
+window.Gerrit.Checks.isSuccessful = isSuccessful;
+window.Gerrit.Checks.isFailed = isFailed;
+window.Gerrit.Checks.statusClass = statusClass;
 })();
diff --git a/gr-checks/gr-checks-change-list-header-view.html b/gr-checks/gr-checks-change-list-header-view.html
new file mode 100644
index 0000000..9ddc13a
--- /dev/null
+++ b/gr-checks/gr-checks-change-list-header-view.html
@@ -0,0 +1,13 @@
+<dom-module id="gr-checks-change-list-header-view">
+  <style>
+    :host {
+      display: table-cell;
+      padding: 0 3px;
+    }
+  </style>
+  <template>
+    Checks
+  </template>
+
+  <script src="gr-checks-change-list-header-view.js"></script>
+</dom-module>
diff --git a/gr-checks/gr-checks-change-list-header-view.js b/gr-checks/gr-checks-change-list-header-view.js
new file mode 100644
index 0000000..7a6a773
--- /dev/null
+++ b/gr-checks/gr-checks-change-list-header-view.js
@@ -0,0 +1,7 @@
+(function() {
+'use strict';
+
+Polymer({
+  is: 'gr-checks-change-list-header-view',
+});
+})();
diff --git a/gr-checks/builds-results-change-list-header-view_test.html b/gr-checks/gr-checks-change-list-header-view_test.html
similarity index 70%
rename from gr-checks/builds-results-change-list-header-view_test.html
rename to gr-checks/gr-checks-change-list-header-view_test.html
index b380930..d9113f5 100644
--- a/gr-checks/builds-results-change-list-header-view_test.html
+++ b/gr-checks/gr-checks-change-list-header-view_test.html
@@ -4,18 +4,18 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>builds-results-change-list-header-view</title>
-<link rel="import" href="webcomponent_lib/builds-results-change-list-header-view.html">
+<title>gr-checks-change-list-header-view</title>
+<link rel="import" href="webcomponent_lib/gr-checks-change-list-header-view.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <builds-results-change-list-header-view></builds-results-change-list-header-view>
+    <gr-checks-change-list-header-view></gr-checks-change-list-header-view>
   </template>
 </test-fixture>
 
 <script>
 
-  suite('builds-results-change-list-header-view tests', () => {
+  suite('gr-checks-change-list-header-view tests', () => {
     let element;
     let sandbox;
 
diff --git a/gr-checks/gr-checks-change-list-item-cell-view.html b/gr-checks/gr-checks-change-list-item-cell-view.html
new file mode 100644
index 0000000..61af378
--- /dev/null
+++ b/gr-checks/gr-checks-change-list-item-cell-view.html
@@ -0,0 +1,13 @@
+<dom-module id="gr-checks-change-list-item-cell-view">
+  <style>
+    :host {
+      display: inline-block;
+      text-align: center;
+      width: 100%;
+    }
+  </style>
+  <template>
+  </template>
+
+  <script src="gr-checks-change-list-item-cell-view.js"></script>
+</dom-module>
diff --git a/gr-checks/builds-results-change-list-item-cell-view.js b/gr-checks/gr-checks-change-list-item-cell-view.js
similarity index 64%
rename from gr-checks/builds-results-change-list-item-cell-view.js
rename to gr-checks/gr-checks-change-list-item-cell-view.js
index ff8b556..4d45a44 100644
--- a/gr-checks/builds-results-change-list-item-cell-view.js
+++ b/gr-checks/gr-checks-change-list-item-cell-view.js
@@ -2,7 +2,7 @@
 'use strict';
 
 Polymer({
-  is: 'builds-results-change-list-item-cell-view',
+  is: 'gr-checks-change-list-item-cell-view',
 
   properties: {
     change: Object,
diff --git a/gr-checks/builds-results-change-list-item-cell-view_test.html b/gr-checks/gr-checks-change-list-item-cell-view_test.html
similarity index 72%
rename from gr-checks/builds-results-change-list-item-cell-view_test.html
rename to gr-checks/gr-checks-change-list-item-cell-view_test.html
index f1047fe..c50f7e6 100644
--- a/gr-checks/builds-results-change-list-item-cell-view_test.html
+++ b/gr-checks/gr-checks-change-list-item-cell-view_test.html
@@ -4,18 +4,18 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>builds-results-change-list-item-cell-view</title>
-<link rel="import" href="webcomponent_lib/builds-results-change-list-item-cell-view.html">
+<title>gr-checks-change-list-item-cell-view</title>
+<link rel="import" href="webcomponent_lib/gr-checks-change-list-item-cell-view.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <builds-results-change-list-item-cell-view change="[[change]]"></builds-results-change-list-item-cell-view>
+    <gr-checks-change-list-item-cell-view change="[[change]]"></gr-checks-change-list-item-cell-view>
   </template>
 </test-fixture>
 
 <script>
 
-  suite('builds-results-change-list-item-cell-view tests', () => {
+  suite('gr-checks-change-list-item-cell-view tests', () => {
     let element;
     let sandbox;
 
diff --git a/gr-checks/gr-checks-change-view-tab-header-view.html b/gr-checks/gr-checks-change-view-tab-header-view.html
new file mode 100644
index 0000000..e5d6dc1
--- /dev/null
+++ b/gr-checks/gr-checks-change-view-tab-header-view.html
@@ -0,0 +1,7 @@
+<dom-module id="gr-checks-change-view-tab-header-view">
+  <template>
+    Checks
+  </template>
+
+  <script src="gr-checks-change-view-tab-header-view.js"></script>
+</dom-module>
diff --git a/gr-checks/gr-checks-change-view-tab-header-view.js b/gr-checks/gr-checks-change-view-tab-header-view.js
new file mode 100644
index 0000000..b18ce2f
--- /dev/null
+++ b/gr-checks/gr-checks-change-view-tab-header-view.js
@@ -0,0 +1,7 @@
+(function() {
+'use strict';
+
+Polymer({
+  is: 'gr-checks-change-view-tab-header-view',
+});
+})();
diff --git a/gr-checks/builds-results-change-list-header-view_test.html b/gr-checks/gr-checks-change-view-tab-header-view_test.html
similarity index 70%
copy from gr-checks/builds-results-change-list-header-view_test.html
copy to gr-checks/gr-checks-change-view-tab-header-view_test.html
index b380930..9915502 100644
--- a/gr-checks/builds-results-change-list-header-view_test.html
+++ b/gr-checks/gr-checks-change-view-tab-header-view_test.html
@@ -4,18 +4,17 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>builds-results-change-list-header-view</title>
-<link rel="import" href="webcomponent_lib/builds-results-change-list-header-view.html">
+<title>gr-checks-change-view-tab-header-view</title>
+<link rel="import" href="webcomponent_lib/gr-checks-change-view-tab-header-view.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <builds-results-change-list-header-view></builds-results-change-list-header-view>
+    <gr-checks-change-view-tab-header-view></gr-checks-change-view-tab-header-view>
   </template>
 </test-fixture>
 
 <script>
-
-  suite('builds-results-change-list-header-view tests', () => {
+  suite('gr-checks-change-view-tab-header-view tests', () => {
     let element;
     let sandbox;
 
diff --git a/gr-checks/builds-chip-view.html b/gr-checks/gr-checks-chip-view.html
similarity index 64%
rename from gr-checks/builds-chip-view.html
rename to gr-checks/gr-checks-chip-view.html
index 110d26b..2bda0de 100644
--- a/gr-checks/builds-chip-view.html
+++ b/gr-checks/gr-checks-chip-view.html
@@ -1,4 +1,4 @@
-<dom-module id="builds-chip-view">
+<dom-module id="gr-checks-chip-view">
   <template>
     <style>
 
@@ -17,15 +17,15 @@
         border-color: #DA4236;
       }
     </style>
-    <template is="dom-if" if="[[_hasBuilds]]">
+    <template is="dom-if" if="[[_hasChecks]]">
       Checks:
       <span class$="[[_chipClasses]]">
-        <build-result-status status="[[_status]]"></build-result-status>
+        <gr-checks-status status="[[_status]]"></gr-checks-status>
         [[_statusString]]
       </span>
     </template>
   </template>
 
-  <script src="all-statuses.js"></script>
-  <script src="builds-chip-view.js"></script>
+  <script src="gr-checks-all-statuses.js"></script>
+  <script src="gr-checks-chip-view.js"></script>
 </dom-module>
diff --git a/gr-checks/gr-checks-chip-view.js b/gr-checks/gr-checks-chip-view.js
new file mode 100644
index 0000000..415bc1f
--- /dev/null
+++ b/gr-checks/gr-checks-chip-view.js
@@ -0,0 +1,124 @@
+(function() {
+'use strict';
+const Statuses = window.Gerrit.Checks.Statuses;
+
+const StatusPriorityOrder = [
+  Statuses.INTERNAL_ERROR, Statuses.TIMEOUT, Statuses.FAILURE,
+  Statuses.STATUS_UNKNOWN, Statuses.CANCELLED, Statuses.QUEUED,
+  Statuses.QUEUING, Statuses.WORKING, Statuses.SUCCESS
+];
+
+const HumanizedStatuses = {
+  // non-terminal statuses
+  STATUS_UNKNOWN: 'unevaluated',
+  QUEUING: 'in progress',
+  QUEUED: 'in progress',
+  WORKING: 'in progress',
+
+  // terminal statuses
+  SUCCESS: 'successful',
+  FAILURE: 'failed',
+  INTERNAL_ERROR: 'failed',
+  TIMEOUT: 'failed',
+  CANCELLED: 'unevaluated',
+};
+
+
+const Defs = {};
+/**
+ * @typedef {{
+ *   revisions: !Object<string, !Object>,
+ * }}
+ */
+Defs.Change;
+
+/**
+ * @param {!Defs.Change} change The current CL.
+ * @param {!Object} revision The current patchset.
+ * @return {string|undefined}
+ */
+function currentRevisionSha(change, revision) {
+  return Object.keys(change.revisions)
+      .find(sha => change.revisions[sha] === revision);
+}
+
+function computeCheckStatuses(checks) {
+  return checks.reduce((accum, check) => {
+    accum[check.state] || (accum[check.state] = 0);
+    accum[check.state]++;
+    return accum;
+  }, {total: checks.length});
+}
+
+Polymer({
+  is: 'gr-checks-chip-view',
+
+  properties: {
+    revision: Object,
+    change: Object,
+    // TODO(brohlfs): Implement getChecks based on new Rest APIs.
+    /** @type {function(string, (string|undefined)): !Promise<!Object>} */
+    getChecks: Function,
+    _checkStatuses: Object,
+    _hasChecks: Boolean,
+    _status: {type: String, computed: '_computeStatus(_checkStatuses)'},
+    _statusString: {
+      type: String,
+      computed: '_computeStatusString(_status, _checkStatuses)'
+    },
+    _chipClasses: {type: String, computed: '_computeChipClass(_status)'},
+  },
+
+  observers: [
+    '_fetchChecks(change, revision, getChecks)',
+  ],
+
+  /**
+   * @param {!Defs.Change} change The current CL.
+   * @param {!Object} revision The current patchset.
+   * @param {function(string, (string|undefined)): !Promise<!Object>}
+   *     getChecks function to get checks.
+   */
+  _fetchChecks(change, revision, getChecks) {
+    const repository = change['project'];
+    const gitSha = currentRevisionSha(change, revision);
+
+    getChecks(repository, gitSha).then(checks => {
+      this.set('_hasChecks', checks.length > 0);
+      if (checks.length > 0) {
+        this.set(
+            '_checkStatuses', computeCheckStatuses(checks));
+      }
+    });
+  },
+
+  /**
+   * @param {!Object} checkStatuses The number of checks in each status.
+   * @return {string}
+   */
+  _computeStatus(checkStatuses) {
+    return StatusPriorityOrder.find(
+               status => checkStatuses[status] > 0) ||
+        Statuses.STATUS_UNKNOWN;
+  },
+
+  /**
+   * @param {string} status The overall status of the checks.
+   * @param {!Object} checkStatuses The number of checks in each status.
+   * @return {string}
+   */
+  _computeStatusString(status, checkStatuses) {
+    if (checkStatuses.total === 0) return 'No checks';
+    return `${checkStatuses[status]} of ${
+        checkStatuses.total} checks ${HumanizedStatuses[status]}`;
+  },
+
+  /**
+   * @param {string} status The overall status of the checks.
+   * @return {string}
+   */
+  _computeChipClass(status) {
+    return `chip ${window.Gerrit.Checks.statusClass(status)}`;
+  },
+});
+})();
diff --git a/gr-checks/builds-chip-view_test.html b/gr-checks/gr-checks-chip-view_test.html
similarity index 61%
rename from gr-checks/builds-chip-view_test.html
rename to gr-checks/gr-checks-chip-view_test.html
index 2f0feb5..fb1c67a 100644
--- a/gr-checks/builds-chip-view_test.html
+++ b/gr-checks/gr-checks-chip-view_test.html
@@ -4,45 +4,45 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>builds-chip-view</title>
-<link rel="import" href="webcomponent_lib/builds-chip-view.html">
+<title>gr-checks-chip-view</title>
+<link rel="import" href="webcomponent_lib/gr-checks-chip-view.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <builds-chip-view change="[[change]]" revision="[[revision]]" get-build-results="[[getBuildResults]]"></builds-chip-view>
+    <gr-checks-chip-view change="[[change]]" revision="[[revision]]" get-gr-checks="[[getChecks]]"></gr-checks-chip-view>
   </template>
 </test-fixture>
 
 <script>
-  const BUILD1 = {
-    buildTriggerId: 'test-build-trigger-id',
+  const CHECK1 = {
+    checkId: 'test-check-id',
     logUrl: 'http://example.com/test-log-url',
     startTime: "2019-02-06T22:25:19.269Z",
     finishTime: "2019-02-06T22:25:44.574Z",
     status: 'SUCCESS',
   };
 
-  const BUILD2 = {
-    buildTriggerId: 'test-build-trigger-id-2',
+  const CHECK2 = {
+    checkId: 'test-check-id-2',
     logUrl: 'http://example.com/test-log-url',
     startTime: "2019-02-06T22:25:19.269Z",
     finishTime: "2019-02-06T22:25:44.574Z",
     status: 'FAILURE',
   };
 
-  suite('build-chip-view tests', () => {
+  suite('gr-checks-chip-view tests', () => {
     let element;
     let sandbox;
-    let getBuildResultsSpy;
+    let getChecksSpy;
 
     setup((done) => {
       sandbox = sinon.sandbox.create();
 
-      getBuildResultsSpy = sinon.stub();
-      getBuildResultsSpy.returns(Promise.resolve([BUILD1, BUILD2, BUILD1]));
+      getChecksSpy = sinon.stub();
+      getChecksSpy.returns(Promise.resolve([CHECK1, CHECK2, CHECK1]));
 
       element = fixture('basic', {
-        getBuildResults: getBuildResultsSpy,
+        getChecks: getChecksSpy,
         change: {
           'project': 'test-repository',
           'revisions': {
@@ -62,14 +62,14 @@
     });
 
     suite('builds chip contents', () => {
-      test('queries the builds', () => {
-        assert.isTrue(getBuildResultsSpy.called);
-        assert.isTrue(getBuildResultsSpy.calledWith('test-repository', 'second-sha'));
+      test('queries the checks', () => {
+        assert.isTrue(getChecksSpy.called);
+        assert.isTrue(getChecksSpy.calledWith('test-repository', 'second-sha'));
       });
 
-      test('renders the text of failed builds', () => {
+      test('renders the text of failed checks', () => {
         const chip = element.$$('.chip');
-        assert.equal(chip.textContent.trim(), '1 of 3 builds failed');
+        assert.equal(chip.textContent.trim(), '1 of 3 checks failed');
       });
     });
   });
diff --git a/gr-checks/build-results-configure-link.html b/gr-checks/gr-checks-configure-link.html
similarity index 76%
rename from gr-checks/build-results-configure-link.html
rename to gr-checks/gr-checks-configure-link.html
index 8a83e3e..23cbb6e 100644
--- a/gr-checks/build-results-configure-link.html
+++ b/gr-checks/gr-checks-configure-link.html
@@ -1,4 +1,4 @@
-<dom-module id="build-results-configure-link">
+<dom-module id="gr-checks-configure-link">
   <template>
     <style>
       iron-icon {
@@ -14,5 +14,5 @@
       </gr-button>
     </a>
   </template>
-  <script src="build-results-configure-link.js"></script>
+  <script src="gr-checks-configure-link.js"></script>
 </dom-module>
diff --git a/gr-checks/build-results-configure-link.js b/gr-checks/gr-checks-configure-link.js
similarity index 72%
rename from gr-checks/build-results-configure-link.js
rename to gr-checks/gr-checks-configure-link.js
index c17b329..0eb1571 100644
--- a/gr-checks/build-results-configure-link.js
+++ b/gr-checks/gr-checks-configure-link.js
@@ -2,7 +2,7 @@
 'use strict';
 
 Polymer({
-  is: 'build-results-configure-link',
+  is: 'gr-checks-configure-link',
 
   properties: {
     configurePath: String,
diff --git a/gr-checks/build-results-configure-link_test.html b/gr-checks/gr-checks-configure-link_test.html
similarity index 72%
rename from gr-checks/build-results-configure-link_test.html
rename to gr-checks/gr-checks-configure-link_test.html
index 179ada2..3c8f314 100644
--- a/gr-checks/build-results-configure-link_test.html
+++ b/gr-checks/gr-checks-configure-link_test.html
@@ -4,17 +4,17 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>build-results-configure-link</title>
-<link rel="import" href="webcomponent_lib/build-results-configure-link.html">
+<title>gr-checks-configure-link</title>
+<link rel="import" href="webcomponent_lib/gr-checks-configure-link.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <build-results-configure-link configure-path="[[configurePath]]"></build-results-configure-link>
+    <gr-checks-configure-link configure-path="[[configurePath]]"></gr-checks-configure-link>
   </template>
 </test-fixture>
 
 <script>
-  suite('build-results-configure-link tests', () => {
+  suite('gr-checks-configure-link tests', () => {
     let element;
     let sandbox;
 
@@ -28,7 +28,7 @@
 
     teardown(() => { sandbox.restore(); });
 
-    test('renders the link to configure a build', () => {
+    test('renders the link to configure a check', () => {
       const configureLink = element.$$('a');
       assert.equal(configureLink.getAttribute('href'), 'http://example.com/test-configure');
       assert.equal(configureLink.textContent.trim(), 'Configure checks');
diff --git a/gr-checks/build-result-item.html b/gr-checks/gr-checks-item.html
similarity index 70%
rename from gr-checks/build-result-item.html
rename to gr-checks/gr-checks-item.html
index c134205..436f65b 100644
--- a/gr-checks/build-result-item.html
+++ b/gr-checks/gr-checks-item.html
@@ -1,4 +1,4 @@
-<dom-module id="build-result-item">
+<dom-module id="gr-checks-item">
   <template>
       <style>
         :host {
@@ -20,16 +20,16 @@
         }
       </style>
 
-      <td>[[_triggerDescription]]</td>
+      <td>[[_checkerDescription]]</td>
       <td><!-- required for merge--></td>
       <td>
-        <build-result-status show-text status="[[build.status]]"></build-result-status>
+        <gr-checks-status show-text status="[[check.state]]"></gr-checks-status>
       </td>
-      <td>Google Cloud Build</td>
+      <td>Check System</td>
       <td>[[_startTime]]</td>
       <td>[[_duration]]</td>
       <td>
-        <a href$="[[build.logUrl]]" target="_blank" class="log">
+        <a href$="[[check.url]]" target="_blank" class="log">
           <gr-button link no-uppercase>
             View log
           </gr-button>
@@ -42,5 +42,5 @@
         </gr-button>
       </td>
   </template>
-  <script src="build-result-item.js"></script>
+  <script src="gr-checks-item.js"></script>
 </dom-module>
diff --git a/gr-checks/gr-checks-item.js b/gr-checks/gr-checks-item.js
new file mode 100644
index 0000000..272f82c
--- /dev/null
+++ b/gr-checks/gr-checks-item.js
@@ -0,0 +1,120 @@
+(function() {
+  'use strict';
+
+  const Defs = {};
+  /**
+   * @typedef {{
+ *   id: string,
+ *   projectId: string,
+ *   checkerId: string,
+ *   startTime: string,
+ *   finishTime: string,
+ * }}
+   */
+  Defs.Check;
+
+  Polymer({
+    is: 'gr-checks-item',
+
+    properties: {
+      check: Object,
+      /** @type {function(string): !Promise<!Object>} */
+      getChecker: Function,
+      /** @type {function(string): !Promise<!Object>} */
+      retryCheck: Function,
+      _checkerDescription: String,
+      _startTime: {
+        type: String,
+        computed: '_computeStartTime(check)',
+      },
+      _duration: {
+        type: String,
+        computed: '_computeDuration(check)',
+      },
+    },
+
+    observers: [
+      '_updateCheckerName(check, getChecker)',
+    ],
+
+    /**
+     * @param {!Defs.Check} check
+     * @param {function(string): !Promise<!Object>} getChecker
+     */
+    _updateCheckerName(check, getChecker) {
+      const checkerId = check.checker_uuid;
+      getChecker(checkerId).then(
+          checker => checker && checker.description || checkerId,
+          () => checkerId).then(checkerDescription => {
+        this.set('_checkerDescription', checkerDescription);
+      });
+    },
+
+    /**
+     * @param {!Defs.Check} check
+     * @return {string}
+     */
+    _computeStartTime(check) {
+      return moment(check.created).format('l');
+    },
+
+    /**
+     * @param {!Defs.Check} check
+     * @return {string}
+     */
+    _computeDuration(check) {
+      const startTime = moment(check.created);
+      const finishTime = moment(check.updated);
+      return generateDurationString(
+          moment.duration(finishTime.diff(startTime)));
+    },
+
+    handleClick(event) {
+      event.preventDefault();
+      this.retryCheck(this.check.checker_uuid);
+    },
+  });
+
+  const ZERO_SECONDS = '0 sec';
+
+  /**
+   * @param {!Moment.Duration} duration a moment object
+   * @return {string}
+   */
+  function generateDurationString(duration) {
+    if (duration.asSeconds() === 0) {
+      return ZERO_SECONDS;
+    }
+
+    const durationSegments = [];
+    if (duration.seconds()) {
+      durationSegments.push(`${duration.seconds()} sec`);
+    }
+    if (duration.minutes()) {
+      durationSegments.push(`${duration.minutes()} min`);
+    }
+    if (duration.hours()) {
+      const hours = pluralize(duration.hours(), 'hour', 'hours');
+      durationSegments.push(`${duration.hours()} ${hours}`);
+    }
+    if (duration.days()) {
+      const days = pluralize(duration.days(), 'day', 'days');
+      durationSegments.push(`${duration.days()} ${days}`);
+    }
+    if (duration.months()) {
+      const months = pluralize(duration.months(), 'month', 'months');
+      durationSegments.push(`${duration.months()} ${months}`);
+    }
+    return durationSegments.join(' ');
+  }
+
+  /**
+   * @param {number} unit
+   * @param {string} singular
+   * @param {string} plural
+   * @return {string}
+   */
+  function pluralize(unit, singular, plural) {
+    return unit === 1 ? singular : plural;
+  }
+})();
diff --git a/gr-checks/gr-checks-item_test.html b/gr-checks/gr-checks-item_test.html
new file mode 100644
index 0000000..0495d52
--- /dev/null
+++ b/gr-checks/gr-checks-item_test.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+<script src="imports.js"></script>
+<script src="webcomponentsjs/webcomponents-lite.js"></script>
+<link rel="import" href="polymer/polymer.html">
+
+<title>gr-checks-item</title>
+<link rel="import" href="webcomponent_lib/gr-checks-item.html">
+
+<test-fixture id="basic">
+  <template is="dom-template">
+    <gr-checks-item
+      check="{{check}}"
+      get-checker="[[getChecker]]"
+      retry-check="[[retryCheck]]">
+    </gr-checks-item>
+  </template>
+</test-fixture>
+
+<script>
+  suite('gr-checks-item tests', () => {
+    let element;
+    let sandbox;
+    let getCheckerSpy;
+    let resolveGetChecker;
+    let rejectGetChecker;
+    let retryCheckSpy;
+
+    setup((done) => {
+      sandbox = sinon.sandbox.create();
+      const getCheckerPromise = new Promise((resolve, reject) => {
+        resolveGetChecker = resolve;
+        rejectGetChecker = reject;
+      });
+      getCheckerSpy = sinon.stub();
+      getCheckerSpy.returns(getCheckerPromise);
+      retryCheckSpy = sinon.stub();
+      retryCheckSpy.returns(Promise.resolve());
+
+      element = fixture('basic', {
+        getChecker: getCheckerSpy,
+        retryCheck: retryCheckSpy,
+        check: {
+          checkId: 'test-check-id',
+          logUrl: 'http://example.com/test-log-url',
+          startTime: "2019-02-06T22:25:19.269Z",
+          finishTime: "2019-02-06T22:25:44.574Z",
+        },
+      });
+      flush(done);
+    });
+
+    teardown(() => { sandbox.restore(); });
+
+    suite('checker name', () => {
+      test('calls getChecker', () => {
+        assert.isTrue(getCheckerSpy.called);
+        assert.isTrue(getCheckerSpy.calledWith('test-check-id'));
+      });
+
+      function assertCheckerText(text) {
+        const name = element.$$('td:nth-child(1)');
+        assert.equal(name.textContent.trim(), text);
+      }
+
+      suite('on success', () => {
+        setup(done => {
+          resolveGetChecker({description: 'test checker name'});
+          flush(done);
+        });
+
+        test('renders the checker name on success', () => {
+          assertCheckerText('test checker name');
+        });
+      });
+
+      suite('on empty response', () => {
+        setup(done => {
+          resolveGetChecker();
+          flush(done);
+        });
+
+        test('renders the id when there is no description', () => {
+          assertCheckerText('test-check-id');
+        });
+      });
+
+      suite('on error', () => {
+        setup(done => {
+          rejectGetChecker(new Error('broken'));
+          flush(done);
+        });
+
+        test('renders the id when the call fails', () => {
+          assertCheckerText('test-check-id');
+        });
+      });
+    });
+
+    test('renders the status', () => {
+      const status = element.$$('td:nth-child(3) > gr-checks-status');
+      assert.exists(status);
+    });
+
+    test('renders the checking system', () => {
+      const checkingSystem = element.$$('td:nth-child(4)');
+      assert.equal(checkingSystem .textContent.trim(), "Check System");
+    });
+
+    test('renders the run date', () => {
+      const name = element.$$('td:nth-child(5)');
+      assert.equal(name .textContent.trim(), "2/6/2019");
+    });
+
+    suite('duration', () => {
+      test('renders the run duration', () => {
+        const name = element.$$('td:nth-child(6)');
+        assert.equal(name .textContent.trim(), "25 sec");
+      });
+
+      test('renders 0 sec when the start and end time are the same', () => {
+        element.check = {
+          checkId: 'test-check-id',
+          logUrl: 'http://example.com/test-log-url',
+          startTime: "2019-02-06T22:25:19.269Z",
+          finishTime: "2019-02-06T22:25:19.269Z",
+        };
+        const name = element.$$('td:nth-child(6)');
+        assert.equal(name .textContent.trim(), "0 sec");
+      });
+    });
+
+    test('renders a link to the log', () => {
+      const logLink = element.$$('td:nth-child(7) > a');
+      assert.equal(logLink.getAttribute('href'), "http://example.com/test-log-url");
+      assert.equal(logLink.textContent.trim(), "View log");
+    });
+
+    suite('retryCheck', () => {
+      let retryCheckLink;
+
+      setup(() => {
+        retryCheckLink = element.$$('td:nth-child(7) > gr-button');
+      });
+
+      test('shows a link to the log url', () => {
+        assert.equal(retryCheckLink.textContent.trim(), "Re-run");
+      });
+
+      test('clicking on the link calls the retryCheck property', () => {
+        assert.isFalse(retryCheckSpy.called);
+        retryCheckLink.click();
+        assert.isTrue(retryCheckSpy.called);
+      });
+    });
+  });
+</script>
diff --git a/gr-checks/build-result-status.html b/gr-checks/gr-checks-status.html
similarity index 92%
rename from gr-checks/build-result-status.html
rename to gr-checks/gr-checks-status.html
index ca39add..ef4a02a 100644
--- a/gr-checks/build-result-status.html
+++ b/gr-checks/gr-checks-status.html
@@ -1,4 +1,4 @@
-<dom-module id="build-result-status">
+<dom-module id="gr-checks-status">
   <template>
       <style>
         :host {
@@ -62,6 +62,6 @@
       </template>
     </span>
   </template>
-  <script src="all-statuses.js"></script>
-  <script src="build-result-status.js"></script>
+  <script src="gr-checks-all-statuses.js"></script>
+  <script src="gr-checks-status.js"></script>
 </dom-module>
diff --git a/gr-checks/gr-checks-status.js b/gr-checks/gr-checks-status.js
new file mode 100644
index 0000000..e187b20
--- /dev/null
+++ b/gr-checks/gr-checks-status.js
@@ -0,0 +1,37 @@
+(function() {
+'use strict';
+
+Polymer({
+  is: 'gr-checks-status',
+
+  properties: {
+    showText: {
+      type: Boolean,
+      value: false,
+      reflectToAttribute: true,
+    },
+    status: String,
+    _className: {type: String, computed: '_computeClassName(status)'},
+  },
+
+  _isUnevaluated(status) {
+    return window.Gerrit.Checks.isUnevaluated(status);
+  },
+
+  _isInProgress(status) {
+    return window.Gerrit.Checks.isInProgress(status);
+  },
+
+  _isSuccessful(status) {
+    return window.Gerrit.Checks.isSuccessful(status);
+  },
+
+  _isFailed(status) {
+    return window.Gerrit.Checks.isFailed(status);
+  },
+
+  _computeClassName(status) {
+    return window.Gerrit.Checks.statusClass(status);
+  },
+});
+})();
diff --git a/gr-checks/build-result-status_test.html b/gr-checks/gr-checks-status_test.html
similarity index 88%
rename from gr-checks/build-result-status_test.html
rename to gr-checks/gr-checks-status_test.html
index 6592e85..19957a3 100644
--- a/gr-checks/build-result-status_test.html
+++ b/gr-checks/gr-checks-status_test.html
@@ -4,17 +4,17 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>build-result-item</title>
-<link rel="import" href="webcomponent_lib/build-result-status.html">
+<title>gr-checks-item</title>
+<link rel="import" href="webcomponent_lib/gr-checks-status.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <build-result-status show-text="{{showText}}" status="{{status}}"></build-result-status>
+    <gr-checks-status show-text="{{showText}}" status="{{status}}"></gr-checks-status>
   </template>
 </test-fixture>
 
 <script>
-  suite('build-result-status tests', () => {
+  suite('gr-checks-status tests', () => {
     let element;
     let sandbox;
 
diff --git a/gr-checks/build-results-view.html b/gr-checks/gr-checks-view.html
similarity index 72%
rename from gr-checks/build-results-view.html
rename to gr-checks/gr-checks-view.html
index 9f30421..5f1b94e 100644
--- a/gr-checks/build-results-view.html
+++ b/gr-checks/gr-checks-view.html
@@ -1,4 +1,4 @@
-<dom-module id="build-results-view">
+<dom-module id="gr-checks-view">
   <template>
     <style>
       :host {
@@ -10,7 +10,7 @@
         width: 100%;
       }
 
-      build-result-item {
+      gr-checks-item {
         display: table-row;
       }
 
@@ -69,26 +69,26 @@
     <template is="dom-if" if="[[_isEmpty(_status)]]">
       <div class="no-content">
         <h2>No checks ran for this code review</h2>
-        <p>Configure code review checks to view the results here.</p>
-        <build-results-configure-link configure-path="[[configurePath]]">
-        </build-results-configure-link>
+        <p>Configure checkers to view the results here.</p>
+        <gr-checks-configure-link configure-path="[[configurePath]]">
+        </gr-checks-configure-link>
       </div>
     </template>
 
     <template is="dom-if" if="[[_isNotConfigured(_status)]]">
       <div class="no-content">
         <h2>Code review checks not configured</h2>
-        <p>Configure code review checks to view the results here.</p>
-        <build-results-configure-link configure-path="[[configurePath]]">
-        </build-results-configure-link>
+        <p>Configure checkers to view the results here.</p>
+        <gr-checks-configure-link configure-path="[[configurePath]]">
+        </gr-checks-configure-link>
       </div>
     </template>
 
     <template is="dom-if" if="[[_hasResults(_status)]]">
       <header>
         <h3>Latest checks for Patchset [[revision._number]]</h3>
-        <build-results-configure-link configure-path="[[configurePath]]">
-        </build-results-configure-link>
+        <gr-checks-configure-link configure-path="[[configurePath]]">
+        </gr-checks-configure-link>
       </header>
 
       <table>
@@ -104,13 +104,13 @@
           </tr>
         </thead>
         <tbody>
-          <template is="dom-repeat" items="[[_buildResults]]" as="build">
-            <build-result-item build="[[build]]" retry-build="[[retryBuild]]" get-trigger="[[getTrigger]]"></build-result-item>
+          <template is="dom-repeat" items="[[_checks]]" as="check">
+            <gr-checks-item check="[[check]]" retry-check="[[retryCheck]]" get-checker="[[getChecker]]"></gr-checks-item>
           </template>
         </tbody>
       </table>
     </template>
   </template>
 
-  <script src="build-results-view.js"></script>
+  <script src="gr-checks-view.js"></script>
 </dom-module>
diff --git a/gr-checks/build-results-view.js b/gr-checks/gr-checks-view.js
similarity index 74%
rename from gr-checks/build-results-view.js
rename to gr-checks/gr-checks-view.js
index ca51876..3f53f61 100644
--- a/gr-checks/build-results-view.js
+++ b/gr-checks/gr-checks-view.js
@@ -27,27 +27,27 @@
 };
 
 Polymer({
-  is: 'build-results-view',
+  is: 'gr-checks-view',
 
   properties: {
     revision: Object,
     change: Object,
-    // TODO(brohlfs): Implement getBuildResults based on Checks Rest API.
+    // TODO(brohlfs): Implement getChecks based on Checks Rest API.
     /** @type {function(string, (string|undefined)): !Promise<!Object>} */
-    getBuildResults: Function,
+    getChecks: Function,
     // TODO(brohlfs): Implement isConfigured based on Checks Rest API.
     /** @type {function(string): !Promise<!Object>} */
     isConfigured: Function,
-    // TODO(brohlfs): Implement getTrigger based on Checks Rest API.
+    // TODO(brohlfs): Implement getChecker based on Checks Rest API.
     /** @type {function(string, string): !Promise<!Object>} */
-    getTrigger: Function,
-    // TODO(brohlfs): Implement retryBuild based on Checks Rest API.
+    getChecker: Function,
+    // TODO(brohlfs): Implement retryCheck based on Checks Rest API.
     /** @type {function(string, string): !Promise<!Object>} */
-    retryBuild: Function,
+    retryCheck: Function,
     // TODO(brohlfs): Implement configurePath based on Checks Rest API.
-    // The url path to configure code review triggers.
+    // The url path to configure checkers.
     configurePath: String,
-    _buildResults: Object,
+    _checks: Object,
     _status: {
       type: Object,
       value: LoadingStatus.LOADING,
@@ -55,22 +55,22 @@
   },
 
   observers: [
-    '_fetchBuildResults(change, revision, getBuildResults)',
+    '_fetchChecks(change, revision, getChecks)',
   ],
 
   /**
    * @param {!Defs.Change} change The current CL.
    * @param {!Object} revision The current patchset.
    * @param {function(string, (string|undefined)): !Promise<!Object>}
-   *     getBuildResults function to get build results.
+   *     getChecks function to get checks.
    */
-  _fetchBuildResults(change, revision, getBuildResults) {
+  _fetchChecks(change, revision, getChecks) {
     const repository = change['project'];
     const gitSha = currentRevisionSha(change, revision);
 
-    getBuildResults(repository, gitSha).then(buildResults => {
-      if (buildResults && buildResults.length) {
-        this.set('_buildResults', buildResults);
+    getChecks(repository, gitSha).then(checks => {
+      if (checks && checks.length) {
+        this.set('_checks', checks);
         this.set('_status', LoadingStatus.RESULTS);
       } else {
         this._checkConfigured();
diff --git a/gr-checks/build-results-view_test.html b/gr-checks/gr-checks-view_test.html
similarity index 62%
rename from gr-checks/build-results-view_test.html
rename to gr-checks/gr-checks-view_test.html
index 79851a0..6affa9c 100644
--- a/gr-checks/build-results-view_test.html
+++ b/gr-checks/gr-checks-view_test.html
@@ -4,26 +4,26 @@
 <script src="webcomponentsjs/webcomponents-lite.js"></script>
 <link rel="import" href="polymer/polymer.html">
 
-<title>build-result-item</title>
-<link rel="import" href="webcomponent_lib/build-results-view.html">
+<title>gr-checks-item</title>
+<link rel="import" href="webcomponent_lib/gr-checks-view.html">
 
 <test-fixture id="basic">
   <template is="dom-template">
-    <build-results-view
+    <gr-checks-view
       change="[[change]]"
       revision="[[revision]]"
       configure-path="[[configurePath]]"
-      get-build-results="[[getBuildResults]]"
+      get-checks="[[getChecks]]"
       is-configured="[[isConfigured]]"
-      get-trigger="[[getTrigger]]"
-      retry-build="[[retryBuild]]">
-    </build-results-view>
+      get-checker="[[getChecker]]"
+      retry-check="[[retryCheck]]">
+    </gr-checks-view>
   </template>
 </test-fixture>
 
 <script>
-  const BUILD1 = {
-    buildTriggerId: 'test-build-trigger-id',
+  const CHECK1 = {
+    checkId: 'test-check-id',
     logUrl: 'http://example.com/test-log-url',
     startTime: "2019-02-06T22:25:19.269Z",
     finishTime: "2019-02-06T22:25:44.574Z",
@@ -44,24 +44,24 @@
   },
 };
 
-suite('build-results-view tests', () => {
+suite('gr-checks-view tests', () => {
   let element;
   let sandbox;
-  let getBuildResultsSpy;
-  let getBuildResultsResolve;
-  let getTriggerSpy;
-  let retryBuildSpy;
+  let getChecksSpy;
+  let getChecksResolve;
+  let getCheckerSpy;
+  let retryCheckSpy;
   let isConfiguredSpy;
   let isConfiguredResolve;
 
   setup((done) => {
     sandbox = sinon.sandbox.create();
 
-    getBuildResultsSpy = sinon.stub();
-    const getBuildResultsPromise = new Promise((resolve, reject) => {
-      getBuildResultsResolve = resolve;
+    getChecksSpy = sinon.stub();
+    const getChecksPromise = new Promise((resolve, reject) => {
+      getChecksResolve = resolve;
     });
-    getBuildResultsSpy.returns(getBuildResultsPromise);
+    getChecksSpy.returns(getChecksPromise);
 
     isConfiguredSpy = sinon.stub();
     const isConfiguredPromise = new Promise((resolve, reject) => {
@@ -69,15 +69,15 @@
     });
     isConfiguredSpy.returns(isConfiguredPromise);
 
-    getTriggerSpy = sinon.stub();
-    getTriggerSpy.returns(Promise.resolve({description: 'test trigger name'}));
-    retryBuildSpy = sinon.stub();
-    retryBuildSpy.returns(Promise.resolve());
+    getCheckerSpy = sinon.stub();
+    getCheckerSpy.returns(Promise.resolve({description: 'test checker name'}));
+    retryCheckSpy = sinon.stub();
+    retryCheckSpy.returns(Promise.resolve());
 
     element = fixture('basic', {
-      getTrigger: getTriggerSpy,
-      retryBuild: retryBuildSpy,
-      getBuildResults: getBuildResultsSpy,
+      getChecker: getCheckerSpy,
+      retryCheck: retryCheckSpy,
+      getChecks: getChecksSpy,
       isConfigured: isConfiguredSpy,
       configurePath: 'http://example.com/test-configure',
       change: {
@@ -98,18 +98,18 @@
     assert.equal(element.textContent.trim(), 'Loading...');
   });
 
-  test('queries the builds', () => {
-    assert.isTrue(getBuildResultsSpy.called);
-    assert.isTrue(getBuildResultsSpy.calledWith('test-repository', 'second-sha'));
+  test('queries the checks', () => {
+    assert.isTrue(getChecksSpy.called);
+    assert.isTrue(getChecksSpy.calledWith('test-repository', 'second-sha'));
   });
 
-  suite('no builds returned', () => {
+  suite('no checks returned', () => {
     setup((done) => {
-      getBuildResultsResolve([]);
+      getChecksResolve([]);
       flush(done);
     });
 
-    test('it calls to check if the builds are configured', () => {
+    test('it calls to check if the checks are configured', () => {
       assert.isTrue(isConfiguredSpy.called);
       assert.isTrue(isConfiguredSpy.calledWith('test-repository'));
     });
@@ -125,8 +125,8 @@
         assert.equal(header.textContent.trim(), 'Code review checks not configured');
       });
 
-      test('renders the link to configure a build', () => {
-        const configureLink = element.$$('build-results-configure-link');
+      test('renders the link to configure a check', () => {
+        const configureLink = element.$$('gr-checks-configure-link');
         assert.exists(configureLink);
       });
     });
@@ -142,20 +142,20 @@
         assert.equal(header.textContent.trim(), 'No checks ran for this code review');
       });
 
-      test('renders the link to configure a build', () => {
-        const configureLink = element.$$('build-results-configure-link');
+      test('renders the link to configure a check', () => {
+        const configureLink = element.$$('gr-checks-configure-link');
         assert.exists(configureLink);
       });
     });
   });
 
-  suite('with build results', () => {
+  suite('with checks', () => {
     setup(done => {
-      getBuildResultsResolve([BUILD1, BUILD1, BUILD1]);
+      getChecksResolve([CHECK1, CHECK1, CHECK1]);
       flush(done);
     });
 
-    test('it calls to check if the builds are configured', () => {
+    test('it calls to check if the checks are configured', () => {
       assert.isFalse(isConfiguredSpy.called);
     });
 
@@ -164,14 +164,14 @@
       assert.equal(header.textContent.trim(), 'Latest checks for Patchset 3');
     });
 
-    test('renders the link to configure a build', () => {
-      const configureLink = element.$$('header > build-results-configure-link');
+    test('renders the link to configure a check', () => {
+      const configureLink = element.$$('header > gr-checks-configure-link');
       assert.exists(configureLink);
     });
 
-    test('renders a table of all the builds', () => {
+    test('renders a table of all the checks', () => {
       const tbody = element.$$('table > tbody');
-      assert.lengthOf(tbody.querySelectorAll('build-result-item'), 3)
+      assert.lengthOf(tbody.querySelectorAll('gr-checks-item'), 3)
     });
   });
 });
diff --git a/gr-checks/gr-checks.html b/gr-checks/gr-checks.html
new file mode 100644
index 0000000..4efdf97
--- /dev/null
+++ b/gr-checks/gr-checks.html
@@ -0,0 +1,28 @@
+<link rel="import" href="gr-checks-view.html">
+<link rel="import" href="gr-checks-item.html">
+<link rel="import" href="gr-checks-status.html">
+<link rel="import" href="gr-checks-chip-view.html">
+<link rel="import" href="gr-checks-change-list-item-cell-view.html">
+<link rel="import" href="gr-checks-change-list-header-view.html">
+<link rel="import" href="gr-checks-change-view-tab-header-view.html">
+<link rel="import" href="gr-checks-configure-link.html">
+
+<dom-module id="gr-checks">
+  <script>
+    Gerrit.install(plugin => {
+      plugin.registerDynamicCustomComponent(
+          'change-list-header',
+          'gr-checks-change-list-header-view');
+      plugin.registerDynamicCustomComponent(
+          'change-list-item-cell',
+          'gr-checks-change-list-item-cell-view');
+      plugin.registerDynamicCustomComponent(
+          'change-view-tab-header',
+          'gr-checks-change-view-tab-header-view');
+      plugin.registerDynamicCustomComponent(
+          'change-view-tab-content',
+          'gr-checks-view').onAttached(
+          view => console.log('gr-checks-view attached'));
+    });
+  </script>
+</dom-module>