| Index: server/static/rpc/rpc-client.html
|
| diff --git a/server/static/rpc/rpc-client.html b/server/static/rpc/rpc-client.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..488360a16b18894d09eae6e5d513e371172744fb
|
| --- /dev/null
|
| +++ b/server/static/rpc/rpc-client.html
|
| @@ -0,0 +1,224 @@
|
| +<!--
|
| + Copyright 2016 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="../bower_components/polymer/polymer.html">
|
| +
|
| +<link rel="import" href="rpc-code.html">
|
| +<link rel="import" href="rpc-error.html">
|
| +<link rel="import" href="rpc-call.html">
|
| +
|
| +<!--
|
| + The `rpc-client` element can send a RPC request.
|
| + Supports pRPC.
|
| + Protocol: https://godoc.org/github.com/luci/luci-go/common/prpc#hdr-Protocol
|
| +-->
|
| +<dom-module id="rpc-client">
|
| + <script>
|
| + 'use strict';
|
| +
|
| + Polymer({
|
| + is: 'rpc-client',
|
| +
|
| + properties: {
|
| + /**
|
| + * If true, use HTTP instead of HTTPS.
|
| + * If null or undefined (default), determined automatically:
|
| + * - If host equals current host and current protocol is http, then
|
| + * false.
|
| + * - otherwise true.
|
| + */
|
| + insecure: {
|
| + type: Boolean,
|
| + value: null
|
| + },
|
| +
|
| + /**
|
| + * pRPC server host, defaults to current document host.
|
| + */
|
| + host: {
|
| + type: String,
|
| + value: document.location.host,
|
| + },
|
| +
|
| + /**
|
| + * Full service name, including package name.
|
| + */
|
| + service: String,
|
| +
|
| + /**
|
| + * Service method name.
|
| + */
|
| + method: String,
|
| +
|
| + /**
|
| + * Request object.
|
| + */
|
| + request: {
|
| + type: Object,
|
| + value: function() {
|
| + return {};
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Request timeout in milliseconds.
|
| + */
|
| + timeout: {
|
| + type: Number,
|
| + value: 0,
|
| + },
|
| +
|
| + /**
|
| + * If true, automatically sends a request when host, service, method
|
| + * or request changes.
|
| + */
|
| + auto: {
|
| + type: Boolean,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * If true, error messages will automatically be logged to the console.
|
| + */
|
| + verbose: {
|
| + type: Boolean,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * The most recent call made by this client.
|
| + */
|
| + lastCall: {
|
| + type: Object,
|
| + notify: true,
|
| + readOnly: true
|
| + },
|
| +
|
| + /**
|
| + * True while lastCall is in flight.
|
| + */
|
| + loading: {
|
| + type: Boolean,
|
| + notify: true,
|
| + readOnly: true,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * lastCall's response.
|
| + *
|
| + * Note that lastResponse, lastCode and lastError are set when
|
| + * lastCall finishes, so if loading is true, they will correspond to the
|
| + * result of the previous request.
|
| + */
|
| + lastResponse: {
|
| + type: Object,
|
| + notify: true,
|
| + readOnly: true
|
| + },
|
| +
|
| + /**
|
| + * lastCall's response code.
|
| + */
|
| + lastCode: {
|
| + type: Number,
|
| + notify: true,
|
| + readOnly: true
|
| + },
|
| +
|
| + /**
|
| + * lastCall's error, if any.
|
| + * May be an instance of luci.rpc.GrpcError which has response code
|
| + * and description.
|
| + */
|
| + lastError: {
|
| + type: Number,
|
| + notify: true,
|
| + readOnly: true
|
| + },
|
| +
|
| + /**
|
| + * Length of time in milliseconds to debounce multiple automatically
|
| + * generated requests.
|
| + */
|
| + debounceDuration: {
|
| + type: Number,
|
| + value: 0,
|
| + notify: true
|
| + }
|
| + },
|
| +
|
| + observers: [
|
| + '_callOptionsChanged(host, service, method, request.*, auto)'
|
| + ],
|
| +
|
| + _canCall: function () {
|
| + return this.host && this.service && this.method;
|
| + },
|
| +
|
| + _callOptionsChanged: function() {
|
| + this.debounce('call', function() {
|
| + if (this.auto && this._canCall()) {
|
| + this.call();
|
| + }
|
| + }, this.debounceDuration);
|
| + },
|
| +
|
| + /**
|
| + * Send an RPC request.
|
| + * @return {!RpcCallElement}
|
| + */
|
| + call: function() {
|
| + var call = document.createElement('rpc-call');
|
| + call.send({
|
| + insecure: this.insecure,
|
| + host: this.host,
|
| + service: this.service,
|
| + method: this.method,
|
| + request: this.request,
|
| + timeout: this.timeout
|
| + });
|
| + this._setLastCall(call);
|
| +
|
| + call.completes.then(
|
| + this._onResponse.bind(this)
|
| + ).catch(
|
| + this._onError.bind(this, call)
|
| + );
|
| +
|
| + this._setLoading(true);
|
| + this.fire('request', {call: call}, {bubbles: false});
|
| + return call;
|
| + },
|
| +
|
| + _onError: function(call, error) {
|
| + this._onCallComplete(call);
|
| + if (this.verbose) {
|
| + console.error(error);
|
| + }
|
| + this.fire('error', {
|
| + call: call,
|
| + error: error
|
| + }, {bubbles: false});
|
| + },
|
| +
|
| + _onResponse: function(call) {
|
| + this._onCallComplete(call);
|
| + this.fire('response', {call: call}, {bubbles: false});
|
| + },
|
| +
|
| + _onCallComplete: function(call) {
|
| + if (call === this.lastCall) {
|
| + this._setLastError(call.error);
|
| + this._setLastResponse(call.response);
|
| + this._setLastCode(call.code);
|
| + this._setLoading(false);
|
| + }
|
| + }
|
| +
|
| + });
|
| + </script>
|
| +</dom-module>
|
|
|