From 78080bb12cce36e6f666de217fccc89b99cbec82 Mon Sep 17 00:00:00 2001 From: Elon Park Date: Sat, 9 Sep 2023 02:37:04 +0900 Subject: [PATCH] Fix brave/brave-ios#8035: Certain schemas not going to the app store (brave/brave-ios#8025) --- ...BrowserViewController+WKNavigationDelegate.swift | 13 ++++++------- .../Managers & Cache/PlaylistCacheLoader.swift | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift index 4105380ecf8b..ec578513d79b 100644 --- a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift +++ b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+WKNavigationDelegate.swift @@ -110,15 +110,14 @@ extension BrowserViewController: WKNavigationDelegate { // them then iOS will actually first open Safari, which then redirects to the app store. This works but it will // leave a 'Back to Safari' button in the status bar, which we do not want. fileprivate func isStoreURL(_ url: URL) -> Bool { - if url.scheme == "http" || url.scheme == "https" { - if url.host == "itunes.apple.com" { - return true - } - } - if url.scheme == "itms-appss" || url.scheme == "itmss" { + let isStoreScheme = ["itms-apps", "itms-appss", "itmss"].contains(url.scheme) + if isStoreScheme { return true } - return false + + let isHttpScheme = ["http", "https"].contains(url.scheme) + let isAppStoreHost = ["itunes.apple.com", "apps.apple.com", "appsto.re"].contains(url.host) + return isHttpScheme && isAppStoreHost } // This is the place where we decide what to do with a new navigation action. There are a number of special schemes diff --git a/Sources/Brave/Frontend/Browser/Playlist/Managers & Cache/PlaylistCacheLoader.swift b/Sources/Brave/Frontend/Browser/Playlist/Managers & Cache/PlaylistCacheLoader.swift index 4d7f37d0032e..929a472cfe17 100644 --- a/Sources/Brave/Frontend/Browser/Playlist/Managers & Cache/PlaylistCacheLoader.swift +++ b/Sources/Brave/Frontend/Browser/Playlist/Managers & Cache/PlaylistCacheLoader.swift @@ -510,15 +510,14 @@ extension PlaylistWebLoader: WKNavigationDelegate { // them then iOS will actually first open Safari, which then redirects to the app store. This works but it will // leave a 'Back to Safari' button in the status bar, which we do not want. fileprivate func isStoreURL(_ url: URL) -> Bool { - if url.scheme == "http" || url.scheme == "https" { - if url.host == "itunes.apple.com" { - return true - } - } - if url.scheme == "itms-appss" || url.scheme == "itmss" { + let isStoreScheme = ["itms-apps", "itms-appss", "itmss"].contains(url.scheme) + if isStoreScheme { return true } - return false + + let isHttpScheme = ["http", "https"].contains(url.scheme) + let isAppStoreHost = ["itunes.apple.com", "apps.apple.com", "appsto.re"].contains(url.host) + return isHttpScheme && isAppStoreHost } func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {