Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,7 @@ final class NSEClientScope: Component<NSEClientScopeDependency> {
syncContext: coreDataStack.syncContext,
coreCryptoKeyMigrationManager: coreCryptoMigrationManager,
allowCreation: false,
localDomain: localDomain,
backgroundTaskManager: nil
localDomain: localDomain
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,7 @@ final class IncrementalSyncV2Tests: XCTestCase {
coreCrypto = MockCoreCryptoProtocol()
coreCrypto.mockTransaction(context: coreCryptoContext)
coreCryptoProvider = MockCoreCryptoProviderProtocol()
coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: coreCrypto
)
coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: coreCrypto)
journal = Journal(
userID: UUID(),
storage: UserDefaults.temporary()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,7 @@ class PullPendingUpdateEventsSyncV2Tests: XCTestCase {
)

// Setup mocks
coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: coreCrypto
)
coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: coreCrypto)
decryptor.decryptEventsInContext_MockMethod = { envelope, _ in
EventDecryptorResult(events: envelope.events, brokenMLSGroupIDs: [Scaffolding.mlsGroupID])
}
Expand Down
11 changes: 2 additions & 9 deletions wire-ios-data-model/Source/Core Crypto/CoreCryptoProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ public actor CoreCryptoProvider: CoreCryptoProviderProtocol {
private var epochObserver: WireCoreCryptoUniffi.EpochObserver?
private let localDomain: String?

private let backgroundTaskManager: (any BackgroundTaskManager)?

public init(
selfUserID: UUID,
sharedContainerURL: URL,
Expand All @@ -85,8 +83,7 @@ public actor CoreCryptoProvider: CoreCryptoProviderProtocol {
syncContext: NSManagedObjectContext,
coreCryptoKeyMigrationManager: CoreCryptoKeyMigrationManagerProtocol,
allowCreation: Bool = true,
localDomain: String?,
backgroundTaskManager: (any BackgroundTaskManager)?
localDomain: String?
) {
self.selfUserID = selfUserID
self.sharedContainerURL = sharedContainerURL
Expand All @@ -97,16 +94,12 @@ public actor CoreCryptoProvider: CoreCryptoProviderProtocol {
self.coreCryptoKeyMigrationManager = coreCryptoKeyMigrationManager
self.featureRespository = LegacyFeatureRepository(context: syncContext)
self.localDomain = localDomain
self.backgroundTaskManager = backgroundTaskManager
}

public func coreCrypto() async throws -> SafeCoreCrypto {
let coreCrypto = try await getCoreCrypto()
try await registerMlsTransportIfNecessary(with: coreCrypto)
return SafeCoreCrypto(
backgroundTaskManager: backgroundTaskManager,
coreCrypto: coreCrypto
)
return SafeCoreCrypto(coreCrypto: coreCrypto)
}

public func initialiseMLSWithBasicCredentials(mlsClientID: MLSClientID) async throws {
Expand Down
51 changes: 8 additions & 43 deletions wire-ios-data-model/Source/Core Crypto/SafeCoreCrypto.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,37 +23,19 @@ import WireLogging
/// within a background task (if a task manager is provided).
public final class SafeCoreCrypto {

private let backgroundTaskManager: (any BackgroundTaskManager)?
let coreCrypto: any CoreCryptoProtocol

public init(
backgroundTaskManager: (any BackgroundTaskManager)?,
coreCrypto: any CoreCryptoProtocol
) {
self.backgroundTaskManager = backgroundTaskManager
public init(coreCrypto: any CoreCryptoProtocol) {
self.coreCrypto = coreCrypto
}

public func registerEpochObserver(_ epochObserver: any EpochObserver) async throws {
try await coreCrypto.registerEpochObserver(epochObserver)
}

public func transaction<Result>(
block: @escaping (any CoreCryptoContextProtocol) async throws -> Result
) async throws -> Result {
if let backgroundTaskManager {
try await transaction(
backgroundTaskManager: backgroundTaskManager,
block: block
)
} else {
try await coreCrypto.transaction(block)
}
}

/// Perform a transaction within the context of a background task to
/// ensure the transaction has additional time to complete while the
/// app transitions to a suspended state.
/// Perform a transaction within an expiring activity to ensure the
/// transaction has additional time to complete while the app transitions
/// to a suspended state.
///
/// This is particularly important when running in the main app because
/// if the app is suspended during a transaction, then core crypto will
Expand All @@ -62,30 +44,13 @@ public final class SafeCoreCrypto {
/// own transactions. This can lead to the Notification Service Extension
/// being blocked and not process any notifications until the main app
/// is resumed and the transaction is completed and the file lock released.
private func transaction<Result>(
backgroundTaskManager: any BackgroundTaskManager,
block: @escaping (any CoreCryptoContextProtocol) async throws -> Result
///
public func transaction<Result>(
block: @escaping @Sendable (any CoreCryptoContextProtocol) async throws -> Result
) async throws -> Result {
let transactionTask = Task {
try await withExpiringActivity(reason: "core crypto transaction") { [coreCrypto] in
try await coreCrypto.transaction(block)
Comment thread
johnxnguyen marked this conversation as resolved.
}

let taskID = backgroundTaskManager.beginBackgroundTask(
withName: "core crypto transaction",
expirationHandler: {
WireLogger.coreCrypto.warn(
"Background task expiring, cancelling core crypto transaction",
attributes: .safePublic
)
transactionTask.cancel()
}
)

defer {
backgroundTaskManager.endBackgroundTask(taskID)
}

return try await transactionTask.value
}

}
51 changes: 0 additions & 51 deletions wire-ios-data-model/Source/Utilis/BackgroundTaskManager.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@ public class CoreCryptoMocksEnvelope {
self.coreCrypto = MockCoreCryptoProtocol()
self.coreCryptoProvider = MockCoreCryptoProviderProtocol()

coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: coreCrypto
)
coreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: coreCrypto)
coreCrypto.mockTransaction(context: coreCryptoContext)
}

Expand Down
5 changes: 1 addition & 4 deletions wire-ios-data-model/Tests/E2EIdentity/E2EIServiceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,7 @@ final class E2EIServiceTests: ZMConversationTestsBase {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
sut = E2EIService(
e2eIdentity: mockE2eIdentity,
coreCryptoProvider: mockCoreCryptoProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@ final class E2EIVerificationStatusServiceTests: XCTestCase {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
sut = E2EIVerificationStatusService(coreCryptoProvider: mockCoreCryptoProvider)
}

Expand Down
5 changes: 1 addition & 4 deletions wire-ios-data-model/Tests/MLS/MLSActionExecutorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,7 @@ class MLSActionExecutorTests: ZMBaseManagedObjectTest {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
mockLegacyFeatureRepository = MockLegacyFeatureRepositoryInterface()

sut = MLSActionExecutor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@ final class MLSEncryptionServiceTests: XCTestCase {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
sut = MLSEncryptionService(coreCryptoProvider: mockCoreCryptoProvider)
}

Expand Down
5 changes: 1 addition & 4 deletions wire-ios-data-model/Tests/MLS/MLSServiceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,7 @@ final class MLSServiceTests: ZMConversationTestsBase, MLSServiceDelegate {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
mockEncryptionService = MockMLSEncryptionServiceInterface()
mockDecryptionService = MockMLSDecryptionServiceInterface()
mockMLSActionExecutor = MockMLSActionExecutor()
Expand Down
5 changes: 1 addition & 4 deletions wire-ios-data-model/Tests/Proteus/ProteusServiceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,7 @@ class ProteusServiceTests: XCTestCase {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
sut = ProteusService(coreCryptoProvider: mockCoreCryptoProvider)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,7 @@ final class IsUserE2EICertifiedUseCaseTests: ZMBaseManagedObjectTest {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
mockLegacyFeatureRepository = .init()
mockLegacyFeatureRepository.fetchE2EI_MockValue = .init(status: .enabled, config: .init())
sut = .init(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,7 @@ class E2EIKeyPackageRotatorTests: MessagingTestBase {

mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)
mockLegacyFeatureRepository = .init()

sut = E2EIKeyPackageRotator(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -569,8 +569,7 @@ extension MessagingTestBase {
syncContext: syncMOC,
coreCryptoKeyMigrationManager: mockKeyMigrationManager,
allowCreation: true,
localDomain: owningDomain,
backgroundTaskManager: nil
localDomain: owningDomain
)

// Initialize CoreCrypto (this calls proteusInit internally)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,7 @@ final class ProteusClientSimulator {
syncContext: syncMOC,
coreCryptoKeyMigrationManager: mockKeyMigrationManager,
allowCreation: true,
localDomain: owningDomain,
backgroundTaskManager: nil
localDomain: owningDomain
)

// Initialize CoreCrypto
Expand Down
3 changes: 1 addition & 2 deletions wire-ios-share-engine/Sources/SharingSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,7 @@ public final class SharingSession {
syncContext: coreDataStack.syncContext,
coreCryptoKeyMigrationManager: CoreCryptoKeyMigrationManager(journal: journal),
allowCreation: false,
localDomain: localDomain,
backgroundTaskManager: nil
localDomain: localDomain
)
let featureRepository = LegacyFeatureRepository(context: coreDataStack.syncContext)
let mlsActionExecutor = MLSActionExecutor(
Expand Down
3 changes: 1 addition & 2 deletions wire-ios-share-engine/Sources/SharingSessionLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,7 @@ public struct SharingSessionLoader {
syncContext: coreDataStack.syncContext,
coreCryptoKeyMigrationManager: CoreCryptoKeyMigrationManager(journal: journal),
allowCreation: false,
localDomain: backendMetadata.domain,
backgroundTaskManager: nil
localDomain: backendMetadata.domain
)
let featureRepository = LegacyFeatureRepository(context: coreDataStack.syncContext)
let mlsActionExecutor = MLSActionExecutor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,8 +437,7 @@ final class UserSessionLoader {
sharedUserDefaults: sharedUserDefaults,
syncContext: coreDataStack.syncContext,
coreCryptoKeyMigrationManager: coreCryptoKeyMigrationManager,
localDomain: backendMetadata.domain,
backgroundTaskManager: UIApplication.shared
localDomain: backendMetadata.domain
)

let lastEventIDRepository = LastEventIDRepository(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,7 @@ final class CertificateRevocationListsCheckerTests: XCTestCase {
let coreCrypto = MockCoreCryptoProtocol()
coreCrypto.mockTransaction(context: mockCoreCryptoContext)
let provider = MockCoreCryptoProviderProtocol()
provider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: coreCrypto
)
provider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: coreCrypto)

coreDataHelper = CoreDataStackHelper()
mockCoreDataStack = try await coreDataHelper.createStack()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,7 @@ class CheckOneOnOneConversationIsReadyUseCaseTests: XCTestCase {
mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.mockTransaction(context: mockCoreCryptoContext)
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)

sut = CheckOneOnOneConversationIsReadyUseCase(
context: syncMOC,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,10 +156,7 @@ class ZMUserSessionTestsBase: MessagingTest {
let mockCoreCrypto = MockCoreCryptoProtocol()
mockCoreCrypto.registerEpochObserver_MockMethod = { _ in }
mockCoreCryptoProvider = MockCoreCryptoProviderProtocol()
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(
backgroundTaskManager: nil,
coreCrypto: mockCoreCrypto
)
mockCoreCryptoProvider.coreCrypto_MockValue = SafeCoreCrypto(coreCrypto: mockCoreCrypto)

let mockContextStorable = MockLAContextStorable()
mockContextStorable.clear_MockMethod = {}
Expand Down
Loading
Loading