Skip to content

Conversation

@cryptodev-2s
Copy link
Contributor

@cryptodev-2s cryptodev-2s commented Jan 28, 2026

Description

Add eth-chainlist domain checking to isPublicEndpointUrl to improve coverage for identifying public RPC endpoints in metrics. If a domain is defined in eth-chainlist (cached), it's considered public and safe to report.

Initialization only happens in background context to avoid ~300KB memory footprint in UI.

Open in GitHub Codespaces

Changelog

CHANGELOG entry: null

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/WPC-354

Manual testing steps

Feature: RPC domain analytics

  Scenario: Verify rpc_domain shows actual host when switching to public RPC via banner
    # Setup - Add Ink network with local RPC
    Given user navigates to Settings → Networks → Add Network
    And user adds Ink network (Chain ID: 57073) with local RPC endpoint: http://127.0.0.1:8545
    And user also adds public RPC endpoint: https://rpc-qnd.inkonchain.com
    And user sets the local RPC as the default endpoint
    And user switches to Ink network
    
    # Trigger degraded state
    When user disconnects local RPC (or it becomes unavailable)
    And user waits for banner showing "Still connecting to Ink..."
    
    # Trigger RPC update from banner
    Then the "Update RPC" button appears on the banner
    When user clicks "Update RPC" on the banner
    And user is navigated to Edit Network screen
    And user switches default RPC to https://rpc-qnd.inkonchain.com
    
    # Verify analytics in Segment
    When user checks Segment dashboard for "Network Connection Banner RPC Updated" event
    Then the event property from_rpc_domain should be "custom" (local RPC is private)
    And the event property to_rpc_domain should be "rpc-qnd.inkonchain.com" (known public domain)

  Scenario: Verify rpc_domain for Infura networks using Switch to MetaMask default
    # Setup - Configure Arbitrum with local RPC
    Given user starts a local Ganache server: npx ganache --chain.chainId 42161
    And user navigates to Settings → Networks → Arbitrum One
    And user adds a new RPC endpoint: http://127.0.0.1:8545
    And user sets the local RPC as the default endpoint
    
    # Trigger degraded state
    When user stops the Ganache server (Ctrl+C)
    And user waits for banner showing "Still connecting to Arbitrum One..."
    
    # Switch to Infura via banner button
    Then the "Switch to MetaMask default RPC" button appears on the banner
    When user clicks "Switch to MetaMask default RPC"
    Then the toast "Updated to MetaMask default" appears
    
    # Verify analytics
    When user checks Segment for "Network Connection Banner Switch To MetaMask Default RPC Clicked"
    Then rpc_domain should be "custom" (the local RPC being switched from)

Screenshots/Recordings

Before

After

Pre-merge author checklist

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.

Note

Medium Risk
Medium risk because it changes privacy-sensitive URL sanitization used for metrics and introduces a new background↔UI call path; misclassification could leak or over-redact RPC domains in analytics.

Overview
Improves RPC-domain sanitization for metrics by moving isPublicEndpointUrl into app/scripts/lib/util.ts and extending it to treat endpoints as public when their hostname appears in the cached safe chainlist, in addition to existing Infura/Quicknode/known-custom URL checks.

To reduce privacy risk, chainlist-derived hostnames are filtered to exclude localhost, any IPv4/IPv6 literal, and RFC 6761 special-use domains (new isSpecialUseDomain + ip-regex dependency). UI metrics paths (useNetworkConnectionBanner, networks form banner tracking) now call isPublicEndpointUrl via submitRequestToBackground('isPublicEndpointUrl') (with error isolation), and tests were updated/added accordingly while removing the old shared/lib/network-utils isPublicEndpointUrl coverage.

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

@github-actions
Copy link
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.

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 29, 2026

Builds ready [0f0a988]
UI Startup Metrics (1307 ± 109 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13071071166110913731495
load--1114910145910611841290
domContentLoaded--1108902145210611791281
domInteractive--261693172474
firstPaint--152641167154178261
backgroundConnect--23221429711237251
firstReactRender--18103552128
initialActions--104114
loadScripts--89068912191059611064
setupStore--1363851623
numNetworkReqs--221580171572
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--19981600259521220812468
load--1090951152012210981450
domContentLoaded--1075946151512210811436
domInteractive--35191812534104
firstPaint--197751381141244328
backgroundConnect--34528765380335573
firstReactRender--25155682945
initialActions--106113
loadScripts--83572212571168401159
setupStore--1764981933
numNetworkReqs--1224826352143242
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--83967011931038961022
load--69959399695761914
domContentLoaded--69458899294752908
domInteractive--251698182278
firstPaint--1045833448132189
backgroundConnect--39181292542105
firstReactRender--15103351628
initialActions--103111
loadScripts--69158698393750906
setupStore--1162841220
numNetworkReqs--221587181574
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1398902210726816221803
load--74963313521387691090
domContentLoaded--73862413411397561080
domInteractive--38191832837108
firstPaint--172681038129207425
backgroundConnect--217164674114189559
firstReactRender--25173942733
initialActions--103112
loadScripts--73562213301377541070
setupStore--1252131418
numNetworkReqs--1234626060152252
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14021129259818714841654
load--1148969238016712101371
domContentLoaded--1147969238016712091371
domInteractive--89361138115106156
firstPaint--------
backgroundConnect--60241983979153
firstReactRender--1393531316
initialActions--103122
loadScripts--1113954234915711661279
setupStore--156208231157
numNetworkReqs--241290191781
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26751918532563927114375
load--13071080279936712482438
domContentLoaded--13061079279836612472438
domInteractive--12636887125119449
firstPaint--------
backgroundConnect--29811617183342191068
firstReactRender--21146982329
initialActions--213123
loadScripts--12591057263131412012152
setupStore--15010790203147653
numNetworkReqs--69392044290179
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16401375224918017572016
load--13901182165011114761608
domContentLoaded--13901182164911214761607
domInteractive--853124745125157
firstPaint--------
backgroundConnect--742723047113165
firstReactRender--14112531520
initialActions--102022
loadScripts--1346116816139814151579
setupStore--205256401381
numNetworkReqs--241293201881
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--31732250899693431674559
load--17931388559956418262939
domContentLoaded--17931387559856418252938
domInteractive--13740797141130506
firstPaint--------
backgroundConnect--36212248795182851033
firstReactRender--24186862634
initialActions--218123
loadScripts--17001363553553017022821
setupStore--191101464248287704
numNetworkReqs--69402384082160
19--------
📊 Page Load Benchmark Results

Current Commit: 0f0a988 | Date: 1/29/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±37ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 719ms (±36ms) 🟢 | historical mean value: 727ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±11ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 37ms 1.01s 1.31s 1.05s 1.31s
domContentLoaded 719ms 36ms 699ms 989ms 735ms 989ms
firstPaint 76ms 11ms 60ms 168ms 84ms 168ms
firstContentfulPaint 76ms 11ms 60ms 168ms 84ms 168ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 0 Bytes (0%)
  • common: 418 Bytes (0%)

@cryptodev-2s cryptodev-2s force-pushed the feat/add-chainlist-domain-check-to-public-endpoint branch from 0f0a988 to 2f1404a Compare January 29, 2026 06:58
@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 29, 2026

Builds ready [2f1404a]
UI Startup Metrics (1319 ± 104 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13191091156710413831486
load--112091013579911731292
domContentLoaded--111289813519911671276
domInteractive--251686172278
firstPaint--15064974102187291
backgroundConnect--23621830315242275
firstReactRender--18105561929
initialActions--108113
loadScripts--89268311281019571055
setupStore--1363651526
numNetworkReqs--211580171572
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--23611574672696424524998
load--1119946154714912021444
domContentLoaded--1098941150714111791417
domInteractive--37191762536105
firstPaint--217681436184256432
backgroundConnect--50827927734824601528
firstReactRender--23155062733
initialActions--105112
loadScripts--86471512531349461180
setupStore--1776792034
numNetworkReqs--1244926054167235
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8336801122878871011
load--68859584069737825
domContentLoaded--68359082969733818
domInteractive--2616128212284
firstPaint--1146277685125233
backgroundConnect--45181703547132
firstReactRender--16103861829
initialActions--106113
loadScripts--68058782267731811
setupStore--1274671328
numNetworkReqs--221582181574
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1281890218424014571719
load--72161810671077321007
domContentLoaded--71061010611087241001
domInteractive--35171422432110
firstPaint--1426749276191277
backgroundConnect--17013159380162371
firstReactRender--22152932427
initialActions--102111
loadScripts--7086081053106721993
setupStore--1253341319
numNetworkReqs--1474934062165295
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13731095192817114711666
load--1113948169711411811294
domContentLoaded--1112947169711411811294
domInteractive--68321913689138
firstPaint--------
backgroundConnect--52231613161119
firstReactRender--1393651330
initialActions--102012
loadScripts--1084933167310511481243
setupStore--12510014940
numNetworkReqs--231292191879
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--25831918450648227363577
load--12341081181414712771518
domContentLoaded--12341081181314712771518
domInteractive--1163939568121280
firstPaint--------
backgroundConnect--292811313262244891
firstReactRender--21144852331
initialActions--203123
loadScripts--11791038156710912251444
setupStore--16215759193230605
numNetworkReqs--80342244391181
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16141376242216517151907
load--13861176186812814591622
domContentLoaded--13861175186812814581622
domInteractive--842923341124144
firstPaint--------
backgroundConnect--71231824593167
firstReactRender--13101821417
initialActions--102012
loadScripts--13451160184110914181535
setupStore--164178271198
numNetworkReqs--231283171876
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--28171979417653630953969
load--15261240266932315732473
domContentLoaded--15261240266832315732473
domInteractive--11333754109111284
firstPaint--------
backgroundConnect--2891001020213312877
firstReactRender--21154552331
initialActions--207123
loadScripts--14781224252430215092451
setupStore--1399760203117708
numNetworkReqs--78382314591190
19--------
📊 Page Load Benchmark Results

Current Commit: 2f1404a | Date: 1/29/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±46ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 730ms (±43ms) 🟢 | historical mean value: 723ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±13ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 46ms 1.02s 1.41s 1.08s 1.41s
domContentLoaded 730ms 43ms 706ms 1.07s 767ms 1.07s
firstPaint 78ms 13ms 64ms 192ms 88ms 192ms
firstContentfulPaint 78ms 13ms 64ms 192ms 88ms 192ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 85 Bytes (0%)
  • ui: 43 Bytes (0%)
  • common: 418 Bytes (0%)

@cryptodev-2s cryptodev-2s marked this pull request as ready for review January 29, 2026 12:37
@cryptodev-2s cryptodev-2s force-pushed the feat/add-chainlist-domain-check-to-public-endpoint branch from 6e44c2c to 6dbed4f Compare January 29, 2026 19:07
@cryptodev-2s cryptodev-2s force-pushed the feat/add-chainlist-domain-check-to-public-endpoint branch from 6dbed4f to f8c585b Compare January 29, 2026 19:23
github-merge-queue bot pushed a commit that referenced this pull request Jan 30, 2026
…cp-13.17.0 (#39623)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Add eth-chainlist domain checking to isPublicEndpointUrl to improve
coverage for identifying public RPC endpoints in metrics. If a domain is
defined in eth-chainlist (cached), it's considered public and safe to
report.

Initialization only happens in background context to avoid ~300KB memory
footprint in UI.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/39623?quickstart=1)

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/WPC-354

## **Manual testing steps**

```gherkin
Feature: RPC domain analytics

  Scenario: Verify rpc_domain shows actual host when switching to public RPC via banner
    # Setup - Add Ink network with local RPC
    Given user navigates to Settings → Networks → Add Network
    And user adds Ink network (Chain ID: 57073) with local RPC endpoint: http://127.0.0.1:8545
    And user also adds public RPC endpoint: https://rpc-qnd.inkonchain.com
    And user sets the local RPC as the default endpoint
    And user switches to Ink network
    
    # Trigger degraded state
    When user disconnects local RPC (or it becomes unavailable)
    And user waits for banner showing "Still connecting to Ink..."
    
    # Trigger RPC update from banner
    Then the "Update RPC" button appears on the banner
    When user clicks "Update RPC" on the banner
    And user is navigated to Edit Network screen
    And user switches default RPC to https://rpc-qnd.inkonchain.com
    
    # Verify analytics in Segment
    When user checks Segment dashboard for "Network Connection Banner RPC Updated" event
    Then the event property from_rpc_domain should be "custom" (local RPC is private)
    And the event property to_rpc_domain should be "rpc-qnd.inkonchain.com" (known public domain)

  Scenario: Verify rpc_domain for Infura networks using Switch to MetaMask default
    # Setup - Configure Arbitrum with local RPC
    Given user starts a local Ganache server: npx ganache --chain.chainId 42161
    And user navigates to Settings → Networks → Arbitrum One
    And user adds a new RPC endpoint: http://127.0.0.1:8545
    And user sets the local RPC as the default endpoint
    
    # Trigger degraded state
    When user stops the Ganache server (Ctrl+C)
    And user waits for banner showing "Still connecting to Arbitrum One..."
    
    # Switch to Infura via banner button
    Then the "Switch to MetaMask default RPC" button appears on the banner
    When user clicks "Switch to MetaMask default RPC"
    Then the toast "Updated to MetaMask default" appears
    
    # Verify analytics
    When user checks Segment for "Network Connection Banner Switch To MetaMask Default RPC Clicked"
    Then rpc_domain should be "custom" (the local RPC being switched from)
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
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.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes privacy/analytics sanitization for RPC URLs by expanding
what’s considered “public” and moving the check behind a background RPC
call; misclassification could leak domains to metrics or over-redact
valid public endpoints.
> 
> **Overview**
> **Expands `isPublicEndpointUrl` to cover chainlist-known RPC
domains.** The public-endpoint check is moved into
`app/scripts/lib/util.ts`, now optionally allowing any hostname found in
the cached safe chainlist while explicitly filtering out `localhost`, IP
literals (v4/v6), and RFC 6761 special-use/reserved domains.
> 
> **Routes public-endpoint checks through the background for UI
metrics.** UI analytics in `useNetworkConnectionBanner` and the networks
form now call `submitRequestToBackground('isPublicEndpointUrl', [url])`
(with added error isolation), and the background controller exposes this
method using the runtime Infura project id. Tests were updated
accordingly, and `ip-regex` was added as a dependency.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f5769e0. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [f5769e0]
UI Startup Metrics (1312 ± 105 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13121096161610513861500
load--1113903137510711871305
domContentLoaded--1107899136810611801302
domInteractive--271693182376
firstPaint--162661298136195327
backgroundConnect--23021328210234250
firstReactRender--17123241926
initialActions--107113
loadScripts--88968411521079631086
setupStore--1343351624
numNetworkReqs--221579171572
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--21921568740386321314254
load--1092966157213411171415
domContentLoaded--1076954150412911001408
domInteractive--38191803038115
firstPaint--209711499230234451
backgroundConnect--48328734375253651857
firstReactRender--24155772640
initialActions--107112
loadScripts--83270612301178591140
setupStore--1677091835
numNetworkReqs--1235225550140238
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--807664118392863972
load--66858491374714843
domContentLoaded--66357990674709837
domInteractive--241589172275
firstPaint--1025931652133212
backgroundConnect--38171282442102
firstReactRender--14105051524
initialActions--104112
loadScripts--66057789873707830
setupStore--1163951122
numNetworkReqs--221585191578
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1248855184525714621753
load--70261710571077001031
domContentLoaded--69260910511086881022
domInteractive--3614173273697
firstPaint--1416851286165338
backgroundConnect--15713033446155306
firstReactRender--23163542432
initialActions--101111
loadScripts--68960710421066861002
setupStore--1153641317
numNetworkReqs--1345127756157261
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14661167207518615501859
load--1190980184214512331431
domContentLoaded--1189980184214512321431
domInteractive--793333550106149
firstPaint--------
backgroundConnect--68273685576183
firstReactRender--1594981339
initialActions--103122
loadScripts--1153966181313012021350
setupStore--145157191054
numNetworkReqs--221281171875
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--27852031749376627924272
load--13071053228027613331923
domContentLoaded--13071052228027613331923
domInteractive--14635660120145477
firstPaint--------
backgroundConnect--42312845255264381092
firstReactRender--21142942327
initialActions--203123
loadScripts--12471031224523912711756
setupStore--14210731171169543
numNetworkReqs--78412324594191
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16751367296622017872013
load--14311190274218214941707
domContentLoaded--14301190274218214941707
domInteractive--912823143129157
firstPaint--------
backgroundConnect--812421553132189
firstReactRender--13112321517
initialActions--102122
loadScripts--13811173271116714301577
setupStore--164132251198
numNetworkReqs--231285181879
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--518921769412191564847963
load--275012645123100234744462
domContentLoaded--274912645122100134734461
domInteractive--214321087170260489
firstPaint--------
backgroundConnect--807134273661311502041
firstReactRender--4015136195367
initialActions--316145
loadScripts--26461243501696333364120
setupStore--1586781183203713
numNetworkReqs--74292264184179
19--------
📊 Page Load Benchmark Results

Current Commit: f5769e0 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±39ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 725ms (±36ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±11ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 39ms 1.02s 1.33s 1.07s 1.33s
domContentLoaded 725ms 36ms 707ms 1.00s 752ms 1.00s
firstPaint 77ms 11ms 64ms 172ms 88ms 172ms
firstContentfulPaint 77ms 11ms 64ms 172ms 88ms 172ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: -424 Bytes (-0.01%)
  • ui: 251 Bytes (0%)
  • common: 3.16 KiB (0.03%)

@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 30, 2026
@cryptodev-2s cryptodev-2s added this pull request to the merge queue Jan 30, 2026
github-merge-queue bot pushed a commit that referenced this pull request Jan 30, 2026
…cp-13.17.0 (#39623)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Add eth-chainlist domain checking to isPublicEndpointUrl to improve
coverage for identifying public RPC endpoints in metrics. If a domain is
defined in eth-chainlist (cached), it's considered public and safe to
report.

Initialization only happens in background context to avoid ~300KB memory
footprint in UI.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/39623?quickstart=1)

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/WPC-354

## **Manual testing steps**

```gherkin
Feature: RPC domain analytics

  Scenario: Verify rpc_domain shows actual host when switching to public RPC via banner
    # Setup - Add Ink network with local RPC
    Given user navigates to Settings → Networks → Add Network
    And user adds Ink network (Chain ID: 57073) with local RPC endpoint: http://127.0.0.1:8545
    And user also adds public RPC endpoint: https://rpc-qnd.inkonchain.com
    And user sets the local RPC as the default endpoint
    And user switches to Ink network
    
    # Trigger degraded state
    When user disconnects local RPC (or it becomes unavailable)
    And user waits for banner showing "Still connecting to Ink..."
    
    # Trigger RPC update from banner
    Then the "Update RPC" button appears on the banner
    When user clicks "Update RPC" on the banner
    And user is navigated to Edit Network screen
    And user switches default RPC to https://rpc-qnd.inkonchain.com
    
    # Verify analytics in Segment
    When user checks Segment dashboard for "Network Connection Banner RPC Updated" event
    Then the event property from_rpc_domain should be "custom" (local RPC is private)
    And the event property to_rpc_domain should be "rpc-qnd.inkonchain.com" (known public domain)

  Scenario: Verify rpc_domain for Infura networks using Switch to MetaMask default
    # Setup - Configure Arbitrum with local RPC
    Given user starts a local Ganache server: npx ganache --chain.chainId 42161
    And user navigates to Settings → Networks → Arbitrum One
    And user adds a new RPC endpoint: http://127.0.0.1:8545
    And user sets the local RPC as the default endpoint
    
    # Trigger degraded state
    When user stops the Ganache server (Ctrl+C)
    And user waits for banner showing "Still connecting to Arbitrum One..."
    
    # Switch to Infura via banner button
    Then the "Switch to MetaMask default RPC" button appears on the banner
    When user clicks "Switch to MetaMask default RPC"
    Then the toast "Updated to MetaMask default" appears
    
    # Verify analytics
    When user checks Segment for "Network Connection Banner Switch To MetaMask Default RPC Clicked"
    Then rpc_domain should be "custom" (the local RPC being switched from)
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
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.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes privacy/analytics sanitization for RPC URLs by expanding
what’s considered “public” and moving the check behind a background RPC
call; misclassification could leak domains to metrics or over-redact
valid public endpoints.
> 
> **Overview**
> **Expands `isPublicEndpointUrl` to cover chainlist-known RPC
domains.** The public-endpoint check is moved into
`app/scripts/lib/util.ts`, now optionally allowing any hostname found in
the cached safe chainlist while explicitly filtering out `localhost`, IP
literals (v4/v6), and RFC 6761 special-use/reserved domains.
> 
> **Routes public-endpoint checks through the background for UI
metrics.** UI analytics in `useNetworkConnectionBanner` and the networks
form now call `submitRequestToBackground('isPublicEndpointUrl', [url])`
(with added error isolation), and the background controller exposes this
method using the runtime Infura project id. Tests were updated
accordingly, and `ip-regex` was added as a dependency.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f5769e0. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@cryptodev-2s cryptodev-2s removed this pull request from the merge queue due to a manual request Jan 30, 2026
@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [7cb2c12]
UI Startup Metrics (1298 ± 111 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12981053159211113551496
load--1102892136610211541308
domContentLoaded--1096885136010111481302
domInteractive--251688162370
firstPaint--1826412252281861011
backgroundConnect--2272152578230247
firstReactRender--17104151928
initialActions--105113
loadScripts--88167611481029371087
setupStore--1263451520
numNetworkReqs--221582181575
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--19141570233614920322169
load--1054920152813410491458
domContentLoaded--1041916151613510331446
domInteractive--3619195273599
firstPaint--1626946380215309
backgroundConnect--32528254043340426
firstReactRender--24156092546
initialActions--1011113
loadScripts--80569012521247971172
setupStore--1565371828
numNetworkReqs--1195025952153237
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--87369612781079421075
load--72361498993794884
domContentLoaded--71761098492788876
domInteractive--261693172480
firstPaint--1096329850122227
backgroundConnect--40191382542113
firstReactRender--16103651728
initialActions--107113
loadScripts--71460898292782874
setupStore--1264461328
numNetworkReqs--221582181575
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1234841192624414641693
load--70761311041107041024
domContentLoaded--69760610981106851014
domInteractive--35161552533102
firstPaint--1446553087190317
backgroundConnect--14813132024150182
firstReactRender--23174142530
initialActions--102111
loadScripts--69560410901086831006
setupStore--1253941317
numNetworkReqs--1265027758151252
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14351123193716315251733
load--1156971143610312121347
domContentLoaded--1155971143610412111347
domInteractive--813223846134149
firstPaint--------
backgroundConnect--67252945590191
firstReactRender--14105261321
initialActions--103122
loadScripts--112195513198611781254
setupStore--13576131137
numNetworkReqs--231288181880
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--27951799663775827734413
load--13471056260338012782438
domContentLoaded--13471056259938012782438
domInteractive--15036823164121595
firstPaint--------
backgroundConnect--35512613983124581118
firstReactRender--21155552228
initialActions--216123
loadScripts--12821033254232212262177
setupStore--1669746214206655
numNetworkReqs--70382114386181
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16711421220018318082018
load--14221227177512215071644
domContentLoaded--14221227177512215071643
domInteractive--932923141128163
firstPaint--------
backgroundConnect--732520245117172
firstReactRender--14112321519
initialActions--103112
loadScripts--13831208175010614631568
setupStore--174163281382
numNetworkReqs--231285181976
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29362172414550333084075
load--16061248257931817962383
domContentLoaded--16061247257831817962383
domInteractive--11533667116105405
firstPaint--------
backgroundConnect--3441171744294349958
firstReactRender--21153552431
initialActions--213122
loadScripts--15401226255228617212265
setupStore--15091252229143670
numNetworkReqs--69342064382179
19--------
📊 Page Load Benchmark Results

Current Commit: 7cb2c12 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±71ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 734ms (±69ms) 🟢 | historical mean value: 717ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±11ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 71ms 1.01s 1.34s 1.26s 1.34s
domContentLoaded 734ms 69ms 698ms 1.01s 932ms 1.01s
firstPaint 77ms 11ms 64ms 168ms 84ms 168ms
firstContentfulPaint 77ms 11ms 64ms 168ms 84ms 168ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 78 Bytes (0%)
  • ui: -1.09 KiB (-0.01%)
  • common: 2.52 KiB (0.03%)

@cryptodev-2s cryptodev-2s added this pull request to the merge queue Jan 30, 2026
@cryptodev-2s cryptodev-2s removed this pull request from the merge queue due to a manual request Jan 30, 2026
@cryptodev-2s cryptodev-2s added this pull request to the merge queue Jan 30, 2026
@cryptodev-2s cryptodev-2s removed this pull request from the merge queue due to a manual request Jan 30, 2026
@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [ce53ef0]
UI Startup Metrics (1358 ± 152 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13581074188515214411641
load--1155911161014612251435
domContentLoaded--1147907160514612171426
domInteractive--261687162472
firstPaint--190631173179208333
backgroundConnect--23521530518241280
firstReactRender--1793651929
initialActions--109113
loadScripts--92969713711469981210
setupStore--1363661528
numNetworkReqs--211574161572
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--18861491279920319612216
load--1054926197016010381466
domContentLoaded--1036914183714910251457
domInteractive--35181983235116
firstPaint--231661847257229377
backgroundConnect--33028556339349397
firstReactRender--23165462536
initialActions--106112
loadScripts--79669115841407741191
setupStore--1553761626
numNetworkReqs--1265135553147241
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--83466012771088931054
load--69059296886749888
domContentLoaded--68558795985744882
domInteractive--251591172277
firstPaint--1015535552120182
backgroundConnect--3818144224683
firstReactRender--15103451625
initialActions--103112
loadScripts--68258594884742880
setupStore--1153951221
numNetworkReqs--221581171572
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12761002220723614451653
load--71061112751207041030
domContentLoaded--70260512641196981024
domInteractive--3216133243091
firstPaint--1446646881194273
backgroundConnect--14812933335149198
firstReactRender--21153232225
initialActions--103111
loadScripts--69960312551186961016
setupStore--1051721215
numNetworkReqs--1285126657154254
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14371156195918315621780
load--1159968171014012481414
domContentLoaded--1158967171014012481414
domInteractive--70342744192137
firstPaint--------
backgroundConnect--63252044680171
firstReactRender--13103741420
initialActions--103122
loadScripts--1124952168312611941353
setupStore--176196281057
numNetworkReqs--231286181776
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--27351922665874727624110
load--13121047255236412532400
domContentLoaded--13121047255136412532400
domInteractive--14237799149109485
firstPaint--------
backgroundConnect--3111281078246327961
firstReactRender--21148182229
initialActions--203123
loadScripts--12421010239231011962254
setupStore--20572728349287755
numNetworkReqs--71381894396181
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16511376226517817731958
load--14091205169212314921631
domContentLoaded--14081200169212314921631
domInteractive--902922942123147
firstPaint--------
backgroundConnect--752324051126180
firstReactRender--14104951522
initialActions--102012
loadScripts--13621188158810314451534
setupStore--2242684611121
numNetworkReqs--231396191877
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29322149434558533224123
load--16431265257236918882448
domContentLoaded--16421265257236918882447
domInteractive--11331743115104369
firstPaint--------
backgroundConnect--3111101393258301884
firstReactRender--22155962532
initialActions--213122
loadScripts--15711234255232317292286
setupStore--1744829235292751
numNetworkReqs--70341904398180
19--------
📊 Page Load Benchmark Results

Current Commit: ce53ef0 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±71ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 737ms (±68ms) 🟢 | historical mean value: 717ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±13ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 71ms 1.02s 1.32s 1.29s 1.32s
domContentLoaded 737ms 68ms 701ms 1.00s 965ms 1.00s
firstPaint 77ms 13ms 64ms 196ms 84ms 196ms
firstContentfulPaint 77ms 13ms 64ms 196ms 84ms 196ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 78 Bytes (0%)
  • ui: -1.09 KiB (-0.01%)
  • common: 2.52 KiB (0.03%)

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [14ec257]
UI Startup Metrics (1324 ± 136 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13241054180313614001573
load--1139899152212912051371
domContentLoaded--1132891148712811981361
domInteractive--251692182276
firstPaint--203641496240211360
backgroundConnect--23121426411234257
firstReactRender--16103351827
initialActions--104113
loadScripts--91568212471289791151
setupStore--1363241422
numNetworkReqs--221583171570
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--21091499884187320573812
load--1077952196416710711435
domContentLoaded--1061945194816210591426
domInteractive--37181592834109
firstPaint--1777054596233382
backgroundConnect--4102822755403339716
firstReactRender--25155492750
initialActions--106113
loadScripts--82569516391508271171
setupStore--1684471831
numNetworkReqs--1294934254156243
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--84366913101149171045
load--70160399286769855
domContentLoaded--69659898486765850
domInteractive--2716113212385
firstPaint--1026139051121203
backgroundConnect--3618125213996
firstReactRender--15103661730
initialActions--105112
loadScripts--69359698285763848
setupStore--1263051226
numNetworkReqs--221578171572
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1248834213424514561671
load--70761012691177061053
domContentLoaded--69760412611176951047
domInteractive--37171993732147
firstPaint--14863917129144438
backgroundConnect--15613031940155273
firstReactRender--22153232328
initialActions--103111
loadScripts--69560312521166931040
setupStore--1246061417
numNetworkReqs--914726046108184
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14321155253319115231768
load--1162994216615312311344
domContentLoaded--1162994216615312301343
domInteractive--68342404189155
firstPaint--------
backgroundConnect--59262194168156
firstReactRender--14104571335
initialActions--103122
loadScripts--1132969208114512041311
setupStore--146135161246
numNetworkReqs--231292201878
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26371857593660227423935
load--12671038237128612271837
domContentLoaded--12671038237128612261837
domInteractive--13236722120122412
firstPaint--------
backgroundConnect--2971301701252299876
firstReactRender--22146592429
initialActions--215123
loadScripts--12191012231325911851819
setupStore--15110931211105641
numNetworkReqs--74362514892207
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16591292208616117871906
load--14131219173311315051619
domContentLoaded--14121219173311315041619
domInteractive--862423844127157
firstPaint--------
backgroundConnect--752427453111187
firstReactRender--14115551519
initialActions--102122
loadScripts--1370120016349714531531
setupStore--2252264112112
numNetworkReqs--231286181877
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29862192736368632514118
load--16411243587056117602475
domContentLoaded--16401242587056117592474
domInteractive--11532745118114391
firstPaint--------
backgroundConnect--3431221773269342911
firstReactRender--22153352629
initialActions--207122
loadScripts--15761222584054016772305
setupStore--1458809188214558
numNetworkReqs--73382174390175
19--------
📊 Page Load Benchmark Results

Current Commit: 14ec257 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±63ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 739ms (±61ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±10ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 63ms 1.02s 1.34s 1.27s 1.34s
domContentLoaded 739ms 61ms 704ms 1.01s 940ms 1.01s
firstPaint 78ms 10ms 60ms 160ms 84ms 160ms
firstContentfulPaint 78ms 10ms 60ms 160ms 84ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 78 Bytes (0%)
  • ui: -1.09 KiB (-0.01%)
  • common: 2.53 KiB (0.03%)

@cryptodev-2s cryptodev-2s added this pull request to the merge queue Jan 30, 2026
Merged via the queue into main with commit 906bfdd Jan 30, 2026
179 checks passed
@cryptodev-2s cryptodev-2s deleted the feat/add-chainlist-domain-check-to-public-endpoint branch January 30, 2026 23:36
@github-actions github-actions bot locked and limited conversation to collaborators Jan 30, 2026
@metamaskbot metamaskbot added the release-13.18.0 Issue or pull request that will be included in release 13.18.0 label Jan 30, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.18.0 Issue or pull request that will be included in release 13.18.0 size-L team-core-platform Core Platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants