Skip to content

Commit 5c55e2b

Browse files
Simplify
1 parent 0455b31 commit 5c55e2b

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

packages/snaps-controllers/src/snaps/SnapController.test.tsx

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10211,10 +10211,18 @@ describe('SnapController', () => {
1021110211
});
1021210212

1021310213
describe('clearState', () => {
10214-
it('clears the state and terminates running snaps', async () => {
10214+
it('clears the state, terminates running Snaps and cancels pending requests', async () => {
1021510215
const options = getSnapControllerWithEESOptions({
1021610216
state: {
10217-
snaps: getPersistedSnapsState(),
10217+
snaps: getPersistedSnapsState(
10218+
getPersistedSnapObject({
10219+
sourceCode: `
10220+
module.exports.onRpcRequest = () => {
10221+
while(true) {}
10222+
};
10223+
`,
10224+
}),
10225+
),
1021810226
snapStates: {
1021910227
[MOCK_SNAP_ID]: JSON.stringify({ foo: 'bar' }),
1022010228
},
@@ -10231,6 +10239,21 @@ describe('SnapController', () => {
1023110239

1023210240
expect(snapController.has(MOCK_SNAP_ID)).toBe(true);
1023310241

10242+
const requestPromise = snapController.handleRequest({
10243+
snapId: MOCK_SNAP_ID,
10244+
origin: METAMASK_ORIGIN,
10245+
handler: HandlerType.OnRpcRequest,
10246+
request: {
10247+
method: 'foo',
10248+
},
10249+
});
10250+
10251+
await waitForStateChange(messenger);
10252+
10253+
expect(snapController.isRunning(MOCK_SNAP_ID)).toBe(true);
10254+
10255+
await new Promise((resolve) => setTimeout(resolve, 100));
10256+
1023410257
await snapController.clearState();
1023510258

1023610259
expect(snapController.has(MOCK_SNAP_ID)).toBe(false);
@@ -10245,6 +10268,10 @@ describe('SnapController', () => {
1024510268
MOCK_SNAP_ID,
1024610269
);
1024710270

10271+
await expect(requestPromise).rejects.toThrow(
10272+
'npm:@metamask/example-snap was stopped and the request was cancelled. This is likely because the Snap crashed.',
10273+
);
10274+
1024810275
expect(snapController.state).toStrictEqual({
1024910276
snaps: {},
1025010277
snapStates: {},
@@ -10291,6 +10318,9 @@ describe('SnapController', () => {
1029110318
expect(snapController.has(MOCK_SNAP_ID)).toBe(true);
1029210319
expect(snapController.has(preinstalledSnapId)).toBe(true);
1029310320

10321+
await snapController.startSnap(MOCK_SNAP_ID);
10322+
await snapController.startSnap(preinstalledSnapId);
10323+
1029410324
await snapController.clearState();
1029510325

1029610326
expect(snapController.has(MOCK_SNAP_ID)).toBe(false);

packages/snaps-controllers/src/snaps/SnapController.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2271,9 +2271,7 @@ export class SnapController extends BaseController<
22712271
});
22722272
}
22732273

2274-
await Promise.allSettled(
2275-
snapIds.map(async (snapId) => this.#terminateSnap(snapId as SnapId)),
2276-
);
2274+
await this.stopAllSnaps();
22772275
snapIds.forEach((snapId) => this.#revokeAllSnapPermissions(snapId));
22782276

22792277
this.update((state) => {

0 commit comments

Comments
 (0)