blob: 45bce591f479897159f1315b103b37d868a69d73 [file] [log] [blame]
// 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 usb_internals.html, served from chrome://usb-internals/.
*/
cr.define('usb_internals', function() {
class UsbInternals {
constructor() {}
async initializeViews() {
// window.setupFn() provides a hook for the test suite to perform setup
// actions after the page is loaded but before any script is run.
await window.setupFn();
const pageHandler = mojom.UsbInternalsPageHandler.getRemote();
// Connection to the UsbInternalsPageHandler instance running in the
// browser process.
/** @type {device.mojom.UsbDeviceManagerRemote} */
const usbManager = new device.mojom.UsbDeviceManagerRemote;
await pageHandler.bindUsbDeviceManagerInterface(
usbManager.$.createRequest());
/** @private {devices_page.DevicesPage} */
this.devicesPage_ = new devices_page.DevicesPage(usbManager);
/** @private {device.mojom.UsbDeviceManagerTestRemote} */
this.usbManagerTest_ = new device.mojom.UsbDeviceManagerTestRemote;
await pageHandler.bindTestInterface(
this.usbManagerTest_.$.createRequest());
$('add-test-device-form').addEventListener('submit', (event) => {
this.addTestDevice(event);
});
this.refreshTestDeviceList();
cr.ui.decorate('tabbox', cr.ui.TabBox);
}
async refreshTestDeviceList() {
const response = await this.usbManagerTest_.getTestDevices();
const tableBody = $('test-device-list');
tableBody.innerHTML = '';
const rowTemplate = document.querySelector('#test-device-row');
const td = rowTemplate.content.querySelectorAll('td');
for (const device of response.devices) {
td[0].textContent = device.name;
td[1].textContent = device.serialNumber;
td[2].textContent = device.landingPage.url;
const clone = document.importNode(rowTemplate.content, true);
const removeButton = clone.querySelector('button');
removeButton.addEventListener('click', async () => {
await this.usbManagerTest_.removeDeviceForTesting(device.guid);
this.refreshTestDeviceList();
});
tableBody.appendChild(clone);
}
}
async addTestDevice(event) {
event.preventDefault();
const response = await this.usbManagerTest_.addDeviceForTesting(
$('test-device-name').value, $('test-device-serial').value,
$('test-device-landing-page').value);
if (response.success) {
this.refreshTestDeviceList();
}
$('add-test-device-result').textContent = response.message;
$('add-test-device-result').className =
response.success ? 'action-success' : 'action-failure';
}
}
return {
UsbInternals,
};
});
window.setupFn = window.setupFn || function() {
return Promise.resolve();
};
document.addEventListener('DOMContentLoaded', () => {
const usbInternalsPage = new usb_internals.UsbInternals();
usbInternalsPage.initializeViews();
});