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

Side by Side Diff: chrome/browser/resources/bluetooth_internals/interfaces.js

Issue 2446823002: bluetooth: Componentize device list in chrome://bluetooth-internals. (Closed)
Patch Set: Separate device.js and bluetooth_internals.js 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 * Javascript for Mojo interface helpers, served from
7 * chrome://bluetooth-internals/.
8 */
9
10 cr.define('interfaces', function() {
11
12
13 /**
14 * TODO(crbug.com/652361): Move to shared location.
15 * Helper to convert callback-based define() API to a promise-based API.
16 * @param {!Array<string>} moduleNames
17 * @return {!Promise}
18 */
19 function importModules(moduleNames) {
20 return new Promise(function(resolve, reject) {
21 define(moduleNames, function(var_args) {
22 resolve(Array.prototype.slice.call(arguments, 0));
23 });
24 });
25 }
26
27 /**
28 * Initializes Mojo proxies for page and Bluetooth services.
29 * @return {!Promise} resolves if adapter is acquired, rejects if Bluetooth
30 * is not supported.
31 */
32 function initializeProxies() {
33 return importModules([
34 'content/public/renderer/frame_interfaces',
35 'device/bluetooth/public/interfaces/adapter.mojom',
36 'device/bluetooth/public/interfaces/device.mojom',
37 'mojo/public/js/connection',
38 ]).then(function([frameInterfaces, bluetoothAdapter, bluetoothDevice,
39 connection]) {
40 Object.assign(interfaces, {
41 BluetoothAdapter: bluetoothAdapter,
42 BluetoothDevice: bluetoothDevice,
43 Connection: connection,
44 });
45
46 var adapterFactory = connection.bindHandleToProxy(
47 frameInterfaces.getInterface(bluetoothAdapter.AdapterFactory.name),
48 bluetoothAdapter.AdapterFactory);
49
50 // Get an Adapter service.
51 return adapterFactory.getAdapter();
52 }).then(function(response) {
53 if (!response.adapter) {
54 throw new Error('Bluetooth Not Supported on this platform.');
55 }
56
57 adapter = interfaces.Connection.bindHandleToProxy(
58 response.adapter,
59 interfaces.BluetoothAdapter.Adapter);
60
61 Object.assign(interfaces, {
62 DefaultAdapter: adapter,
63 });
64 });
65 }
66
67 var initialized = false;
68 var initializePromise = null;
69
70 function initialize() {
71 if (initialized) {
72 return Promise.resolve();
73 }
74
75 if (initializePromise) {
76 return initializePromise;
77 }
78
79 initializePromise = initializeProxies().then(function() {
80 initialized = true;
81 });
82
83 return initializePromise;
84 }
85
86 return {
87 initialize: initialize,
88 };
89 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698