From bd5b4a191c8935139c36bf7c24b0efd8366f7d3a Mon Sep 17 00:00:00 2001 From: Brandon T Date: Fri, 27 Oct 2023 19:14:41 -0400 Subject: [PATCH 1/8] Update BraveCore to v1.61.29 --- .../Preview Content/MockBraveWalletService.swift | 4 ++++ package-lock.json | 12 ++++++------ package.json | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift index c6c2ddc32f0..37f80f9446b 100644 --- a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift +++ b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift @@ -11,6 +11,10 @@ import BraveCore /// /// - note: Do not use this directly, use ``NetworkStore.previewStore`` class MockBraveWalletService: BraveWalletBraveWalletService { + func generateReceiveAddress(_ accountId: BraveWallet.AccountId, completion: @escaping (String?, String?) -> Void) { + completion(nil, "Error Message") + } + private var assets: [String: [BraveWallet.BlockchainToken]] = [ BraveWallet.MainnetChainId: [.previewToken], BraveWallet.GoerliChainId: [.previewToken], diff --git a/package-lock.json b/package-lock.json index 7dc3c5d4ccf..716c6458314 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.60.114/brave-core-ios-1.60.114.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.60.114", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.60.114/brave-core-ios-1.60.114.tgz", - "integrity": "sha512-H4pHbHAv/Nx1LKw1GsTLeb9bAFEGJmpyC+1TgqWNnKfgBqCPa9vJAtarwCSKi72oqWp0zjYjWoS+zKkzNgDdfg==", + "version": "1.61.29", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", + "integrity": "sha512-3VGzwn2INicAw6ay1eJWi3tcOimE1vLC6TqnSDaynI/0WsQwQxhlMLe/U8/Dcd0gy9+FPxd3CTlLR3LfKppeVQ==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.60.114/brave-core-ios-1.60.114.tgz", - "integrity": "sha512-H4pHbHAv/Nx1LKw1GsTLeb9bAFEGJmpyC+1TgqWNnKfgBqCPa9vJAtarwCSKi72oqWp0zjYjWoS+zKkzNgDdfg==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", + "integrity": "sha512-3VGzwn2INicAw6ay1eJWi3tcOimE1vLC6TqnSDaynI/0WsQwQxhlMLe/U8/Dcd0gy9+FPxd3CTlLR3LfKppeVQ==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index 8db4abeeee5..99009eb04af 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.60.114/brave-core-ios-1.60.114.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", From bd493cd3326e49af8c8f82767c44689053f59803 Mon Sep 17 00:00:00 2001 From: Jacob Sikorski Date: Wed, 18 Oct 2023 14:16:46 -0600 Subject: [PATCH 2/8] Update BraveCore to v1.61.32 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 716c6458314..232e3f88660 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.61.29", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", - "integrity": "sha512-3VGzwn2INicAw6ay1eJWi3tcOimE1vLC6TqnSDaynI/0WsQwQxhlMLe/U8/Dcd0gy9+FPxd3CTlLR3LfKppeVQ==", + "version": "1.61.32", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", + "integrity": "sha512-kki2F0hFA0xuZ3bZsP1gNGMJTXv7IiGRP+Rr7x3C5oqHw/qKznSY4OPKoKkvcCzs1XCG6gk1N50mhxS/OJYi8g==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", - "integrity": "sha512-3VGzwn2INicAw6ay1eJWi3tcOimE1vLC6TqnSDaynI/0WsQwQxhlMLe/U8/Dcd0gy9+FPxd3CTlLR3LfKppeVQ==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", + "integrity": "sha512-kki2F0hFA0xuZ3bZsP1gNGMJTXv7IiGRP+Rr7x3C5oqHw/qKznSY4OPKoKkvcCzs1XCG6gk1N50mhxS/OJYi8g==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index 99009eb04af..0a3b45b7ad3 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.29/brave-core-ios-1.61.29.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", From 5617369722e45d1d6988c7d79be4f10f293e9b7c Mon Sep 17 00:00:00 2001 From: Stephen Heaps Date: Thu, 19 Oct 2023 16:32:32 -0400 Subject: [PATCH 3/8] Wallet fixup --- .../Preview Content/MockBraveWalletService.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift index 37f80f9446b..70580ff8c2f 100644 --- a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift +++ b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift @@ -11,10 +11,6 @@ import BraveCore /// /// - note: Do not use this directly, use ``NetworkStore.previewStore`` class MockBraveWalletService: BraveWalletBraveWalletService { - func generateReceiveAddress(_ accountId: BraveWallet.AccountId, completion: @escaping (String?, String?) -> Void) { - completion(nil, "Error Message") - } - private var assets: [String: [BraveWallet.BlockchainToken]] = [ BraveWallet.MainnetChainId: [.previewToken], BraveWallet.GoerliChainId: [.previewToken], @@ -278,5 +274,9 @@ class MockBraveWalletService: BraveWalletBraveWalletService { func notifySignMessageErrorProcessed(_ errorId: String) { } + + func generateReceiveAddress(_ accountId: BraveWallet.AccountId, completion: @escaping (String?, String?) -> Void) { + completion(nil, "Error Message") + } } #endif From eab7b9181828197b9cb3fe0fcf925f67cbf631bb Mon Sep 17 00:00:00 2001 From: StephenHeaps <5314553+StephenHeaps@users.noreply.github.com> Date: Thu, 26 Oct 2023 11:12:24 -0400 Subject: [PATCH 4/8] [1.61] Fix #8252: Remove KeyringInfo Refactor & Update BraveCore to v1.61.39 (#8313) * Update for KeyringInfo removal refactoring * Update BraveCore to v1.61.39 --- .../BrowserViewController+Wallet.swift | 8 +- .../Asset Details/AssetDetailView.swift | 4 +- Sources/BraveWallet/Crypto/CryptoView.swift | 5 +- .../Portfolio/PortfolioHeaderView.swift | 2 +- .../Crypto/Stores/AccountActivityStore.swift | 4 +- .../Crypto/Stores/AssetDetailStore.swift | 4 +- .../Crypto/Stores/CryptoStore.swift | 4 +- .../Crypto/Stores/KeyringStore.swift | 117 ++++++++---------- .../Crypto/Stores/UserAssetsStore.swift | 2 +- .../Crypto/Stores/WalletStore.swift | 9 +- .../BraveWallet/Crypto/UnlockWalletView.swift | 2 +- .../Crypto/WalletServiceObservers.swift | 20 +-- .../Extensions/BraveWalletExtensions.swift | 21 ---- .../Extensions/KeyringServiceExtensions.swift | 55 -------- .../BraveWallet/Panels/WalletPanelView.swift | 18 +-- .../Preview Content/MockKeyringService.swift | 72 +++-------- .../Settings/Web3SettingsView.swift | 6 +- .../WalletHostingViewController.swift | 3 +- .../WalletPanelHostingController.swift | 3 +- .../AccountActivityStoreTests.swift | 14 --- .../AssetDetailStoreTests.swift | 7 -- .../BraveWalletTests/KeyringStoreTests.swift | 44 +------ .../NetworkSelectionStoreTests.swift | 18 --- .../BraveWalletTests/NetworkStoreTests.swift | 9 -- .../SelectAccountTokenStoreTests.swift | 26 ---- .../BraveWalletTests/SettingsStoreTests.swift | 9 -- .../TransactionConfirmationStoreTests.swift | 9 -- .../TransactionsActivityStoreTests.swift | 14 --- package-lock.json | 12 +- package.json | 2 +- 30 files changed, 124 insertions(+), 399 deletions(-) diff --git a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Wallet.swift b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Wallet.swift index 558babd9f37..1b8fb6f235b 100644 --- a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Wallet.swift +++ b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Wallet.swift @@ -335,8 +335,8 @@ extension Tab: BraveWalletProviderDelegate { let origin = getOrigin() // check if we receive account creation request without a wallet setup - let keyring = await keyringService.keyringInfo(BraveWallet.KeyringId.default) - if !keyring.isKeyringCreated { + let isWalletCreated = await keyringService.isWalletCreated() + if !isWalletCreated { // Wallet is not setup. User must onboard / setup wallet first. self.tabDelegate?.showWalletNotification(self, origin: origin) return @@ -579,13 +579,13 @@ extension Tab: BraveWalletSolanaEventsListener { } extension Tab: BraveWalletKeyringServiceObserver { - func keyringCreated(_ keyringId: BraveWallet.KeyringId) { + func walletCreated() { } func walletRestored() { } - func keyringReset() { + func walletReset() { reload() tabDelegate?.updateURLBarWalletButton() } diff --git a/Sources/BraveWallet/Crypto/Asset Details/AssetDetailView.swift b/Sources/BraveWallet/Crypto/Asset Details/AssetDetailView.swift index 0038f667b63..845877179a7 100644 --- a/Sources/BraveWallet/Crypto/Asset Details/AssetDetailView.swift +++ b/Sources/BraveWallet/Crypto/Asset Details/AssetDetailView.swift @@ -309,8 +309,8 @@ struct AssetDetailView: View { } ) ) - .onChange(of: keyringStore.defaultKeyring) { newValue in - if newValue.isLocked, isShowingAuroraBridgeAlert { + .onChange(of: keyringStore.isWalletLocked) { isLocked in + if isLocked, isShowingAuroraBridgeAlert { isShowingAuroraBridgeAlert = false } } diff --git a/Sources/BraveWallet/Crypto/CryptoView.swift b/Sources/BraveWallet/Crypto/CryptoView.swift index d6284c1ba58..0b3bef368ff 100644 --- a/Sources/BraveWallet/Crypto/CryptoView.swift +++ b/Sources/BraveWallet/Crypto/CryptoView.swift @@ -43,11 +43,10 @@ public struct CryptoView: View { } private var visibleScreen: VisibleScreen { - let keyring = keyringStore.defaultKeyring - if !keyring.isKeyringCreated || keyringStore.isOnboardingVisible { + if !keyringStore.isWalletCreated || keyringStore.isOnboardingVisible { return .onboarding } - if keyring.isLocked || keyringStore.isRestoreFromUnlockBiometricsPromptVisible { + if keyringStore.isWalletLocked || keyringStore.isRestoreFromUnlockBiometricsPromptVisible { return .unlock } return .crypto diff --git a/Sources/BraveWallet/Crypto/Portfolio/PortfolioHeaderView.swift b/Sources/BraveWallet/Crypto/Portfolio/PortfolioHeaderView.swift index 385e4235219..be723b5bf18 100644 --- a/Sources/BraveWallet/Crypto/Portfolio/PortfolioHeaderView.swift +++ b/Sources/BraveWallet/Crypto/Portfolio/PortfolioHeaderView.swift @@ -25,7 +25,7 @@ struct PortfolioHeaderView: View { @ObservedObject private var isShowingBalances = Preferences.Wallet.isShowingBalances private var isShowingBackupBanner: Bool { - !keyringStore.defaultKeyring.isBackedUp && !dismissedBackupBannerThisSession + !keyringStore.isWalletBackedUp && !dismissedBackupBannerThisSession } private var emptyBalanceData: [BalanceTimePrice] { diff --git a/Sources/BraveWallet/Crypto/Stores/AccountActivityStore.swift b/Sources/BraveWallet/Crypto/Stores/AccountActivityStore.swift index 3f63ced6c6b..f2054fcfcea 100644 --- a/Sources/BraveWallet/Crypto/Stores/AccountActivityStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/AccountActivityStore.swift @@ -331,13 +331,13 @@ class AccountActivityStore: ObservableObject, WalletObserverStore { } extension AccountActivityStore: BraveWalletKeyringServiceObserver { - func keyringCreated(_ keyringId: BraveWallet.KeyringId) { + func walletCreated() { } func walletRestored() { } - func keyringReset() { + func walletReset() { } func locked() { diff --git a/Sources/BraveWallet/Crypto/Stores/AssetDetailStore.swift b/Sources/BraveWallet/Crypto/Stores/AssetDetailStore.swift index 57596461680..f421910343e 100644 --- a/Sources/BraveWallet/Crypto/Stores/AssetDetailStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/AssetDetailStore.swift @@ -407,14 +407,14 @@ class AssetDetailStore: ObservableObject, WalletObserverStore { } extension AssetDetailStore: BraveWalletKeyringServiceObserver { - func keyringReset() { + func walletReset() { } func accountsChanged() { update() } - func keyringCreated(_ keyringId: BraveWallet.KeyringId) { + func walletCreated() { } func walletRestored() { diff --git a/Sources/BraveWallet/Crypto/Stores/CryptoStore.swift b/Sources/BraveWallet/Crypto/Stores/CryptoStore.swift index ce071188b1f..55764db9d84 100644 --- a/Sources/BraveWallet/Crypto/Stores/CryptoStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/CryptoStore.swift @@ -214,12 +214,12 @@ public class CryptoStore: ObservableObject, WalletObserverStore { guard !isObserving else { return } self.keyringServiceObserver = KeyringServiceObserver( keyringService: keyringService, - _keyringReset: { [weak self] in + _walletReset: { [weak self] in WalletProviderPermissionRequestsManager.shared.cancelAllPendingRequests(for: [.eth, .sol]) WalletProviderAccountCreationRequestManager.shared.cancelAllPendingRequests(coins: [.eth, .sol]) self?.rejectAllPendingWebpageRequests() }, - _keyringCreated: { _ in + _walletCreated: { // 1. We don't need to rely on this observer method to migrate user visible assets // when user creates a new wallet, since in this case `CryptoStore` has not yet been initialized // 2. We don't need to rely on this observer method to migrate user visible assets diff --git a/Sources/BraveWallet/Crypto/Stores/KeyringStore.swift b/Sources/BraveWallet/Crypto/Stores/KeyringStore.swift index ff9fe66e9bc..e903ff45438 100644 --- a/Sources/BraveWallet/Crypto/Stores/KeyringStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/KeyringStore.swift @@ -114,15 +114,8 @@ enum PasswordStatus: Equatable { /// /// This wraps a KeyringService that you would obtain through BraveCore and makes it observable public class KeyringStore: ObservableObject, WalletObserverStore { - /// The defualt keyring information. By default this is an empty keyring which has no accounts. - @Published private(set) var defaultKeyring: BraveWallet.KeyringInfo = .init( - id: .default, - isKeyringCreated: false, - isLocked: true, - isBackedUp: false - ) - /// A boolean indciates front-end has or has not loaded Keyring from the core - @Published var isDefaultKeyringLoaded = false + /// A boolean indciates front-end has or has not loaded accounts from the core + @Published var isLoaded = false /// Whether or not the user should be viewing the onboarding flow to setup a keyring @Published private(set) var isOnboardingVisible: Bool = false /// Whether or not the last time the wallet was locked was due to the user manually locking it @@ -147,11 +140,12 @@ public class KeyringStore: ObservableObject, WalletObserverStore { setSelectedAccount(to: selectedAccount) } } - /// All available `KeyringInfo` for all supported coin type - @Published var allKeyrings: [BraveWallet.KeyringInfo] = [] - /// Indicates if default keyring has been created. This value used for display wallet related settings if default - /// keyring has been created - @Published var isDefaultKeyringCreated: Bool = false + /// Indicates if the wallet has been created. This value used for display wallet related settings if created. + @Published var isWalletCreated: Bool = false + /// Indicates if the wallet has been locked. + @Published var isWalletLocked: Bool = true + /// Indicates if the wallet has been backed up. + @Published var isWalletBackedUp: Bool = false /// All `AccountInfo` for all available keyrings @Published var allAccounts: [BraveWallet.AccountInfo] = [] @@ -195,13 +189,13 @@ public class KeyringStore: ObservableObject, WalletObserverStore { self.walletService = walletService self.rpcService = rpcService self.keychain = keychain - - self.setupObservers() - - updateKeyringInfo() - - self.keyringService.keyringInfo(BraveWallet.KeyringId.default) { [self] keyringInfo in - isOnboardingVisible = !keyringInfo.isKeyringCreated + + setupObservers() + updateInfo() + + Task { @MainActor in + let isWalletCreated = await keyringService.isWalletCreated() + self.isOnboardingVisible = !isWalletCreated if isKeychainPasswordStored && isOnboardingVisible { // If a user deletes the app and they had a stored user password in the past that keychain item // stays persisted. When we grab the keyring for the first time we should check to see if they have @@ -213,7 +207,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { cancellable = NotificationCenter.default .publisher(for: UIApplication.didBecomeActiveNotification, object: nil) .sink { [weak self] _ in - self?.updateKeyringInfo() + self?.updateInfo() } } @@ -221,27 +215,19 @@ public class KeyringStore: ObservableObject, WalletObserverStore { guard !isObserving else { return } self.keyringServiceObserver = KeyringServiceObserver( keyringService: keyringService, - _keyringReset: { [weak self] in + _walletReset: { [weak self] in self?.isOnboardingVisible = true - self?.updateKeyringInfo() + self?.updateInfo() }, - _keyringCreated: { [weak self] keyringId in + _walletCreated: { [weak self] in guard let self else { return } - if self.isOnboardingVisible, !self.isOnboarding, keyringId == BraveWallet.KeyringId.default { + if self.isOnboardingVisible, !self.isOnboarding { // Another window has created a wallet. We should dismiss onboarding on this // window and allow the other window to continue with it's onboarding flow. self.isOnboardingVisible = false } - Task { @MainActor in - let allAccounts = await self.keyringService.allAccounts() - let allAccountsForKeyring = allAccounts.accounts.filter { $0.keyringId == keyringId } - // if the new Keyring doesn't have a selected account, select the first account - if allAccounts.selectedAccount == nil, let newAccount = allAccountsForKeyring.first { - await self.keyringService.setSelectedAccount(newAccount.accountId) - } - self.updateKeyringInfo() - } + self.updateInfo() }, _walletRestored: { [weak self] in guard let self else { return } @@ -251,34 +237,34 @@ public class KeyringStore: ObservableObject, WalletObserverStore { self.isOnboardingVisible = false } - self.updateKeyringInfo() + self.updateInfo() }, _locked: { [weak self] in // Put this in the background since biometrics prompt will block the main queue DispatchQueue.main.async { - self?.updateKeyringInfo() + self?.updateInfo() } }, _unlocked: { [weak self] in - self?.updateKeyringInfo() + self?.updateInfo() }, _backedUp: { [weak self] in - self?.updateKeyringInfo() + self?.updateInfo() }, _accountsChanged: { [weak self] in - self?.updateKeyringInfo() + self?.updateInfo() }, _selectedWalletAccountChanged: { [weak self] _ in - self?.updateKeyringInfo() + self?.updateInfo() }, _selectedDappAccountChanged: { [weak self] _, _ in - self?.updateKeyringInfo() + self?.updateInfo() } ) self.rpcServiceObserver = JsonRpcServiceObserver( rpcService: rpcService, _chainChangedEvent: { [weak self] _, _, _ in - self?.updateKeyringInfo() + self?.updateInfo() } ) } @@ -288,7 +274,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { rpcServiceObserver = nil } - private func updateKeyringInfo() { + private func updateInfo() { if UIApplication.shared.applicationState != .active { // Changes made in the backgroud due to timers going off at launch don't // re-render things properly. @@ -298,21 +284,19 @@ public class KeyringStore: ObservableObject, WalletObserverStore { } Task { @MainActor in // fetch all KeyringInfo for all coin types let allAccounts = await keyringService.allAccounts() - let allKeyrings = await keyringService.keyrings(for: WalletConstants.supportedCoinTypes()) - if let defaultKeyring = allKeyrings.first(where: { $0.id == BraveWallet.KeyringId.default }) { - self.defaultKeyring = defaultKeyring - self.isDefaultKeyringLoaded = true - self.isDefaultKeyringCreated = defaultKeyring.isKeyringCreated - // fallback case where user completed front-end onboarding, but has no keyring created/accounts. - if !defaultKeyring.isKeyringCreated && Preferences.Wallet.isOnboardingCompleted.value { - Preferences.Wallet.isOnboardingCompleted.reset() - } - } - self.allKeyrings = allKeyrings self.allAccounts = allAccounts.accounts if let selectedAccount = allAccounts.selectedAccount { self.selectedAccount = selectedAccount } + self.isWalletCreated = await keyringService.isWalletCreated() + // fallback case where user completed front-end onboarding, but has no keyring created/accounts. + // this can occur if we crash prior to saving, ex. brave-ios #8291 + if !isWalletCreated && Preferences.Wallet.isOnboardingCompleted.value { + Preferences.Wallet.isOnboardingCompleted.reset() + } + self.isWalletLocked = await keyringService.isLocked() + self.isWalletBackedUp = await keyringService.isWalletBackedUp() + self.isLoaded = true } } @@ -333,6 +317,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { func markOnboardingCompleted() { self.isOnboarding = false self.isOnboardingVisible = false + updateInfo() } func notifyWalletBackupComplete() { @@ -342,10 +327,11 @@ public class KeyringStore: ObservableObject, WalletObserverStore { func lock() { lockedManually = true keyringService.lock() + isWalletLocked = true } func unlock(password: String, completion: @escaping (Bool) -> Void) { - if !defaultKeyring.isKeyringCreated { + if !isWalletCreated { completion(false) return } @@ -354,13 +340,14 @@ public class KeyringStore: ObservableObject, WalletObserverStore { if unlocked { // Reset this state for next unlock self?.lockedManually = false + self?.isWalletLocked = false } - self?.updateKeyringInfo() + self?.updateInfo() } } func validate(password: String, completion: @escaping (Bool) -> Void) { - if !defaultKeyring.isKeyringCreated { + if !isWalletCreated { completion(false) return } @@ -398,7 +385,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { isCreatingWallet = true keyringService.createWallet(password) { [weak self] mnemonic in self?.isCreatingWallet = false - self?.updateKeyringInfo() + self?.updateInfo() if !mnemonic.isEmpty { self?.passwordToSaveInBiometric = password } @@ -438,7 +425,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { // Restoring from wallet means you already have your phrase backed up self.passwordToSaveInBiometric = password self.notifyWalletBackupComplete() - self.updateKeyringInfo() + self.updateInfo() self.resetKeychainStoredPassword() } for coin in WalletConstants.supportedCoinTypes(.dapps) { // only coin types support dapps have permission management @@ -467,7 +454,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { keyringId: BraveWallet.KeyringId.keyringId(for: coin, on: chainId), accountName: name ) { accountInfo in - self.updateKeyringInfo() + self.updateInfo() completion?(accountInfo != nil) } } @@ -486,7 +473,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { } } else { keyringService.importAccount(name, privateKey: privateKey, coin: coin) { accountInfo in - self.updateKeyringInfo() + self.updateInfo() completion?(accountInfo) } } @@ -510,14 +497,14 @@ public class KeyringStore: ObservableObject, WalletObserverStore { ) { success in completion?(success) if success { - self.updateKeyringInfo() + self.updateInfo() } } } func renameAccount(_ account: BraveWallet.AccountInfo, name: String, completion: ((Bool) -> Void)? = nil) { let handler: (Bool) -> Void = { success in - self.updateKeyringInfo() + self.updateInfo() completion?(success) } keyringService.setAccountName(account.accountId, name: name, completion: handler) @@ -530,7 +517,7 @@ public class KeyringStore: ObservableObject, WalletObserverStore { } func notifyUserInteraction() { - if defaultKeyring.isLocked { + if isWalletLocked { // Auto-lock isn't running until the keyring is unlocked return } diff --git a/Sources/BraveWallet/Crypto/Stores/UserAssetsStore.swift b/Sources/BraveWallet/Crypto/Stores/UserAssetsStore.swift index b0345dc4769..e9a1baded16 100644 --- a/Sources/BraveWallet/Crypto/Stores/UserAssetsStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/UserAssetsStore.swift @@ -109,7 +109,7 @@ public class UserAssetsStore: ObservableObject, WalletObserverStore { guard !isObserving else { return } self.keyringServiceObserver = KeyringServiceObserver( keyringService: keyringService, - _keyringCreated: { [weak self] _ in + _walletCreated: { [weak self] in self?.update() } ) diff --git a/Sources/BraveWallet/Crypto/Stores/WalletStore.swift b/Sources/BraveWallet/Crypto/Stores/WalletStore.swift index 4bb2aa0baea..511f9976a36 100644 --- a/Sources/BraveWallet/Crypto/Stores/WalletStore.swift +++ b/Sources/BraveWallet/Crypto/Stores/WalletStore.swift @@ -111,17 +111,16 @@ public class WalletStore { solTxManagerProxy: BraveWalletSolanaTxManagerProxy, ipfsApi: IpfsAPI ) { - self.cancellable = self.keyringStore.$defaultKeyring - .map(\.isKeyringCreated) + self.cancellable = self.keyringStore.$isWalletCreated .removeDuplicates() - .sink { [weak self] isDefaultKeyringCreated in + .sink { [weak self] isWalletCreated in guard let self = self else { return } - if !isDefaultKeyringCreated, self.cryptoStore != nil { + if !isWalletCreated, self.cryptoStore != nil { // only tear down `CryptoStore` since we still need to listen // default keyring creation if user didn't dismiss the wallet after reset self.cryptoStore?.tearDown() self.cryptoStore = nil - } else if isDefaultKeyringCreated, self.cryptoStore == nil { + } else if isWalletCreated, self.cryptoStore == nil { self.cryptoStore = CryptoStore( keyringService: keyringService, rpcService: rpcService, diff --git a/Sources/BraveWallet/Crypto/UnlockWalletView.swift b/Sources/BraveWallet/Crypto/UnlockWalletView.swift index be4987d2f22..784e768d05f 100644 --- a/Sources/BraveWallet/Crypto/UnlockWalletView.swift +++ b/Sources/BraveWallet/Crypto/UnlockWalletView.swift @@ -122,7 +122,7 @@ struct UnlockWalletView: View { } .onAppear { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [self] in - if !keyringStore.lockedManually && !attemptedBiometricsUnlock && keyringStore.defaultKeyring.isLocked && UIApplication.shared.isProtectedDataAvailable { + if !keyringStore.lockedManually && !attemptedBiometricsUnlock && keyringStore.isWalletLocked && UIApplication.shared.isProtectedDataAvailable { attemptedBiometricsUnlock = true fillPasswordFromKeychain() } diff --git a/Sources/BraveWallet/Crypto/WalletServiceObservers.swift b/Sources/BraveWallet/Crypto/WalletServiceObservers.swift index 1bd267c905a..b0279b71e27 100644 --- a/Sources/BraveWallet/Crypto/WalletServiceObservers.swift +++ b/Sources/BraveWallet/Crypto/WalletServiceObservers.swift @@ -7,8 +7,8 @@ import BraveCore class KeyringServiceObserver: BraveWalletKeyringServiceObserver { - var _keyringReset: (() -> Void)? - var _keyringCreated: ((_ keyringId: BraveWallet.KeyringId) -> Void)? + var _walletReset: (() -> Void)? + var _walletCreated: (() -> Void)? var _walletRestored: (() -> Void)? var _locked: (() -> Void)? var _unlocked: (() -> Void)? @@ -21,8 +21,8 @@ class KeyringServiceObserver: BraveWalletKeyringServiceObserver { init( keyringService: BraveWalletKeyringService, - _keyringReset: (() -> Void)? = nil, - _keyringCreated: ((BraveWallet.KeyringId) -> Void)? = nil, + _walletReset: (() -> Void)? = nil, + _walletCreated: (() -> Void)? = nil, _walletRestored: (() -> Void)? = nil, _locked: (() -> Void)? = nil, _unlocked: (() -> Void)? = nil, @@ -33,8 +33,8 @@ class KeyringServiceObserver: BraveWalletKeyringServiceObserver { _selectedDappAccountChanged: ((BraveWallet.CoinType, BraveWallet.AccountInfo?) -> Void)? = nil, _accountsAdded: (([BraveWallet.AccountInfo]) -> Void)? = nil ) { - self._keyringReset = _keyringReset - self._keyringCreated = _keyringCreated + self._walletReset = _walletReset + self._walletCreated = _walletCreated self._walletRestored = _walletRestored self._locked = _locked self._unlocked = _unlocked @@ -47,11 +47,11 @@ class KeyringServiceObserver: BraveWalletKeyringServiceObserver { keyringService.add(self) } - public func keyringReset() { - _keyringReset?() + func walletReset() { + _walletReset?() } - public func keyringCreated(_ keyringId: BraveWallet.KeyringId) { - _keyringCreated?(keyringId) + func walletCreated() { + _walletCreated?() } public func walletRestored() { _walletRestored?() diff --git a/Sources/BraveWallet/Extensions/BraveWalletExtensions.swift b/Sources/BraveWallet/Extensions/BraveWalletExtensions.swift index c71b925bd80..ea770f5a724 100644 --- a/Sources/BraveWallet/Extensions/BraveWalletExtensions.swift +++ b/Sources/BraveWallet/Extensions/BraveWalletExtensions.swift @@ -218,27 +218,6 @@ extension BraveWallet.CoinType { } } -extension BraveWallet.KeyringInfo { - var coin: BraveWallet.CoinType? { - switch self.id { - case .default: - return .eth - case .solana: - return .sol - case .filecoin, .filecoinTestnet: - return .fil - case .bitcoin84, .bitcoin84Testnet: - return .btc - case .zCashMainnet: - return nil - case .zCashTestnet: - return nil - @unknown default: - return nil - } - } -} - extension BraveWallet.TransactionInfo { var coin: BraveWallet.CoinType { if txDataUnion.solanaTxData != nil { diff --git a/Sources/BraveWallet/Extensions/KeyringServiceExtensions.swift b/Sources/BraveWallet/Extensions/KeyringServiceExtensions.swift index c061425538f..74dc2c8f6e6 100644 --- a/Sources/BraveWallet/Extensions/KeyringServiceExtensions.swift +++ b/Sources/BraveWallet/Extensions/KeyringServiceExtensions.swift @@ -9,61 +9,6 @@ import OrderedCollections extension BraveWalletKeyringService { - // Fetches all keyrings for all given coin types - func keyrings( - for coins: OrderedSet - ) async -> [BraveWallet.KeyringInfo] { - var allKeyrings: [BraveWallet.KeyringInfo] = [] - allKeyrings = await withTaskGroup( - of: BraveWallet.KeyringInfo.self, - returning: [BraveWallet.KeyringInfo].self, - body: { @MainActor group in - let keyringIds: [BraveWallet.KeyringId] = coins.flatMap(\.keyringIds) - for keyringId in keyringIds { - group.addTask { @MainActor in - await self.keyringInfo(keyringId) - } - } - return await group.reduce([BraveWallet.KeyringInfo](), { partialResult, prior in - return partialResult + [prior] - }) - .sorted(by: { lhs, rhs in - if lhs.coin == .fil && rhs.coin == .fil { - return lhs.id == BraveWallet.KeyringId.filecoin - } else { - return (lhs.coin ?? .eth).sortOrder < (rhs.coin ?? .eth).sortOrder - } - }) - } - ) - return allKeyrings - } - - // Fetches all keyrings for all given keyring IDs - func keyrings( - for keyringIds: [BraveWallet.KeyringId] - ) async -> [BraveWallet.KeyringInfo] { - var allKeyrings: [BraveWallet.KeyringInfo] = [] - allKeyrings = await withTaskGroup( - of: BraveWallet.KeyringInfo.self, - returning: [BraveWallet.KeyringInfo].self, - body: { @MainActor group in - for keyringId in keyringIds { - group.addTask { @MainActor in - await self.keyringInfo(keyringId) - } - } - return await group.reduce([BraveWallet.KeyringInfo](), { partialResult, prior in - return partialResult + [prior] - }) - .sorted(by: { lhs, rhs in - (lhs.coin ?? .eth).sortOrder < (rhs.coin ?? .eth).sortOrder - }) - } - ) - return allKeyrings - } - /// Check if any wallet account has been created given a coin type and a chain id @MainActor func isAccountAvailable(for coin: BraveWallet.CoinType, chainId: String) async -> Bool { // KeyringId must be checked with chainId for Filecoin, BTC (2 keyring types). diff --git a/Sources/BraveWallet/Panels/WalletPanelView.swift b/Sources/BraveWallet/Panels/WalletPanelView.swift index cca4d44dc7e..09707428bde 100644 --- a/Sources/BraveWallet/Panels/WalletPanelView.swift +++ b/Sources/BraveWallet/Panels/WalletPanelView.swift @@ -37,13 +37,12 @@ public struct WalletPanelContainerView: View { } private var visibleScreen: VisibleScreen { - let keyring = keyringStore.defaultKeyring - // check if we are still fetching the `defaultKeyring` - if !keyringStore.isDefaultKeyringLoaded { + // check if we are still fetching async info from core + if !keyringStore.isLoaded { return .loading } - // keyring fetched, check if user has created a wallet - if !keyring.isKeyringCreated || keyringStore.isOnboardingVisible { + // keyring fetched, check if user has setup a wallet + if !keyringStore.isWalletCreated || keyringStore.isOnboardingVisible { return .onboarding } // keyring fetched & wallet setup, but selected account not fetched @@ -51,7 +50,7 @@ public struct WalletPanelContainerView: View { return .loading } // keyring fetched & wallet setup, wallet is locked - if keyring.isLocked || keyringStore.isRestoreFromUnlockBiometricsPromptVisible { // wallet is locked + if keyringStore.isWalletLocked || keyringStore.isRestoreFromUnlockBiometricsPromptVisible { // wallet is locked return .unlock } return .panel @@ -147,7 +146,12 @@ public struct WalletPanelContainerView: View { } } .frame(idealWidth: 320, maxWidth: .infinity) - .onChange(of: keyringStore.defaultKeyring) { newValue in + .onChange(of: keyringStore.isWalletCreated) { newValue in + if visibleScreen != .panel, !keyringStore.lockedManually { + presentWalletWithContext?(.panelUnlockOrSetup) + } + } + .onChange(of: keyringStore.isWalletLocked) { newValue in if visibleScreen != .panel, !keyringStore.lockedManually { presentWalletWithContext?(.panelUnlockOrSetup) } diff --git a/Sources/BraveWallet/Preview Content/MockKeyringService.swift b/Sources/BraveWallet/Preview Content/MockKeyringService.swift index 669ce72c697..aaaaa774a83 100644 --- a/Sources/BraveWallet/Preview Content/MockKeyringService.swift +++ b/Sources/BraveWallet/Preview Content/MockKeyringService.swift @@ -11,14 +11,9 @@ import BraveCore /// /// - note: Do not use this directly, use ``CryptoKeyringStore.previewStore`` class MockKeyringService: BraveWalletKeyringService { - private var keyrings: [BraveWallet.KeyringInfo] = [ - .init( - id: BraveWallet.KeyringId.default, - isKeyringCreated: false, - isLocked: false, - isBackedUp: true - ) - ] + private var isWalletCreated = true + private var isLocked = false + private var isBackedUp = false private var allAccounts: [BraveWallet.AccountInfo] = [] private var privateKeys: [String: String] = [:] private var password = "" @@ -26,9 +21,6 @@ class MockKeyringService: BraveWalletKeyringService { private let mnemonic = "pass entire pelican lock repair desert entire cactus actress remain gossip rail" private var observers: NSHashTable = .weakObjects() private var selectedAccount: BraveWallet.AccountInfo? - private var defaultKeyring: BraveWallet.KeyringInfo { - return keyrings.first(where: { $0.id == BraveWallet.KeyringId.default }) ?? keyrings[0] - } func add(_ observer: BraveWalletKeyringServiceObserver) { observers.add(observer) @@ -90,40 +82,34 @@ class MockKeyringService: BraveWalletKeyringService { } func createWallet(_ password: String, completion: @escaping (String) -> Void) { - defaultKeyring.isKeyringCreated = true - defaultKeyring.isLocked = false + isLocked = false self.password = password - self.addAccount( + addAccount( .eth, keyringId: BraveWallet.KeyringId.default, accountName: "Account 1" ) { [self] accountInfo in selectedAccount = accountInfo observers.allObjects.forEach { - $0.keyringCreated(BraveWallet.KeyringId.default) + $0.walletCreated() } completion(mnemonic) } } - func keyringInfo(_ keyringId: BraveWallet.KeyringId, completion: @escaping (BraveWallet.KeyringInfo) -> Void) { - let keyringInfo = keyrings.first(where: { $0.id == keyringId }) ?? keyrings[0] - completion(keyringInfo.copy() as! BraveWallet.KeyringInfo) // swiftlint:disable:this force_cast - } - func isLocked(_ completion: @escaping (Bool) -> Void) { - completion(defaultKeyring.isLocked) + completion(isLocked) } func lock() { - defaultKeyring.isLocked = true + isLocked = true observers.allObjects.forEach { $0.locked() } } func isWalletBackedUp(_ completion: @escaping (Bool) -> Void) { - completion(defaultKeyring.isBackedUp) + completion(isBackedUp) } func mnemonic(forDefaultKeyring password: String, completion: @escaping (String) -> Void) { @@ -131,13 +117,13 @@ class MockKeyringService: BraveWalletKeyringService { } func unlock(_ password: String, completion: @escaping (Bool) -> Void) { - if !defaultKeyring.isKeyringCreated { + if !isWalletCreated { completion(false) return } let passwordsMatch = self.password == password if passwordsMatch { - defaultKeyring.isLocked = false + isLocked = false observers.allObjects.forEach { $0.unlocked() } @@ -146,7 +132,7 @@ class MockKeyringService: BraveWalletKeyringService { } func notifyWalletBackupComplete() { - defaultKeyring.isBackedUp = true + isBackedUp = true observers.allObjects.forEach { $0.backedUp() } @@ -359,6 +345,10 @@ class MockKeyringService: BraveWalletKeyringService { func allAccounts(_ completion: @escaping (BraveWallet.AllAccountsInfo) -> Void) { } + + func isWalletCreated(_ completion: @escaping (Bool) -> Void) { + completion(isWalletCreated) + } } extension BraveWallet.AccountInfo { @@ -419,36 +409,6 @@ extension BraveWallet.AccountInfo { ) } -extension BraveWallet.KeyringInfo { - static let mockDefaultKeyringInfo: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.default, - isKeyringCreated: true, - isLocked: false, - isBackedUp: false - ) - - static let mockSolanaKeyringInfo: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.solana, - isKeyringCreated: true, - isLocked: false, - isBackedUp: false - ) - - static let mockFilecoinKeyringInfo: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.filecoin, - isKeyringCreated: true, - isLocked: false, - isBackedUp: false - ) - - static let mockFilecoinTestnetKeyringInfo: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.filecoinTestnet, - isKeyringCreated: true, - isLocked: false, - isBackedUp: false - ) -} - extension BraveWallet.AllAccountsInfo { static let mock: BraveWallet.AllAccountsInfo = .init( accounts: [ diff --git a/Sources/BraveWallet/Settings/Web3SettingsView.swift b/Sources/BraveWallet/Settings/Web3SettingsView.swift index caf0ee7bf5d..5007e12ad4c 100644 --- a/Sources/BraveWallet/Settings/Web3SettingsView.swift +++ b/Sources/BraveWallet/Settings/Web3SettingsView.swift @@ -171,11 +171,11 @@ private struct WalletSettingsView: View { } var body: some View { - if keyringStore.isDefaultKeyringCreated { + if keyringStore.isWalletCreated { sections } else { // `KeyringStore` is optional in `Web3SettingsView`, but observed here. - // When wallet is reset, we need SwiftUI to be notified `isDefaultKeyringCreated` + // When wallet is reset, we need SwiftUI to be notified `isWalletCreated` // changed so we can hide Wallet specific sections EmptyView() } @@ -213,7 +213,7 @@ private struct WalletSettingsView: View { } .listRowBackground(Color(.secondaryBraveGroupedBackground)) } - if settingsStore.isBiometricsAvailable, keyringStore.defaultKeyring.isKeyringCreated { + if settingsStore.isBiometricsAvailable, keyringStore.isWalletCreated { Section( footer: Text(Strings.Wallet.settingsEnableBiometricsFooter) .foregroundColor(Color(.secondaryBraveLabel)) diff --git a/Sources/BraveWallet/WalletHostingViewController.swift b/Sources/BraveWallet/WalletHostingViewController.swift index 83a3ed298d6..03ca32bc04c 100644 --- a/Sources/BraveWallet/WalletHostingViewController.swift +++ b/Sources/BraveWallet/WalletHostingViewController.swift @@ -79,9 +79,8 @@ public class WalletHostingViewController: UIHostingController { rootView.appRatingRequestAction = { [unowned self] in self.delegate?.requestAppReview() } - cancellable = walletStore.keyringStore.$defaultKeyring + cancellable = walletStore.keyringStore.$isWalletLocked .dropFirst() // Drop initial value - .map(\.isLocked) .removeDuplicates() .dropFirst() // Drop first async fetch of keyring .sink { [weak self] isLocked in diff --git a/Sources/BraveWallet/WalletPanelHostingController.swift b/Sources/BraveWallet/WalletPanelHostingController.swift index 7b54a19658b..314dd56cdaf 100644 --- a/Sources/BraveWallet/WalletPanelHostingController.swift +++ b/Sources/BraveWallet/WalletPanelHostingController.swift @@ -61,9 +61,8 @@ public class WalletPanelHostingController: UIHostingController (BraveWallet.TestKeyringService, BraveWallet.TestJsonRpcService, BraveWallet.TestBraveWalletService, BraveWallet.TestBlockchainRegistry, BraveWallet.TestAssetRatioService, BraveWallet.TestTxService, BraveWallet.TestSolanaTxManagerProxy, IpfsAPI) { let keyringService = BraveWallet.TestKeyringService() keyringService._addObserver = { _ in } - keyringService._keyringInfo = { keyringInfo, completion in - switch keyringInfo { - case .default: - completion(.mockDefaultKeyringInfo) - case .solana: - completion(.mockSolanaKeyringInfo) - case .filecoin: - completion(.mockFilecoinKeyringInfo) - case .filecoinTestnet: - completion(.mockFilecoinTestnetKeyringInfo) - default: - completion(.mockDefaultKeyringInfo) - } - } keyringService._allAccounts = { $0(.mock) } diff --git a/Tests/BraveWalletTests/AssetDetailStoreTests.swift b/Tests/BraveWalletTests/AssetDetailStoreTests.swift index fe5861f2823..65531e42117 100644 --- a/Tests/BraveWalletTests/AssetDetailStoreTests.swift +++ b/Tests/BraveWalletTests/AssetDetailStoreTests.swift @@ -24,9 +24,6 @@ class AssetDetailStoreTests: XCTestCase { } let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { - $1(.mockDefaultKeyringInfo) - } keyringService._allAccounts = { completion in completion(.mock) } @@ -233,11 +230,7 @@ class AssetDetailStoreTests: XCTestCase { completion(true, [.init(date: Date(), price: "0.99")]) } - let keyring = BraveWallet.KeyringInfo.mockDefaultKeyringInfo let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { - $1(keyring) - } keyringService._allAccounts = { completion in completion(.mock) } diff --git a/Tests/BraveWalletTests/KeyringStoreTests.swift b/Tests/BraveWalletTests/KeyringStoreTests.swift index 6868f7accda..92a536b87cb 100644 --- a/Tests/BraveWalletTests/KeyringStoreTests.swift +++ b/Tests/BraveWalletTests/KeyringStoreTests.swift @@ -18,20 +18,6 @@ class KeyringStoreTests: XCTestCase { let currentSelectedAccount: BraveWallet.AccountInfo = .mockEthAccount let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { keyringId, completion in - switch keyringId { - case BraveWallet.KeyringId.default: - completion(.mockDefaultKeyringInfo) - case BraveWallet.KeyringId.solana: - completion(.mockSolanaKeyringInfo) - case BraveWallet.KeyringId.filecoin: - completion(.mockFilecoinKeyringInfo) - case BraveWallet.KeyringId.filecoinTestnet: - completion(.mockFilecoinTestnetKeyringInfo) - default: - completion(.init()) - } - } keyringService._addObserver = { _ in } keyringService._isLocked = { $0(false) } keyringService._allAccounts = { completion in @@ -43,6 +29,8 @@ class KeyringStoreTests: XCTestCase { )) } keyringService._setSelectedAccount = { $1(true) } + keyringService._isWalletBackedUp = { $0(true) } + keyringService._isWalletCreated = { $0(true) } let rpcService = BraveWallet.TestJsonRpcService() rpcService._addObserver = { _ in } @@ -59,34 +47,6 @@ class KeyringStoreTests: XCTestCase { return (keyringService, rpcService, walletService) } - func testAllKeyrings() { - let (keyringService, rpcService, walletService) = setupServices() - - let store = KeyringStore( - keyringService: keyringService, - walletService: walletService, - rpcService: rpcService - ) - - let expectedKeyrings = [BraveWallet.KeyringInfo.mockDefaultKeyringInfo, BraveWallet.KeyringInfo.mockSolanaKeyringInfo, BraveWallet.KeyringInfo.mockFilecoinKeyringInfo, BraveWallet.KeyringInfo.mockFilecoinTestnetKeyringInfo] - - let allTokensExpectation = expectation(description: "allKeyrings") - store.$allKeyrings - .dropFirst() - .sink { allKeyrings in - defer { allTokensExpectation.fulfill() } - XCTAssertEqual(allKeyrings.count, 4) - for keyring in allKeyrings { - XCTAssertTrue(expectedKeyrings.contains(where: { $0.id == keyring.id })) - } - } - .store(in: &cancellables) - - waitForExpectations(timeout: 1) { error in - XCTAssertNil(error) - } - } - func testInitialSelectedAccount() { let (keyringService, rpcService, walletService) = setupServices() diff --git a/Tests/BraveWalletTests/NetworkSelectionStoreTests.swift b/Tests/BraveWalletTests/NetworkSelectionStoreTests.swift index 4a8e5bc325d..32848e0e4f3 100644 --- a/Tests/BraveWalletTests/NetworkSelectionStoreTests.swift +++ b/Tests/BraveWalletTests/NetworkSelectionStoreTests.swift @@ -24,15 +24,6 @@ import Preferences let currentChainId = currentNetwork.chainId let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { keyringId, completion in - let keyring: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.default, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - } keyringService._addObserver = { _ in } keyringService._isLocked = { $0(false) } keyringService._allAccounts = { completion in @@ -214,15 +205,6 @@ import Preferences .eth: [.mockEthAccount] ] - keyringService._keyringInfo = { keyringId, completion in - let keyring: BraveWallet.KeyringInfo = .init( - id: keyringId, - isKeyringCreated: true, - isLocked: false, - isBackedUp: false - ) - completion(keyring) - } keyringService._addObserver = { _ in } keyringService._isLocked = { $0(false) } keyringService._allAccounts = { completion in diff --git a/Tests/BraveWalletTests/NetworkStoreTests.swift b/Tests/BraveWalletTests/NetworkStoreTests.swift index 425269de906..dfc3550b976 100644 --- a/Tests/BraveWalletTests/NetworkStoreTests.swift +++ b/Tests/BraveWalletTests/NetworkStoreTests.swift @@ -30,15 +30,6 @@ import Preferences ] let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { keyringId, completion in - let keyring: BraveWallet.KeyringInfo = .init( - id: keyringId, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - } keyringService._addObserver = { _ in } keyringService._isLocked = { $0(false) } keyringService._allAccounts = { completion in diff --git a/Tests/BraveWalletTests/SelectAccountTokenStoreTests.swift b/Tests/BraveWalletTests/SelectAccountTokenStoreTests.swift index 6472fbd57a8..3f74a30a475 100644 --- a/Tests/BraveWalletTests/SelectAccountTokenStoreTests.swift +++ b/Tests/BraveWalletTests/SelectAccountTokenStoreTests.swift @@ -138,32 +138,6 @@ import Preferences price: mockFILPrice, assetTimeframeChange: "-57.23") let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { keyringId, completion in - switch keyringId { - case .default: - let keyring: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.default, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - case .solana: - let keyring: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.solana, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - case .filecoin: - completion(.mockFilecoinKeyringInfo) - case .filecoinTestnet: - completion(.mockFilecoinTestnetKeyringInfo) - default: - completion(.mockDefaultKeyringInfo) - } - } keyringService._allAccounts = { $0(.init( accounts: [ diff --git a/Tests/BraveWalletTests/SettingsStoreTests.swift b/Tests/BraveWalletTests/SettingsStoreTests.swift index b5f8883b1c9..f2728350e3c 100644 --- a/Tests/BraveWalletTests/SettingsStoreTests.swift +++ b/Tests/BraveWalletTests/SettingsStoreTests.swift @@ -19,15 +19,6 @@ class SettingsStoreTests: XCTestCase { let mockUserAssets: [BraveWallet.BlockchainToken] = [.previewToken.copy(asVisibleAsset: true)] let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { _, completion in - let keyring: BraveWallet.KeyringInfo = .init( - id: BraveWallet.KeyringId.default, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - } keyringService._addObserver = { _ in } keyringService._isLocked = { $0(false) } keyringService._setAutoLockMinutes = { _, _ in } diff --git a/Tests/BraveWalletTests/TransactionConfirmationStoreTests.swift b/Tests/BraveWalletTests/TransactionConfirmationStoreTests.swift index 30e23693f63..442f6526a20 100644 --- a/Tests/BraveWalletTests/TransactionConfirmationStoreTests.swift +++ b/Tests/BraveWalletTests/TransactionConfirmationStoreTests.swift @@ -109,15 +109,6 @@ import Preferences completion(setDataForUnapprovedTransactionSuccess) } let keyringService = BraveWallet.TestKeyringService() - keyringService._keyringInfo = { id, completion in - let keyring: BraveWallet.KeyringInfo = .init( - id: id, - isKeyringCreated: true, - isLocked: false, - isBackedUp: true - ) - completion(keyring) - } keyringService._allAccounts = { $0(.init( accounts: accountInfos, diff --git a/Tests/BraveWalletTests/TransactionsActivityStoreTests.swift b/Tests/BraveWalletTests/TransactionsActivityStoreTests.swift index 598f0f27683..7c249dacbce 100644 --- a/Tests/BraveWalletTests/TransactionsActivityStoreTests.swift +++ b/Tests/BraveWalletTests/TransactionsActivityStoreTests.swift @@ -51,20 +51,6 @@ class TransactionsActivityStoreTests: XCTestCase { func testUpdate() { let keyringService = BraveWallet.TestKeyringService() keyringService._addObserver = { _ in } - keyringService._keyringInfo = { keyringId, completion in - switch keyringId { - case .default: - completion(.mockDefaultKeyringInfo) - case .solana: - completion(.mockSolanaKeyringInfo) - case .filecoin: - completion(.mockFilecoinKeyringInfo) - case .filecoinTestnet: - completion(.mockFilecoinTestnetKeyringInfo) - default: - completion(.mockDefaultKeyringInfo) - } - } keyringService._allAccounts = { $0(.mock) } diff --git a/package-lock.json b/package-lock.json index 232e3f88660..2a0e39dbe47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.61.32", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", - "integrity": "sha512-kki2F0hFA0xuZ3bZsP1gNGMJTXv7IiGRP+Rr7x3C5oqHw/qKznSY4OPKoKkvcCzs1XCG6gk1N50mhxS/OJYi8g==", + "version": "1.61.39", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", + "integrity": "sha512-8BjoLtSDCZhveL5Vaqw4zOwiiYT69JgkW+exEG/SoyrJo1/ImQSnuW6LGy5EZHxhfp8PyEfB1rbJWEc2CFGLGQ==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", - "integrity": "sha512-kki2F0hFA0xuZ3bZsP1gNGMJTXv7IiGRP+Rr7x3C5oqHw/qKznSY4OPKoKkvcCzs1XCG6gk1N50mhxS/OJYi8g==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", + "integrity": "sha512-8BjoLtSDCZhveL5Vaqw4zOwiiYT69JgkW+exEG/SoyrJo1/ImQSnuW6LGy5EZHxhfp8PyEfB1rbJWEc2CFGLGQ==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index 0a3b45b7ad3..79cc071da8c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.32/brave-core-ios-1.61.32.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", From 4184ad9a1e6df8bc04c4fabb66bfb43bfcfb5edb Mon Sep 17 00:00:00 2001 From: Brandon T Date: Fri, 27 Oct 2023 19:13:38 -0400 Subject: [PATCH 5/8] Fix MOST of the compilation (but not all - Had to comment out one rewards/ads related thing for adsInfo) --- .../Ads/AdsNotificationHandler.swift | 14 +++---- .../NewTabPageViewController.swift | 16 +++----- .../Sections/BraveNewsSectionProvider.swift | 10 ++--- .../Brave/Frontend/Rewards/BraveRewards.swift | 39 ++++++++----------- .../RewardsDebugSettingsViewController.swift | 6 +-- .../Composer/FeedCardGenerator.swift | 6 +-- .../Extensions/BraveAdsExtensions.swift | 2 +- .../MockBraveWalletService.swift | 4 ++ .../Preview Content/MockJsonRpcService.swift | 5 ++- 9 files changed, 49 insertions(+), 53 deletions(-) diff --git a/Sources/Brave/Frontend/Brave Rewards/Ads/AdsNotificationHandler.swift b/Sources/Brave/Frontend/Brave Rewards/Ads/AdsNotificationHandler.swift index 11a57e938af..9ccaa5cb572 100644 --- a/Sources/Brave/Frontend/Brave Rewards/Ads/AdsNotificationHandler.swift +++ b/Sources/Brave/Frontend/Brave Rewards/Ads/AdsNotificationHandler.swift @@ -36,31 +36,31 @@ class AdsNotificationHandler: BraveAdsNotificationHandler { self.ads.notificationsHandler = self } - func showNotification(_ notification: NotificationAd) { + func showNotificationAd(_ notification: NotificationAd) { guard let presentingController = presentingController else { return } let rewardsNotification = RewardsNotification(ad: notification) { [weak self] action in guard let self = self else { return } switch action { case .opened: - self.ads.reportNotificationAdEvent(notification.placementID, eventType: .clicked, completion: { _ in }) + self.ads.triggerNotificationAdEvent(notification.placementID, eventType: .viewed, completion: { _ in }) case .dismissed: - self.ads.reportNotificationAdEvent(notification.placementID, eventType: .dismissed, completion: { _ in }) + self.ads.triggerNotificationAdEvent(notification.placementID, eventType: .dismissed, completion: { _ in }) case .timedOut: - self.ads.reportNotificationAdEvent(notification.placementID, eventType: .timedOut, completion: { _ in }) + self.ads.triggerNotificationAdEvent(notification.placementID, eventType: .timedOut, completion: { _ in }) } self.actionOccured?(notification, action) } - ads.reportNotificationAdEvent(notification.placementID, eventType: .viewed, completion: { _ in }) + ads.triggerNotificationAdEvent(notification.placementID, eventType: .viewed, completion: { _ in }) notificationsPresenter?.display(notification: rewardsNotification, from: presentingController) } - func clearNotification(withIdentifier identifier: String) { + func closeNotificationAd(_ identifier: String) { notificationsPresenter?.removeNotification(with: identifier) } - func shouldShowNotifications() -> Bool { + func canShowNotificationAds() -> Bool { guard let presentingController = presentingController, let rootVC = presentingController.currentScene?.browserViewController else { return false } diff --git a/Sources/Brave/Frontend/Browser/New Tab Page/NewTabPageViewController.swift b/Sources/Brave/Frontend/Browser/New Tab Page/NewTabPageViewController.swift index ef02218f732..7c86c3e77f6 100644 --- a/Sources/Brave/Frontend/Browser/New Tab Page/NewTabPageViewController.swift +++ b/Sources/Brave/Frontend/Browser/New Tab Page/NewTabPageViewController.swift @@ -475,12 +475,11 @@ class NewTabPageViewController: UIViewController { if let eventType { p3aHelper.recordEvent(eventType, on: sponsoredBackground) } - rewards.ads.reportNewTabPageAdEvent( + rewards.ads.triggerNewTabPageAdEvent( background.wallpaperId.uuidString, creativeInstanceId: sponsoredBackground.creativeInstanceId, eventType: event, - completion: { _ in } - ) + completion: { _ in }) } } @@ -619,12 +618,10 @@ class NewTabPageViewController: UIViewController { let item = context.item if !switchingToPrivateMode, item.content.contentType == .partner, let creativeInstanceID = item.content.creativeInstanceID { - rewards.ads.reportPromotedContentAdEvent( + rewards.ads.triggerPromotedContentAdEvent( item.content.urlHash, creativeInstanceId: creativeInstanceID, - eventType: .clicked, - completion: { _ in } - ) + eventType: .clicked, completion: { _ in }) } if switchingToPrivateMode, Preferences.Privacy.privateBrowsingLock.value { self.askForLocalAuthentication { [weak self] success, error in @@ -660,12 +657,11 @@ class NewTabPageViewController: UIViewController { case .inlineContentAdAction(.opened(let inNewTab, let switchingToPrivateMode), let ad): guard let url = ad.targetURL.asURL else { return } if !switchingToPrivateMode { - rewards.ads.reportInlineContentAdEvent( + rewards.ads.triggerInlineContentAdEvent( ad.placementID, creativeInstanceId: ad.creativeInstanceID, eventType: .clicked, - completion: { _ in } - ) + completion: { _ in }) } delegate?.navigateToInput( url.absoluteString, diff --git a/Sources/Brave/Frontend/Browser/New Tab Page/Sections/BraveNewsSectionProvider.swift b/Sources/Brave/Frontend/Browser/New Tab Page/Sections/BraveNewsSectionProvider.swift index b0a09dc15ca..79279f0d943 100644 --- a/Sources/Brave/Frontend/Browser/New Tab Page/Sections/BraveNewsSectionProvider.swift +++ b/Sources/Brave/Frontend/Browser/New Tab Page/Sections/BraveNewsSectionProvider.swift @@ -206,22 +206,20 @@ class BraveNewsSectionProvider: NSObject, NTPObservableSectionProvider { if case .partner(let item) = card, let creativeInstanceID = item.content.creativeInstanceID { iabTrackedCellContexts[indexPath] = .init(collectionView: collectionView) { [weak self] in - self?.rewards.ads.reportPromotedContentAdEvent( + self?.rewards.ads.triggerPromotedContentAdEvent( item.content.urlHash, creativeInstanceId: creativeInstanceID, eventType: .viewed, - completion: { _ in } - ) + completion: { _ in }) } } if case .ad(let ad) = card { iabTrackedCellContexts[indexPath] = .init(collectionView: collectionView) { [weak self] in - self?.rewards.ads.reportInlineContentAdEvent( + self?.rewards.ads.triggerInlineContentAdEvent( ad.placementID, creativeInstanceId: ad.creativeInstanceID, eventType: .viewed, - completion: { _ in } - ) + completion: { _ in }) self?.recordWeeklyAdsViewedP3A(adViewed: true) } } diff --git a/Sources/Brave/Frontend/Rewards/BraveRewards.swift b/Sources/Brave/Frontend/Rewards/BraveRewards.swift index 03c367e18ea..5d308346419 100644 --- a/Sources/Brave/Frontend/Rewards/BraveRewards.swift +++ b/Sources/Brave/Frontend/Rewards/BraveRewards.swift @@ -78,9 +78,9 @@ public class BraveRewards: NSObject { ) } // If ads is already initialized just toggle rewards ads and update the wallet info - if self.ads.isAdsServiceRunning() { + if self.ads.isServiceRunning() { if let walletInfo { - self.ads.updateWalletInfo(walletInfo.paymentId, base64Seed: walletInfo.recoverySeed) + self.ads.notifyRewardsWalletDidUpdate(walletInfo.paymentId, base64Seed: walletInfo.recoverySeed) } if let toggleAds { self.ads.isEnabled = toggleAds @@ -98,14 +98,14 @@ public class BraveRewards: NSObject { private var braveNewsObservation: AnyCancellable? private var shouldShutdownAds: Bool { - ads.isAdsServiceRunning() && !ads.isEnabled && !Preferences.BraveNews.isEnabled.value + ads.isServiceRunning() && !ads.isEnabled && !Preferences.BraveNews.isEnabled.value } /// Propose that the ads service should be shutdown based on whether or not that all features /// that use it are disabled private func proposeAdsShutdown() { if !shouldShutdownAds { return } - ads.shutdown { + ads.shutdownService { self.ads = BraveAds(stateStoragePath: self.configuration.storageURL.appendingPathComponent("ads").path) } } @@ -160,8 +160,8 @@ public class BraveRewards: NSObject { try? FileManager.default.removeItem( at: configuration.storageURL.appendingPathComponent("ledger") ) - if ads.isAdsServiceRunning(), !Preferences.BraveNews.isEnabled.value { - ads.shutdown { [self] in + if ads.isServiceRunning(), !Preferences.BraveNews.isEnabled.value { + ads.shutdownService { [self] in try? FileManager.default.removeItem( at: configuration.storageURL.appendingPathComponent("ads") ) @@ -186,8 +186,8 @@ public class BraveRewards: NSObject { rewardsAPI?.selectedTabId = UInt32(tabId) tabRetrieved(tabId, url: url, html: nil) } - if ads.isAdsServiceRunning() && !isPrivate { - ads.reportTabUpdated(tabId, url: url, redirectedFrom: tab.redirectURLs, isSelected: isSelected) + if ads.isServiceRunning() && !isPrivate { + ads.notifyTabDidChange(tabId, url: url, redirectChain: tab.redirectURLs, isSelected: isSelected) } } @@ -203,14 +203,9 @@ public class BraveRewards: NSObject { adsInnerText: String? ) { tabRetrieved(tabId, url: url, html: html) - if let innerText = adsInnerText, ads.isAdsServiceRunning() { - ads.reportLoadedPage( - with: url, - redirectedFrom: redirectionURLs ?? [], - html: html, - innerText: innerText, - tabId: tabId - ) + if let innerText = adsInnerText, ads.isServiceRunning() { + ads.notifyTabHtmlContentDidChange(tabId, url: url, redirectChain: redirectionURLs ?? [], html: html) + ads.notifyTabTextContentDidChange(tabId, url: url, redirectChain: redirectionURLs ?? [], text: innerText) } rewardsAPI?.reportLoadedPage(url: url, tabId: UInt32(tabId)) } @@ -227,14 +222,14 @@ public class BraveRewards: NSObject { /// Report that media has started on a tab with a given id func reportMediaStarted(tabId: Int) { - if !ads.isAdsServiceRunning() { return } - ads.reportMediaStarted(tabId: tabId) + if !ads.isServiceRunning() { return } + ads.notifyTabDidStartPlayingMedia(tabId) } /// Report that media has stopped on a tab with a given id func reportMediaStopped(tabId: Int) { - if !ads.isAdsServiceRunning() { return } - ads.reportMediaStopped(tabId: tabId) + if !ads.isServiceRunning() { return } + ads.notifyTabDidStopPlayingMedia(tabId) } /// Report that a tab with a given id navigated to a new page in the same tab @@ -244,8 +239,8 @@ public class BraveRewards: NSObject { /// Report that a tab with a given id was closed by the user func reportTabClosed(tabId: Int) { - if ads.isAdsServiceRunning() { - ads.reportTabClosed(tabId: tabId) + if ads.isServiceRunning() { + ads.notifyDidCloseTab(tabId) } rewardsAPI?.reportTabNavigationOrClosed(tabId: UInt32(tabId)) } diff --git a/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift b/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift index 1ab07b586d2..0a4a1061c81 100644 --- a/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift +++ b/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift @@ -23,9 +23,9 @@ class RewardsDebugSettingsViewController: TableViewController { super.init(style: .grouped) - self.rewards.ads.detailsForCurrentCycle { [weak self] viewed, amount, date in - self?.adsInfo = (viewed, amount, date) - } +// self.rewards.ads.detailsForCurrentCycle { [weak self] viewed, amount, date in +// self?.adsInfo = (viewed, amount, date) +// } } @available(*, unavailable) diff --git a/Sources/BraveNews/Composer/FeedCardGenerator.swift b/Sources/BraveNews/Composer/FeedCardGenerator.swift index 828d7e7e64c..62541548041 100644 --- a/Sources/BraveNews/Composer/FeedCardGenerator.swift +++ b/Sources/BraveNews/Composer/FeedCardGenerator.swift @@ -180,15 +180,15 @@ extension FeedCardGenerator { case .braveAd: // If we fail to obtain inline content ads during a card gen it can be assumed that // all further calls will fail since cards are generated all at once - guard !contentAdsQueryFailed, let ads = ads, ads.isAdsServiceRunning() else { return [] } + guard !contentAdsQueryFailed, let ads = ads, ads.isServiceRunning() else { return [] } if !inlineContentAdsPurged { inlineContentAdsPurged = true _ = await Task { @MainActor in - await ads.purgeOrphanedAdEvents(.inlineContentAd) + await ads.purgeOrphanedAdEvents(for: .inlineContentAd) }.value } let contentAd = await Task { @MainActor in - await ads.inlineContentAds(dimensions: "900x750").1 + await ads.maybeServeInlineContentAd("900x750").1 }.value guard let ad = contentAd else { contentAdsQueryFailed = true diff --git a/Sources/BraveShared/Extensions/BraveAdsExtensions.swift b/Sources/BraveShared/Extensions/BraveAdsExtensions.swift index 579be25f294..ef2fb2b093c 100644 --- a/Sources/BraveShared/Extensions/BraveAdsExtensions.swift +++ b/Sources/BraveShared/Extensions/BraveAdsExtensions.swift @@ -10,7 +10,7 @@ import UIKit extension BraveAds { public func initialize(walletInfo: BraveAds.WalletInfo? = nil, completion: @escaping (Bool) -> Void) { - self.initialize( + self.initService( with: .init(deviceId: UIDevice.current.identifierForVendor?.uuidString ?? ""), buildChannelInfo: .init( isRelease: AppConstants.buildChannel == .release, diff --git a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift index 70580ff8c2f..69ea28bba56 100644 --- a/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift +++ b/Sources/BraveWallet/Preview Content/MockBraveWalletService.swift @@ -18,6 +18,10 @@ class MockBraveWalletService: BraveWalletBraveWalletService { private var defaultCurrency = CurrencyCode.usd private var defaultCryptocurrency = "eth" private var coin: BraveWallet.CoinType = .eth + + func ankrSupportedChainIds(_ completion: @escaping ([String]) -> Void) { + completion([]) + } func userAssets(_ chainId: String, coin: BraveWallet.CoinType, completion: @escaping ([BraveWallet.BlockchainToken]) -> Void) { completion(assets[chainId] ?? []) diff --git a/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift b/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift index effd60fb19c..03469709c98 100644 --- a/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift +++ b/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift @@ -13,12 +13,15 @@ import BraveCore /// /// - note: Do not use this directly, use ``NetworkStore.previewStore`` class MockJsonRpcService: BraveWalletJsonRpcService { - private var chainId: String = BraveWallet.MainnetChainId private var networks: [BraveWallet.NetworkInfo] = [.mockMainnet, .mockGoerli, .mockSepolia, .mockPolygon, .mockCelo] private var networkURL: URL? private var observers: NSHashTable = .weakObjects() + func ankrGetAccountBalances(_ accountAddress: String, chainIds: [String], completion: @escaping ([BraveWallet.AnkrAssetBalance], BraveWallet.ProviderError, String) -> Void) { + completion([], .success, "") + } + func chainId(forOrigin coin: BraveWallet.CoinType, origin: URLOrigin, completion: @escaping (String) -> Void) { completion(chainId) } From 374b910d8518365530fe35836faf0fb8f1ab913a Mon Sep 17 00:00:00 2001 From: Kyle Hickinson Date: Mon, 30 Oct 2023 17:19:37 -0400 Subject: [PATCH 6/8] Bump to 1.61.51, finish fixing up ads changes --- .../QA/RewardsDebugSettingsViewController.swift | 6 +++--- .../Preview Content/MockJsonRpcService.swift | 4 ---- package-lock.json | 12 ++++++------ package.json | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift b/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift index 0a4a1061c81..638993c88b6 100644 --- a/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift +++ b/Sources/Brave/Frontend/Settings/Debug/Rewards Internals/QA/RewardsDebugSettingsViewController.swift @@ -23,9 +23,9 @@ class RewardsDebugSettingsViewController: TableViewController { super.init(style: .grouped) -// self.rewards.ads.detailsForCurrentCycle { [weak self] viewed, amount, date in -// self?.adsInfo = (viewed, amount, date) -// } + self.rewards.ads.getStatementOfAccounts { [weak self] viewed, amount, date in + self?.adsInfo = (viewed, amount, date) + } } @available(*, unavailable) diff --git a/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift b/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift index 03469709c98..678a8ced0b0 100644 --- a/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift +++ b/Sources/BraveWallet/Preview Content/MockJsonRpcService.swift @@ -18,10 +18,6 @@ class MockJsonRpcService: BraveWalletJsonRpcService { private var networkURL: URL? private var observers: NSHashTable = .weakObjects() - func ankrGetAccountBalances(_ accountAddress: String, chainIds: [String], completion: @escaping ([BraveWallet.AnkrAssetBalance], BraveWallet.ProviderError, String) -> Void) { - completion([], .success, "") - } - func chainId(forOrigin coin: BraveWallet.CoinType, origin: URLOrigin, completion: @escaping (String) -> Void) { completion(chainId) } diff --git a/package-lock.json b/package-lock.json index 2a0e39dbe47..d2dd198de2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.61.39", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", - "integrity": "sha512-8BjoLtSDCZhveL5Vaqw4zOwiiYT69JgkW+exEG/SoyrJo1/ImQSnuW6LGy5EZHxhfp8PyEfB1rbJWEc2CFGLGQ==", + "version": "1.61.51", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", + "integrity": "sha512-YExsYELYkft4/VxvXX8KWyEEOWqQSxfuu1aCLSgi4OyY92dl7land1AMfkegNqiZvEtGryxP6teTNDKg/8koHg==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", - "integrity": "sha512-8BjoLtSDCZhveL5Vaqw4zOwiiYT69JgkW+exEG/SoyrJo1/ImQSnuW6LGy5EZHxhfp8PyEfB1rbJWEc2CFGLGQ==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", + "integrity": "sha512-YExsYELYkft4/VxvXX8KWyEEOWqQSxfuu1aCLSgi4OyY92dl7land1AMfkegNqiZvEtGryxP6teTNDKg/8koHg==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index 79cc071da8c..ee074aceb07 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.39/brave-core-ios-1.61.39.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", From 0657771b0da60ceeebbe8d6c1c1bbc4b245e7e2b Mon Sep 17 00:00:00 2001 From: Stephen Heaps Date: Tue, 31 Oct 2023 12:12:59 -0400 Subject: [PATCH 7/8] Update BraveCore to v1.61.59 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2dd198de2d..815d0ebcce4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.61.51", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", - "integrity": "sha512-YExsYELYkft4/VxvXX8KWyEEOWqQSxfuu1aCLSgi4OyY92dl7land1AMfkegNqiZvEtGryxP6teTNDKg/8koHg==", + "version": "1.61.59", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", + "integrity": "sha512-FMmNovpYT2PpUYoG3I2GWEnkax3xQP42JEtmipT8t1FjTonGyGbHQXWQUVoSkSuSZNf7C25to9ixzScjzXu1QA==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", - "integrity": "sha512-YExsYELYkft4/VxvXX8KWyEEOWqQSxfuu1aCLSgi4OyY92dl7land1AMfkegNqiZvEtGryxP6teTNDKg/8koHg==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", + "integrity": "sha512-FMmNovpYT2PpUYoG3I2GWEnkax3xQP42JEtmipT8t1FjTonGyGbHQXWQUVoSkSuSZNf7C25to9ixzScjzXu1QA==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index ee074aceb07..06be72869d7 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.51/brave-core-ios-1.61.51.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", From 7328b0781564de9de36e1b2bec4e1aab8f2a20e7 Mon Sep 17 00:00:00 2001 From: Stephen Heaps Date: Thu, 9 Nov 2023 12:43:44 -0500 Subject: [PATCH 8/8] Update BraveCore to v1.61.69 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 815d0ebcce4..a4e3b667e07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.69/brave-core-ios-1.61.69.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3", @@ -493,9 +493,9 @@ } }, "node_modules/brave-core-ios": { - "version": "1.61.59", - "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", - "integrity": "sha512-FMmNovpYT2PpUYoG3I2GWEnkax3xQP42JEtmipT8t1FjTonGyGbHQXWQUVoSkSuSZNf7C25to9ixzScjzXu1QA==", + "version": "1.61.69", + "resolved": "https://github.com/brave/brave-browser/releases/download/v1.61.69/brave-core-ios-1.61.69.tgz", + "integrity": "sha512-jp1Lb4nIkZiqFVHP+a+qzFEkzTThQAjyAO5vqb/GqbkSWrQ2wzK6bP0B8m0dSe4qQbo9amklcvNbiv5rxR9PSg==", "license": "ISC" }, "node_modules/browserslist": { @@ -3171,8 +3171,8 @@ } }, "brave-core-ios": { - "version": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", - "integrity": "sha512-FMmNovpYT2PpUYoG3I2GWEnkax3xQP42JEtmipT8t1FjTonGyGbHQXWQUVoSkSuSZNf7C25to9ixzScjzXu1QA==" + "version": "https://github.com/brave/brave-browser/releases/download/v1.61.69/brave-core-ios-1.61.69.tgz", + "integrity": "sha512-jp1Lb4nIkZiqFVHP+a+qzFEkzTThQAjyAO5vqb/GqbkSWrQ2wzK6bP0B8m0dSe4qQbo9amklcvNbiv5rxR9PSg==" }, "browserslist": { "version": "4.17.1", diff --git a/package.json b/package.json index 06be72869d7..abda754d04a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla/readability": "^0.4.2", - "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.59/brave-core-ios-1.61.59.tgz", + "brave-core-ios": "https://github.com/brave/brave-browser/releases/download/v1.61.69/brave-core-ios-1.61.69.tgz", "leo": "github:brave/leo#7f2dfddb70aff1501ef5a2f3c640a8c74a7343ee", "leo-sf-symbols": "github:brave/leo-sf-symbols#d6056328b8d6ef06e68996ff02a22e06f52590c3", "page-metadata-parser": "^1.1.3",