mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 09:57:02 +01:00
fix(18194): Redirect to extension expanded view when click back to sa… (#18376)
* fix(18194): Redirect to extension expanded view when click back to safety button * Bump phishing warning version --------- Co-authored-by: Dan J Miller <danjm.com@gmail.com>
This commit is contained in:
parent
00e6471d90
commit
26fed9e8da
@ -3581,7 +3581,11 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
phishingStream.on(
|
phishingStream.on(
|
||||||
'data',
|
'data',
|
||||||
createMetaRPCHandler(
|
createMetaRPCHandler(
|
||||||
{ safelistPhishingDomain: this.safelistPhishingDomain.bind(this) },
|
{
|
||||||
|
safelistPhishingDomain: this.safelistPhishingDomain.bind(this),
|
||||||
|
backToSafetyPhishingWarning:
|
||||||
|
this.backToSafetyPhishingWarning.bind(this),
|
||||||
|
},
|
||||||
phishingStream,
|
phishingStream,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -4342,6 +4346,11 @@ export default class MetamaskController extends EventEmitter {
|
|||||||
return this.phishingController.bypass(hostname);
|
return this.phishingController.bypass(hostname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async backToSafetyPhishingWarning() {
|
||||||
|
const extensionURL = this.platform.getExtensionURL();
|
||||||
|
await this.platform.switchToAnotherURL(undefined, extensionURL);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locks MetaMask
|
* Locks MetaMask
|
||||||
*/
|
*/
|
||||||
|
@ -77,11 +77,7 @@ export default class ExtensionPlatform {
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
openExtensionInBrowser(
|
getExtensionURL(route = null, queryString = null) {
|
||||||
route = null,
|
|
||||||
queryString = null,
|
|
||||||
keepWindowOpen = false,
|
|
||||||
) {
|
|
||||||
let extensionURL = browser.runtime.getURL('home.html');
|
let extensionURL = browser.runtime.getURL('home.html');
|
||||||
|
|
||||||
if (route) {
|
if (route) {
|
||||||
@ -92,7 +88,22 @@ export default class ExtensionPlatform {
|
|||||||
extensionURL += `?${queryString}`;
|
extensionURL += `?${queryString}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return extensionURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
openExtensionInBrowser(
|
||||||
|
route = null,
|
||||||
|
queryString = null,
|
||||||
|
keepWindowOpen = false,
|
||||||
|
) {
|
||||||
|
const extensionURL = this.getExtensionURL(
|
||||||
|
route,
|
||||||
|
queryString,
|
||||||
|
keepWindowOpen,
|
||||||
|
);
|
||||||
|
|
||||||
this.openTab({ url: extensionURL });
|
this.openTab({ url: extensionURL });
|
||||||
|
|
||||||
if (
|
if (
|
||||||
getEnvironmentType() !== ENVIRONMENT_TYPE_BACKGROUND &&
|
getEnvironmentType() !== ENVIRONMENT_TYPE_BACKGROUND &&
|
||||||
!keepWindowOpen
|
!keepWindowOpen
|
||||||
@ -153,6 +164,10 @@ export default class ExtensionPlatform {
|
|||||||
return tab;
|
return tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async switchToAnotherURL(tabId, url) {
|
||||||
|
await browser.tabs.update(tabId, { url });
|
||||||
|
}
|
||||||
|
|
||||||
async closeTab(tabId) {
|
async closeTab(tabId) {
|
||||||
await browser.tabs.remove(tabId);
|
await browser.tabs.remove(tabId);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
import browser from 'webextension-polyfill';
|
import browser from 'webextension-polyfill';
|
||||||
import ExtensionPlatform from './extension';
|
import ExtensionPlatform from './extension';
|
||||||
|
|
||||||
|
const TEST_URL =
|
||||||
|
'chrome-extension://jjlgkphpeekojaidfeknpknnimdbleaf/home.html';
|
||||||
|
|
||||||
jest.mock('webextension-polyfill', () => {
|
jest.mock('webextension-polyfill', () => {
|
||||||
return {
|
return {
|
||||||
runtime: {
|
runtime: {
|
||||||
getManifest: jest.fn(),
|
getManifest: jest.fn(),
|
||||||
|
getURL: jest.fn(),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@ -91,4 +95,30 @@ describe('extension platform', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getExtensionURL', () => {
|
||||||
|
let extensionPlatform;
|
||||||
|
beforeEach(() => {
|
||||||
|
browser.runtime.getURL.mockReturnValue(TEST_URL);
|
||||||
|
extensionPlatform = new ExtensionPlatform();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return URL itself if no route or queryString is provided', () => {
|
||||||
|
expect(extensionPlatform.getExtensionURL()).toStrictEqual(TEST_URL);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return URL with route when provided', () => {
|
||||||
|
const TEST_ROUTE = 'test-route';
|
||||||
|
expect(extensionPlatform.getExtensionURL(TEST_ROUTE)).toStrictEqual(
|
||||||
|
`${TEST_URL}#${TEST_ROUTE}`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return URL with queryString when provided', () => {
|
||||||
|
const QUERY_STRING = 'name=ferret';
|
||||||
|
expect(
|
||||||
|
extensionPlatform.getExtensionURL(null, QUERY_STRING),
|
||||||
|
).toStrictEqual(`${TEST_URL}?${QUERY_STRING}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -375,7 +375,7 @@
|
|||||||
"@metamask/eslint-config-nodejs": "^9.0.0",
|
"@metamask/eslint-config-nodejs": "^9.0.0",
|
||||||
"@metamask/eslint-config-typescript": "^9.0.1",
|
"@metamask/eslint-config-typescript": "^9.0.1",
|
||||||
"@metamask/forwarder": "^1.1.0",
|
"@metamask/forwarder": "^1.1.0",
|
||||||
"@metamask/phishing-warning": "^2.0.1",
|
"@metamask/phishing-warning": "^2.1.0",
|
||||||
"@metamask/test-dapp": "^5.6.0",
|
"@metamask/test-dapp": "^5.6.0",
|
||||||
"@sentry/cli": "^1.58.0",
|
"@sentry/cli": "^1.58.0",
|
||||||
"@storybook/addon-a11y": "^6.5.13",
|
"@storybook/addon-a11y": "^6.5.13",
|
||||||
|
@ -289,4 +289,46 @@ describe('Phishing Detection', function () {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should open a new extension expanded view when clicking back to safety button', async function () {
|
||||||
|
await withFixtures(
|
||||||
|
{
|
||||||
|
fixtures: new FixtureBuilder().build(),
|
||||||
|
ganacheOptions,
|
||||||
|
title: this.test.title,
|
||||||
|
testSpecificMock: mockPhishingDetection,
|
||||||
|
dapp: true,
|
||||||
|
dappPaths: ['mock-page-with-disallowed-iframe'],
|
||||||
|
dappOptions: {
|
||||||
|
numberOfDapps: 2,
|
||||||
|
},
|
||||||
|
failOnConsoleError: false,
|
||||||
|
},
|
||||||
|
async ({ driver }) => {
|
||||||
|
await driver.navigate();
|
||||||
|
await driver.fill('#password', 'correct horse battery staple');
|
||||||
|
await driver.press('#password', driver.Key.ENTER);
|
||||||
|
await driver.openNewPage(
|
||||||
|
`http://localhost:8080?extensionUrl=${driver.extensionUrl}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
const iframe = await driver.findElement('iframe');
|
||||||
|
|
||||||
|
await driver.switchToFrame(iframe);
|
||||||
|
await driver.clickElement({
|
||||||
|
text: 'Open this warning in a new tab',
|
||||||
|
});
|
||||||
|
await driver.switchToWindowWithTitle('MetaMask Phishing Detection');
|
||||||
|
await driver.clickElement({
|
||||||
|
text: 'Back to safety',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Ensure we're redirected to wallet home page
|
||||||
|
const homePage = await driver.findElement('.home__main-view');
|
||||||
|
const homePageDisplayed = await homePage.isDisplayed();
|
||||||
|
|
||||||
|
assert.equal(homePageDisplayed, true);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
10
yarn.lock
10
yarn.lock
@ -4204,9 +4204,9 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@metamask/phishing-warning@npm:^2.0.1":
|
"@metamask/phishing-warning@npm:^2.1.0":
|
||||||
version: 2.0.1
|
version: 2.1.0
|
||||||
resolution: "@metamask/phishing-warning@npm:2.0.1"
|
resolution: "@metamask/phishing-warning@npm:2.1.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@metamask/design-tokens": ^1.6.0
|
"@metamask/design-tokens": ^1.6.0
|
||||||
"@metamask/post-message-stream": ^6.0.0
|
"@metamask/post-message-stream": ^6.0.0
|
||||||
@ -4217,7 +4217,7 @@ __metadata:
|
|||||||
pump: ^3.0.0
|
pump: ^3.0.0
|
||||||
punycode: ^2.1.1
|
punycode: ^2.1.1
|
||||||
ses: ^0.18.1
|
ses: ^0.18.1
|
||||||
checksum: caa3e596c3a67188e457307b43724c89121d60734353922d369932093f8618f96465ba7613b194dc2c57754399783dcdf1777c900afeff21bd5137f02688b686
|
checksum: d04b3f817deafa077028f2d235ae694fa772a5ee6a02fc73c6f1fed6dbd1a7491370a25b9484157835f9e1a1773e738a1306ce0c854604eba99af86f1624f453
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -24292,7 +24292,7 @@ __metadata:
|
|||||||
"@metamask/obs-store": ^5.0.0
|
"@metamask/obs-store": ^5.0.0
|
||||||
"@metamask/permission-controller": ^3.1.0
|
"@metamask/permission-controller": ^3.1.0
|
||||||
"@metamask/phishing-controller": ^2.0.0
|
"@metamask/phishing-controller": ^2.0.0
|
||||||
"@metamask/phishing-warning": ^2.0.1
|
"@metamask/phishing-warning": ^2.1.0
|
||||||
"@metamask/post-message-stream": ^6.0.0
|
"@metamask/post-message-stream": ^6.0.0
|
||||||
"@metamask/providers": ^10.2.1
|
"@metamask/providers": ^10.2.1
|
||||||
"@metamask/rate-limit-controller": ^1.0.0
|
"@metamask/rate-limit-controller": ^1.0.0
|
||||||
|
Loading…
Reference in New Issue
Block a user