From 25e3910cdd94287b413ecedabdd979aec2264b2e Mon Sep 17 00:00:00 2001 From: Andre Pimenta Date: Thu, 16 Apr 2020 13:27:58 +0100 Subject: [PATCH] Enable back button if going from dapp to home & redirection problems (#1472) * Enable back button if going from dapp to home & redirection problems * fix for android * prevent going back when it's not possible * Fix can go back function and go forward --- app/components/Views/BrowserTab/index.js | 43 ++++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/app/components/Views/BrowserTab/index.js b/app/components/Views/BrowserTab/index.js index f6999a34c96..ef5fed47b4c 100644 --- a/app/components/Views/BrowserTab/index.js +++ b/app/components/Views/BrowserTab/index.js @@ -393,7 +393,8 @@ export class BrowserTab extends PureComponent { activated: props.id === props.activeTab, lastError: null, showApprovalDialogHostname: undefined, - showOptions: false + showOptions: false, + lastUrlBeforeHome: null }; } backgroundBridges = []; @@ -402,7 +403,6 @@ export class BrowserTab extends PureComponent { sessionENSNames = {}; ensIgnoreList = []; snapshotTimer = null; - lastUrlBeforeHome = null; goingBack = false; wizardScrollAdjusted = false; isReloading = false; @@ -1064,13 +1064,23 @@ export class BrowserTab extends PureComponent { }; goBack = () => { + if (!this.canGoBack()) return; + this.toggleOptionsIfNeeded(); this.goingBack = true; setTimeout(() => { this.goingBack = false; }, 500); + const { current } = this.webview; - current && current.goBack(); + const { lastUrlBeforeHome } = this.state; + + if (this.isHomepage() && lastUrlBeforeHome) { + this.go(lastUrlBeforeHome); + } else { + current && current.goBack(); + } + setTimeout(() => { this.props.navigation.setParams({ ...this.props.navigation.state.params, @@ -1083,7 +1093,7 @@ export class BrowserTab extends PureComponent { forwardEnabled: true, currentPageTitle: null }); - }, 500); + }, 1000); }; goBackToHomepage = async () => { @@ -1103,14 +1113,15 @@ export class BrowserTab extends PureComponent { }, 100); Analytics.trackEvent(ANALYTICS_EVENT_OPTS.DAPP_HOME); setTimeout(() => { - this.lastUrlBeforeHome = lastUrlBeforeHome; + this.setState({ lastUrlBeforeHome }); }, 1000); }; goForward = async () => { const { current } = this.webview; - if (this.lastUrlBeforeHome) { - this.go(this.lastUrlBeforeHome); + const { lastUrlBeforeHome } = this.state; + if (lastUrlBeforeHome) { + this.go(lastUrlBeforeHome); } else if (this.canGoForward()) { this.toggleOptionsIfNeeded(); current && current.goForward && current.goForward(); @@ -1291,7 +1302,7 @@ export class BrowserTab extends PureComponent { currentPageTitle: title, forwardEnabled: false }); - this.lastUrlBeforeHome = null; + this.setState({ lastUrlBeforeHome: null }); this.props.navigation.setParams({ url: data.payload.url, silent: true, showUrlModal: false }); this.updateTabInfo(data.payload.url); break; @@ -1327,7 +1338,7 @@ export class BrowserTab extends PureComponent { if (this.isHomepage(url)) { this.refreshHomeScripts(); } - if (url === this.state.url) return; + if (url === this.state.url && !this.isHomepage(url)) return; const { ipfsGateway } = this.props; const data = {}; const urlObj = new URL(url); @@ -1339,7 +1350,9 @@ export class BrowserTab extends PureComponent { return; } - this.lastUrlBeforeHome = null; + if (!this.isHomepage(url)) { + this.setState({ lastUrlBeforeHome: null }); + } if (!this.state.showPhishingModal && !this.isAllowedUrl(urlObj.hostname)) { this.handleNotAllowedUrl(url); @@ -1518,7 +1531,7 @@ export class BrowserTab extends PureComponent { }; renderBottomBar = () => { - const canGoBack = !this.isHomepage(); + const canGoBack = this.canGoBack(); const canGoForward = this.canGoForward(); return ( this.state.forwardEnabled; + canGoBack = () => { + if (this.isHomepage()) { + return !!this.state.lastUrlBeforeHome && !this.isHomepage(this.state.lastUrlBeforeHome); + } + + return true; + }; + isTabActive = () => { const { activeTab, id } = this.props; return activeTab === id;