From d5b9aad226733a347a275ade520a38b13ae4146e Mon Sep 17 00:00:00 2001 From: Soner YUKSEL Date: Thu, 9 Nov 2023 10:09:05 -0500 Subject: [PATCH] Fix brave/brave-ios#8383: Handling External links on NTP does not work (brave/brave-ios#8384) Check if it is nonactive but NTP tab whole triggering external link navigation --- ...rViewController+WKNavigationDelegate.swift | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift index e9e5bbb862a0..fe0d147e9988 100644 --- a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift +++ b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift @@ -794,17 +794,12 @@ extension BrowserViewController { navigationAction: WKNavigationAction, openedURLCompletionHandler: ((Bool) -> Void)? = nil ) { - - let isMainFrame = navigationAction.targetFrame?.isMainFrame == true - // Do not open external links for child tabs automatically // The user must tap on the link to open it. if tab?.parent != nil && navigationAction.navigationType != .linkActivated { return } - var alertTitle = Strings.openExternalAppURLGenericTitle - // Check if the current url of the caller has changed if let domain = tab?.url?.baseDomain, domain != tab?.externalAppURLDomain { @@ -820,10 +815,25 @@ extension BrowserViewController { // We do not schemes to be opened externally when called from subframes. // And external dialog should not be shown for non-active tabs #6687 - #7835 - if !isMainFrame || tab?.url?.host != topToolbar.currentURL?.host { + + // Check navigation action is from main frame as first step + let isMainFrame = navigationAction.targetFrame?.isMainFrame == true + + // Check user trying to open on NTP like external link browsing + var isAboutHome = false + if let url = tab?.url { + isAboutHome = InternalURL(url)?.isAboutHomeURL == true + } + + // Finally check non-active tab + let isNonActiveTab = isAboutHome ? false : tab?.url?.host != topToolbar.currentURL?.host + + if !isMainFrame || isNonActiveTab { return } - + + var alertTitle = Strings.openExternalAppURLGenericTitle + if let displayHost = tab?.url?.withoutWWW.host { alertTitle = String(format: Strings.openExternalAppURLTitle, displayHost) }