From ad5947f4119b0c9bacc59afc21b7954a144c2f99 Mon Sep 17 00:00:00 2001 From: Diego Rey Mendez Date: Thu, 11 Apr 2024 23:51:05 +0200 Subject: [PATCH] macOS VPN: Ask users to reboot if system extension was not uninstalled (#2603) Task/Issue URL: https://app.asana.com/0/1199230911884351/1207056555335340/f ## Description We now ask again users to reboot if macOS requires it to complete installation of the system extension. --- .../Common/Localizables/UserText+NetworkProtection.swift | 2 +- .../NetworkProtectionPixelEvent.swift | 8 ++++---- .../NetworkProtectionTunnelController.swift | 6 +++--- DuckDuckGoVPN/NetworkExtensionController.swift | 2 +- .../NetworkProtectionPixelEventTests.swift | 6 ++++-- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/DuckDuckGo/Common/Localizables/UserText+NetworkProtection.swift b/DuckDuckGo/Common/Localizables/UserText+NetworkProtection.swift index 69d36bb228..2a5ec04f2d 100644 --- a/DuckDuckGo/Common/Localizables/UserText+NetworkProtection.swift +++ b/DuckDuckGo/Common/Localizables/UserText+NetworkProtection.swift @@ -67,7 +67,7 @@ extension UserText { // "network.protection.system.extension.unknown.activation.error" - Message shown to users when they try to enable NetP and there is an unexpected activation error. static let networkProtectionUnknownActivationError = "There as an unexpected error. Please try again." // "network.protection.system.extension.please.reboot" - Message shown to users when they try to enable NetP and they need to reboot the computer to complete the installation - static let networkProtectionPleaseReboot = "Please reboot to activate the VPN" + static let networkProtectionPleaseReboot = "VPN update available. Restart your Mac to reconnect." } // MARK: - VPN Waitlist diff --git a/DuckDuckGo/NetworkProtection/AppAndExtensionAndAgentTargets/NetworkProtectionPixelEvent.swift b/DuckDuckGo/NetworkProtection/AppAndExtensionAndAgentTargets/NetworkProtectionPixelEvent.swift index 890f942b93..d1797d0e0c 100644 --- a/DuckDuckGo/NetworkProtection/AppAndExtensionAndAgentTargets/NetworkProtectionPixelEvent.swift +++ b/DuckDuckGo/NetworkProtection/AppAndExtensionAndAgentTargets/NetworkProtectionPixelEvent.swift @@ -85,7 +85,7 @@ enum NetworkProtectionPixelEvent: PixelKitEventV2 { case networkProtectionRekeyCompleted case networkProtectionRekeyFailure(_ error: Error) - case networkProtectionSystemExtensionActivationFailure + case networkProtectionSystemExtensionActivationFailure(_ error: Error) case networkProtectionUnhandledError(function: String, line: Int, error: Error) @@ -393,8 +393,7 @@ enum NetworkProtectionPixelEvent: PixelKitEventV2 { .networkProtectionWireguardErrorCannotStartWireguardBackend, .networkProtectionNoAuthTokenFoundError, .networkProtectionRekeyAttempt, - .networkProtectionRekeyCompleted, - .networkProtectionSystemExtensionActivationFailure: + .networkProtectionRekeyCompleted: return nil case .networkProtectionClientFailedToRedeemInviteCode(let error), .networkProtectionClientFailedToFetchLocations(let error), @@ -408,7 +407,8 @@ enum NetworkProtectionPixelEvent: PixelKitEventV2 { .networkProtectionClientFailedToParseRedeemResponse(let error), .networkProtectionWireguardErrorCannotSetNetworkSettings(let error), .networkProtectionRekeyFailure(let error), - .networkProtectionUnhandledError(_, _, let error): + .networkProtectionUnhandledError(_, _, let error), + .networkProtectionSystemExtensionActivationFailure(let error): return error } } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionTunnelController.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionTunnelController.swift index e42b917710..911913504f 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionTunnelController.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionTunnelController.swift @@ -418,16 +418,16 @@ final class NetworkProtectionTunnelController: TunnelController, TunnelSessionPr controllerErrorStore.lastErrorMessage = UserText.networkProtectionSystemSettings case SystemExtensionRequestError.unknownRequestResult: controllerErrorStore.lastErrorMessage = UserText.networkProtectionUnknownActivationError - case SystemExtensionRequestError.willActivateAfterReboot: + case OSSystemExtensionError.extensionNotFound, + SystemExtensionRequestError.willActivateAfterReboot: controllerErrorStore.lastErrorMessage = UserText.networkProtectionPleaseReboot default: controllerErrorStore.lastErrorMessage = error.localizedDescription } PixelKit.fire( - NetworkProtectionPixelEvent.networkProtectionSystemExtensionActivationFailure, + NetworkProtectionPixelEvent.networkProtectionSystemExtensionActivationFailure(error), frequency: .standard, - withError: error, includeAppVersionParameter: true ) diff --git a/DuckDuckGoVPN/NetworkExtensionController.swift b/DuckDuckGoVPN/NetworkExtensionController.swift index d850bfbb80..23a5eca958 100644 --- a/DuckDuckGoVPN/NetworkExtensionController.swift +++ b/DuckDuckGoVPN/NetworkExtensionController.swift @@ -54,7 +54,7 @@ extension NetworkExtensionController { NetworkProtectionLastVersionRunStore(userDefaults: defaults).lastExtensionVersionRun = extensionVersion - try? await Task.sleep(nanoseconds: 300 * NSEC_PER_MSEC) + try await Task.sleep(nanoseconds: 300 * NSEC_PER_MSEC) #endif } diff --git a/UnitTests/NetworkProtection/NetworkProtectionPixelEventTests.swift b/UnitTests/NetworkProtection/NetworkProtectionPixelEventTests.swift index 43ccdb22ab..a2209cd64b 100644 --- a/UnitTests/NetworkProtection/NetworkProtectionPixelEventTests.swift +++ b/UnitTests/NetworkProtection/NetworkProtectionPixelEventTests.swift @@ -303,8 +303,10 @@ final class NetworkProtectionPixelEventTests: XCTestCase { underlyingErrors: [TestError.underlyingError]), file: #filePath, line: #line) - fire(NetworkProtectionPixelEvent.networkProtectionSystemExtensionActivationFailure, - and: .expect(pixelName: "m_mac_netp_system_extension_activation_failure"), + fire(NetworkProtectionPixelEvent.networkProtectionSystemExtensionActivationFailure(TestError.testError), + and: .expect(pixelName: "m_mac_netp_system_extension_activation_failure", + error: TestError.testError, + underlyingErrors: [TestError.underlyingError]), file: #filePath, line: #line) fire(NetworkProtectionPixelEvent.networkProtectionUnhandledError(function: "function", line: 1, error: TestError.testError),