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

Unified Diff: chrome/browser/resources/bluetooth_internals/adapter_broker.js

Issue 2446823002: bluetooth: Componentize device list in chrome://bluetooth-internals. (Closed)
Patch Set: Change innerText to textContent in device table Created 4 years, 1 month 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: chrome/browser/resources/bluetooth_internals/adapter_broker.js
diff --git a/chrome/browser/resources/bluetooth_internals/adapter_broker.js b/chrome/browser/resources/bluetooth_internals/adapter_broker.js
new file mode 100644
index 0000000000000000000000000000000000000000..c17c89fe2a4806ce63a0155d4f5fba024ef10c33
--- /dev/null
+++ b/chrome/browser/resources/bluetooth_internals/adapter_broker.js
@@ -0,0 +1,149 @@
+// 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.
+
+/**
+ * Javascript for AdapterBroker, served from
+ * chrome://bluetooth-internals/.
+ */
+cr.define('adapter_broker', function() {
+ /**
+ * The proxy class of an adapter and router of adapter events.
+ * Exposes an EventTarget interface that allows other object to subscribe to
+ * to specific AdapterClient events.
+ * Provides proxy access to Adapter functions. Converts parameters to Mojo
+ * handles and back when necessary.
+ * @constructor
+ * @extends {cr.EventTarget}
+ * @param {!interfaces.BluetoothAdapter.Adapter.proxyClass} adapter
+ */
+ var AdapterBroker = function(adapter) {
+ this.adapter_ = adapter;
+ this.adapterClient_ = new AdapterClient(this);
+ this.setClient(this.adapterClient_);
+ };
+
+ AdapterBroker.prototype = {
+ __proto__: cr.EventTarget.prototype,
+
+ /**
+ * Sets client of Adapter service.
+ * @param {interfaces.BluetoothAdapter.AdapterClient} adapterClient
+ */
+ setClient: function(adapterClient) {
+ this.adapter_.setClient(interfaces.Connection.bindStubDerivedImpl(
+ adapterClient));
+ },
+
+ /**
+ * Gets an array of currently detectable devices from the Adapter service.
+ * @return {Array<interfaces.BluetoothDevice.DeviceInfo>}
Dan Beam 2016/11/09 18:00:32 can we add more !, i.e. !Array<!interfaces.Bluetoo
mbrunson 2016/11/10 01:02:13 Done.
+ */
+ getDevices: function() {
+ return this.adapter_.getDevices();
+ },
+
+ /**
+ * Gets the current state of the Adapter.
+ * @return {interfaces.BluetoothAdapter.AdapterInfo}
Dan Beam 2016/11/09 18:00:32 can you use ? or !
mbrunson 2016/11/10 01:02:13 Done.
+ */
+ getInfo: function() {
+ return this.adapter_.getInfo();
+ }
+ };
+
+ /**
+ * The implementation of AdapterClient in
+ * device/bluetooth/public/interfaces/adapter.mojom. Dispatches events
+ * through AdapterBroker to notify client objects of changes to the Adapter
+ * service.
+ * @constructor
+ * @param {!AdapterBroker} adapterBroker Broker to dispatch events through.
+ */
+ var AdapterClient = function(adapterBroker) {
+ this.adapterBroker_ = adapterBroker;
+ };
+
+ AdapterClient.prototype = {
+ /**
+ * Fires deviceadded event.
+ * @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo
+ */
+ deviceAdded: function(deviceInfo) {
+ var event = new CustomEvent('deviceadded', {
+ detail: {
Dan Beam 2016/11/09 18:00:31 don't you want just new CustomEvent('deviceadded',
mbrunson 2016/11/10 01:02:13 CustomEvent spec [1] requires second parameter dic
+ deviceInfo: deviceInfo
+ }
+ });
+ this.adapterBroker_.dispatchEvent(event);
+ },
+
+ /**
+ * Fires deviceremoved event.
+ * @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo
+ */
+ deviceRemoved: function(deviceInfo) {
+ var event = new CustomEvent('deviceremoved', {
+ detail: {
+ deviceInfo: deviceInfo
+ }
+ });
+ this.adapterBroker_.dispatchEvent(event);
+ },
+
+ /**
+ * Fires devicechanged event.
+ * @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo
+ */
+ deviceChanged: function(deviceInfo) {
+ var event = new CustomEvent('devicechanged', {
+ detail: {
+ deviceInfo: deviceInfo
+ }
+ });
+ this.adapterBroker_.dispatchEvent(event);
+ }
+ };
+
+ var adapterBroker = null;
+
+ /**
+ * Initializes an AdapterBroker if one doesn't exist.
+ * @return {Promise<AdapterBroker>} resolves with AdapterBroker,
+ * rejects if Bluetooth is not supported.
+ */
+ function getAdapterBroker() {
+ if (adapterBroker) {
+ return Promise.resolve(adapterBroker);
+ }
Dan Beam 2016/11/09 18:00:32 no curlies
mbrunson 2016/11/10 01:02:13 Done.
+
+ return interfaces.importInterfaces().then(function(adapter) {
Dan Beam 2016/11/09 18:00:32 can we call this like setupInterfaces()?
mbrunson 2016/11/10 01:02:13 Done.
+ // Hook up the instance properties.
+ AdapterClient.prototype.__proto__ =
Dan Beam 2016/11/09 18:00:32 why is this necessary?
mbrunson 2016/11/10 01:02:13 The Mojo connection libraries [1] require client i
+ interfaces.BluetoothAdapter.AdapterClient.stubClass.prototype;
+
+ var adapterFactory = interfaces.Connection.bindHandleToProxy(
+ interfaces.FrameInterfaces.getInterface(
+ interfaces.BluetoothAdapter.AdapterFactory.name),
+ interfaces.BluetoothAdapter.AdapterFactory);
+
+ // Get an Adapter service.
+ return adapterFactory.getAdapter();
+ }).then(function(response) {
+ if (!response.adapter) {
+ throw new Error('Bluetooth Not Supported on this platform.');
+ }
Dan Beam 2016/11/09 18:00:32 no curlies
mbrunson 2016/11/10 01:02:13 This doesn't fit on one line. https://engdoc.corp
Dan Beam 2016/11/10 03:22:54 yeah, that doc deals with ES6 (we're using ES5 in
+
+ var adapter = interfaces.Connection.bindHandleToProxy(
+ response.adapter,
+ interfaces.BluetoothAdapter.Adapter);
+
+ adapterBroker = new AdapterBroker(adapter);
+ return adapterBroker;
+ });
+ }
+
+ return {
+ getAdapterBroker: getAdapterBroker,
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698