diff --git a/cashtab/src/components/App.js b/cashtab/src/components/App.js --- a/cashtab/src/components/App.js +++ b/cashtab/src/components/App.js @@ -41,6 +41,7 @@ import { checkForTokenById } from 'utils/tokenMethods.js'; import ServiceWorkerWrapper from './Common/ServiceWorkerWrapper'; import aliasSettings from 'config/alias'; +import appConfig from 'config/app'; const GlobalStyle = createGlobalStyle` *::placeholder { @@ -488,6 +489,16 @@ } }; + const getExtensionInstallationStatus = async () => { + // Wait 2s to check + // window.bitcoinAbc is set by the extension, and is undefined on page load + // We will also want to wait for some configurable interval anyway, so that the page + // does not load with a popup + const popupWaitInterval = 2000; + await new Promise(resolve => setTimeout(resolve, popupWaitInterval)); + return window && window.bitcoinAbc && window.bitcoinAbc === 'cashtab'; + }; + // Easter egg boolean not used in extension/src/components/App.js const hasTab = validWallet ? checkForTokenById( @@ -496,8 +507,17 @@ ) : false; - useEffect(() => { + useEffect(async () => { checkForPersistentStorage(); + if (appConfig.monitorExtension) { + const extensionInstalled = await getExtensionInstallationStatus(); + // TODO if false and other conditions are met, show popup advertising browser extension + console.log( + `Cashtab browser extension: ${ + extensionInstalled ? 'Installed' : 'Not installed' + }`, + ); + } }, []); return ( diff --git a/cashtab/src/config/app.js b/cashtab/src/config/app.js --- a/cashtab/src/config/app.js +++ b/cashtab/src/config/app.js @@ -21,6 +21,7 @@ notificationDurationShort: 3, notificationDurationLong: 5, localStorageMaxCharacters: 24, + monitorExtension: false, }; export default appConfig;