fix: migration to remove dangling permissions for unconfigured chains
Description
We had an issue where removing a chain configuration wouldn't remove the dapp permissions for that chain. While that was fixed, we want to remove dangling permissions that still exist in state from before the fix via this migration.
Related issues
Fixes: https://github.com/MetaMask/MetaMask-planning/issues/4020
Manual testing steps
yarn jest app/scripts/migrations/167.test.ts
Screenshots/Recordings
Before
After
Pre-merge author checklist
- [x] I've followed MetaMask Contributor Docs and MetaMask Extension Coding Standards.
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using JSDoc format if applicable
- [x] I’ve applied the right labels on the PR (see labeling guidelines). Not required for external contributors.
Pre-merge reviewer checklist
- [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.
Builds ready [ee9cf3b]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- build viz: Build System
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1202 ± 82 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Home | uiStartup | 1202 | 1096 | 1762 | 82 | 1236 | 1327 |
| load | 1044 | 936 | 1547 | 75 | 1078 | 1150 | |||
| domContentLoaded | 1037 | 931 | 1538 | 75 | 1072 | 1145 | |||
| domInteractive | 17 | 14 | 98 | 9 | 16 | 31 | |||
| firstPaint | 759 | 77 | 1547 | 410 | 1066 | 1140 | |||
| backgroundConnect | 7 | 4 | 37 | 5 | 7 | 24 | |||
| firstReactRender | 20 | 15 | 40 | 4 | 20 | 28 | |||
| getState | 14 | 5 | 38 | 7 | 19 | 29 | |||
| initialActions | 0 | 0 | 1 | 0 | 0 | 1 | |||
| loadScripts | 795 | 697 | 1286 | 74 | 828 | 902 | |||
| setupStore | 8 | 5 | 27 | 4 | 8 | 15 | |||
| Webpack | Home | uiStartup | 2061 | 1586 | 2502 | 236 | 2254 | 2424 | |
| load | 1599 | 1243 | 1961 | 190 | 1732 | 1911 | |||
| domContentLoaded | 1593 | 1238 | 1956 | 189 | 1728 | 1902 | |||
| domInteractive | 15 | 11 | 57 | 10 | 13 | 48 | |||
| firstPaint | 166 | 59 | 1960 | 189 | 168 | 271 | |||
| backgroundConnect | 23 | 10 | 277 | 26 | 23 | 36 | |||
| firstReactRender | 140 | 46 | 364 | 109 | 173 | 349 | |||
| getState | 10 | 4 | 40 | 5 | 11 | 17 | |||
| initialActions | 3 | 1 | 5 | 1 | 3 | 4 | |||
| loadScripts | 1590 | 1237 | 1946 | 187 | 1726 | 1891 | |||
| setupStore | 47 | 7 | 321 | 93 | 20 | 312 | |||
| Firefox | Browserify | Home | uiStartup | 1348 | 1217 | 1655 | 83 | 1380 | 1524 |
| load | 1197 | 1060 | 1489 | 80 | 1236 | 1373 | |||
| domContentLoaded | 1197 | 1060 | 1489 | 80 | 1236 | 1373 | |||
| domInteractive | 99 | 36 | 227 | 31 | 115 | 151 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 20 | 15 | 57 | 6 | 22 | 28 | |||
| firstReactRender | 23 | 21 | 29 | 2 | 24 | 27 | |||
| getState | 9 | 5 | 68 | 10 | 8 | 38 | |||
| initialActions | 0 | 0 | 2 | 0 | 0 | 1 | |||
| loadScripts | 1179 | 1045 | 1474 | 79 | 1219 | 1353 | |||
| setupStore | 7 | 4 | 54 | 6 | 6 | 12 | |||
| Webpack | Home | uiStartup | 1526 | 1383 | 1793 | 92 | 1608 | 1700 | |
| load | 1324 | 1197 | 1584 | 89 | 1394 | 1504 | |||
| domContentLoaded | 1323 | 1197 | 1584 | 89 | 1393 | 1503 | |||
| domInteractive | 78 | 30 | 146 | 14 | 85 | 106 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 22 | 16 | 43 | 5 | 22 | 30 | |||
| firstReactRender | 42 | 29 | 64 | 5 | 45 | 49 | |||
| getState | 9 | 5 | 30 | 5 | 9 | 27 | |||
| initialActions | 0 | 0 | 2 | 1 | 1 | 1 | |||
| loadScripts | 1304 | 1182 | 1564 | 89 | 1375 | 1482 | |||
| setupStore | 8 | 5 | 22 | 2 | 8 | 10 |
Benchmark value 48 exceeds gate value 32 for chrome webpack home mean setupStore
Benchmark value 312 exceeds gate value 65 for chrome webpack home p95 setupStore
Benchmark value 38 exceeds gate value 24 for firefox browserify home p95 getState
Benchmark value 42 exceeds gate value 38 for firefox webpack home mean firstReactRender
Sum of mean exceeds: 20ms | Sum of p95 exceeds: 267ms
Sum of all benchmark exceeds: 287ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 4 Bytes (0%)
- ui: 2.81 KiB (0.04%)
- common: 1.47 KiB (0.02%)
Builds ready [f07ae83]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- build viz: Build System
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1246 ± 84 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Home | uiStartup | 1246 | 1118 | 1472 | 84 | 1286 | 1412 |
| load | 1083 | 972 | 1334 | 80 | 1123 | 1238 | |||
| domContentLoaded | 1077 | 964 | 1330 | 80 | 1119 | 1233 | |||
| domInteractive | 17 | 14 | 38 | 4 | 17 | 29 | |||
| firstPaint | 762 | 86 | 1340 | 431 | 1092 | 1217 | |||
| backgroundConnect | 7 | 4 | 32 | 4 | 8 | 10 | |||
| firstReactRender | 20 | 16 | 37 | 3 | 21 | 28 | |||
| getState | 13 | 6 | 31 | 7 | 19 | 27 | |||
| initialActions | 0 | 0 | 1 | 0 | 0 | 1 | |||
| loadScripts | 827 | 713 | 1068 | 78 | 867 | 979 | |||
| setupStore | 8 | 5 | 20 | 3 | 8 | 14 | |||
| Webpack | Home | uiStartup | 2155 | 1667 | 2762 | 228 | 2282 | 2545 | |
| load | 1684 | 1307 | 2162 | 187 | 1789 | 1956 | |||
| domContentLoaded | 1678 | 1303 | 2145 | 186 | 1785 | 1948 | |||
| domInteractive | 17 | 12 | 100 | 14 | 14 | 50 | |||
| firstPaint | 154 | 69 | 350 | 56 | 171 | 282 | |||
| backgroundConnect | 21 | 12 | 39 | 6 | 24 | 34 | |||
| firstReactRender | 161 | 48 | 368 | 115 | 310 | 361 | |||
| getState | 11 | 4 | 30 | 5 | 12 | 23 | |||
| initialActions | 3 | 1 | 5 | 1 | 3 | 4 | |||
| loadScripts | 1675 | 1301 | 2134 | 184 | 1783 | 1937 | |||
| setupStore | 26 | 7 | 318 | 55 | 18 | 27 | |||
| Firefox | Browserify | Home | uiStartup | 1357 | 1194 | 1682 | 81 | 1399 | 1496 |
| load | 1205 | 1068 | 1437 | 76 | 1252 | 1356 | |||
| domContentLoaded | 1205 | 1068 | 1437 | 76 | 1252 | 1356 | |||
| domInteractive | 102 | 36 | 310 | 35 | 114 | 151 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 23 | 13 | 122 | 13 | 22 | 50 | |||
| firstReactRender | 24 | 21 | 54 | 4 | 24 | 30 | |||
| getState | 8 | 4 | 28 | 3 | 8 | 11 | |||
| initialActions | 0 | 0 | 2 | 0 | 0 | 1 | |||
| loadScripts | 1185 | 1053 | 1415 | 72 | 1238 | 1329 | |||
| setupStore | 7 | 4 | 37 | 4 | 6 | 11 | |||
| Webpack | Home | uiStartup | 1503 | 1371 | 1754 | 87 | 1551 | 1690 | |
| load | 1307 | 1183 | 1563 | 87 | 1348 | 1493 | |||
| domContentLoaded | 1306 | 1182 | 1563 | 87 | 1348 | 1493 | |||
| domInteractive | 78 | 32 | 174 | 18 | 84 | 107 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 21 | 16 | 46 | 5 | 23 | 29 | |||
| firstReactRender | 40 | 27 | 59 | 4 | 43 | 46 | |||
| getState | 8 | 5 | 31 | 4 | 9 | 10 | |||
| initialActions | 0 | 0 | 2 | 1 | 1 | 1 | |||
| loadScripts | 1287 | 1163 | 1547 | 87 | 1328 | 1473 | |||
| setupStore | 8 | 6 | 46 | 6 | 8 | 20 |
Benchmark value 1083 exceeds gate value 1070 for chrome browserify home mean load
Benchmark value 1077 exceeds gate value 1061 for chrome browserify home mean domContentLoaded
Benchmark value 1412 exceeds gate value 1365 for chrome browserify home p95 uiStartup
Benchmark value 1238 exceeds gate value 1190 for chrome browserify home p95 load
Benchmark value 1234 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded
Benchmark value 1218 exceeds gate value 1180 for chrome browserify home p95 firstPaint
Benchmark value 979 exceeds gate value 940 for chrome browserify home p95 loadScripts
Benchmark value 2545 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 41 exceeds gate value 38 for firefox webpack home mean firstReactRender
Sum of mean exceeds: 44ms | Sum of p95 exceeds: 317ms
Sum of all benchmark exceeds: 361ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 2.01 KiB (0.04%)
- ui: 2.81 KiB (0.04%)
- common: 1.47 KiB (0.02%)
Builds ready [c7dc130]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- build viz: Build System
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1224 ± 71 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Home | uiStartup | 1224 | 1106 | 1440 | 71 | 1265 | 1383 |
| load | 1064 | 962 | 1247 | 66 | 1088 | 1202 | |||
| domContentLoaded | 1058 | 958 | 1241 | 66 | 1082 | 1196 | |||
| domInteractive | 17 | 14 | 37 | 5 | 16 | 34 | |||
| firstPaint | 679 | 129 | 1254 | 432 | 1071 | 1200 | |||
| backgroundConnect | 7 | 4 | 31 | 3 | 7 | 9 | |||
| firstReactRender | 20 | 17 | 57 | 5 | 20 | 30 | |||
| getState | 13 | 6 | 36 | 7 | 17 | 29 | |||
| initialActions | 0 | 0 | 3 | 0 | 0 | 1 | |||
| loadScripts | 810 | 709 | 989 | 65 | 836 | 946 | |||
| setupStore | 8 | 4 | 16 | 2 | 9 | 13 | |||
| Webpack | Home | uiStartup | 2089 | 1630 | 2538 | 211 | 2234 | 2462 | |
| load | 1626 | 1263 | 1975 | 167 | 1736 | 1871 | |||
| domContentLoaded | 1620 | 1258 | 1965 | 166 | 1732 | 1862 | |||
| domInteractive | 16 | 11 | 71 | 11 | 13 | 47 | |||
| firstPaint | 151 | 62 | 343 | 49 | 163 | 246 | |||
| backgroundConnect | 21 | 12 | 42 | 6 | 23 | 35 | |||
| firstReactRender | 144 | 47 | 360 | 109 | 282 | 350 | |||
| getState | 17 | 4 | 309 | 42 | 12 | 25 | |||
| initialActions | 6 | 1 | 288 | 28 | 3 | 4 | |||
| loadScripts | 1617 | 1256 | 1953 | 165 | 1731 | 1851 | |||
| setupStore | 34 | 7 | 319 | 71 | 17 | 289 | |||
| Firefox | Browserify | Home | uiStartup | 1332 | 1198 | 1533 | 71 | 1375 | 1473 |
| load | 1184 | 1029 | 1379 | 73 | 1234 | 1329 | |||
| domContentLoaded | 1184 | 1029 | 1379 | 73 | 1233 | 1329 | |||
| domInteractive | 94 | 34 | 199 | 27 | 108 | 135 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 20 | 13 | 71 | 7 | 21 | 26 | |||
| firstReactRender | 24 | 21 | 60 | 5 | 24 | 28 | |||
| getState | 8 | 5 | 39 | 4 | 8 | 10 | |||
| initialActions | 0 | 0 | 1 | 0 | 0 | 1 | |||
| loadScripts | 1166 | 1011 | 1354 | 73 | 1219 | 1305 | |||
| setupStore | 6 | 4 | 36 | 4 | 6 | 11 | |||
| Webpack | Home | uiStartup | 1446 | 1283 | 1733 | 92 | 1481 | 1606 | |
| load | 1262 | 1131 | 1553 | 89 | 1301 | 1423 | |||
| domContentLoaded | 1262 | 1131 | 1553 | 89 | 1301 | 1423 | |||
| domInteractive | 75 | 31 | 229 | 22 | 79 | 106 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 20 | 15 | 41 | 4 | 21 | 25 | |||
| firstReactRender | 38 | 28 | 70 | 5 | 41 | 44 | |||
| getState | 7 | 4 | 28 | 2 | 8 | 10 | |||
| initialActions | 0 | 0 | 1 | 0 | 1 | 1 | |||
| loadScripts | 1244 | 1116 | 1536 | 89 | 1283 | 1406 | |||
| setupStore | 7 | 5 | 20 | 2 | 7 | 8 |
Benchmark value 1203 exceeds gate value 1190 for chrome browserify home p95 load
Benchmark value 1196 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded
Benchmark value 1200 exceeds gate value 1180 for chrome browserify home p95 firstPaint
Benchmark value 947 exceeds gate value 940 for chrome browserify home p95 loadScripts
Benchmark value 34 exceeds gate value 32 for chrome webpack home mean setupStore
Benchmark value 2463 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 289 exceeds gate value 65 for chrome webpack home p95 setupStore
Benchmark value 39 exceeds gate value 38 for firefox webpack home mean firstReactRender
Sum of mean exceeds: 3ms | Sum of p95 exceeds: 307ms
Sum of all benchmark exceeds: 310ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 2.37 KiB (0.04%)
- ui: 9.4 KiB (0.13%)
- common: 2.36 KiB (0.03%)
Builds ready [8ac7d84]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- build viz: Build System
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1209 ± 61 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Home | uiStartup | 1209 | 1118 | 1430 | 61 | 1264 | 1300 |
| load | 1049 | 945 | 1217 | 59 | 1095 | 1147 | |||
| domContentLoaded | 1043 | 941 | 1212 | 58 | 1086 | 1138 | |||
| domInteractive | 17 | 14 | 43 | 5 | 16 | 32 | |||
| firstPaint | 716 | 127 | 1222 | 416 | 1062 | 1132 | |||
| backgroundConnect | 7 | 4 | 30 | 4 | 7 | 10 | |||
| firstReactRender | 22 | 15 | 46 | 5 | 22 | 33 | |||
| getState | 14 | 6 | 28 | 7 | 19 | 26 | |||
| initialActions | 0 | 0 | 1 | 0 | 0 | 0 | |||
| loadScripts | 797 | 698 | 957 | 58 | 841 | 900 | |||
| setupStore | 8 | 5 | 27 | 4 | 8 | 17 | |||
| Webpack | Home | uiStartup | 2189 | 1692 | 2718 | 222 | 2299 | 2642 | |
| load | 1684 | 1280 | 2107 | 196 | 1785 | 2018 | |||
| domContentLoaded | 1678 | 1276 | 2095 | 195 | 1780 | 2008 | |||
| domInteractive | 17 | 11 | 65 | 12 | 14 | 53 | |||
| firstPaint | 163 | 68 | 646 | 73 | 181 | 294 | |||
| backgroundConnect | 23 | 10 | 324 | 31 | 23 | 38 | |||
| firstReactRender | 218 | 87 | 419 | 111 | 345 | 399 | |||
| getState | 14 | 5 | 269 | 26 | 13 | 26 | |||
| initialActions | 3 | 1 | 5 | 1 | 3 | 5 | |||
| loadScripts | 1675 | 1275 | 2085 | 194 | 1779 | 1998 | |||
| setupStore | 18 | 7 | 308 | 30 | 18 | 27 | |||
| Firefox | Browserify | Home | uiStartup | 1376 | 1184 | 1656 | 101 | 1425 | 1581 |
| load | 1212 | 1055 | 1393 | 79 | 1267 | 1337 | |||
| domContentLoaded | 1212 | 1054 | 1393 | 79 | 1267 | 1337 | |||
| domInteractive | 118 | 36 | 437 | 64 | 117 | 290 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 20 | 13 | 50 | 6 | 21 | 32 | |||
| firstReactRender | 23 | 21 | 34 | 2 | 24 | 29 | |||
| getState | 11 | 5 | 75 | 14 | 8 | 54 | |||
| initialActions | 0 | 0 | 1 | 0 | 0 | 1 | |||
| loadScripts | 1194 | 1042 | 1380 | 78 | 1251 | 1322 | |||
| setupStore | 10 | 4 | 89 | 14 | 8 | 50 | |||
| Webpack | Home | uiStartup | 1521 | 1352 | 2267 | 178 | 1525 | 2027 | |
| load | 1306 | 1160 | 1987 | 150 | 1328 | 1731 | |||
| domContentLoaded | 1306 | 1160 | 1986 | 150 | 1328 | 1731 | |||
| domInteractive | 88 | 31 | 460 | 67 | 77 | 265 | |||
| firstPaint | NaN | NaN | NaN | NaN | NaN | NaN | |||
| backgroundConnect | 23 | 15 | 50 | 7 | 23 | 40 | |||
| firstReactRender | 40 | 32 | 52 | 3 | 42 | 46 | |||
| getState | 14 | 5 | 53 | 9 | 13 | 33 | |||
| initialActions | 0 | 0 | 2 | 1 | 1 | 1 | |||
| loadScripts | 1286 | 1145 | 1958 | 148 | 1307 | 1696 | |||
| setupStore | 9 | 5 | 44 | 6 | 8 | 19 |
Benchmark value 2008 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded
Benchmark value 399 exceeds gate value 370 for chrome webpack home p95 firstReactRender
Benchmark value 1998 exceeds gate value 1970 for chrome webpack home p95 loadScripts
Benchmark value 119 exceeds gate value 110 for firefox browserify home mean domInteractive
Benchmark value 10 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 290 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 54 exceeds gate value 24 for firefox browserify home p95 getState
Benchmark value 50 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 41 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 2027 exceeds gate value 1935 for firefox webpack home p95 uiStartup
Benchmark value 1731 exceeds gate value 1660 for firefox webpack home p95 load
Benchmark value 1731 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded
Benchmark value 265 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 33 exceeds gate value 32 for firefox webpack home p95 getState
Benchmark value 1696 exceeds gate value 1630 for firefox webpack home p95 loadScripts
Sum of mean exceeds: 13ms | Sum of p95 exceeds: 807ms
Sum of all benchmark exceeds: 820ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 2 KiB (0.04%)
- ui: 5 Bytes (0%)
- common: -1 Bytes (0%)
Closing as this was done in: https://github.com/MetaMask/metamask-extension/pull/33484