Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1693)

Unified Diff: server/static/rpc/rpc-call.html

Issue 1695893004: RPC Explorer (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@rpcepxlorer-deps
Patch Set: 80 chars Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: server/static/rpc/rpc-call.html
diff --git a/server/static/rpc/rpc-call.html b/server/static/rpc/rpc-call.html
new file mode 100644
index 0000000000000000000000000000000000000000..240703047f58cbe908710b77baeee26ed2d1ae68
--- /dev/null
+++ b/server/static/rpc/rpc-call.html
@@ -0,0 +1,235 @@
+<!--
+ 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/iron-ajax/iron-request.html">
+
+<!--
+ The `rpc-call` is a single RPC call. Produced by <rpc-client>.
+-->
+<dom-module id="rpc-client">
+ <script>
+ 'use strict';
+
+ Polymer({
+ is: 'rpc-call',
+
+ 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,
+ readOnly: true
+ },
+
+ /**
+ * pRPC server host, defaults to current document host.
+ */
+ host: {
+ type: String,
+ readOnly: true
+ },
+
+ /**
+ * Full service name, including package name.
+ */
+ service: {
+ type: String,
+ readOnly: true
+ },
+
+ /**
+ * Service method name.
+ */
+ method: {
+ type: String,
+ readOnly: true
+ },
+
+ /**
+ * Request object.
+ */
+ request: {
+ type: Object,
+ readOnly: true
+ },
+
+ /**
+ * Request timeout in milliseconds.
+ */
+ timeout: {
+ type: Number,
+ readOnly: true
+ },
+
+ /**
+ * A promise that resolves when the response comes back, or rejects
+ * if there is an error.
+ *
+ * @type {Promise}
+ */
+ completes: {
+ type: Object,
+ readOnly: true,
+ notify: true,
+ value: function() {
+ return new Promise(function(resolve, reject) {
+ this._resolveCompletes = resolve;
+ this._rejectCompletes = reject;
+ }.bind(this));
+ }
+ },
+
+ /**
+ * Response object.
+ */
+ response: {
+ type: Object,
+ notify: true,
+ readOnly: true
+ },
+
+ /**
+ * Response code.
+ * @type {luci.rpc.Code}
+ */
+ code: {
+ type: Number,
+ readOnly: true,
+ },
+
+ /**
+ * Response error
+ * @type {Error|luci.rpc.GrpcError}
+ */
+ error: {
+ type: Object,
+ notify: true,
+ readOnly: true
+ },
+
+ _ironRequest: Object
+ },
+
+ _generateUrl: function() {
+ var insecure = this.insecure;
+ var host = this.host;
+ var service = this.service;
+ var method = this.method;
+
+ if (!host) {
+ throw Error('no host');
+ }
+ if (!service) {
+ throw Error('no service');
+ }
+ if (!method) {
+ throw Error('no method');
+ }
+
+ if (!host || !service || !method) {
+ return '';
+ }
+
+ var protocol = 'https:';
+ if (insecure === true) {
+ protocol = 'http:';
+ } else if (insecure == null && host === document.location.host) {
+ protocol = document.location.protocol;
+ }
+
+ return protocol + '//' + host + '/prpc/' + service + '/' + method;
+ },
+
+ toRequestOptions: function() {
+ var headers = {};
+ if (this.request != null) {
+ headers['content-type'] = 'application/json'
+ }
+ if (this.timeout) {
+ headers['x-prpc-timeout'] = this.timeout + 'm';
+ }
+
+ return {
+ url: this._generateUrl(),
+ method: 'POST',
+ headers: headers,
+ body: this.request,
+ handleAs: 'json',
+ jsonPrefix: ')]}\'',
+ timeout: this.timeout
+ };
+ },
+
+ send: function(options) {
+ if (this.xhr) {
+ throw Error('Already sent');
+ }
+
+ this._setInsecure(options.insecure);
+ this._setHost(options.host);
+ this._setService(options.service);
+ this._setMethod(options.method);
+ this._setRequest(options.request);
+ this._setTimeout(options.timeout);
+
+ this._ironRequest = document.createElement('iron-request');
+ this._ironRequest.send(this.toRequestOptions());
+ this.xhr = this._ironRequest.xhr;
+ this._ironRequest.completes
+ .then(this._done.bind(this, null))
+ .catch(this._done.bind(this));
+ },
+
+ _done: function(error) {
+ try {
+ if (error && typeof this.xhr.status !== 'number') {
+ // We didn't receive the response.
+ throw error;
+ }
+
+ var codeHeader = this.xhr.getResponseHeader('X-Prpc-Grpc-Code');
+ if (!codeHeader) {
+ throw Error(
+ 'Invalid response: no X-Prpc-Grpc-Code response header');
+ }
+
+ try {
+ this._setCode(parseInt(codeHeader, 10));
+ if (this.code == null || isNaN(this.code)) {
+ throw Error('code is not defined');
+ }
+ } catch (e) {
+ throw Error(
+ 'Invalid X-Prpc-Grpc-Code response header "' + codeHeader +
+ '": ' + e
+ );
+ }
+
+ if (this.code !== luci.rpc.Code.OK) {
+ throw new luci.rpc.GrpcError(this.code, this.xhr.responseText);
+ }
+
+ if (this._ironRequest.response == null) {
+ throw Error('could not parse response');
+ }
+
+ this._setResponse(this._ironRequest.response);
+ this._setError(null);
+ this._resolveCompletes(this);
+ } catch (e) {
+ this._setResponse(null);
+ this._setError(e);
+ this._rejectCompletes(e);
+ }
+ }
+ });
+ </script>
+</dom-module>
« no previous file with comments | « server/static/bower_components/html5-history-anchor/src/html5-history-anchor.js ('k') | server/static/rpc/rpc-client.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698