diff --git a/ios/browser/brave_wallet/BUILD.gn b/ios/browser/brave_wallet/BUILD.gn index a5e6e05554ca..8066650d4b6a 100644 --- a/ios/browser/brave_wallet/BUILD.gn +++ b/ios/browser/brave_wallet/BUILD.gn @@ -21,6 +21,8 @@ source_set("brave_wallet") { "swap_service_factory.h", "tx_service_factory.cc", "tx_service_factory.h", + "zcash_wallet_service_factory.h", + "zcash_wallet_service_factory.mm", ] deps = [ "//brave/components/brave_wallet/browser", diff --git a/ios/browser/brave_wallet/brave_wallet_factory_wrappers.h b/ios/browser/brave_wallet/brave_wallet_factory_wrappers.h index cb711d175405..53d101ea8244 100644 --- a/ios/browser/brave_wallet/brave_wallet_factory_wrappers.h +++ b/ios/browser/brave_wallet/brave_wallet_factory_wrappers.h @@ -13,7 +13,7 @@ , BraveWalletBraveWalletService, BraveWalletJsonRpcService, BraveWalletEthTxManagerProxy, BraveWalletSolanaTxManagerProxy, BraveWalletTxService, BraveWalletKeyringService, BraveWalletSwapService, - BraveWalletIpfsService; + BraveWalletIpfsService, BraveWalletZCashWalletService; OBJC_EXPORT NS_SWIFT_NAME(BraveWallet.AssetRatioServiceFactory) @@ -69,4 +69,10 @@ NS_SWIFT_NAME(BraveWallet.IpfsServiceFactory) : KeyedServiceFactoryWrapper > @end +OBJC_EXPORT +NS_SWIFT_NAME(BraveWallet.ZCashWalletServiceFactory) +@interface BraveWalletZCashWalletServiceFactory + : KeyedServiceFactoryWrapper > +@end + #endif // BRAVE_IOS_BROWSER_BRAVE_WALLET_BRAVE_WALLET_FACTORY_WRAPPERS_H_ diff --git a/ios/browser/brave_wallet/brave_wallet_factory_wrappers.mm b/ios/browser/brave_wallet/brave_wallet_factory_wrappers.mm index 42e1b9ca9e62..3f3191577b3e 100644 --- a/ios/browser/brave_wallet/brave_wallet_factory_wrappers.mm +++ b/ios/browser/brave_wallet/brave_wallet_factory_wrappers.mm @@ -13,6 +13,7 @@ #include "brave/ios/browser/brave_wallet/keyring_service_factory.h" #include "brave/ios/browser/brave_wallet/swap_service_factory.h" #include "brave/ios/browser/brave_wallet/tx_service_factory.h" +#include "brave/ios/browser/brave_wallet/zcash_wallet_service_factory.h" #include "brave/ios/browser/keyed_service/keyed_service_factory_wrapper+private.h" #include "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" @@ -130,3 +131,15 @@ + (nullable id)serviceForBrowserState:(ChromeBrowserState*)browserState { initWithIpfsService:std::move(service)]; } @end + +@implementation BraveWalletZCashWalletServiceFactory ++ (nullable id)serviceForBrowserState:(ChromeBrowserState*)browserState { + auto service = + brave_wallet::ZCashWalletServiceFactory::GetForBrowserState(browserState); + if (!service) { + return nil; + } + return [[BraveWalletZCashWalletServiceMojoImpl alloc] + initWithZCashWalletService:std::move(service)]; +} +@end diff --git a/ios/browser/brave_wallet/zcash_wallet_service_factory.h b/ios/browser/brave_wallet/zcash_wallet_service_factory.h new file mode 100644 index 000000000000..4b64d6b65c17 --- /dev/null +++ b/ios/browser/brave_wallet/zcash_wallet_service_factory.h @@ -0,0 +1,63 @@ +/* Copyright (c) 2023 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_IOS_BROWSER_BRAVE_WALLET_ZCASH_WALLET_SERVICE_FACTORY_H_ +#define BRAVE_IOS_BROWSER_BRAVE_WALLET_ZCASH_WALLET_SERVICE_FACTORY_H_ + +#include + +#include "brave/components/brave_wallet/common/brave_wallet.mojom.h" +#include "components/keyed_service/ios/browser_state_keyed_service_factory.h" +#include "mojo/public/cpp/bindings/pending_remote.h" + +class ChromeBrowserState; +class KeyedService; + +namespace base { +template +class NoDestructor; +} // namespace base + +namespace web { +class BrowserState; +} // namespace web + +namespace brave_wallet { + +class ZCashWalletService; + +class ZCashWalletServiceFactory : public BrowserStateKeyedServiceFactory { + public: + // Creates the service if it doesn't exist already for |browser_state|. + static mojo::PendingRemote GetForBrowserState( + ChromeBrowserState* browser_state); + + static ZCashWalletService* GetServiceForState( + ChromeBrowserState* browser_state); + + static ZCashWalletServiceFactory* GetInstance(); + + private: + friend base::NoDestructor; + + ZCashWalletServiceFactory(); + ~ZCashWalletServiceFactory() override; + + // BrowserContextKeyedServiceFactory: + // BrowserStateKeyedServiceFactory implementation. + std::unique_ptr BuildServiceInstanceFor( + web::BrowserState* context) const override; + bool ServiceIsNULLWhileTesting() const override; + web::BrowserState* GetBrowserStateToUse( + web::BrowserState* context) const override; + + ZCashWalletServiceFactory(const ZCashWalletServiceFactory&) = delete; + ZCashWalletServiceFactory& operator=(const ZCashWalletServiceFactory&) = + delete; +}; + +} // namespace brave_wallet + +#endif // BRAVE_IOS_BROWSER_BRAVE_WALLET_ZCASH_WALLET_SERVICE_FACTORY_H_ diff --git a/ios/browser/brave_wallet/zcash_wallet_service_factory.mm b/ios/browser/brave_wallet/zcash_wallet_service_factory.mm new file mode 100644 index 000000000000..f05eb1646525 --- /dev/null +++ b/ios/browser/brave_wallet/zcash_wallet_service_factory.mm @@ -0,0 +1,74 @@ +/* Copyright (c) 2023 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#include "brave/ios/browser/brave_wallet/zcash_wallet_service_factory.h" + +#include "brave/components/brave_wallet/browser/pref_names.h" +#include "brave/components/brave_wallet/browser/zcash/zcash_wallet_service.h" +#include "brave/components/brave_wallet/common/common_utils.h" +#include "brave/ios/browser/brave_wallet/keyring_service_factory.h" +#include "components/keyed_service/core/keyed_service.h" +#include "components/keyed_service/ios/browser_state_dependency_manager.h" +#include "ios/chrome/browser/shared/model/application_context/application_context.h" +#include "ios/chrome/browser/shared/model/browser_state/browser_state_otr_helper.h" +#include "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" +#include "ios/web/public/browser_state.h" + +namespace brave_wallet { + +// static +mojo::PendingRemote +ZCashWalletServiceFactory::GetForBrowserState( + ChromeBrowserState* browser_state) { + return static_cast( + GetInstance()->GetServiceForBrowserState(browser_state, true)) + ->MakeRemote(); +} + +// static +ZCashWalletService* ZCashWalletServiceFactory::GetServiceForState( + ChromeBrowserState* browser_state) { + return static_cast( + GetInstance()->GetServiceForBrowserState(browser_state, true)); +} + +// static +ZCashWalletServiceFactory* ZCashWalletServiceFactory::GetInstance() { + static base::NoDestructor instance; + return instance.get(); +} + +ZCashWalletServiceFactory::ZCashWalletServiceFactory() + : BrowserStateKeyedServiceFactory( + "ZCashWalletService", + BrowserStateDependencyManager::GetInstance()) { + DependsOn(KeyringServiceFactory::GetInstance()); +} + +ZCashWalletServiceFactory::~ZCashWalletServiceFactory() = default; + +std::unique_ptr +ZCashWalletServiceFactory::BuildServiceInstanceFor( + web::BrowserState* context) const { + auto* browser_state = ChromeBrowserState::FromBrowserState(context); + if (!IsZCashEnabled()) { + return nullptr; + } + std::unique_ptr zcash_service(new ZCashWalletService( + KeyringServiceFactory::GetServiceForState(browser_state), + browser_state->GetPrefs(), browser_state->GetSharedURLLoaderFactory())); + return zcash_service; +} + +bool ZCashWalletServiceFactory::ServiceIsNULLWhileTesting() const { + return true; +} + +web::BrowserState* ZCashWalletServiceFactory::GetBrowserStateToUse( + web::BrowserState* context) const { + return GetBrowserStateRedirectedInIncognito(context); +} + +} // namespace brave_wallet