Skip to content

Commit

Permalink
Merge branch 'main' into dm-add-needs-triage
Browse files Browse the repository at this point in the history
  • Loading branch information
desi authored Feb 25, 2025
2 parents 60cf1c5 + 32af047 commit 2bc7fef
Show file tree
Hide file tree
Showing 171 changed files with 4,492 additions and 1,853 deletions.
12 changes: 12 additions & 0 deletions .yarn/patches/@metamask-assets-controllers-patch-3424767802.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
diff --git a/dist/RatesController/RatesController.cjs b/dist/RatesController/RatesController.cjs
index ecf10ece556eaa00f5ea967a8829574b22f29442..deb293761b54a60add7c4f7aa17130ae95187a79 100644
--- a/dist/RatesController/RatesController.cjs
+++ b/dist/RatesController/RatesController.cjs
@@ -84,6 +84,7 @@ class RatesController extends base_controller_1.BaseController {
return;
}
this.messagingSystem.publish(`${exports.name}:pollingStarted`);
+ await __classPrivateFieldGet(this, _RatesController_instances, "m", _RatesController_updateRates).call(this);
__classPrivateFieldSet(this, _RatesController_intervalId, setInterval(() => {
__classPrivateFieldGet(this, _RatesController_instances, "m", _RatesController_executePoll).call(this).catch(console.error);
}, __classPrivateFieldGet(this, _RatesController_intervalLength, "f")), "f");
17 changes: 16 additions & 1 deletion app/_locales/en/messages.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion app/_locales/en_GB/messages.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions app/scripts/app-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,12 @@ const registerInPageContentScript = async () => {
}
};

chrome.runtime.onInstalled.addListener(function (details) {
if (details.reason === 'install') {
chrome.storage.session.set({ isFirstTimeInstall: true });
} else if (details.reason === 'update') {
chrome.storage.session.set({ isFirstTimeInstall: false });
}
});

registerInPageContentScript();
42 changes: 35 additions & 7 deletions app/scripts/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ log.setLevel(process.env.METAMASK_DEBUG ? 'debug' : 'info', false);

const platform = new ExtensionPlatform();
const notificationManager = new NotificationManager();
const isFirefox = getPlatform() === PLATFORM_FIREFOX;

let openPopupCount = 0;
let notificationIsOpen = false;
Expand Down Expand Up @@ -142,6 +143,24 @@ const PHISHING_WARNING_PAGE_TIMEOUT = ONE_SECOND_IN_MILLISECONDS;
// Event emitter for state persistence
export const statePersistenceEvents = new EventEmitter();

if (isFirefox) {
browser.runtime.onInstalled.addListener(function (details) {
if (details.reason === 'install') {
browser.storage.session.set({ isFirstTimeInstall: true });
} else if (details.reason === 'update') {
browser.storage.session.set({ isFirstTimeInstall: false });
}
});
} else if (!isManifestV3) {
browser.runtime.onInstalled.addListener(function (details) {
if (details.reason === 'install') {
global.sessionStorage.setItem('isFirstTimeInstall', true);
} else if (details.reason === 'update') {
global.sessionStorage.setItem('isFirstTimeInstall', false);
}
});
}

/**
* This deferred Promise is used to track whether initialization has finished.
*
Expand Down Expand Up @@ -519,13 +538,19 @@ async function initialize() {
await loadPhishingWarningPage();
// Workaround for Bug #1446231 to override page CSP for inline script nodes injected by extension content scripts
// https://bugzilla.mozilla.org/show_bug.cgi?id=1446231
if (getPlatform() === PLATFORM_FIREFOX) {
if (isFirefox) {
overrideContentSecurityPolicyHeader();
}
}
await sendReadyMessageToTabs();
log.info('MetaMask initialization complete.');

if (isManifestV3 || isFirefox) {
browser.storage.session.set({ isFirstTimeInstall: false });
} else {
global.sessionStorage.setItem('isFirstTimeInstall', false);
}

resolveInitialization();
} catch (error) {
rejectInitialization(error);
Expand Down Expand Up @@ -897,12 +922,11 @@ export function setupController(
}

let isMetaMaskInternalProcess = false;
const sourcePlatform = getPlatform();
const senderUrl = remotePort.sender?.url
? new URL(remotePort.sender.url)
: null;

if (sourcePlatform === PLATFORM_FIREFOX) {
if (isFirefox) {
isMetaMaskInternalProcess = metamaskInternalProcessHash[processName];
} else {
isMetaMaskInternalProcess =
Expand Down Expand Up @@ -1298,12 +1322,16 @@ const addAppInstalledEvent = () => {

// On first install, open a new tab with MetaMask
async function onInstall() {
const storeAlreadyExisted = Boolean(await persistenceManager.get());
// If the store doesn't exist, then this is the first time running this script,
// and is therefore an install
const sessionData =
isManifestV3 || isFirefox
? await browser.storage.session.get(['isFirstTimeInstall'])
: await global.sessionStorage.getItem('isFirstTimeInstall');

const isFirstTimeInstall = sessionData?.isFirstTimeInstall;

if (process.env.IN_TEST) {
addAppInstalledEvent();
} else if (!storeAlreadyExisted && !process.env.METAMASK_DEBUG) {
} else if (!isFirstTimeInstall && !process.env.METAMASK_DEBUG) {
// If storeAlreadyExisted is true then this is a fresh installation
// and an app installed event should be tracked.
addAppInstalledEvent();
Expand Down
4 changes: 3 additions & 1 deletion app/scripts/constants/sentry-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export const SENTRY_BACKGROUND_STATE = {
accountsAssets: false,
assetsMetadata: false,
},
MultiChainAssetsRatesController: {
MultichainAssetsRatesController: {
assetsRates: false,
},
BridgeController: {
Expand Down Expand Up @@ -441,8 +441,10 @@ export const SENTRY_UI_STATE = {
isInitialized: true,
useSafeChainsListValidation: true,
watchEthereumAccountEnabled: false,
///: BEGIN:ONLY_INCLUDE_IF(bitcoin)
bitcoinSupportEnabled: false,
bitcoinTestnetSupportEnabled: false,
///: END:ONLY_INCLUDE_IF
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
addSnapAccountEnabled: false,
snapsAddSnapAccountModalDismissed: false,
Expand Down
6 changes: 3 additions & 3 deletions app/scripts/controller-init/controller-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { TransactionUpdateController } from '@metamask-institutional/transaction
import { AccountsController } from '@metamask/accounts-controller';
import {
MultichainAssetsController,
MultiChainAssetsRatesController,
MultichainAssetsRatesController,
MultichainBalancesController,
} from '@metamask/assets-controllers';
import { MultichainNetworkController } from '@metamask/multichain-network-controller';
Expand Down Expand Up @@ -44,7 +44,7 @@ export type Controller =
| JsonSnapsRegistry
| KeyringController
| MultichainAssetsController
| MultiChainAssetsRatesController
| MultichainAssetsRatesController
| MultichainBalancesController
| MultichainTransactionsController
| MultichainNetworkController
Expand Down Expand Up @@ -77,7 +77,7 @@ export type ControllerFlatState = AccountsController['state'] &
JsonSnapsRegistry['state'] &
KeyringController['state'] &
MultichainAssetsController['state'] &
MultiChainAssetsRatesController['state'] &
MultichainAssetsRatesController['state'] &
MultichainBalancesController['state'] &
MultichainTransactionsController['state'] &
MultichainNetworkController['state'] &
Expand Down
6 changes: 3 additions & 3 deletions app/scripts/controller-init/messengers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import {
getMultichainTransactionsControllerMessenger,
getMultichainAssetsControllerMessenger,
getMultichainNetworkControllerMessenger,
getMultiChainAssetsRatesControllerMessenger,
getMultichainAssetsRatesControllerMessenger,
} from './multichain';

export const CONTROLLER_MESSENGERS = {
Expand All @@ -39,8 +39,8 @@ export const CONTROLLER_MESSENGERS = {
getMessenger: getMultichainAssetsControllerMessenger,
getInitMessenger: noop,
},
MultiChainAssetsRatesController: {
getMessenger: getMultiChainAssetsRatesControllerMessenger,
MultichainAssetsRatesController: {
getMessenger: getMultichainAssetsRatesControllerMessenger,
getInitMessenger: noop,
},
MultichainBalancesController: {
Expand Down
4 changes: 2 additions & 2 deletions app/scripts/controller-init/messengers/multichain/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
export { getMultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger';
export { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
export { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
export { getMultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger';
export { getMultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger';
export { getMultichainNetworkControllerMessenger } from './multichain-network-controller-messenger';

export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger';
export type { MultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
export type { MultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger';
export type { MultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger';
export type { MultichainNetworkControllerMessenger } from './multichain-network-controller-messenger';
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Messenger, RestrictedMessenger } from '@metamask/base-controller';
import { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
import { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';

describe('getMultiChainAssetsRatesControllerMessenger', () => {
describe('getMultichainAssetsRatesControllerMessenger', () => {
it('returns a restricted messenger', () => {
const messenger = new Messenger<never, never>();
const multichainAssetsRatesControllerMessenger =
getMultiChainAssetsRatesControllerMessenger(messenger);
getMultichainAssetsRatesControllerMessenger(messenger);

expect(multichainAssetsRatesControllerMessenger).toBeInstanceOf(
RestrictedMessenger,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ type Events =
| CurrencyRateStateChange
| MultichainAssetsControllerStateChangeEvent;

export type MultiChainAssetsRatesControllerMessenger = ReturnType<
typeof getMultiChainAssetsRatesControllerMessenger
export type MultichainAssetsRatesControllerMessenger = ReturnType<
typeof getMultichainAssetsRatesControllerMessenger
>;

/**
Expand All @@ -39,11 +39,11 @@ export type MultiChainAssetsRatesControllerMessenger = ReturnType<
* @param messenger - The controller messenger to restrict.
* @returns The restricted controller messenger.
*/
export function getMultiChainAssetsRatesControllerMessenger(
export function getMultichainAssetsRatesControllerMessenger(
messenger: Messenger<Actions, Events>,
) {
return messenger.getRestricted({
name: 'MultiChainAssetsRatesController',
name: 'MultichainAssetsRatesController',
allowedEvents: [
'AccountsController:accountAdded',
'KeyringController:lock',
Expand Down
2 changes: 1 addition & 1 deletion app/scripts/controller-init/multichain/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ export { MultichainAssetsControllerInit } from './multichain-assets-controller-i
export { MultichainBalancesControllerInit } from './multichain-balances-controller-init';
export { MultichainTransactionsControllerInit } from './multichain-transactions-controller-init';
export { MultichainNetworkControllerInit } from './multichain-network-controller-init';
export { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';
export { MultichainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
import { MultiChainAssetsRatesController } from '@metamask/assets-controllers';
import { MultichainAssetsRatesController } from '@metamask/assets-controllers';
import { Messenger } from '@metamask/base-controller';
import { buildControllerInitRequestMock } from '../test/utils';
import { ControllerInitRequest } from '../types';
import {
getMultiChainAssetsRatesControllerMessenger,
MultiChainAssetsRatesControllerMessenger,
getMultichainAssetsRatesControllerMessenger,
MultichainAssetsRatesControllerMessenger,
} from '../messengers/multichain';
import { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';
import { MultichainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';

jest.mock('@metamask/assets-controllers');

function buildInitRequestMock(): jest.Mocked<
ControllerInitRequest<MultiChainAssetsRatesControllerMessenger>
ControllerInitRequest<MultichainAssetsRatesControllerMessenger>
> {
const baseControllerMessenger = new Messenger();

return {
...buildControllerInitRequestMock(),
controllerMessenger: getMultiChainAssetsRatesControllerMessenger(
controllerMessenger: getMultichainAssetsRatesControllerMessenger(
baseControllerMessenger,
),
initMessenger: undefined,
};
}

describe('MultiChainAssetsRatesControllerInit', () => {
const multiChainAssetsRatesControllerClassMock = jest.mocked(
MultiChainAssetsRatesController,
describe('MultichainAssetsRatesControllerInit', () => {
const multichainAssetsRatesControllerClassMock = jest.mocked(
MultichainAssetsRatesController,
);

beforeEach(() => {
Expand All @@ -36,17 +36,17 @@ describe('MultiChainAssetsRatesControllerInit', () => {
it('returns controller instance', () => {
const requestMock = buildInitRequestMock();
expect(
MultiChainAssetsRatesControllerInit(requestMock).controller,
).toBeInstanceOf(MultiChainAssetsRatesController);
MultichainAssetsRatesControllerInit(requestMock).controller,
).toBeInstanceOf(MultichainAssetsRatesController);
});

it('initializes with correct messenger and state', () => {
const requestMock = buildInitRequestMock();
MultiChainAssetsRatesControllerInit(requestMock);
MultichainAssetsRatesControllerInit(requestMock);

expect(multiChainAssetsRatesControllerClassMock).toHaveBeenCalledWith({
expect(multichainAssetsRatesControllerClassMock).toHaveBeenCalledWith({
messenger: requestMock.controllerMessenger,
state: requestMock.persistedState.MultiChainAssetsRatesController,
state: requestMock.persistedState.MultichainAssetsRatesController,
});
});
});
Loading

0 comments on commit 2bc7fef

Please sign in to comment.