Repository: MetaMask/metamask-extension
Pull request #31470: test: rename more ganache old references
Author: login: seaona
Labels: name: team-qa
description: QA team
name: skip-e2e-quality-gate
name: release-12.17.0
description: Issue or pull request that will be included in release 12.17.0
Created: 2025-04-01T08:53:57Z | Merged: 2025-04-01T15:37:14Z

<!--
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**

No functional changes. Just renaming.

Relates to:  https://github.com/MetaMask/metamask-extension/pull/30709

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31470?quickstart=1)

## **Related issues**

Fixes:

## **Manual testing steps**

1. Ci continues to work

## **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**

- [x] 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).
- [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](https://jsdoc.app/) format if applicable
- [x] 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.



Diff:
diff --git a/test/e2e/constants.ts b/test/e2e/constants.ts
index 624260076c96..36de7ebb366f 100644
--- a/test/e2e/constants.ts
+++ b/test/e2e/constants.ts
@@ -1,8 +1,8 @@
-/** Address of the first account generated by the default Ganache mnemonic. */
-export const GANACHE_ACCOUNT = '0xe18035bf8712672935fdb4e5e431b1a0183d2dfc';
+/** Address of the first account generated by the default local node mnemonic. */
+export const LOCAL_NODE_ACCOUNT = '0xe18035bf8712672935fdb4e5e431b1a0183d2dfc';
 
-/** Private key for the Ganache account. */
-export const GANACHE_PRIVATE_KEY =
+/** Private key for the local node default account. */
+export const LOCAL_NODE_PRIVATE_KEY =
   '0x4cfd3e90fc78b0f86bf7524722150bb8da9c60cd532564d7ff43f5716514f553';
 
 /** Address of the account derived from the default onboarding fixture. */
@@ -25,7 +25,7 @@ export const ERC_4337_ACCOUNT_SNAP_URL =
 /* Salt used to generate the 4337 account. */
 export const ERC_4337_ACCOUNT_SALT = '0x1';
 
-/* Address of the SimpleAccountFactory smart contract deployed to Ganache. */
+/* Address of the SimpleAccountFactory smart contract deployed to the local node. */
 export const SIMPLE_ACCOUNT_FACTORY =
   '0x4aFf835038b16dccDb1670103C4877A8F93E5219';
 
@@ -33,11 +33,11 @@ export const SIMPLE_ACCOUNT_FACTORY =
 export const TEST_SNAPS_SIMPLE_KEYRING_WEBSITE_URL =
   'https://metamask.github.io/snap-simple-keyring/1.1.6/';
 
-/* Address of the VerifyingPaymaster smart contract deployed to Ganache. */
+/* Address of the VerifyingPaymaster smart contract deployed to the local node. */
 export const VERIFYING_PAYMASTER = '0xbdbDEc38ed168331b1F7004cc9e5392A2272C1D7';
 
-/* Default ganache ETH balance in decimal when first login */
-export const DEFAULT_GANACHE_ETH_BALANCE_DEC = '25';
+/* Default local node ETH balance in decimal when first login */
+export const DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC = '25';
 
 /* Dapp host addresses and URL*/
 export const DAPP_HOST_ADDRESS = '127.0.0.1:8080';
diff --git a/test/e2e/flask/multichain-api/testHelpers.ts b/test/e2e/flask/multichain-api/testHelpers.ts
index 1c314090b0bc..c97676e63c20 100644
--- a/test/e2e/flask/multichain-api/testHelpers.ts
+++ b/test/e2e/flask/multichain-api/testHelpers.ts
@@ -9,7 +9,7 @@ import {
   WINDOW_TITLES,
 } from '../../helpers';
 import { Driver } from '../../webdriver/driver';
-import { DEFAULT_GANACHE_ETH_BALANCE_DEC } from '../../constants';
+import { DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC } from '../../constants';
 
 export type FixtureCallbackArgs = { driver: Driver; extensionId: string };
 
@@ -33,7 +33,7 @@ export const DEFAULT_MULTICHAIN_TEST_DAPP_FIXTURE_OPTIONS = {
       type: 'ganache',
       options: {
         secretKey: PRIVATE_KEY,
-        balance: convertETHToHexGwei(DEFAULT_GANACHE_ETH_BALANCE_DEC),
+        balance: convertETHToHexGwei(DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC),
         accounts: multipleGanacheOptions.accounts,
       },
     },
diff --git a/test/e2e/flask/multichain-api/wallet_invokeMethod.spec.ts b/test/e2e/flask/multichain-api/wallet_invokeMethod.spec.ts
index 4160e532b301..fef21e0b4f2f 100644
--- a/test/e2e/flask/multichain-api/wallet_invokeMethod.spec.ts
+++ b/test/e2e/flask/multichain-api/wallet_invokeMethod.spec.ts
@@ -10,7 +10,7 @@ import {
   withFixtures,
 } from '../../helpers';
 import FixtureBuilder from '../../fixture-builder';
-import { DEFAULT_GANACHE_ETH_BALANCE_DEC } from '../../constants';
+import { DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC } from '../../constants';
 import TestDappMultichain from '../../page-objects/pages/test-dapp-multichain';
 import {
   DEFAULT_MULTICHAIN_TEST_DAPP_FIXTURE_OPTIONS,
@@ -24,7 +24,7 @@ describeBrowserOnly(Browser.CHROME, 'Multichain API', function () {
   const GANACHE_SCOPES = ['eip155:1337', 'eip155:1338', 'eip155:1000'];
   const ACCOUNTS = [ACCOUNT_1, ACCOUNT_2];
   const DEFAULT_INITIAL_BALANCE_HEX = convertETHToHexGwei(
-    DEFAULT_GANACHE_ETH_BALANCE_DEC,
+    DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC,
   );
 
   describe('Calling `wallet_invokeMethod` on the same dapp across three different connected chains', function () {
diff --git a/test/e2e/flask/user-operations.spec.ts b/test/e2e/flask/user-operations.spec.ts
index e7f78c501ffe..ee0a1675ba7b 100644
--- a/test/e2e/flask/user-operations.spec.ts
+++ b/test/e2e/flask/user-operations.spec.ts
@@ -9,14 +9,14 @@ import {
 } from '../helpers';
 import FixtureBuilder from '../fixture-builder';
 import {
+  BUNDLER_URL,
   ENTRYPOINT,
+  ERC_4337_ACCOUNT,
+  ERC_4337_ACCOUNT_SALT,
   ERC_4337_ACCOUNT_SNAP_URL,
-  BUNDLER_URL,
+  LOCAL_NODE_ACCOUNT,
+  LOCAL_NODE_PRIVATE_KEY,
   SIMPLE_ACCOUNT_FACTORY,
-  GANACHE_PRIVATE_KEY,
-  ERC_4337_ACCOUNT_SALT,
-  ERC_4337_ACCOUNT,
-  GANACHE_ACCOUNT,
   VERIFYING_PAYMASTER,
 } from '../constants';
 import { buildQuote, reviewQuote } from '../tests/swaps/shared';
@@ -240,7 +240,7 @@ async function withAccountSnap(
 
       await createSnapAccount(
         driver,
-        GANACHE_PRIVATE_KEY,
+        LOCAL_NODE_PRIVATE_KEY,
         ERC_4337_ACCOUNT_SALT,
       );
 
@@ -262,7 +262,7 @@ describe('User Operations', function () {
     await withAccountSnap({ title: this.test?.fullTitle() }, async (driver) => {
       await createDappTransaction(driver, {
         from: ERC_4337_ACCOUNT,
-        to: GANACHE_ACCOUNT,
+        to: LOCAL_NODE_ACCOUNT,
         value: convertETHToHexGwei(1),
         maxFeePerGas: '0x0',
         maxPriorityFeePerGas: '0x0',
@@ -276,7 +276,7 @@ describe('User Operations', function () {
     await withAccountSnap(
       { title: this.test?.fullTitle() },
       async (driver, bundlerServer) => {
-        await sendTransaction(driver, GANACHE_ACCOUNT, 1, true);
+        await sendTransaction(driver, LOCAL_NODE_ACCOUNT, 1, true);
 
         await openConfirmedTransaction(driver);
         await expectTransactionDetailsMatchReceipt(driver, bundlerServer);
@@ -314,7 +314,7 @@ describe('User Operations', function () {
       async (driver, bundlerServer) => {
         await createDappTransaction(driver, {
           from: ERC_4337_ACCOUNT,
-          to: GANACHE_ACCOUNT,
+          to: LOCAL_NODE_ACCOUNT,
           value: convertETHToHexGwei(1),
           maxFeePerGas: '0x0',
           maxPriorityFeePerGas: '0x0',
diff --git a/test/e2e/helpers.js b/test/e2e/helpers.js
index 8f4b36d49230..d9928248040d 100644
--- a/test/e2e/helpers.js
+++ b/test/e2e/helpers.js
@@ -19,8 +19,8 @@ const { Bundler } = require('./bundler');
 const { SMART_CONTRACTS } = require('./seeder/smart-contracts');
 const { setManifestFlags } = require('./set-manifest-flags');
 const {
+  DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC,
   ERC_4337_ACCOUNT,
-  DEFAULT_GANACHE_ETH_BALANCE_DEC,
 } = require('./constants');
 const {
   getServerMochaToBackground,
@@ -551,11 +551,11 @@ const multipleGanacheOptions = {
   accounts: [
     {
       secretKey: PRIVATE_KEY,
-      balance: convertETHToHexGwei(DEFAULT_GANACHE_ETH_BALANCE_DEC),
+      balance: convertETHToHexGwei(DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC),
     },
     {
       secretKey: PRIVATE_KEY_TWO,
-      balance: convertETHToHexGwei(DEFAULT_GANACHE_ETH_BALANCE_DEC),
+      balance: convertETHToHexGwei(DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC),
     },
   ],
 };
diff --git a/test/e2e/seeder/ganache-seeder.js b/test/e2e/seeder/ganache-seeder.js
index ebec4d5a8dcd..92679d582e51 100644
--- a/test/e2e/seeder/ganache-seeder.js
+++ b/test/e2e/seeder/ganache-seeder.js
@@ -1,7 +1,7 @@
 const { Web3Provider } = require('@ethersproject/providers');
 const { ContractFactory, Contract } = require('@ethersproject/contracts');
 
-const { ENTRYPOINT, GANACHE_ACCOUNT } = require('../constants');
+const { ENTRYPOINT, LOCAL_NODE_ACCOUNT } = require('../constants');
 const { SMART_CONTRACTS, contractConfiguration } = require('./smart-contracts');
 const ContractAddressRegistry = require('./contract-address-registry');
 
@@ -42,7 +42,7 @@ class GanacheSeeder {
     } else if (contractName === SMART_CONTRACTS.SIMPLE_ACCOUNT_FACTORY) {
       contract = await contractFactory.deploy(ENTRYPOINT);
     } else if (contractName === SMART_CONTRACTS.VERIFYING_PAYMASTER) {
-      contract = await contractFactory.deploy(ENTRYPOINT, GANACHE_ACCOUNT);
+      contract = await contractFactory.deploy(ENTRYPOINT, LOCAL_NODE_ACCOUNT);
     } else {
       contract = await contractFactory.deploy();
     }
diff --git a/test/e2e/seeder/ganache.ts b/test/e2e/seeder/ganache.ts
index 957d07fc65bd..20f4385a8172 100644
--- a/test/e2e/seeder/ganache.ts
+++ b/test/e2e/seeder/ganache.ts
@@ -1,6 +1,6 @@
 import { Server, server } from 'ganache';
 import { BigNumber } from 'bignumber.js';
-import { DEFAULT_GANACHE_ETH_BALANCE_DEC } from '../constants';
+import { DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC } from '../constants';
 
 const PRIVATE_KEY =
   '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC';
@@ -38,7 +38,7 @@ export class Ganache {
           {
             secretKey: PRIVATE_KEY,
             balance: convertETHToHexGwei(
-              Number(DEFAULT_GANACHE_ETH_BALANCE_DEC),
+              Number(DEFAULT_LOCAL_NODE_ETH_BALANCE_DEC),
             ),
           },
         ],
diff --git a/test/e2e/tests/ppom/ppom-blockaid-alert-simple-send.spec.js b/test/e2e/tests/ppom/ppom-blockaid-alert-simple-send.spec.js
index 12eaba450459..1ebd5fdf457f 100644
--- a/test/e2e/tests/ppom/ppom-blockaid-alert-simple-send.spec.js
+++ b/test/e2e/tests/ppom/ppom-blockaid-alert-simple-send.spec.js
@@ -136,7 +136,7 @@ describe('Simple Send Security Alert - Blockaid', function () {
 
       async ({ driver }) => {
         await loginWithoutBalanceValidation(driver);
-        // We validate custom balance as it doesn't come from ganache but it's mocked
+        // We validate custom balance as it doesn't come from the local node but it's mocked
         await driver.waitForSelector({
           css: '[data-testid="eth-overview__primary-currency"]',
           text: '20 ETH',
@@ -176,7 +176,7 @@ describe('Simple Send Security Alert - Blockaid', function () {
 
       async ({ driver }) => {
         await loginWithoutBalanceValidation(driver);
-        // We validate custom balance as it doesn't come from ganache but it's mocked
+        // We validate custom balance as it doesn't come from the local node but it's mocked
         await driver.waitForSelector({
           css: '[data-testid="eth-overview__primary-currency"]',
           text: '20 ETH',
@@ -217,7 +217,7 @@ describe('Simple Send Security Alert - Blockaid', function () {
       async ({ driver }) => {
         await loginWithoutBalanceValidation(driver);
 
-        // We validate custom balance as it doesn't come from ganache but it's mocked
+        // We validate custom balance as it doesn't come from the local node but it's mocked
         await driver.waitForSelector({
           css: '[data-testid="eth-overview__primary-currency"]',
           text: '20 ETH',
diff --git a/test/e2e/tests/request-queuing/ui.spec.js b/test/e2e/tests/request-queuing/ui.spec.js
index da6fe8a6a9da..312eaa218450 100644
--- a/test/e2e/tests/request-queuing/ui.spec.js
+++ b/test/e2e/tests/request-queuing/ui.spec.js
@@ -647,7 +647,7 @@ describe('Request-queue UI changes', function () {
             },
           },
         ],
-        // This test intentionally quits Ganache while the extension is using it, causing
+        // This test intentionally quits the local node server while the extension is using it, causing
         // PollingBlockTracker errors and others. These are expected.
         ignoredConsoleErrors: ['ignore-all'],
         dappOptions: { numberOfDapps: 2 },
@@ -671,7 +671,7 @@ describe('Request-queue UI changes', function () {
           text: 'Ethereum Mainnet',
         });
 
-        // Kill ganache servers
+        // Kill local node servers
         await localNodes[0].quit();
         await localNodes[1].quit();
 
diff --git a/test/e2e/vault-decryption-chrome.spec.ts b/test/e2e/vault-decryption-chrome.spec.ts
index d6bdd7eb3634..0e59689a2469 100644
--- a/test/e2e/vault-decryption-chrome.spec.ts
+++ b/test/e2e/vault-decryption-chrome.spec.ts
@@ -160,6 +160,7 @@ describe('Vault Decryptor Page', function () {
     await withFixtures(
       {
         disableServerMochaToBackground: true,
+        title: this.test?.fullTitle(),
       },
       async ({ driver }) => {
         // we don't need to use navigate since MM will automatically open a new window in prod build
@@ -218,6 +219,7 @@ describe('Vault Decryptor Page', function () {
     await withFixtures(
       {
         disableServerMochaToBackground: true,
+        title: this.test?.fullTitle(),
       },
       async ({ driver }) => {
         // we don't need to use navigate since MM will automatically open a new window in prod build


Reviews:
user: login: seaona
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-01T08:55:36Z
user: login: seaona
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-01T08:56:49Z
user: login: chloeYue
body: LGTM ! 
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T11:55:16Z
user: login: HowardBraham
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T15:04:33Z

Review comments:
diff_hunk: @@ -218,6 +219,7 @@ describe('Vault Decryptor Page', function () {
     await withFixtures(
       {
         disableServerMochaToBackground: true,
+        title: this.test?.fullTitle(),
path: test/e2e/vault-decryption-chrome.spec.ts
user: login: seaona
body: unrelated, but I spot this was missing on the vault spec, and as it's a small tweak I included in this same PR
created_at: 2025-04-01T08:55:36Z
author_association: MEMBER
diff_hunk: @@ -1,7 +1,7 @@
 const { Web3Provider } = require('@ethersproject/providers');
 const { ContractFactory, Contract } = require('@ethersproject/contracts');
 
-const { ENTRYPOINT, GANACHE_ACCOUNT } = require('../constants');
path: test/e2e/seeder/ganache-seeder.js
user: login: seaona
body: we might eventually remove the ganache files, but a couple of specs still rely on it (see [here](https://github.com/MetaMask/metamask-extension/pull/30709))
created_at: 2025-04-01T08:56:49Z
author_association: MEMBER

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-01T08:54:12Z
body: **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.
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-01T09:48:51Z
body: <details><summary>Builds ready [1c22801]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds/metamask-chrome-12.14.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-mv2/metamask-firefox-12.14.2.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-flask/metamask-flask-chrome-12.14.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.14.2-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-test/metamask-chrome-12.14.2.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-test-mv2/metamask-firefox-12.14.2.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-test-flask/metamask-flask-chrome-12.14.2-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.14.2-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14191791810/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14191791810/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14191791810/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4709601/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/4c264413-c48f-4636-a496-8bbc33b25140/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1190 ± 74 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1190</td><td align="right">1045</td><td align="right">1396</td><td align="right">74</td><td align="right">1236</td><td align="right">1321</td></tr><tr><td>load</td><td align="right">1040</td><td align="right">930</td><td align="right">1240</td><td align="right">68</td><td align="right">944</td><td align="right">989</td></tr><tr><td>domContentLoaded</td><td align="right">1034</td><td align="right">915</td><td align="right">1233</td><td align="right">68</td><td align="right">948</td><td align="right">993</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">38</td><td align="right">5</td><td align="right">15</td><td align="right">29</td></tr><tr><td>firstPaint</td><td align="right">734</td><td align="right">131</td><td align="right">1197</td><td align="right">404</td><td align="right">256</td><td align="right">986</td></tr><tr><td>backgroundConnect</td><td align="right">11</td><td align="right">6</td><td align="right">132</td><td align="right">13</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">19</td><td align="right">13</td><td align="right">54</td><td align="right">5</td><td align="right">19</td><td align="right">25</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">5</td><td align="right">30</td><td align="right">6</td><td align="right">6</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">0</td></tr><tr><td>loadScripts</td><td align="right">820</td><td align="right">709</td><td align="right">1013</td><td align="right">68</td><td align="right">860</td><td align="right">942</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">4</td><td align="right">16</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1044</td><td align="right">821</td><td align="right">1291</td><td align="right">92</td><td align="right">901</td><td align="right">995</td></tr><tr><td>load</td><td align="right">874</td><td align="right">619</td><td align="right">1028</td><td align="right">79</td><td align="right">917</td><td align="right">984</td></tr><tr><td>domContentLoaded</td><td align="right">866</td><td align="right">614</td><td align="right">1017</td><td align="right">79</td><td align="right">909</td><td align="right">971</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">13</td><td align="right">52</td><td align="right">8</td><td align="right">15</td><td align="right">38</td></tr><tr><td>firstPaint</td><td align="right">325</td><td align="right">55</td><td align="right">1022</td><td align="right">329</td><td align="right">855</td><td align="right">944</td></tr><tr><td>backgroundConnect</td><td align="right">19</td><td align="right">13</td><td align="right">51</td><td align="right">8</td><td align="right">18</td><td align="right">39</td></tr><tr><td>firstReactRender</td><td align="right">17</td><td align="right">13</td><td align="right">36</td><td align="right">5</td><td align="right">17</td><td align="right">29</td></tr><tr><td>getState</td><td align="right">6</td><td align="right">3</td><td align="right">23</td><td align="right">4</td><td align="right">5</td><td align="right">6</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">0</td></tr><tr><td>loadScripts</td><td align="right">864</td><td align="right">611</td><td align="right">1016</td><td align="right">78</td><td align="right">904</td><td align="right">969</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">20</td><td align="right">3</td><td align="right">7</td><td align="right">9</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1393</td><td align="right">1207</td><td align="right">1837</td><td align="right">140</td><td align="right">1457</td><td align="right">1745</td></tr><tr><td>load</td><td align="right">1255</td><td align="right">1074</td><td align="right">1677</td><td align="right">134</td><td align="right">1333</td><td align="right">1588</td></tr><tr><td>domContentLoaded</td><td align="right">1255</td><td align="right">1073</td><td align="right">1676</td><td align="right">134</td><td align="right">1332</td><td align="right">1588</td></tr><tr><td>domInteractive</td><td align="right">100</td><td align="right">39</td><td align="right">157</td><td align="right">26</td><td align="right">85</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">16</td><td align="right">124</td><td align="right">12</td><td align="right">24</td><td align="right">32</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">50</td><td align="right">4</td><td align="right">23</td><td align="right">30</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">35</td><td align="right">3</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">5</td><td align="right">1</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1232</td><td align="right">1056</td><td align="right">1649</td><td align="right">132</td><td align="right">1309</td><td align="right">1568</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">30</td><td align="right">3</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">981</td><td align="right">828</td><td align="right">1486</td><td align="right">175</td><td align="right">883</td><td align="right">940</td></tr><tr><td>load</td><td align="right">858</td><td align="right">725</td><td align="right">1320</td><td align="right">155</td><td align="right">794</td><td align="right">921</td></tr><tr><td>domContentLoaded</td><td align="right">858</td><td align="right">725</td><td align="right">1319</td><td align="right">155</td><td align="right">794</td><td align="right">921</td></tr><tr><td>domInteractive</td><td align="right">125</td><td align="right">36</td><td align="right">195</td><td align="right">24</td><td align="right">143</td><td align="right">90</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">20</td><td align="right">13</td><td align="right">72</td><td align="right">8</td><td align="right">20</td><td align="right">33</td></tr><tr><td>firstReactRender</td><td align="right">18</td><td align="right">16</td><td align="right">33</td><td align="right">3</td><td align="right">19</td><td align="right">25</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">92</td><td align="right">14</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">841</td><td align="right">709</td><td align="right">1286</td><td align="right">150</td><td align="right">782</td><td align="right">900</td></tr><tr><td>setupStore</td><td align="right">9</td><td align="right">4</td><td align="right">55</td><td align="right">10</td><td align="right">7</td><td align="right">8</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 18 Bytes (0%)</li>
<li>ui: 0 Bytes (0%)</li>
<li>common: 0 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR