metamask-extension
metamask-extension copied to clipboard
Replacing setInterval with chrome.alarm in Detect-Token controller
#15509
As a part of MV3, we need to replace the setTimeout
and setInterval
functions with chrome Alarms throughout the code base. While creating chrome alarms, we can define delayInMinutes
to show how many minutes we should wait before the first time the alarm is triggered; we can also define periodInMinutes
which is the number of minutes between alarms. Unlike setIntervals
the time interval has to be mentioned in Minutes, not in milliseconds. Inside the onAlarm
event listener, we can define the task to be executed during the alarm defined.
Currently, I have kept the interval as 0.2 purely for testing purposes, we can update that to 3 before merging the PR. Also, any interval below 1 will not be honored in production but it is allowed in the development environment .
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.
The unit test is failing for detect-token
controller test and metamask-controller
test when trying to differentiate between MV3 and MV2 using isManifestV3
from mv3.utils. I tried to mock both isManifestV3
and also browser.runtime.getManifest
but both scenarios are working. I have commented out, and commited have the steps/ways I tired out to mock the functions.
The error message we are getting:
TypeError: _webextensionPolyfill.default.runtime.getManifest is not a function
Builds ready [44d1c29]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (1820 ± 81 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 96 | 1846 | 199 | 378 | 182 |
domContentLoaded | 1606 | 2241 | 1792 | 161 | 77 | ||
load | 1606 | 2264 | 1820 | 168 | 81 | ||
domInteractive | 1606 | 2241 | 1792 | 161 | 77 |
Builds ready [55236c8]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (1844 ± 60 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 98 | 164 | 125 | 19 | 9 |
domContentLoaded | 1642 | 2104 | 1822 | 121 | 58 | ||
load | 1706 | 2128 | 1844 | 125 | 60 | ||
domInteractive | 1642 | 2104 | 1822 | 121 | 58 |
Builds ready [07181c7]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (1932 ± 153 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 104 | 395 | 148 | 68 | 33 |
domContentLoaded | 1597 | 2534 | 1909 | 306 | 147 | ||
load | 1597 | 2687 | 1932 | 318 | 153 | ||
domInteractive | 1597 | 2534 | 1909 | 306 | 147 |
From QA point of view, a couple of comments/questions:
- When I Lock MM, I still see that on the Service Worker console, the
hasAlarm
console log is triggered non-stop. I am wondering if this alarm should be cleared, when MM is locked
alarms-token-detection-locked.webm
- When I disable the Token Detection toggle, I still see that the
hasAlarm
console log is triggered. I am wondering if this alarm should be cleared, once the functionality is disabled. This might be related to this other bug around the toggle: token detection still works while toggle is Disabled, so maybe it should be fixed separately.
- When I am on the MM popup view, I see that no
hasAlarm
orin rescheduleTokenDetectionPollingInMV3
console.logs are ever triggered, even though Token Detection continues to work
Thanks for the QA @seaona ❤️ I have added some clarifications and queries below.
When I Lock MM, I still see that on the Service Worker console, the hasAlarm console log is triggered non-stop. I am wondering if this alarm should be cleared, when MM is locked
In MV2, the function seems to be getting triggered even when the MM is locked and pop-up is closed, but the scenario is handled inside the detectNewtoken()
function, which returns if the pop is closed and the MM is locked.
When I disable the Token Detection toggle, I still see that the hasAlarm console log is triggered. I am wondering if this alarm should be cleared, once the functionality is disabled. This might be related to https://github.com/MetaMask/metamask-extension/issues/15790 around the toggle: token detection still works while toggle is Disabled, so maybe it should be fixed separately.
During token detection v2 development, a decision was made to keep token detection active for Mainnet using the static list even when the toggle is turned off to preserve the existing behavior in Mainnet(This scenario is handled inside the detectNewToken()
). I will verify this with @danjm regarding this scenario and update accordingly.
When I am on the MM popup view, I see that no hasAlarm or in rescheduleTokenDetectionPollingInMV3 console.logs are ever triggered, even though Token Detection continues to work
Chrome alarm seems to be working in pop up view for me, Could you please let me know how often this is happening and if this is happening for a particular scenario?
Builds ready [aeaa099]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (1311 ± 89 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 93 | 1206 | 169 | 238 | 114 |
domContentLoaded | 1143 | 1977 | 1284 | 171 | 82 | ||
load | 1143 | 2076 | 1311 | 186 | 89 | ||
domInteractive | 1143 | 1977 | 1284 | 171 | 82 |
Builds ready [92bee65]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (1347 ± 93 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 96 | 141 | 112 | 14 | 7 |
domContentLoaded | 1117 | 2084 | 1335 | 199 | 95 | ||
load | 1137 | 2084 | 1347 | 195 | 93 | ||
domInteractive | 1117 | 2084 | 1335 | 199 | 95 |
Builds ready [f789025]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (2389 ± 68 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 87 | 134 | 110 | 14 | 7 |
domContentLoaded | 2050 | 2729 | 2361 | 158 | 76 | ||
load | 2169 | 2729 | 2389 | 142 | 68 | ||
domInteractive | 2050 | 2729 | 2361 | 158 | 76 |
highlights:
storybook
- ui/components/app/account-list-item/account-list-item.stories.js
- ui/components/app/add-network/add-network.stories.js
- ui/components/app/advanced-gas-controls/advanced-gas-controls.stories.js
- ui/components/app/app-header/app-header.stories.js
- ui/components/app/asset-list/detetcted-tokens-link/detected-tokens-link.stories.js
- ui/components/app/collectible-default-image/collectible-default-image.stories.js
- ui/components/app/collectible-details/collectible-details.stories.js
- ui/components/app/confirm-page-container/confirm-detail-row/confirm-detail-row.stories.js
- ui/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.stories.js
- ui/components/app/connected-accounts-list/connected-accounts-list.stories.js
- ui/components/app/create-new-vault/create-new-vault.stories.js
- ui/components/app/currency-input/currency-input.stories.js
- ui/components/app/detected-token/detected-token-address/detected-token-address.stories.js
- ui/components/app/detected-token/detected-token-aggregators/detected-token-aggregators.stories.js
- ui/components/app/detected-token/detected-token-details/detected-token-details.stories.js
- ui/components/app/detected-token/detected-token-ignored-popover/detected-token-ignored-popover.stories.js
- ui/components/app/detected-token/detected-token-selection-popover/detected-token-selection-popover.stories.js
- ui/components/app/detected-token/detected-token-values/detected-token-values.stories.js
- ui/components/app/edit-gas-display-education/edit-gas-display-education.stories.js
- ui/components/app/edit-gas-display/edit-gas-display.stories.js
- ui/components/app/edit-gas-popover/edit-gas-popover.stories.js
- ui/components/app/flask/experimental-area/experimental-area.stories.js
- ui/components/app/flask/snap-content-footer/snap-content-footer.stories.js
- ui/components/app/flask/snap-settings-card/snap-settings-card.stories.js
- ui/components/app/flask/snaps-authorship-pill/snaps-authorship-pill.stories.js
- ui/components/app/hold-to-reveal-button/hold-to-reveal-button.stories.js
- ui/components/app/menu-bar/accoutn-options-menu.stories.js
- ui/components/app/metamask-template-renderer/metamask-template-renderer.stories.js
- ui/components/app/metamask-translation/metamask-translation.stories.js
- ui/components/app/modals/confirm-remove-account/confirm-remove-account.stories.js
- ui/components/app/modals/contract-details-modal/contract-details-modal.stories.js
- ui/components/app/modals/export-private-key-modal/export-private-key-modal.stories.js
- ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation.stories.js
- ui/components/app/modals/transaction-confirmed/transaction-confirmed.stories.js
- ui/components/app/network-account-balance-header/network-account-balance-header.stories.js
- ui/components/app/network-display/network-display.stories.js
- ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.stories.js
- ui/components/app/signature-request-original/signature-request-original.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe-header/signature-request-siwe-header.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe.stories.js
- ui/components/app/signature-request/signature-request-header/signature-request-header.stories.js
- ui/components/app/signature-request/signature-request.stories.js
- ui/components/app/srp-input/srp-input.stories.js
- ui/components/app/transaction-detail/transaction-detail.stories.js
- ui/components/app/transaction-list-item/transaction-list-item.stories.js
- ui/components/app/transaction-list/transaction-list.stories.js
- ui/components/app/user-preferenced-currency-display/user-preferenced-currency-display.stories.js
- ui/components/ui/account-list/account-list.stories.js
- ui/components/ui/confusable/confusable.stories.js
- ui/components/ui/contract-token-values/contract-token-values.stories.js
- ui/components/ui/deprecated-test-networks/deprecated-test-networks.stories.js
- ui/components/ui/export-text-container/export-text.stories.js
- ui/components/ui/nickname-popover/nickname-popover.stories.js
- ui/components/ui/popover/popover.stories.js
- ui/components/ui/qr-code/qr-code.stories.js
- ui/components/ui/radio-group/radio-group.stories.js
- ui/components/ui/review-spending-cap/review-spending-cap.stories.js
- ui/components/ui/sender-to-recipient/sender-to-recipient.stories.js
- ui/components/ui/truncated-definition-list/truncated-definition-list.stories.js
- ui/components/ui/update-nickname-popover/update-nickname-popover.stories.js
- ui/pages/confirm-add-suggested-token/confirm-add-suggested-token.stories.js
- ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.stories.js
- ui/pages/confirm-approve/confirm-approve.stories.js
- ui/pages/confirm-deploy-contract/confirm-deploy-contract.stories.js
- ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js
- ui/pages/confirm-import-token/confirm-import-token.stories.js
- ui/pages/confirm-send-ether/confirm-send-ether.stories.js
- ui/pages/confirm-send-token/confirm-send-token.stories.js
- ui/pages/confirm-token-transaction-base/confirm-token-transaction-base.stories.js
- ui/pages/confirm-transaction-base/confirm-transaction-base.stories.js
- ui/pages/connected-accounts/connected-accounts.stories.js
- ui/pages/connected-sites/connected-sites.stories.js
- ui/pages/first-time-flow/create-password/create-password.stories.js
- ui/pages/first-time-flow/seed-phrase/reveal-seed-phrase/reveal-seed-phrase.stories.js
- ui/pages/first-time-flow/welcome/welcome.stories.js
- ui/pages/import-token/import-token.stories.js
- ui/pages/import-token/token-search/token-search.stories.js
- ui/pages/keychains/reveal-seed.stories.js
- ui/pages/onboarding-flow/creation-successful/creation-successful.stories.js
- ui/pages/onboarding-flow/metametrics/metametrics.stories.js
- ui/pages/onboarding-flow/pin-extension/pin-extension.stories.js
- ui/pages/onboarding-flow/privacy-settings/privacy-settings.stories.js
- ui/pages/onboarding-flow/secure-your-wallet/secure-your-wallet.stories.js
- ui/pages/onboarding-flow/welcome/welcome.stories.js
- ui/pages/permissions-connect/permissions-connect.stories.js
- ui/pages/permissions-connect/redirect/permissions-redirect.stories.js
- ui/pages/send/send-content/add-recipient/add-recipient.stories.js
- ui/pages/send/send-content/send-asset-row/send-asset-row.stories.js
- ui/pages/send/send-content/send-content.stories.js
- ui/pages/send/send-content/send-gas-row/send-gas-row.stories.js
- ui/pages/send/send-content/send-hex-data-row/send-hex-data-row.stories.js
- ui/pages/send/send-footer/send-footer.stories.js
- ui/pages/send/send-header/send-header.stories.js
- ui/pages/settings/advanced-tab/advanced-tab.stories.js
- ui/pages/settings/contact-list-tab/contact-list-tab.stories.js
- ui/pages/settings/flask/snaps-list-tab/snap-list-tab.stories.js
- ui/pages/settings/networks-tab/custom-content-search/custom-content-search.stories.js
- ui/pages/settings/networks-tab/networks-list-item/networks-list-item.stories.js
- ui/pages/settings/networks-tab/networks-list/network-list.stories.js
- ui/pages/settings/settings-search/settings-search.stories.js
- ui/pages/settings/settings.stories.js
- ui/pages/swaps/awaiting-signatures/awaiting-signatures.stories.js
- ui/pages/swaps/build-quote/build-quote.stories.js
- ui/pages/swaps/countdown-timer/countdown-timer.stories.js
- ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.stories.js
- ui/pages/swaps/dropdown-search-list/dropdown-search-list.stories.js
- ui/pages/swaps/exchange-rate-display/exchange-rate-display.stories.js
- ui/pages/swaps/fee-card/fee-card.stories.js
- ui/pages/swaps/import-token/import-token.stories.js
- ui/pages/swaps/loading-swaps-quotes/loading-swap-quotes.stories.js
- ui/pages/swaps/main-quote-summary/main-quote-summary.stories.js
- ui/pages/swaps/searchable-item-list/list-item-search/list-item-search.stories.js
- ui/pages/swaps/select-quote-popover/select-quote-popover.stories.js
- ui/pages/swaps/slippage-buttons/slippage-buttons.stories.js
- ui/pages/swaps/smart-transaction-status/smart-transaction-status.stories.js
@NiranjanaBinoy thank you v much for your comments! I've double-checked the pop up behavior and it is working fine!!
Just one last thing, about calling the function while MetaMask being locked, co you confirm is it okay in the MV3 context? I can see my token detected and address while logged out:
@seaona Thanks for confirming the pop-up behavior. ❤️
When detectNewTokens()
is the first line in the function, we are checking if the application is open and unlocked if not, the detectNewTokens
function will be returned/exited in the second line. So even if the function is triggered while MM is locked, the function will not be executed. This is the same as in MV2 as well.
The situation where we are having detectedTokens
in the state while the user is locked out seems to exist in MV2 as well; the same goes for the other token details. We would probably have to deal with it as a separate issue unrelated to MV3.
Builds ready [f86c190]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (2837 ± 209 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 89 | 3295 | 293 | 689 | 331 |
domContentLoaded | 2151 | 3408 | 2795 | 413 | 198 | ||
load | 2151 | 3591 | 2837 | 434 | 209 | ||
domInteractive | 2151 | 3408 | 2795 | 413 | 198 |
highlights:
storybook
- ui/components/app/account-list-item/account-list-item.stories.js
- ui/components/app/add-network/add-network.stories.js
- ui/components/app/advanced-gas-controls/advanced-gas-controls.stories.js
- ui/components/app/app-header/app-header.stories.js
- ui/components/app/asset-list/detetcted-tokens-link/detected-tokens-link.stories.js
- ui/components/app/collectible-default-image/collectible-default-image.stories.js
- ui/components/app/collectible-details/collectible-details.stories.js
- ui/components/app/confirm-page-container/confirm-detail-row/confirm-detail-row.stories.js
- ui/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.stories.js
- ui/components/app/connected-accounts-list/connected-accounts-list.stories.js
- ui/components/app/create-new-vault/create-new-vault.stories.js
- ui/components/app/currency-input/currency-input.stories.js
- ui/components/app/detected-token/detected-token-address/detected-token-address.stories.js
- ui/components/app/detected-token/detected-token-aggregators/detected-token-aggregators.stories.js
- ui/components/app/detected-token/detected-token-details/detected-token-details.stories.js
- ui/components/app/detected-token/detected-token-ignored-popover/detected-token-ignored-popover.stories.js
- ui/components/app/detected-token/detected-token-selection-popover/detected-token-selection-popover.stories.js
- ui/components/app/detected-token/detected-token-values/detected-token-values.stories.js
- ui/components/app/edit-gas-display-education/edit-gas-display-education.stories.js
- ui/components/app/edit-gas-display/edit-gas-display.stories.js
- ui/components/app/edit-gas-popover/edit-gas-popover.stories.js
- ui/components/app/flask/experimental-area/experimental-area.stories.js
- ui/components/app/flask/snap-content-footer/snap-content-footer.stories.js
- ui/components/app/flask/snap-settings-card/snap-settings-card.stories.js
- ui/components/app/flask/snaps-authorship-pill/snaps-authorship-pill.stories.js
- ui/components/app/hold-to-reveal-button/hold-to-reveal-button.stories.js
- ui/components/app/menu-bar/accoutn-options-menu.stories.js
- ui/components/app/metamask-template-renderer/metamask-template-renderer.stories.js
- ui/components/app/metamask-translation/metamask-translation.stories.js
- ui/components/app/modals/confirm-remove-account/confirm-remove-account.stories.js
- ui/components/app/modals/contract-details-modal/contract-details-modal.stories.js
- ui/components/app/modals/export-private-key-modal/export-private-key-modal.stories.js
- ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation.stories.js
- ui/components/app/modals/transaction-confirmed/transaction-confirmed.stories.js
- ui/components/app/network-account-balance-header/network-account-balance-header.stories.js
- ui/components/app/network-display/network-display.stories.js
- ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.stories.js
- ui/components/app/signature-request-original/signature-request-original.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe-header/signature-request-siwe-header.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe.stories.js
- ui/components/app/signature-request/signature-request-header/signature-request-header.stories.js
- ui/components/app/signature-request/signature-request.stories.js
- ui/components/app/srp-input/srp-input.stories.js
- ui/components/app/transaction-detail/transaction-detail.stories.js
- ui/components/app/transaction-list-item/transaction-list-item.stories.js
- ui/components/app/transaction-list/transaction-list.stories.js
- ui/components/app/user-preferenced-currency-display/user-preferenced-currency-display.stories.js
- ui/components/ui/account-list/account-list.stories.js
- ui/components/ui/confusable/confusable.stories.js
- ui/components/ui/contract-token-values/contract-token-values.stories.js
- ui/components/ui/deprecated-test-networks/deprecated-test-networks.stories.js
- ui/components/ui/export-text-container/export-text.stories.js
- ui/components/ui/nickname-popover/nickname-popover.stories.js
- ui/components/ui/popover/popover.stories.js
- ui/components/ui/qr-code/qr-code.stories.js
- ui/components/ui/radio-group/radio-group.stories.js
- ui/components/ui/review-spending-cap/review-spending-cap.stories.js
- ui/components/ui/sender-to-recipient/sender-to-recipient.stories.js
- ui/components/ui/truncated-definition-list/truncated-definition-list.stories.js
- ui/components/ui/update-nickname-popover/update-nickname-popover.stories.js
- ui/pages/confirm-add-suggested-token/confirm-add-suggested-token.stories.js
- ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.stories.js
- ui/pages/confirm-approve/confirm-approve.stories.js
- ui/pages/confirm-deploy-contract/confirm-deploy-contract.stories.js
- ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js
- ui/pages/confirm-import-token/confirm-import-token.stories.js
- ui/pages/confirm-send-ether/confirm-send-ether.stories.js
- ui/pages/confirm-send-token/confirm-send-token.stories.js
- ui/pages/confirm-token-transaction-base/confirm-token-transaction-base.stories.js
- ui/pages/confirm-transaction-base/confirm-transaction-base.stories.js
- ui/pages/connected-accounts/connected-accounts.stories.js
- ui/pages/connected-sites/connected-sites.stories.js
- ui/pages/first-time-flow/create-password/create-password.stories.js
- ui/pages/first-time-flow/seed-phrase/reveal-seed-phrase/reveal-seed-phrase.stories.js
- ui/pages/first-time-flow/welcome/welcome.stories.js
- ui/pages/import-token/import-token.stories.js
- ui/pages/import-token/token-search/token-search.stories.js
- ui/pages/keychains/reveal-seed.stories.js
- ui/pages/onboarding-flow/creation-successful/creation-successful.stories.js
- ui/pages/onboarding-flow/metametrics/metametrics.stories.js
- ui/pages/onboarding-flow/pin-extension/pin-extension.stories.js
- ui/pages/onboarding-flow/privacy-settings/privacy-settings.stories.js
- ui/pages/onboarding-flow/secure-your-wallet/secure-your-wallet.stories.js
- ui/pages/onboarding-flow/welcome/welcome.stories.js
- ui/pages/permissions-connect/permissions-connect.stories.js
- ui/pages/permissions-connect/redirect/permissions-redirect.stories.js
- ui/pages/send/send-content/add-recipient/add-recipient.stories.js
- ui/pages/send/send-content/send-asset-row/send-asset-row.stories.js
- ui/pages/send/send-content/send-content.stories.js
- ui/pages/send/send-content/send-gas-row/send-gas-row.stories.js
- ui/pages/send/send-content/send-hex-data-row/send-hex-data-row.stories.js
- ui/pages/send/send-footer/send-footer.stories.js
- ui/pages/send/send-header/send-header.stories.js
- ui/pages/settings/advanced-tab/advanced-tab.stories.js
- ui/pages/settings/contact-list-tab/contact-list-tab.stories.js
- ui/pages/settings/flask/snaps-list-tab/snap-list-tab.stories.js
- ui/pages/settings/networks-tab/custom-content-search/custom-content-search.stories.js
- ui/pages/settings/networks-tab/networks-list-item/networks-list-item.stories.js
- ui/pages/settings/networks-tab/networks-list/network-list.stories.js
- ui/pages/settings/settings-search/settings-search.stories.js
- ui/pages/settings/settings.stories.js
- ui/pages/swaps/awaiting-signatures/awaiting-signatures.stories.js
- ui/pages/swaps/build-quote/build-quote.stories.js
- ui/pages/swaps/countdown-timer/countdown-timer.stories.js
- ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.stories.js
- ui/pages/swaps/dropdown-search-list/dropdown-search-list.stories.js
- ui/pages/swaps/exchange-rate-display/exchange-rate-display.stories.js
- ui/pages/swaps/fee-card/fee-card.stories.js
- ui/pages/swaps/import-token/import-token.stories.js
- ui/pages/swaps/loading-swaps-quotes/loading-swap-quotes.stories.js
- ui/pages/swaps/main-quote-summary/main-quote-summary.stories.js
- ui/pages/swaps/searchable-item-list/list-item-search/list-item-search.stories.js
- ui/pages/swaps/select-quote-popover/select-quote-popover.stories.js
- ui/pages/swaps/slippage-buttons/slippage-buttons.stories.js
- ui/pages/swaps/smart-transaction-status/smart-transaction-status.stories.js
Sounds good! Thank you @NiranjanaBinoy !! :heart:
Builds ready [34f1f57]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (2773 ± 176 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 101 | 175 | 145 | 22 | 11 |
domContentLoaded | 2187 | 3413 | 2728 | 344 | 165 | ||
load | 2188 | 3439 | 2773 | 367 | 176 | ||
domInteractive | 2187 | 3413 | 2728 | 344 | 165 |
highlights:
storybook
- ui/components/app/account-list-item/account-list-item.stories.js
- ui/components/app/add-network/add-network.stories.js
- ui/components/app/advanced-gas-controls/advanced-gas-controls.stories.js
- ui/components/app/app-header/app-header.stories.js
- ui/components/app/asset-list/detetcted-tokens-link/detected-tokens-link.stories.js
- ui/components/app/collectible-default-image/collectible-default-image.stories.js
- ui/components/app/collectible-details/collectible-details.stories.js
- ui/components/app/confirm-page-container/confirm-detail-row/confirm-detail-row.stories.js
- ui/components/app/confirm-page-container/confirm-page-container-header/confirm-page-container-header.stories.js
- ui/components/app/connected-accounts-list/connected-accounts-list.stories.js
- ui/components/app/create-new-vault/create-new-vault.stories.js
- ui/components/app/currency-input/currency-input.stories.js
- ui/components/app/detected-token/detected-token-address/detected-token-address.stories.js
- ui/components/app/detected-token/detected-token-aggregators/detected-token-aggregators.stories.js
- ui/components/app/detected-token/detected-token-details/detected-token-details.stories.js
- ui/components/app/detected-token/detected-token-ignored-popover/detected-token-ignored-popover.stories.js
- ui/components/app/detected-token/detected-token-selection-popover/detected-token-selection-popover.stories.js
- ui/components/app/detected-token/detected-token-values/detected-token-values.stories.js
- ui/components/app/edit-gas-display-education/edit-gas-display-education.stories.js
- ui/components/app/edit-gas-display/edit-gas-display.stories.js
- ui/components/app/edit-gas-popover/edit-gas-popover.stories.js
- ui/components/app/flask/experimental-area/experimental-area.stories.js
- ui/components/app/flask/snap-content-footer/snap-content-footer.stories.js
- ui/components/app/flask/snap-settings-card/snap-settings-card.stories.js
- ui/components/app/flask/snaps-authorship-pill/snaps-authorship-pill.stories.js
- ui/components/app/hold-to-reveal-button/hold-to-reveal-button.stories.js
- ui/components/app/menu-bar/accoutn-options-menu.stories.js
- ui/components/app/metamask-template-renderer/metamask-template-renderer.stories.js
- ui/components/app/metamask-translation/metamask-translation.stories.js
- ui/components/app/modals/confirm-remove-account/confirm-remove-account.stories.js
- ui/components/app/modals/contract-details-modal/contract-details-modal.stories.js
- ui/components/app/modals/export-private-key-modal/export-private-key-modal.stories.js
- ui/components/app/modals/hide-token-confirmation-modal/hide-token-confirmation.stories.js
- ui/components/app/modals/transaction-confirmed/transaction-confirmed.stories.js
- ui/components/app/network-account-balance-header/network-account-balance-header.stories.js
- ui/components/app/network-display/network-display.stories.js
- ui/components/app/permissions-connect-permission-list/permissions-connect-permission-list.stories.js
- ui/components/app/signature-request-original/signature-request-original.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe-header/signature-request-siwe-header.stories.js
- ui/components/app/signature-request-siwe/signature-request-siwe.stories.js
- ui/components/app/signature-request/signature-request-header/signature-request-header.stories.js
- ui/components/app/signature-request/signature-request.stories.js
- ui/components/app/srp-input/srp-input.stories.js
- ui/components/app/transaction-detail/transaction-detail.stories.js
- ui/components/app/transaction-list-item/transaction-list-item.stories.js
- ui/components/app/transaction-list/transaction-list.stories.js
- ui/components/app/user-preferenced-currency-display/user-preferenced-currency-display.stories.js
- ui/components/ui/account-list/account-list.stories.js
- ui/components/ui/confusable/confusable.stories.js
- ui/components/ui/contract-token-values/contract-token-values.stories.js
- ui/components/ui/deprecated-test-networks/deprecated-test-networks.stories.js
- ui/components/ui/export-text-container/export-text.stories.js
- ui/components/ui/nickname-popover/nickname-popover.stories.js
- ui/components/ui/popover/popover.stories.js
- ui/components/ui/qr-code/qr-code.stories.js
- ui/components/ui/radio-group/radio-group.stories.js
- ui/components/ui/review-spending-cap/review-spending-cap.stories.js
- ui/components/ui/sender-to-recipient/sender-to-recipient.stories.js
- ui/components/ui/truncated-definition-list/truncated-definition-list.stories.js
- ui/components/ui/update-nickname-popover/update-nickname-popover.stories.js
- ui/pages/confirm-add-suggested-token/confirm-add-suggested-token.stories.js
- ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.stories.js
- ui/pages/confirm-approve/confirm-approve.stories.js
- ui/pages/confirm-deploy-contract/confirm-deploy-contract.stories.js
- ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js
- ui/pages/confirm-import-token/confirm-import-token.stories.js
- ui/pages/confirm-send-ether/confirm-send-ether.stories.js
- ui/pages/confirm-send-token/confirm-send-token.stories.js
- ui/pages/confirm-token-transaction-base/confirm-token-transaction-base.stories.js
- ui/pages/confirm-transaction-base/confirm-transaction-base.stories.js
- ui/pages/connected-accounts/connected-accounts.stories.js
- ui/pages/connected-sites/connected-sites.stories.js
- ui/pages/first-time-flow/create-password/create-password.stories.js
- ui/pages/first-time-flow/seed-phrase/reveal-seed-phrase/reveal-seed-phrase.stories.js
- ui/pages/first-time-flow/welcome/welcome.stories.js
- ui/pages/import-token/import-token.stories.js
- ui/pages/import-token/token-search/token-search.stories.js
- ui/pages/keychains/reveal-seed.stories.js
- ui/pages/onboarding-flow/creation-successful/creation-successful.stories.js
- ui/pages/onboarding-flow/metametrics/metametrics.stories.js
- ui/pages/onboarding-flow/pin-extension/pin-extension.stories.js
- ui/pages/onboarding-flow/privacy-settings/privacy-settings.stories.js
- ui/pages/onboarding-flow/secure-your-wallet/secure-your-wallet.stories.js
- ui/pages/onboarding-flow/welcome/welcome.stories.js
- ui/pages/permissions-connect/permissions-connect.stories.js
- ui/pages/permissions-connect/redirect/permissions-redirect.stories.js
- ui/pages/send/send-content/add-recipient/add-recipient.stories.js
- ui/pages/send/send-content/send-asset-row/send-asset-row.stories.js
- ui/pages/send/send-content/send-content.stories.js
- ui/pages/send/send-content/send-gas-row/send-gas-row.stories.js
- ui/pages/send/send-content/send-hex-data-row/send-hex-data-row.stories.js
- ui/pages/send/send-footer/send-footer.stories.js
- ui/pages/send/send-header/send-header.stories.js
- ui/pages/settings/advanced-tab/advanced-tab.stories.js
- ui/pages/settings/contact-list-tab/contact-list-tab.stories.js
- ui/pages/settings/flask/snaps-list-tab/snap-list-tab.stories.js
- ui/pages/settings/networks-tab/custom-content-search/custom-content-search.stories.js
- ui/pages/settings/networks-tab/networks-list-item/networks-list-item.stories.js
- ui/pages/settings/networks-tab/networks-list/network-list.stories.js
- ui/pages/settings/settings-search/settings-search.stories.js
- ui/pages/settings/settings.stories.js
- ui/pages/swaps/awaiting-signatures/awaiting-signatures.stories.js
- ui/pages/swaps/build-quote/build-quote.stories.js
- ui/pages/swaps/countdown-timer/countdown-timer.stories.js
- ui/pages/swaps/dropdown-input-pair/dropdown-input-pair.stories.js
- ui/pages/swaps/dropdown-search-list/dropdown-search-list.stories.js
- ui/pages/swaps/exchange-rate-display/exchange-rate-display.stories.js
- ui/pages/swaps/fee-card/fee-card.stories.js
- ui/pages/swaps/import-token/import-token.stories.js
- ui/pages/swaps/loading-swaps-quotes/loading-swap-quotes.stories.js
- ui/pages/swaps/main-quote-summary/main-quote-summary.stories.js
- ui/pages/swaps/searchable-item-list/list-item-search/list-item-search.stories.js
- ui/pages/swaps/select-quote-popover/select-quote-popover.stories.js
- ui/pages/swaps/slippage-buttons/slippage-buttons.stories.js
- ui/pages/swaps/smart-transaction-status/smart-transaction-status.stories.js
Builds ready [5f352b3]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (2480 ± 156 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 87 | 180 | 115 | 21 | 10 |
domContentLoaded | 1661 | 2859 | 2442 | 315 | 151 | ||
load | 1661 | 2953 | 2480 | 325 | 156 | ||
domInteractive | 1661 | 2859 | 2442 | 315 | 151 |
Builds ready [742dc40]
- builds: chrome, firefox, opera
- builds (beta): chrome, firefox, opera
- builds (flask): chrome, firefox, opera
- build viz: Build System
- mv3: Background Module Init Stats
- mv3: UI Init Stats
- mv3: Module Load Stats
- mv3: Bundle Size Stats
- mv2: E2e Actions Stats
- code coverage: Report
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
Page Load Metrics (2743 ± 134 ms)
Platform | Page | Metric | Min (ms) | Max (ms) | Average (ms) | StandardDeviation (ms) | MarginOfError (ms) |
---|---|---|---|---|---|---|---|
Chrome | Home | firstPaint | 103 | 2550 | 246 | 529 | 254 |
domContentLoaded | 1781 | 3237 | 2723 | 293 | 140 | ||
load | 1845 | 3237 | 2743 | 279 | 134 | ||
domInteractive | 1781 | 3236 | 2723 | 293 | 140 |
Closing this PR because if the service worker restarts every 5 mins, it will not have much impact on intervals less than 5 mins if the function that is scheduled is called during the interval as well. Quoting related chat from slack here