// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chrome://resources/js/assert.js';
import {fakeAllNetworksAvailable, fakeBatteryChargeStatus, fakeBatteryHealth, fakeBatteryInfo, fakeCellularNetwork, fakeCpuUsage, fakeEthernetNetwork, fakeKeyboards, fakeMemoryUsage, fakeSystemInfo, fakeTouchDevices, fakeWifiNetwork} from './fake_data.js';
import {FakeInputDataProvider} from './fake_input_data_provider.js';
import {FakeNetworkHealthProvider} from './fake_network_health_provider.js';
import {FakeSystemDataProvider} from './fake_system_data_provider.js';
import {FakeSystemRoutineController} from './fake_system_routine_controller.js';
import {InputDataProvider, InputDataProviderInterface} from './input_data_provider.mojom-webui.js';
import {NetworkHealthProvider, NetworkHealthProviderInterface} from './network_health_provider.mojom-webui.js';
import {SystemDataProvider, SystemDataProviderInterface} from './system_data_provider.mojom-webui.js';
import {SystemRoutineController, SystemRoutineControllerInterface} from './system_routine_controller.mojom-webui.js';
/**
* @fileoverview
* Provides singleton access to mojo interfaces with the ability
* to override them with test/fake implementations.
*/
/**
* If true this will replace all providers with fakes.
*/
const useFakeProviders = false;
let systemDataProvider: SystemDataProviderInterface|null = null;
let systemRoutineController: SystemRoutineControllerInterface|null = null;
let networkHealthProvider: NetworkHealthProviderInterface|null = null;
let inputDataProvider: InputDataProviderInterface|null = null;
export function setSystemDataProviderForTesting(
testProvider: SystemDataProviderInterface): void {
systemDataProvider = testProvider;
}
/**
* Create a FakeSystemDataProvider with reasonable fake data.
*/
function setupFakeSystemDataProvider(): void {
const provider = new FakeSystemDataProvider();
provider.setFakeBatteryChargeStatus(fakeBatteryChargeStatus);
provider.setFakeBatteryHealth(fakeBatteryHealth);
provider.setFakeBatteryInfo(fakeBatteryInfo);
provider.setFakeCpuUsage(fakeCpuUsage);
provider.setFakeMemoryUsage(fakeMemoryUsage);
provider.setFakeSystemInfo(fakeSystemInfo);
setSystemDataProviderForTesting(provider);
}
export function getSystemDataProvider(): SystemDataProviderInterface {
if (!systemDataProvider) {
if (useFakeProviders) {
setupFakeSystemDataProvider();
} else {
systemDataProvider = SystemDataProvider.getRemote();
}
}
assert(!!systemDataProvider);
return systemDataProvider;
}
export function setSystemRoutineControllerForTesting(
testController: SystemRoutineControllerInterface): void {
systemRoutineController = testController;
}
/**
* Create a FakeSystemRoutineController with reasonable fake data.
*/
function setupFakeSystemRoutineController(): void {
const controller = new FakeSystemRoutineController();
// Enable all routines by default.
controller.setFakeSupportedRoutines(controller.getAllRoutines());
setSystemRoutineControllerForTesting(controller);
}
export function getSystemRoutineController(): SystemRoutineControllerInterface {
if (!systemRoutineController) {
if (useFakeProviders) {
setupFakeSystemRoutineController();
} else {
systemRoutineController = SystemRoutineController.getRemote();
}
}
assert(!!systemRoutineController);
return systemRoutineController;
}
export function setNetworkHealthProviderForTesting(
testProvider: NetworkHealthProviderInterface): void {
networkHealthProvider = testProvider;
}
/**
* Create a FakeNetworkHealthProvider with reasonable fake data.
*/
function setupFakeNetworkHealthProvider(): void {
const provider = new FakeNetworkHealthProvider();
// The fake provides a stable state with all networks connected.
provider.setFakeNetworkGuidInfo([fakeAllNetworksAvailable]);
provider.setFakeNetworkState('ethernetGuid', [fakeEthernetNetwork]);
provider.setFakeNetworkState('wifiGuid', [fakeWifiNetwork]);
provider.setFakeNetworkState('cellularGuid', [fakeCellularNetwork]);
setNetworkHealthProviderForTesting(provider);
}
export function getNetworkHealthProvider(): NetworkHealthProviderInterface {
if (!networkHealthProvider) {
if (useFakeProviders) {
setupFakeNetworkHealthProvider();
} else {
networkHealthProvider = NetworkHealthProvider.getRemote();
}
}
assert(!!networkHealthProvider);
return networkHealthProvider;
}
// Creates a FakeInputDataProvider with fake devices setup.
function setupFakeInputDataProvider(): void {
const provider = new FakeInputDataProvider();
provider.setFakeConnectedDevices(fakeKeyboards, fakeTouchDevices);
setInputDataProviderForTesting(provider);
}
export function setInputDataProviderForTesting(
testProvider: InputDataProviderInterface): void {
inputDataProvider = testProvider;
}
export function getInputDataProvider(): InputDataProviderInterface {
if (!inputDataProvider) {
if (useFakeProviders) {
setupFakeInputDataProvider();
} else {
inputDataProvider = InputDataProvider.getRemote();
}
}
assert(!!inputDataProvider);
return inputDataProvider;
}