Fix to avoid loading of disabled device plugins

Summary: There is a bug right now that even for disabled plugins we're loading them. In particular, this led to the Flipper freezes caused by Logs plugin even if it is disabled.

Reviewed By: passy

Differential Revision: D26503012

fbshipit-source-id: 2068626f4637ced44c457ee1b7ba7fffdcf5aa47
This commit is contained in:
Anton Nikolaev
2021-02-18 03:57:00 -08:00
committed by Facebook GitHub Bot
parent 805261b429
commit c0010bea4c
9 changed files with 32 additions and 9 deletions

View File

@@ -956,7 +956,7 @@ test('Sandy plugins support isPluginSupported + selectPlugin', async () => {
expect(pluginInstance.isPluginAvailable(definition.id)).toBeTruthy();
expect(pluginInstance.isPluginAvailable('nonsense')).toBeFalsy();
expect(pluginInstance.isPluginAvailable(definition2.id)).toBeFalsy(); // not enabled yet
expect(pluginInstance.isPluginAvailable(definition3.id)).toBeTruthy();
expect(pluginInstance.isPluginAvailable(definition3.id)).toBeFalsy(); // not enabled yet
expect(pluginInstance.activatedStub).toBeCalledTimes(1);
expect(pluginInstance.deactivatedStub).toBeCalledTimes(0);
expect(linksSeen).toEqual([]);
@@ -964,6 +964,7 @@ test('Sandy plugins support isPluginSupported + selectPlugin', async () => {
// star and navigate to a device plugin
store.dispatch(starPlugin({plugin: definition3}));
pluginInstance.selectPlugin(definition3.id);
expect(pluginInstance.isPluginAvailable(definition3.id)).toBeTruthy();
expect(store.getState().connections.selectedPlugin).toBe(definition3.id);
expect(renderer.baseElement.querySelector('h1')).toMatchInlineSnapshot(`
<h1>

View File

@@ -109,7 +109,10 @@ test('New device with same serial removes & cleans the old one', async () => {
type: 'REGISTER_DEVICE',
payload: device2,
});
device2.loadDevicePlugins(store.getState().plugins.devicePlugins);
device2.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
);
expect(device.isArchived).toBe(false);
expect(device.connected.get()).toBe(false);

View File

@@ -212,13 +212,16 @@ export default class BaseDevice {
}
loadDevicePlugins(
devicePlugins?: DevicePluginMap,
devicePlugins: DevicePluginMap,
enabledDevicePlugins: Set<string>,
pluginStates?: Record<string, any>,
) {
if (!devicePlugins) {
return;
}
const plugins = Array.from(devicePlugins.values());
const plugins = Array.from(devicePlugins.values()).filter((p) =>
enabledDevicePlugins?.has(p.id),
);
for (const plugin of plugins) {
this.loadDevicePlugin(plugin, pluginStates?.[plugin.id]);
}

View File

@@ -240,7 +240,10 @@ export default (store: Store, logger: Logger) => {
payload: new Set(reconnectedDevices),
});
androidDevice.loadDevicePlugins(store.getState().plugins.devicePlugins);
androidDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',
payload: androidDevice,

View File

@@ -22,7 +22,10 @@ export default (store: Store, _logger: Logger) => {
} else {
return;
}
device.loadDevicePlugins(store.getState().plugins.devicePlugins);
device.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',
payload: device,

View File

@@ -134,7 +134,10 @@ function processDevices(
serial: udid,
});
const iOSDevice = new IOSDevice(udid, type, name);
iOSDevice.loadDevicePlugins(store.getState().plugins.devicePlugins);
iOSDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',
payload: iOSDevice,

View File

@@ -57,7 +57,10 @@ export async function registerMetroDevice(
name: metroDevice.title,
});
metroDevice.loadDevicePlugins(store.getState().plugins.devicePlugins);
metroDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',
payload: metroDevice,

View File

@@ -124,7 +124,10 @@ export default class MockFlipper {
type: 'REGISTER_DEVICE',
payload: device,
});
device.loadDevicePlugins(this._store.getState().plugins.devicePlugins);
device.loadDevicePlugins(
this._store.getState().plugins.devicePlugins,
this.store.getState().connections.userStarredDevicePlugins,
);
this._devices.push(device);
return device;
}

View File

@@ -802,6 +802,7 @@ export function importDataToStore(source: string, data: string, store: Store) {
});
archivedDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
deserializeObject(device.pluginStates),
);
store.dispatch({