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

Unified Diff: extensions/test/data/api_test/audio/deprecated_api/test.js

Issue 2688773002: Restrict deprecated parts of audio API usage to whitelisted apps (Closed)
Patch Set: . Created 3 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: extensions/test/data/api_test/audio/deprecated_api/test.js
diff --git a/extensions/test/data/api_test/audio/deprecated_api/test.js b/extensions/test/data/api_test/audio/deprecated_api/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..e665878940cdc89ab634d1cd388555631e62cf99
--- /dev/null
+++ b/extensions/test/data/api_test/audio/deprecated_api/test.js
@@ -0,0 +1,237 @@
+// Copyright 2017 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.
+
+/**
+ * Asserts that device property values match properties in |expectedProperties|.
+ * The method will *not* assert that the device contains *only* properties
+ * specified in expected properties.
+ * @param {Object} expectedProperties Expected device properties.
+ * @param {Object} device Device object to test.
+ */
+function assertDeviceMatches(expectedProperties, device) {
+ Object.keys(expectedProperties).forEach(function(key) {
+ chrome.test.assertEq(expectedProperties[key], device[key],
+ 'Property ' + key + ' of device ' + device.id);
+ });
+}
+
+/**
+ * Verifies that list of devices contains all and only devices from set of
+ * expected devices. If will fail the test if an unexpected device is found.
+ *
+ * @param {Object.<string, Object>} expectedDevices Expected set of test
+ * devices. Maps device ID to device properties.
+ * @param {Array.<Object>} devices List of input devices.
+ */
+function assertDevicesMatch(expectedDevices, devices) {
+ var deviceIds = {};
+ devices.forEach(function(device) {
+ chrome.test.assertFalse(!!deviceIds[device.id],
+ 'Duplicated device id: \'' + device.id + '\'.');
+ deviceIds[device.id] = true;
+ });
+
+ function sortedKeys(obj) {
+ return Object.keys(obj).sort();
+ }
+ chrome.test.assertEq(sortedKeys(expectedDevices), sortedKeys(deviceIds));
+
+ devices.forEach(function(device) {
+ assertDeviceMatches(expectedDevices[device.id], device);
+ });
+}
+
+/**
+ * @param {Array.<Object>} devices List of devices returned by
+ * chrome.audio.getInfo or chrome.audio.getDevices.
+ * @return {Object.<string, Object>} List of devices formatted as map of
+ * expected devices used to assert devices match expectation.
+ */
+function deviceListToExpectedDevicesMap(devices) {
+ var expectedDevicesMap = {};
+ devices.forEach(function(device) {
+ expectedDevicesMap[device.id] = device;
+ });
+ return expectedDevicesMap;
+}
+
+function EventListener(targetEvent) {
+ this.targetEvent = targetEvent;
+ this.listener = this.handleEvent.bind(this);
+ this.targetEvent.addListener(this.listener);
+ this.eventCount = 0;
+}
+
+EventListener.prototype.handleEvent = function() {
+ ++this.eventCount;
+}
+
+EventListener.prototype.reset = function() {
+ this.targetEvent.removeListener(this.listener);
+}
+
+var deviceChangedListener = null;
+
+chrome.test.runTests([
+ // Sets up a listener for audio.onDeviceChanged event -
+ // |verifyDeviceChangedEvents| test will later verify that
+ // onDeviceChanged events have been observed.
+ function startDeviceChangedListener() {
+ deviceChangedListener = new EventListener(chrome.audio.onDeviceChanged);
+ chrome.test.succeed();
+ },
+
+ function getInfoTest() {
+ // Test output devices. Maps device ID -> tested device properties.
+ var kTestOutputDevices = {
+ '30001': {
+ id: '30001',
+ name: 'Jabra Speaker: Jabra Speaker 1'
+ },
+ '30002': {
+ id: '30002',
+ name: 'Jabra Speaker: Jabra Speaker 2'
+ },
+ '30003': {
+ id: '30003',
+ name: 'HDMI output: HDA Intel MID'
+ }
+ };
+
+ // Test input devices. Maps device ID -> tested device properties.
+ var kTestInputDevices = {
+ '40001': {
+ id: '40001',
+ name: 'Jabra Mic: Jabra Mic 1'
+ },
+ '40002': {
+ id: '40002',
+ name: 'Jabra Mic: Jabra Mic 2'
+ },
+ '40003': {
+ id: '40003',
+ name: 'Webcam Mic: Logitech Webcam'
+ }
+ };
+
+ chrome.audio.getInfo(chrome.test.callbackPass(
+ function(outputInfo, inputInfo) {
+ assertDevicesMatch(kTestOutputDevices, outputInfo);
+ assertDevicesMatch(kTestInputDevices, inputInfo);
+ }));
+ },
+
+ function setActiveDevicesTest() {
+ //Test output devices. Maps device ID -> tested device properties.
+ var kTestDevices = {
+ '30001': {
+ id: '30001',
+ isActive: false
+ },
+ '30002': {
+ id: '30002',
+ isActive: false
+ },
+ '30003': {
+ id: '30003',
+ isActive: true
+ },
+ '40001': {
+ id: '40001',
+ isActive: false
+ },
+ '40002': {
+ id: '40002',
+ isActive: true
+ },
+ '40003': {
+ id: '40003',
+ isActive: false
+ }
+ };
+
+ chrome.audio.setActiveDevices([
+ '30003',
+ '40002'
+ ], chrome.test.callbackPass(function() {
+ chrome.audio.getDevices(chrome.test.callbackPass(function(devices) {
+ assertDevicesMatch(kTestDevices, devices);
+ }));
+ }));
+ },
+
+ function setPropertiesTest() {
+ chrome.audio.getInfo(chrome.test.callbackPass(function(
+ initialOutput, initialInput) {
+ var expectedInput = deviceListToExpectedDevicesMap(initialInput);
+ var expectedOutput = deviceListToExpectedDevicesMap(initialOutput);
+
+ // Update expected input devices with values that should be changed in
+ // test.
+ var updatedInput = expectedInput['40002'];
+ chrome.test.assertFalse(updatedInput.isMuted);
+ chrome.test.assertFalse(updatedInput.gain === 55);
+ updatedInput.isMuted = true;
+ updatedInput.gain = 55;
+
+ // Update expected output devices with values that should be changed in
+ // test.
+ var updatedOutput = expectedOutput['30001'];
+ chrome.test.assertFalse(updatedOutput.volume === 35);
+ updatedOutput.volume = 35;
+
+ chrome.audio.setProperties('30001', {
+ volume: 35
+ }, chrome.test.callbackPass(function() {
+ chrome.audio.setProperties('40002', {
+ isMuted: true,
+ gain: 55
+ }, chrome.test.callbackPass(function() {
+ chrome.audio.getInfo(chrome.test.callbackPass(function(
+ output, input) {
+ assertDevicesMatch(expectedOutput, output);
+ assertDevicesMatch(expectedInput, input);
+ }));
+ }));
+ }));
+ }));
+ },
+
+ function setPropertiesInvalidValuesTest() {
+ chrome.audio.getInfo(chrome.test.callbackPass(function(
+ initialOutput, initialInput) {
+ var expectedOutput = deviceListToExpectedDevicesMap(initialOutput);
+ var expectedInput = deviceListToExpectedDevicesMap(initialInput);
+ var expectedError = 'Could not set volume/gain properties';
+
+ chrome.audio.setProperties('30001', {
+ isMuted: true,
+ // Output device - should have volume set.
+ gain: 55
+ }, chrome.test.callbackFail(expectedError, function() {
+ chrome.audio.setProperties('40002', {
+ isMuted: true,
+ // Input device - should have gain set.
+ volume:55
+ }, chrome.test.callbackFail(expectedError, function() {
+ // Assert that device properties haven't changed.
+ chrome.audio.getInfo(chrome.test.callbackPass(function(
+ output, input) {
+ assertDevicesMatch(expectedOutput, output);
+ assertDevicesMatch(expectedInput, input);
+ }));
+ }));
+ }));
+ }));
+ },
+
+ function verifyDeviceChangedEvents() {
+ chrome.test.assertTrue(!!deviceChangedListener);
+ chrome.test.assertTrue(deviceChangedListener.eventCount > 0);
+ deviceChangedListener.reset();
+ deviceChangedListener = null;
+ chrome.test.succeed();
+ },
+
+]);

Powered by Google App Engine
This is Rietveld 408576698