Skip to content

chore: update build targets to chrome 113 and firefox 115#41170

Merged
HowardBraham merged 11 commits into
mainfrom
chore/browser-targets-115-113
Mar 27, 2026
Merged

chore: update build targets to chrome 113 and firefox 115#41170
HowardBraham merged 11 commits into
mainfrom
chore/browser-targets-115-113

Conversation

@davidmurdoch

@davidmurdoch davidmurdoch commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

Description

This updates the declared build targets to match the browser minimums we already support elsewhere in the extension.

The current browserslist and Babel targets were still pointing at Chrome 89 / Firefox 89, which was lower than our real support floor and causes extra transpilation.

This PR:

  • raises browserslist and Babel targets to chrome >= 113 and firefox >= 115
  • adds Browserify-required Babel syntax transforms for class properties and private methods, plus keeps the existing logical-assignment transform
  • updates the build-system LavaMoat policy to allow those nested @babel/preset-env plugins

Open in GitHub Codespaces

Changelog

CHANGELOG entry: null

Related issues

Fixes:

Manual testing steps

  1. build it
  2. does it work?

Pre-merge author checklist


Note

Medium Risk
Moderate risk because it changes build/transpilation targets and multiple LavaMoat policies; misconfiguration could cause runtime issues in older browsers or build-time bundling failures.

Overview
Updates declared build targets to Chrome 113+ / Firefox 115+ by bumping .browserslistrc and Babel targets in babel.config.js, reducing unnecessary transpilation.

Adds explicit Babel syntax transforms for class properties and private class features (keeping logical assignment transforms) and wires in the needed devDependencies/depcheck ignores.

Adjusts LavaMoat Browserify/Webpack policies to match the new Babel plugin dependency graph and to refine/expand allowed globals (e.g., AbortSignal.timeout, scoped navigator.*, document.visibilityState, crypto.subtle, and additional DOM prototype access), while removing several now-unneeded @swc/helpers allowances.

Written by Cursor Bugbot for commit 5d88a00. This will update automatically on new commits. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

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.

@metamaskbot metamaskbot added the team-extension-platform Extension Platform team label Mar 24, 2026
@metamaskbotv2

metamaskbotv2 Bot commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

📜 @MetaMask/policy-reviewers (15 files, +196 -358)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +5 -2
      • 📁 experimental/
        • 📄 policy.json +5 -2
      • 📁 flask/
        • 📄 policy.json +5 -2
      • 📁 main/
        • 📄 policy.json +5 -2
    • 📁 build-system/
      • 📄 policy-override.json +3 -0
      • 📄 policy.json +32 -29
    • 📁 webpack/
      • 📁 build/
        • 📄 policy.json +13 -13
      • 📁 mv2/
        • 📁 beta/
          • 📄 policy.json +16 -43
        • 📁 experimental/
          • 📄 policy.json +16 -43
        • 📁 flask/
          • 📄 policy.json +16 -43
        • 📁 main/
          • 📄 policy.json +16 -43
      • 📁 mv3/
        • 📁 beta/
          • 📄 policy.json +16 -34
        • 📁 experimental/
          • 📄 policy.json +16 -34
        • 📁 flask/
          • 📄 policy.json +16 -34
        • 📁 main/
          • 📄 policy.json +16 -34

Tip

Follow the policy review process outlined in the LavaMoat Policy Review Process doc before expecting an approval from Policy Reviewers.

@metamaskbot metamaskbot added the INVALID-PR-TEMPLATE PR's body doesn't match template label Mar 24, 2026
@davidmurdoch

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@metamaskbot metamaskbot removed the INVALID-PR-TEMPLATE PR's body doesn't match template label Mar 24, 2026
@metamaskbot

Copy link
Copy Markdown
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

👀 lavamoat/browserify/beta/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/experimental/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/flask/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/webpack/mv2/beta/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/experimental/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/flask/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv3/beta/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/experimental/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/flask/policy.json changes differ from mv3/main/policy.json policy changes

Comment thread babel.config.js
@davidmurdoch

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@socket-security

socket-security Bot commented Mar 24, 2026

Copy link
Copy Markdown

@metamaskbot

Copy link
Copy Markdown
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

👀 lavamoat/browserify/beta/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/experimental/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/flask/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/webpack/mv2/beta/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/experimental/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/flask/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv3/beta/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/experimental/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/flask/policy.json changes differ from mv3/main/policy.json policy changes

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Comment thread babel.config.js
@davidmurdoch

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@metamaskbot

Copy link
Copy Markdown
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

👀 lavamoat/browserify/beta/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/experimental/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/flask/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/webpack/mv2/beta/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/experimental/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/flask/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv3/beta/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/experimental/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/flask/policy.json changes differ from mv3/main/policy.json policy changes

"globals": {
"AbortController": true,
"AbortSignal": true,
"AbortSignal.timeout": true,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The policy updates are due to removing polyfills by updating our browserslist support target. we stopped polyfilling built in browser APIs at compile time, so modules that wanted to use the built-in APIs can now do so.

@metamaskbotv2

metamaskbotv2 Bot commented Mar 24, 2026

Copy link
Copy Markdown
Contributor
Builds ready [3a526fa]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account28825732126315321
total28825732126315321
Confirm Txconfirm_tx602560156033860336033
total602560156033860336033
Bridge User Actionsbridge_load_page2642552779267277
bridge_load_asset_picker20414327653256276
bridge_search_token7066997126712712
total1172109712536312351253
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Chrome Browserify Startup Standard HomeuiStartup14061168199212414561638
load1168944163910712261335
domContentLoaded1160938159910412141330
domInteractive2817134202480
firstPaint1516533762201227
backgroundConnect20718730316211233
firstReactRender20123332227
initialActions104123
loadScripts970756140810210211136
setupStore1274151320
numNetworkReqs393190163182
Chrome Browserify Startup Power User HomeuiStartup4904198812772199358237432
load13211152174512713911588
domContentLoaded12991143169611913401562
domInteractive39212773435119
firstPaint210831398175269365
backgroundConnect18142988678168428924099
firstReactRender27185762939
initialActions105113
loadScripts1069926144210911011305
setupStore1763871835
numNetworkReqs1367427541145240
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2192182211220221
srpButtonToSrpForm92919319293
confirmSrpToPwForm22212202222
pwFormToMetricsScreen15151601616
metricsToWalletReadyScreen16151601616
doneButtonToHomeScreen511374677118586677
openAccountMenuToAccountListLoaded3042292331309631273130
total387638693888838883888
Onboarding New WalletcreateWalletToSocialScreen2222172304224230
srpButtonToPwForm1101081121112112
createPwToRecoveryScreen989099
skipBackupToMetricsScreen39383903939
agreeButtonToOnboardingSuccess16161601616
doneButtonToAssetList50549251710514517
total90388991410909914
Asset DetailsassetClickToPriceChart61566746067
total61566746067
Solana Asset DetailsassetClickToPriceChart64331072888107
total64331072888107
Import Srp HomeloginToHomeScreen22952172242210123622422
openAccountMenuAfterLogin66598196381
homeAfterImportWithNewWallet1543337232690922882326
total40232970478876545744788
Send TransactionsopenSendPageFromHome29273123131
selectTokenToSendFormLoaded441879287779
reviewTransactionToConfirmationPage1141912137418913021374
total12291018141516614071415
SwapopenSwapPageFromHome926714229107142
fetchAndDisplaySwapQuotes268326802686326842686
total2779275328262727872826
🌐 Dapp Page Load Benchmarks

Current Commit: 3a526fa | Date: 3/24/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±40ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 728ms (±37ms) 🟢 | historical mean value: 737ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 79ms (±11ms) 🟢 | historical mean value: 88ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 40ms 1.01s 1.34s 1.06s 1.34s
domContentLoaded 728ms 37ms 707ms 1.01s 752ms 1.01s
firstPaint 79ms 11ms 64ms 172ms 88ms 172ms
firstContentfulPaint 79ms 11ms 64ms 172ms 88ms 172ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -45.82 KiB (-0.65%)
  • ui: -90.88 KiB (-1.06%)
  • common: -19.23 KiB (-0.17%)

@davidmurdoch

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@metamaskbot

Copy link
Copy Markdown
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

👀 lavamoat/browserify/beta/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/experimental/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/browserify/flask/policy.json changes differ from main/policy.json policy changes
👀 lavamoat/webpack/mv2/beta/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/experimental/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv2/flask/policy.json changes differ from mv2/main/policy.json policy changes
👀 lavamoat/webpack/mv3/beta/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/experimental/policy.json changes differ from mv3/main/policy.json policy changes
👀 lavamoat/webpack/mv3/flask/policy.json changes differ from mv3/main/policy.json policy changes

@sonarqubecloud

Copy link
Copy Markdown

@metamaskbotv2

metamaskbotv2 Bot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor
Builds ready [5d88a00]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2812722969283296
total2812722969283296
Confirm Txconfirm_tx6047601461083460546108
total6047601461083460546108
Bridge User Actionsbridge_load_page21318025829234258
bridge_load_asset_picker26624430122281301
bridge_search_token75874777511767775
total1218118612452312331245
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Chrome Browserify Startup Standard HomeuiStartup14871245191111015301684
load12311015151410012811415
domContentLoaded1224101015079812761395
domInteractive2918100202588
firstPaint1617043387222332
backgroundConnect22520228614230257
firstReactRender21144762332
initialActions106123
loadScripts101481112829410541189
setupStore1473451624
numNetworkReqs393184153178
Chrome Browserify Startup Power User HomeuiStartup53152151159842773598212417
load13801194199913914041718
domContentLoaded13541190193513613771694
domInteractive41212463835127
firstPaint219931754178277338
backgroundConnect191032113038265528278995
firstReactRender28196373045
initialActions105113
loadScripts1112969163512611281433
setupStore17660101837
numNetworkReqs1888131348206292
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202192211220221
srpButtonToSrpForm101961085106108
confirmSrpToPwForm24232412424
pwFormToMetricsScreen16161701617
metricsToWalletReadyScreen17171701717
doneButtonToHomeScreen62753577488669774
openAccountMenuToAccountListLoaded2940292529661629402966
total39873839419613140724196
Onboarding New WalletcreateWalletToSocialScreen2212202231221223
srpButtonToPwForm1141091183115118
createPwToRecoveryScreen999099
skipBackupToMetricsScreen41384324343
agreeButtonToOnboardingSuccess17161811818
doneButtonToAssetList50448253217512532
total91189094022937940
Asset DetailsassetClickToPriceChart796495118195
total796495118195
Solana Asset DetailsassetClickToPriceChart643885218085
total643885218085
Import Srp HomeloginToHomeScreen2305222124187523232418
openAccountMenuAfterLogin68597876778
homeAfterImportWithNewWallet1592442238591223702385
total40392938471176546514711
Send TransactionsopenSendPageFromHome31293523135
selectTokenToSendFormLoaded29253442934
reviewTransactionToConfirmationPage1047909123111710421231
total1125972129011911701290
SwapopenSwapPageFromHome925913829110138
fetchAndDisplaySwapQuotes269126892694226922694
total2798275328282928272828
🌐 Dapp Page Load Benchmarks

Current Commit: 5d88a00 | Date: 3/25/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±41ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 734ms (±39ms) 🟢 | historical mean value: 738ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 81ms (±11ms) 🟢 | historical mean value: 88ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 41ms 1.02s 1.34s 1.08s 1.34s
domContentLoaded 734ms 39ms 710ms 1.02s 764ms 1.02s
firstPaint 81ms 11ms 60ms 160ms 92ms 160ms
firstContentfulPaint 81ms 11ms 60ms 160ms 92ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -45.82 KiB (-0.65%)
  • ui: -90.88 KiB (-1.06%)
  • common: -19.21 KiB (-0.17%)

@MajorLift MajorLift left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Policy changes are removals, transitive, or narrowing:

  • AbortSignal -> AbortSignal.timeout
  • navigator -> navigator.{language,platform,...}
  • crypto -> crypto.subtle
  • document -> document.visibilityState

Comment on lines +440 to +447
"Document.prototype": true,
"DocumentFragment.prototype": true,
"Element.prototype": true,
"Event.prototype": true,
"EventTarget.prototype": true,
"NavigateEvent.prototype": true,
"NavigationDestination.prototype": true,
"Node.prototype": true,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Internal package. None of these look unexpected for lavadome.

@MajorLift MajorLift left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Policy changes are removals, transitive, or narrowing:

  • AbortSignal -> AbortSignal.timeout
  • navigator -> navigator.{language,platform,...}
  • crypto -> crypto.subtle
  • document -> document.visibilityState

@github-project-automation github-project-automation Bot moved this from Needs dev review to Review finalised - Ready to be merged in PR review queue Mar 27, 2026
@HowardBraham HowardBraham added this pull request to the merge queue Mar 27, 2026
Merged via the queue into main with commit b8e1316 Mar 27, 2026
211 checks passed
@HowardBraham HowardBraham deleted the chore/browser-targets-115-113 branch March 27, 2026 17:42
@github-actions github-actions Bot locked and limited conversation to collaborators Mar 27, 2026
@metamaskbot metamaskbot added the release-13.26.0 Issue or pull request that will be included in release 13.26.0 label Mar 27, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.26.0 Issue or pull request that will be included in release 13.26.0 size-S team-extension-platform Extension Platform team

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants