blob: a70ebeda056a2875cf90f2847672100df318e6d8 [file] [log] [blame] [edit]
<!DOCTYPE html>
<!--
Copyright 2018 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.
-->
<link rel="import" href="/components/iron-ajax/iron-ajax.html">
<link rel="import" href="/components/paper-spinner/paper-spinner.html">
<dom-module id="results2-frame">
<template>
<style>
iframe {
border: 0;
height: 50em;
width: 100%;
}
</style>
<iron-ajax auto id="ajax" url="/api/results2/[[jobId]]" last-response="{{status}}"></iron-ajax>
<template is="dom-if" if="[[getJobIncomplete(status)]]">
<p>Waiting for job to complete...</p>
</template>
<template is="dom-if" if="[[getStarted(status)]]">
<p>Generating Results2....</p>
<paper-spinner></paper-spinner>
</template>
<template is="dom-if" if="[[getFailed(status)]]">
<p>Generating the Results2 file failed.</p>
</template>
<template is="dom-if" if="[[getComplete(status)]]">
<template is="dom-if" if="[[getTooOldForM80(status)]]">
<p><b>WARNING:</b>
Results generated before Nov 14, 2019 do not render in Chrome M80 or
newer. See
<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1021137"
>crbug.com/1021137</a>.</p>
</template>
<iframe src="[[getStatusURL(status)]]"></iframe>
</template>
</template>
<script>
'use strict';
Polymer({
is: 'results2-frame',
properties: {
jobId: {
type: Object,
},
status: {
type: Object,
observer: '_statusChanged',
},
},
getStatusURL(status) {
if (!status || !status.url) {
return 'about:blank';
}
return status.url;
},
getStarted(status) {
return this.status.status == 'pending';
},
getFailed(status) {
return this.status.status == 'failed';
},
getJobIncomplete(status) {
return this.status.status == 'job-incomplete';
},
getComplete(status) {
return this.status.status == 'complete';
},
getTooOldForM80(status) {
// Results2 pages generated before this date depend on features removed
// in M80.
return new Date(this.status.updated + 'Z') <
new Date('2019-11-14T00:00:00Z');
},
_statusChanged() {
const visible = !!(this.offsetWidth ||
this.offsetHeight ||
this.getClientRects().length);
if (!this.getComplete(this.status) && visible) {
this.async(() => this.$.ajax.generateRequest(), 5000);
}
},
});
</script>
</dom-module>