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

Side by Side Diff: remoting/webapp/crd/js/host_list_api_gcd_impl.js

Issue 1161813006: Updated handling of GCD devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: oops--ignore Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « remoting/webapp/crd/js/host_list_api.js ('k') | remoting/webapp/crd/js/host_list_api_impl.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * REST API for host-list management.
8 */
9
10 /** @suppress {duplicate} */
11 var remoting = remoting || {};
12
13 (function() {
14
15 'use strict';
16
17 /**
18 * @constructor
19 * @implements {remoting.HostListApi}
20 */
21 remoting.HostListApiGcdImpl = function() {
22 this.gcd_ = new remoting.gcd.Client({
23 apiKey: remoting.settings.GOOGLE_API_KEY
24 });
25 };
26
27 /** @override */
28 remoting.HostListApiGcdImpl.prototype.register = function(
29 newHostId, hostName, publicKey, hostClientId) {
30 var self = this;
31 var deviceDraft = {
32 channel: {
33 supportedType: 'xmpp'
34 },
35 deviceKind: 'vendor',
36 name: newHostId,
37 displayName: hostName,
38 state: {
39 'publicKey': publicKey
40 }
41 };
42
43 return /** @type {!Promise<remoting.HostListApi.RegisterResult>} */ (
44 this.gcd_.insertRegistrationTicket().
45 then(function(ticket) {
46 return self.gcd_.patchRegistrationTicket(
47 ticket.id, deviceDraft, hostClientId);
48 }).
49 then(function(/**remoting.gcd.RegistrationTicket*/ ticket) {
50 return self.gcd_.finalizeRegistrationTicket(ticket.id);
51 }).
52 then(function(/**remoting.gcd.RegistrationTicket*/ ticket) {
53 return {
54 authCode: ticket.robotAccountAuthorizationCode,
55 email: ticket.robotAccountEmail,
56 gcdId: ticket.deviceId
57 };
58 }).
59 catch(function(error) {
60 console.error('Error registering device with GCD: ' + error);
61 throw new remoting.Error(remoting.Error.Tag.REGISTRATION_FAILED);
62 }));
63 };
64
65 /** @override */
66 remoting.HostListApiGcdImpl.prototype.get = function() {
67 return this.gcd_.listDevices().
68 then(function(devices) {
69 var hosts = [];
70 devices.forEach(function(device) {
71 try {
72 hosts.push(deviceToHost(device));
73 } catch (/** @type {*} */ error) {
74 console.warn('Invalid device spec:', error);
75 }
76 });
77 return hosts;
78 });
79 };
80
81 /** @override */
82 remoting.HostListApiGcdImpl.prototype.put =
83 function(hostId, hostName, hostPublicKey) {
84 // TODO(jrw)
85 throw new Error('Not implemented');
86 };
87
88 /** @override */
89 remoting.HostListApiGcdImpl.prototype.remove = function(hostId) {
90 var that = this;
91 return this.gcd_.listDevices(hostId).then(function(devices) {
92 var gcdId = null;
93 for (var i = 0; i < devices.length; i++) {
94 var device = devices[i];
95 // The "name" field in GCD holds what Chromoting considers to be
96 // the host ID.
97 if (device.name == hostId) {
98 gcdId = device.id;
99 }
100 }
101 if (gcdId == null) {
102 return false;
103 } else {
104 return that.gcd_.deleteDevice(gcdId);
105 }
106 });
107 };
108
109 /** @override */
110 remoting.HostListApiGcdImpl.prototype.getSupportHost = function(supportId) {
111 console.error('getSupportHost not supported by HostListApiGclImpl');
112 return Promise.reject(remoting.Error.unexpected());
113 };
114
115 /**
116 * Converts a GCD device description to a Host object.
117 * @param {!Object} device
118 * @return {!remoting.Host}
119 */
120 function deviceToHost(device) {
121 var statusMap = {
122 'online': 'ONLINE',
123 'offline': 'OFFLINE'
124 };
125 var hostId = base.getStringAttr(device, 'name');
126 var host = new remoting.Host(hostId);
127 host.hostName = base.getStringAttr(device, 'displayName');
128 host.status = base.getStringAttr(
129 statusMap, base.getStringAttr(device, 'connectionStatus'));
130 var state = base.getObjectAttr(device, 'state', {});
131 host.publicKey = base.getStringAttr(state, 'publicKey');
132 host.jabberId = base.getStringAttr(state, 'jabberId', '');
133 host.hostVersion = base.getStringAttr(state, 'hostVersion', '');
134 var creationTimeMs = base.getNumberAttr(device, 'creationTimeMs', 0);
135 if (creationTimeMs) {
136 host.createdTime = new Date(creationTimeMs).toISOString();
137 }
138 var lastUpdateTimeMs = base.getNumberAttr(device, 'lastUpdateTimeMs', 0);
139 if (lastUpdateTimeMs) {
140 host.updatedTime = new Date(lastUpdateTimeMs).toISOString();
141 }
142 return host;
143 };
144
145 })();
OLDNEW
« no previous file with comments | « remoting/webapp/crd/js/host_list_api.js ('k') | remoting/webapp/crd/js/host_list_api_impl.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698