From 5b61139bc8613301056ee4ea6bec83839ef74e8e Mon Sep 17 00:00:00 2001 From: Jaco Date: Wed, 15 Sep 2021 08:39:16 +0300 Subject: [PATCH] Pass notification settings to background (#819) * Pass notification settings to background * Feedback --- .../src/background/handlers/Extension.ts | 3 +++ .../src/background/handlers/State.ts | 27 ++++++++++++------- .../extension-base/src/background/types.ts | 1 + packages/extension-ui/src/messaging.ts | 4 +++ .../src/partials/MenuSettings.tsx | 10 ++++--- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/extension-base/src/background/handlers/Extension.ts b/packages/extension-base/src/background/handlers/Extension.ts index b6582d43..675a398d 100644 --- a/packages/extension-base/src/background/handlers/Extension.ts +++ b/packages/extension-base/src/background/handlers/Extension.ts @@ -590,6 +590,9 @@ export default class Extension { case 'pri(seed.validate)': return this.seedValidate(request as RequestSeedValidate); + case 'pri(settings.notification)': + return this.#state.setNotification(request as string); + case 'pri(signing.approve.password)': return this.signingApprovePassword(request as RequestSigningApprovePassword); diff --git a/packages/extension-base/src/background/handlers/State.ts b/packages/extension-base/src/background/handlers/State.ts index 81f1fe1a..71581316 100644 --- a/packages/extension-base/src/background/handlers/State.ts +++ b/packages/extension-base/src/background/handlers/State.ts @@ -102,6 +102,8 @@ export default class State { readonly #metaRequests: Record = {}; + #notification = settings.notification; + // Map of all providers exposed by the extension, they are retrievable by key readonly #providers: Providers; @@ -176,15 +178,16 @@ export default class State { } private popupOpen (): void { - if (settings.notification === 'extension') { return; } - - const WINDOW_OPTS = settings.notification === 'window' ? NORMAL_WINDOW_OPTS : POPUP_WINDOW_OPTS; - - chrome.windows.create({ ...WINDOW_OPTS }, (window?: chrome.windows.Window): void => { - if (window) { - this.#windows.push(window.id || 0); - } - }); + this.#notification !== 'extension' && + chrome.windows.create( + this.#notification === 'window' + ? NORMAL_WINDOW_OPTS + : POPUP_WINDOW_OPTS, + (window): void => { + if (window) { + this.#windows.push(window.id || 0); + } + }); } private authComplete = (id: string, resolve: (result: boolean) => void, reject: (error: Error) => void): Resolver => { @@ -455,6 +458,12 @@ export default class State { addMetadata(meta); } + public setNotification (notification: string): boolean { + this.#notification = notification; + + return true; + } + public sign (url: string, request: RequestSign, account: AccountJson): Promise { const id = getId(); diff --git a/packages/extension-base/src/background/types.ts b/packages/extension-base/src/background/types.ts index cf9fbc82..4030d46b 100644 --- a/packages/extension-base/src/background/types.ts +++ b/packages/extension-base/src/background/types.ts @@ -103,6 +103,7 @@ export interface RequestSignatures { 'pri(metadata.list)': [null, MetadataDef[]]; 'pri(seed.create)': [RequestSeedCreate, ResponseSeedCreate]; 'pri(seed.validate)': [RequestSeedValidate, ResponseSeedValidate]; + 'pri(settings.notification)': [string, boolean]; 'pri(signing.approve.password)': [RequestSigningApprovePassword, boolean]; 'pri(signing.approve.signature)': [RequestSigningApproveSignature, boolean]; 'pri(signing.cancel)': [RequestSigningCancel, boolean]; diff --git a/packages/extension-ui/src/messaging.ts b/packages/extension-ui/src/messaging.ts index 95d56e9a..2562488b 100644 --- a/packages/extension-ui/src/messaging.ts +++ b/packages/extension-ui/src/messaging.ts @@ -231,3 +231,7 @@ export async function jsonRestore (file: KeyringPair$Json, password: string): Pr export async function batchRestore (file: KeyringPairs$Json, password: string): Promise { return sendMessage('pri(json.batchRestore)', { file, password }); } + +export async function setNotification (notification: string): Promise { + return sendMessage('pri(settings.notification)', notification); +} diff --git a/packages/extension-ui/src/partials/MenuSettings.tsx b/packages/extension-ui/src/partials/MenuSettings.tsx index 68c61908..a4345147 100644 --- a/packages/extension-ui/src/partials/MenuSettings.tsx +++ b/packages/extension-ui/src/partials/MenuSettings.tsx @@ -12,7 +12,7 @@ import settings from '@polkadot/ui-settings'; import { ActionContext, ActionText, Checkbox, Dropdown, Menu, MenuDivider, MenuItem, Svg, Switch, themes, ThemeSwitchContext } from '../components'; import useIsPopup from '../hooks/useIsPopup'; import useTranslation from '../hooks/useTranslation'; -import { windowOpen } from '../messaging'; +import { setNotification, windowOpen } from '../messaging'; import getLanguageOptions from '../util/getLanguageOptions'; interface Option { @@ -36,7 +36,7 @@ function MenuSettings ({ className, reference }: Props): React.ReactElement(ThemeContext); const setTheme = useContext(ThemeSwitchContext); const isPopup = useIsPopup(); @@ -57,7 +57,9 @@ function MenuSettings ({ className, reference }: Props): React.ReactElement { - setNotification(value); + setNotification(value).catch(console.error); + + updateNotification(value); settings.set({ notification: value }); }, [] @@ -69,7 +71,7 @@ function MenuSettings ({ className, reference }: Props): React.ReactElement windowOpen('/'), + () => windowOpen('/').catch(console.error), [] );