Skip to content

feat: drive RPC connection banner from NetworkConnectionBannerController (WPC-1014)#43361

Draft
cryptodev-2s wants to merge 4 commits into
mainfrom
wpc-1014-use-banner-controller
Draft

feat: drive RPC connection banner from NetworkConnectionBannerController (WPC-1014)#43361
cryptodev-2s wants to merge 4 commits into
mainfrom
wpc-1014-use-banner-controller

Conversation

@cryptodev-2s

@cryptodev-2s cryptodev-2s commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Description

Replaces the in-app duplicate of the RPC connection banner rule + 5s/30s timer escalation with the new `@metamask/network-connection-banner-controller`, registered in `metamask-controller` alongside ConnectivityController.

Wiring

  • `package.json` declares the controller as `@metamask/network-connection-banner-controller` with a Yarn `resolutions` alias to the preview tarball (`@metamask-previews/network-connection-banner-controller@0.1.0-preview-7507a11`). When the package ships under its real name, only the resolution line gets removed.
  • New init + restricted-messenger files under `app/scripts/messenger-client-init/`; registered in `messengers/index.ts`, `controller-list.ts`, and `metamask-controller.js`.
  • Extension already runs the peer controller versions the package declares (`network-controller@^32`, `connectivity-controller@^0.2`, `network-enablement-controller@^5.3`) — no version-skew cast needed.

Cleanup

  • `getNetworkConnectionBanner` selector in `ui/selectors/selectors.js` now reads from `state.metamask.{status, network}` (the new controller's flat-merged state) and adapts to the existing `NetworkConnectionBanner` shape, including translating `infuraNetworkClientId` back to `infuraEndpointIndex` so the "Switch to MetaMask default RPC" CTA needs no changes.
  • `ui/hooks/useNetworkConnectionBanner.ts` drops the inline timer state machine, the `selectFirstFailedNetworkForNetworkConnectionBanner` dependency, the `isOffline` reads, and every `dispatch(updateNetworkConnectionBanner(...))` call. Analytics fires from a single `useEffect` watching banner-status transitions. `switchToInfura` keeps calling `updateNetwork` directly (the controller could expose this, but we don't need a new background plumb).
  • Deleted from `AppStateController`: `networkConnectionBanner` field, `updateNetworkConnectionBanner` method, the action handler list entry, and the related shared-types entry in `shared/types/background.ts`.
  • Deleted `selectFirstFailedNetworkForNetworkConnectionBanner` (+ its two helper sub-selectors) from `ui/selectors/multichain/networks.ts` and `updateNetworkConnectionBanner` from `ui/store/actions.ts`.
  • Regenerated `app-state-controller-method-action-types.ts`.

Net diff: −1,728 LOC. UI behavior unchanged.

Core PR: MetaMask/core#9041

Changelog

CHANGELOG entry: null

Related issues

Fixes: WPC-1014

Manual testing steps

  1. Build the extension; confirm `Engine.context.NetworkConnectionBannerController` is reachable from the background.
  2. Open DevTools → Network panel. Block all `*.infura.io` hosts; wait 30s. No banner (single registrable domain, suppressed).
  3. Block `*.infura.io` AND a non-Infura host. Degraded banner at 5s, unavailable at 30s.
  4. Configure a custom RPC for any chain and block only that host. Degraded banner appears; the "Switch to MetaMask default RPC" button switches the chain back to its Infura endpoint and shows the success toast.
  5. Disable wifi. No banner — the existing offline short-circuit is honored by the controller.

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.

@github-actions

github-actions Bot commented Jun 9, 2026

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.

@mm-token-exchange-service mm-token-exchange-service Bot added the team-core-platform Core Platform team label Jun 9, 2026
@socket-security

socket-security Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​metamask/​network-connection-banner-controller@​0.1.0-preview-7507a11100100100100100

View full report

@metamaskbotv2

metamaskbotv2 Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor
Builds ready [69b0db8]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 21 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 27199078352 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -72%
  • loadNewAccount/total: -72%
  • bridgeUserActions/bridge_load_page: -67%
  • bridgeUserActions/bridge_load_asset_picker: -77%
  • bridgeUserActions/bridge_search_token: -33%
  • bridgeUserActions/total: -49%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -21%
  • startupStandardHome/load: -24%
  • startupStandardHome/domContentLoaded: -24%
  • startupStandardHome/domInteractive: -35%
  • startupStandardHome/backgroundConnect: -13%
  • startupStandardHome/firstReactRender: +11%
  • startupStandardHome/loadScripts: -24%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -33%
  • startupPowerUserHome/load: -19%
  • startupPowerUserHome/domContentLoaded: -19%
  • startupPowerUserHome/domInteractive: -42%
  • startupPowerUserHome/firstPaint: -27%
  • startupPowerUserHome/backgroundConnect: -64%
  • startupPowerUserHome/firstReactRender: +21%
  • startupPowerUserHome/loadScripts: -19%
  • startupPowerUserHome/setupStore: +17%
  • startupPowerUserHome/numNetworkReqs: -72%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/INP: p75 472ms
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -64%
  • onboardingImportWallet/pwFormToMetricsScreen: +541%
  • onboardingImportWallet/metricsToWalletReadyScreen: -31%
  • onboardingImportWallet/doneButtonToHomeScreen: -63%
  • onboardingImportWallet/total: -43%
  • onboardingNewWallet/srpButtonToPwForm: -75%
  • onboardingNewWallet/createPwToRecoveryScreen: +1247%
  • onboardingNewWallet/skipBackupToMetricsScreen: -65%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: +17%
  • assetDetails/assetClickToPriceChart: -64%
  • assetDetails/total: -64%
  • solanaAssetDetails/assetClickToPriceChart: -77%
  • solanaAssetDetails/total: -77%
  • importSrpHome/loginToHomeScreen: -44%
  • importSrpHome/openAccountMenuAfterLogin: -79%
  • importSrpHome/homeAfterImportWithNewWallet: -82%
  • importSrpHome/total: -77%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +26%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 1.42 MiB (26.82%)
  • ui: 1.56 KiB (0.01%)
  • common: 825.46 KiB (6.8%)

@metamaskbotv2

metamaskbotv2 Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor
Builds ready [f0e8235]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 19 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 27214193802 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -58%
  • loadNewAccount/total: -58%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -57%
  • bridgeUserActions/bridge_search_token: -25%
  • bridgeUserActions/total: -39%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -29%
  • startupStandardHome/load: -32%
  • startupStandardHome/domContentLoaded: -32%
  • startupStandardHome/domInteractive: -45%
  • startupStandardHome/firstPaint: -26%
  • startupStandardHome/backgroundConnect: -26%
  • startupStandardHome/loadScripts: -31%
  • startupStandardHome/setupStore: -29%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -35%
  • startupPowerUserHome/load: -21%
  • startupPowerUserHome/domContentLoaded: -21%
  • startupPowerUserHome/domInteractive: -45%
  • startupPowerUserHome/firstPaint: -33%
  • startupPowerUserHome/backgroundConnect: -66%
  • startupPowerUserHome/firstReactRender: +32%
  • startupPowerUserHome/loadScripts: -21%
  • startupPowerUserHome/setupStore: +17%
  • startupPowerUserHome/numNetworkReqs: -71%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 568ms
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: firefox/webpack/userJourneyTransactions

Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -65%
  • onboardingImportWallet/pwFormToMetricsScreen: +542%
  • onboardingImportWallet/metricsToWalletReadyScreen: -33%
  • onboardingImportWallet/doneButtonToHomeScreen: -33%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -99%
  • onboardingImportWallet/total: -49%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/createPwToRecoveryScreen: +1055%
  • onboardingNewWallet/skipBackupToMetricsScreen: -65%
  • assetDetails/assetClickToPriceChart: -62%
  • assetDetails/total: -62%
  • importSrpHome/loginToHomeScreen: -33%
  • importSrpHome/openAccountMenuAfterLogin: -80%
  • importSrpHome/homeAfterImportWithNewWallet: -74%
  • importSrpHome/total: -69%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 importSrpHome/INP: p75 224ms
  • 🟡 importSrpHome/FCP: p75 2.0s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +17%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 163.1 KiB (2.42%)
  • ui: -1.56 KiB (-0.01%)
  • common: -155.05 KiB (-1.18%)

@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@mm-token-exchange-service

Copy link
Copy Markdown

Policy update failed. You can review the logs or retry the policy update here

@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@metamaskbot update-policies

@mm-token-exchange-service

Copy link
Copy Markdown

LavaMoat validation failed but no policy diffs were produced (the validation job may have crashed before generating diffs).

Failed jobs:

The banner-rule logic that needed eTLD+1 grouping now lives in the
NetworkConnectionBannerController package; nothing in the extension
imports `getDomain` anymore.
The field was removed from the controller in the previous refactor —
update the inline snapshot to match.
@metamaskbotv2

metamaskbotv2 Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor
Builds ready [6f2f25a] [reused from f0e8235]
Deprecated Browserify fallback builds
⚡ Performance Benchmarks (Total: 🟢 19 pass · 🟡 2 warn · 🔴 0 fail)

Baseline (latest main): 51036da | Date: 5/2/2026 | Pipeline: 27219805872 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -58%
  • loadNewAccount/total: -58%
  • bridgeUserActions/bridge_load_page: -71%
  • bridgeUserActions/bridge_load_asset_picker: -57%
  • bridgeUserActions/bridge_search_token: -25%
  • bridgeUserActions/total: -39%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -29%
  • startupStandardHome/load: -32%
  • startupStandardHome/domContentLoaded: -32%
  • startupStandardHome/domInteractive: -45%
  • startupStandardHome/firstPaint: -26%
  • startupStandardHome/backgroundConnect: -26%
  • startupStandardHome/loadScripts: -31%
  • startupStandardHome/setupStore: -29%
  • startupStandardHome/numNetworkReqs: -67%
  • startupPowerUserHome/uiStartup: -35%
  • startupPowerUserHome/load: -21%
  • startupPowerUserHome/domContentLoaded: -21%
  • startupPowerUserHome/domInteractive: -45%
  • startupPowerUserHome/firstPaint: -33%
  • startupPowerUserHome/backgroundConnect: -66%
  • startupPowerUserHome/firstReactRender: +32%
  • startupPowerUserHome/loadScripts: -21%
  • startupPowerUserHome/setupStore: +17%
  • startupPowerUserHome/numNetworkReqs: -71%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 568ms
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: firefox/webpack/userJourneyTransactions

Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
importSrpHome
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -65%
  • onboardingImportWallet/pwFormToMetricsScreen: +542%
  • onboardingImportWallet/metricsToWalletReadyScreen: -33%
  • onboardingImportWallet/doneButtonToHomeScreen: -33%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -99%
  • onboardingImportWallet/total: -49%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/createPwToRecoveryScreen: +1055%
  • onboardingNewWallet/skipBackupToMetricsScreen: -65%
  • assetDetails/assetClickToPriceChart: -62%
  • assetDetails/total: -62%
  • importSrpHome/loginToHomeScreen: -33%
  • importSrpHome/openAccountMenuAfterLogin: -80%
  • importSrpHome/homeAfterImportWithNewWallet: -74%
  • importSrpHome/total: -69%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 importSrpHome/INP: p75 224ms
  • 🟡 importSrpHome/FCP: p75 2.0s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +17%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 163.1 KiB (2.42%)
  • ui: -1.56 KiB (-0.01%)
  • common: -155.05 KiB (-1.18%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant