From ac49552022930862eaf75d4056a1c32bf4df0059 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Fri, 29 Sep 2023 18:10:50 -0700 Subject: [PATCH 01/27] WIP # Conflicts: # DuckDuckGo.xcodeproj/project.pbxproj # DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved --- DuckDuckGo/Main/View/MainViewController.swift | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/DuckDuckGo/Main/View/MainViewController.swift b/DuckDuckGo/Main/View/MainViewController.swift index 31973d43a8..054684220e 100644 --- a/DuckDuckGo/Main/View/MainViewController.swift +++ b/DuckDuckGo/Main/View/MainViewController.swift @@ -20,6 +20,8 @@ import Cocoa import Carbon.HIToolbox import Combine import Common +import Account +import NetworkProtection final class MainViewController: NSViewController { @@ -77,6 +79,7 @@ final class MainViewController: NSViewController { subscribeToSelectedTabViewModel() subscribeToAppSettingsNotifications() findInPageContainerView.applyDropShadow() + listenToAccountDidSignInEvents() view.registerForDraggedTypes([.URL, .fileURL]) } @@ -86,6 +89,25 @@ final class MainViewController: NSViewController { registerForBookmarkBarPromptNotifications() } + private func listenToAccountDidSignInEvents() { + NotificationCenter.default.addObserver(self, selector: #selector(registerAccessToken), name: .accountDidSignIn, object: nil) + } + + @objc + private func registerAccessToken() { + print("DEBUG: Registering!") + Task { + let accountManager = AccountManager() + let redemption = NetworkProtectionCodeRedemptionCoordinator() + do { + try await redemption.exchange(accessToken: accountManager.token!) + print("DEBUG: Redemption success!") + } catch { + print("DEBUG: Error \(error)") + } + } + } + var bookmarkBarPromptObserver: Any? func registerForBookmarkBarPromptNotifications() { guard !bookmarksBarViewController.bookmarksBarPromptShown else { return } From 32e9542ee069de2b27ca389330f06e338cb4304f Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 3 Oct 2023 16:33:01 -0700 Subject: [PATCH 02/27] Remove the placeholder subscription items. --- DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift index 78bb8abd07..03495f93fc 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -336,18 +336,6 @@ final class MoreOptionsMenu: NSMenu { items.append(dataBrokerProtectionItem) #endif // DBP -#if SUBSCRIPTION - let item1 = NSMenuItem(title: "Placeholder A", action: #selector(openPreferences(_:)), keyEquivalent: "") - .targetting(self) - .withImage(.image(for: .vpnIcon)) - items.append(item1) - - let item2 = NSMenuItem(title: "Placeholder B", action: #selector(openPreferences(_:)), keyEquivalent: "") - .targetting(self) - .withImage(.image(for: .vpnIcon)) - items.append(item2) -#endif - return items } From 87751fc726bbcbcfd7631b1e032c95d476b30895 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 3 Oct 2023 18:28:44 -0700 Subject: [PATCH 03/27] Avoid letting users use the easter egg in subscription mode. --- DuckDuckGo/Preferences/View/PreferencesAboutView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/Preferences/View/PreferencesAboutView.swift b/DuckDuckGo/Preferences/View/PreferencesAboutView.swift index d7aa76d705..71db2891ee 100644 --- a/DuckDuckGo/Preferences/View/PreferencesAboutView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesAboutView.swift @@ -52,7 +52,7 @@ extension Preferences { Text(UserText.privacySimplified).font(.privacySimplified) Text(UserText.versionLabel(version: model.appVersion.versionNumber, build: model.appVersion.buildNumber)).onTapGesture(count: 12) { -#if NETWORK_PROTECTION +#if NETWORK_PROTECTION && !SUBSCRIPTION model.displayNetPInvite() #endif } From 359e34e1e6606b09bf23506f21a835c8a992912a Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 3 Oct 2023 18:29:23 -0700 Subject: [PATCH 04/27] Add a dedicated class for handling subscription events. --- DuckDuckGo.xcodeproj/project.pbxproj | 10 +++ .../xcshareddata/swiftpm/Package.resolved | 15 +--- DuckDuckGo/AppDelegate/AppDelegate.swift | 5 ++ DuckDuckGo/Main/View/MainViewController.swift | 21 ----- .../EventMapping+NetworkProtectionError.swift | 3 +- ...rkProtectionSubscriptionEventHandler.swift | 81 +++++++++++++++++++ .../MacPacketTunnelProvider.swift | 2 + .../Sources/Account/AccountManager.swift | 8 +- .../InputFilesChecker/InputFilesChecker.swift | 3 +- 9 files changed, 112 insertions(+), 36 deletions(-) create mode 100644 DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 42755d8491..9d5bcfdade 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2807,6 +2807,9 @@ 4BBF09232830812900EE1418 /* FileSystemDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBF09222830812900EE1418 /* FileSystemDSL.swift */; }; 4BBF0925283083EC00EE1418 /* FileSystemDSLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBF0924283083EC00EE1418 /* FileSystemDSLTests.swift */; }; 4BC2621D293996410087A482 /* PixelEventTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC2621C293996410087A482 /* PixelEventTests.swift */; }; + 4BCE5B642ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */; }; + 4BCE5B652ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */; }; + 4BCE5B662ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */; }; 4BCF15D72ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15D62ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift */; }; 4BCF15D92ABB8A7F0083F6DF /* NetworkProtectionRemoteMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15D82ABB8A7F0083F6DF /* NetworkProtectionRemoteMessage.swift */; }; 4BCF15DB2ABB8CED0083F6DF /* NetworkProtectionRemoteMessagingStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15DA2ABB8CED0083F6DF /* NetworkProtectionRemoteMessagingStorage.swift */; }; @@ -4235,6 +4238,8 @@ 4BBF09222830812900EE1418 /* FileSystemDSL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemDSL.swift; sourceTree = ""; }; 4BBF0924283083EC00EE1418 /* FileSystemDSLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemDSLTests.swift; sourceTree = ""; }; 4BC2621C293996410087A482 /* PixelEventTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PixelEventTests.swift; sourceTree = ""; }; + 4BCE5B622ACCD7350036DA61 /* BrowserServicesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = BrowserServicesKit; path = ../BrowserServicesKit; sourceTree = ""; }; + 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionSubscriptionEventHandler.swift; sourceTree = ""; }; 4BCF15D62ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessaging.swift; sourceTree = ""; }; 4BCF15D82ABB8A7F0083F6DF /* NetworkProtectionRemoteMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessage.swift; sourceTree = ""; }; 4BCF15DA2ABB8CED0083F6DF /* NetworkProtectionRemoteMessagingStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingStorage.swift; sourceTree = ""; }; @@ -5787,6 +5792,7 @@ children = ( 4BCF15D52ABB83D70083F6DF /* NetworkProtectionRemoteMessaging */, 4B4D60622A0B29FA00BCD287 /* SystemExtensionManager.swift */, + 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */, ); path = DeveloperIDTarget; sourceTree = ""; @@ -6930,6 +6936,7 @@ AA585D75248FD31100E9A3E2 = { isa = PBXGroup; children = ( + 4BCE5B622ACCD7350036DA61 /* BrowserServicesKit */, 378B5886295CF2A4002C0CC0 /* Configuration */, 378E279C2970217400FCADA2 /* LocalPackages */, 7BB108552A43375D000AB95F /* LocalThirdParty */, @@ -10116,6 +10123,7 @@ 3192A0682A4C4CFF0084EA89 /* BWCommunicator.swift in Sources */, B696AFFD2AC5924800C93203 /* FileLineError.swift in Sources */, 3192A0692A4C4CFF0084EA89 /* HomePageRecentlyVisitedModel.swift in Sources */, + 4BCE5B652ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 3192A06A2A4C4CFF0084EA89 /* NavigationBarPopovers.swift in Sources */, 3192A06B2A4C4CFF0084EA89 /* CancellableExtension.swift in Sources */, 3192A06C2A4C4CFF0084EA89 /* PinnedTabsHostingView.swift in Sources */, @@ -11747,6 +11755,7 @@ 4B9579B02AC7AE700062CA31 /* Feedback.swift in Sources */, 4B9579B12AC7AE700062CA31 /* RequestFilePermissionViewController.swift in Sources */, 4B9579B22AC7AE700062CA31 /* FirefoxFaviconsReader.swift in Sources */, + 4BCE5B662ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 4B9579B32AC7AE700062CA31 /* CopyHandler.swift in Sources */, 4B9579B42AC7AE700062CA31 /* ContentBlockingRulesUpdateObserver.swift in Sources */, 4B9579B52AC7AE700062CA31 /* FirefoxLoginReader.swift in Sources */, @@ -12935,6 +12944,7 @@ B626A75A29921FAA00053070 /* NavigationActionPolicyExtension.swift in Sources */, B603FD9E2A02712E00F3FCA9 /* CIImageExtension.swift in Sources */, AA6EF9B3250785D5004754E6 /* NSMenuExtension.swift in Sources */, + 4BCE5B642ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, AA7412B524D1536B00D22FE0 /* MainWindowController.swift in Sources */, AA9FF95924A1ECF20039E328 /* Tab.swift in Sources */, 4BBDEE9228FC14760092FAA6 /* ConnectBitwardenView.swift in Sources */, diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 688c13764a..ea881f5578 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,22 +9,13 @@ "version" : "3.0.0" } }, - { - "identity" : "browserserviceskit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/duckduckgo/BrowserServicesKit", - "state" : { - "revision" : "2bed3ed259ca7bde33f3d41424345acfeff8031d", - "version" : "80.3.0" - } - }, { "identity" : "content-scope-scripts", "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/content-scope-scripts", "state" : { - "revision" : "8def15fe8a4c2fb76730f640507e9fd1d6c1f8a7", - "version" : "4.32.0" + "revision" : "74b6142c016be354144f28551de41b50c4864b1f", + "version" : "4.37.0" } }, { @@ -129,7 +120,7 @@ { "identity" : "trackerradarkit", "kind" : "remoteSourceControl", - "location" : "https://github.com/duckduckgo/TrackerRadarKit", + "location" : "https://github.com/duckduckgo/TrackerRadarKit.git", "state" : { "revision" : "4684440d03304e7638a2c8086895367e90987463", "version" : "1.2.1" diff --git a/DuckDuckGo/AppDelegate/AppDelegate.swift b/DuckDuckGo/AppDelegate/AppDelegate.swift index ead4a26ade..e3eeffd0a8 100644 --- a/DuckDuckGo/AppDelegate/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate/AppDelegate.swift @@ -70,6 +70,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel private var bookmarksSyncErrorCancellable: AnyCancellable? private var emailCancellables = Set() let bookmarksManager = LocalBookmarkManager.shared + private let networkProtectionSubscriptionEventHandler = NetworkProtectionSubscriptionEventHandler() private var didFinishLaunching = false @@ -215,6 +216,10 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel UserDefaultsWrapper.clearRemovedKeys() +#if SUBSCRIPTION + networkProtectionSubscriptionEventHandler.registerForSubscriptionAccountManagerEvents() +#endif + #if NETWORK_PROTECTION NetworkProtectionAppEvents().applicationDidFinishLaunching() UNUserNotificationCenter.current().delegate = self diff --git a/DuckDuckGo/Main/View/MainViewController.swift b/DuckDuckGo/Main/View/MainViewController.swift index 054684220e..936f743fdf 100644 --- a/DuckDuckGo/Main/View/MainViewController.swift +++ b/DuckDuckGo/Main/View/MainViewController.swift @@ -20,7 +20,6 @@ import Cocoa import Carbon.HIToolbox import Combine import Common -import Account import NetworkProtection final class MainViewController: NSViewController { @@ -79,7 +78,6 @@ final class MainViewController: NSViewController { subscribeToSelectedTabViewModel() subscribeToAppSettingsNotifications() findInPageContainerView.applyDropShadow() - listenToAccountDidSignInEvents() view.registerForDraggedTypes([.URL, .fileURL]) } @@ -89,25 +87,6 @@ final class MainViewController: NSViewController { registerForBookmarkBarPromptNotifications() } - private func listenToAccountDidSignInEvents() { - NotificationCenter.default.addObserver(self, selector: #selector(registerAccessToken), name: .accountDidSignIn, object: nil) - } - - @objc - private func registerAccessToken() { - print("DEBUG: Registering!") - Task { - let accountManager = AccountManager() - let redemption = NetworkProtectionCodeRedemptionCoordinator() - do { - try await redemption.exchange(accessToken: accountManager.token!) - print("DEBUG: Redemption success!") - } catch { - print("DEBUG: Error \(error)") - } - } - } - var bookmarkBarPromptObserver: Any? func registerForBookmarkBarPromptNotifications() { guard !bookmarksBarViewController.bookmarksBarPromptShown else { return } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift index 7ff941f4cb..b8edbcd965 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift @@ -70,7 +70,8 @@ extension EventMapping where Event == NetworkProtectionError { .wireGuardInvalidState, .wireGuardDnsResolution, .wireGuardSetNetworkSettings, - .startWireGuardBackend: + .startWireGuardBackend, + .failedToRetrieveAuthToken: domainEvent = .networkProtectionUnhandledError(function: #function, line: #line, error: event) return case .unhandledError(function: let function, line: let line, error: let error): diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift new file mode 100644 index 0000000000..2bcfc4afdf --- /dev/null +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -0,0 +1,81 @@ +// +// NetworkProtectionSubscriptionEventHandler.swift +// +// Copyright © 2023 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#if SUBSCRIPTION + +import Foundation +import Account +import NetworkProtection + +final class NetworkProtectionSubscriptionEventHandler { + + private let accountManager: Account.AccountManaging + private let networkProtectionRedemptionCoordinator: NetworkProtectionCodeRedeeming + private let networkProtectionTokenStorage: NetworkProtectionTokenStore + private let networkProtectionFeatureDisabler: NetworkProtectionFeatureDisabling + + init(accountManager: Account.AccountManaging = Account.AccountManager(), + networkProtectionRedemptionCoordinator: NetworkProtectionCodeRedeeming = NetworkProtectionCodeRedemptionCoordinator(), + networkProtectionTokenStorage: NetworkProtectionTokenStore = NetworkProtectionKeychainTokenStore(), + networkProtectionFeatureDisabler: NetworkProtectionFeatureDisabling = NetworkProtectionFeatureDisabler()) { + self.accountManager = accountManager + self.networkProtectionRedemptionCoordinator = networkProtectionRedemptionCoordinator + self.networkProtectionTokenStorage = networkProtectionTokenStorage + self.networkProtectionFeatureDisabler = networkProtectionFeatureDisabler + } + + func registerForSubscriptionAccountManagerEvents() { + NotificationCenter.default.addObserver(self, selector: #selector(handleAccountDidSignIn), name: .accountDidSignIn, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(handleAccountDidSignOut), name: .accountDidSignOut, object: nil) + } + + @objc private func handleAccountDidSignIn() { + guard let token = accountManager.token else { + assertionFailure("[NetP Subscription] AccountManager signed in but token could not be retrieved") + return + } + + // Remove the existing auth token: + + do { + try networkProtectionTokenStorage.deleteToken() + print("[NetP Subscription] Removed existing token") + } catch { + print("[NetP Subscription] Failed to remove existing token") + } + + // Get the new auth token: + + Task { + do { + try await networkProtectionRedemptionCoordinator.exchange(accessToken: token) + print("[NetP Subscription] Exchanged access token for auth token successfully") + } catch { + print("[NetP Subscription] Failed to exchange access token for auth token: \(error)") + } + } + } + + @objc private func handleAccountDidSignOut() { + print("[NetP Subscription] Deleted NetP auth token after signing out from Privacy Pro") + networkProtectionFeatureDisabler.disable(keepAuthToken: false, uninstallSystemExtension: false) + } + +} + +#endif diff --git a/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift b/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift index 1c9a20c573..f2cd0da014 100644 --- a/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift +++ b/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift @@ -133,6 +133,8 @@ final class MacPacketTunnelProvider: PacketTunnelProvider { domainEvent = .networkProtectionNoAuthTokenFoundError case .unhandledError(function: let function, line: let line, error: let error): domainEvent = .networkProtectionUnhandledError(function: function, line: line, error: error) + case .failedToRetrieveAuthToken: + return } Pixel.fire(domainEvent, frequency: .dailyAndContinuous, includeAppVersionParameter: true) } diff --git a/LocalPackages/Account/Sources/Account/AccountManager.swift b/LocalPackages/Account/Sources/Account/AccountManager.swift index b03c409908..8c3fe49ba3 100644 --- a/LocalPackages/Account/Sources/Account/AccountManager.swift +++ b/LocalPackages/Account/Sources/Account/AccountManager.swift @@ -29,7 +29,13 @@ public protocol AccountManagerKeychainAccessDelegate: AnyObject { func accountManagerKeychainAccessFailed(accessType: AccountKeychainAccessType, error: AccountKeychainAccessError) } -public class AccountManager { +public protocol AccountManaging { + + var token: String? { get } + +} + +public class AccountManager: AccountManaging { private let storage: AccountStorage public weak var delegate: AccountManagerKeychainAccessDelegate? diff --git a/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift b/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift index 196f5a1c20..4ed49c7601 100644 --- a/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift +++ b/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift @@ -34,7 +34,8 @@ let nonSandboxedExtraInputFiles: Set = [ .init("PFMoveApplication.m", .source), .init("NetworkProtectionBundle.swift", .source), .init("NetworkProtectionAppEvents.swift", .source), - .init("KeychainType+ClientDefault.swift", .source) + .init("KeychainType+ClientDefault.swift", .source), + .init("NetworkProtectionSubscriptionEventHandler.swift", .source) ] /** From 2c401607322548d05e1188d7ad67319bf81c0830 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 3 Oct 2023 18:49:44 -0700 Subject: [PATCH 05/27] Check if both access and auth tokens are present. --- .../View/NavigationBarViewController.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift index be8f20b356..889a8984cb 100644 --- a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift @@ -26,6 +26,10 @@ import NetworkProtection import NetworkProtectionUI #endif +#if SUBSCRIPTION +import Account +#endif + // swiftlint:disable:next type_body_length final class NavigationBarViewController: NSViewController { @@ -295,6 +299,16 @@ final class NavigationBarViewController: NSViewController { return } + #if SUBSCRIPTION + let accountManager = AccountManager() + let networkProtectionTokenStorage = NetworkProtectionKeychainTokenStore() + + if accountManager.token != nil && (try? networkProtectionTokenStorage.fetchToken()) == nil { + print("[NetP Subscription] Got access token but not auth token, meaning token exchange failed") + return + } + #endif + // 1. If the user is on the waitlist but hasn't been invited or accepted terms and conditions, show the waitlist screen. // 2. If the user has no waitlist state but has an auth token, show the NetP popover. // 3. If the user has no state of any kind, show the waitlist screen. From 11b0b63fba4db01faaec71873bb975c0f9f2ce96 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Tue, 3 Oct 2023 18:55:53 -0700 Subject: [PATCH 06/27] Replace local BSK version with branch. --- DuckDuckGo.xcodeproj/project.pbxproj | 6 ++---- .../xcshareddata/swiftpm/Package.resolved | 9 +++++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 9d5bcfdade..4f192d5fc1 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -4238,7 +4238,6 @@ 4BBF09222830812900EE1418 /* FileSystemDSL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemDSL.swift; sourceTree = ""; }; 4BBF0924283083EC00EE1418 /* FileSystemDSLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemDSLTests.swift; sourceTree = ""; }; 4BC2621C293996410087A482 /* PixelEventTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PixelEventTests.swift; sourceTree = ""; }; - 4BCE5B622ACCD7350036DA61 /* BrowserServicesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = BrowserServicesKit; path = ../BrowserServicesKit; sourceTree = ""; }; 4BCE5B632ACCE6990036DA61 /* NetworkProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionSubscriptionEventHandler.swift; sourceTree = ""; }; 4BCF15D62ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessaging.swift; sourceTree = ""; }; 4BCF15D82ABB8A7F0083F6DF /* NetworkProtectionRemoteMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessage.swift; sourceTree = ""; }; @@ -6936,7 +6935,6 @@ AA585D75248FD31100E9A3E2 = { isa = PBXGroup; children = ( - 4BCE5B622ACCD7350036DA61 /* BrowserServicesKit */, 378B5886295CF2A4002C0CC0 /* Configuration */, 378E279C2970217400FCADA2 /* LocalPackages */, 7BB108552A43375D000AB95F /* LocalThirdParty */, @@ -14226,8 +14224,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = exactVersion; - version = 80.3.0; + branch = "sam/add-netp-subscription-auth-support"; + kind = branch; }; }; AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index ea881f5578..4ada827c3a 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,6 +9,15 @@ "version" : "3.0.0" } }, + { + "identity" : "browserserviceskit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/duckduckgo/BrowserServicesKit", + "state" : { + "branch" : "sam/add-netp-subscription-auth-support", + "revision" : "7db030e80d699011ff61926a5799f4f30c2d6c94" + } + }, { "identity" : "content-scope-scripts", "kind" : "remoteSourceControl", From 8ea09ef195b7adf4691c7110ace02bcce8d6569d Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Wed, 4 Oct 2023 08:39:18 -0700 Subject: [PATCH 07/27] Change the build name. --- Configuration/App/DuckDuckGoPrivacyPro.xcconfig | 1 - DuckDuckGo.xcodeproj/project.pbxproj | 6 +++--- .../xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig index 0258b28b45..86947568bd 100644 --- a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig +++ b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig @@ -22,4 +22,3 @@ #include "DuckDuckGo.xcconfig" FEATURE_FLAGS = FEEDBACK NETWORK_PROTECTION SPARKLE SUBSCRIPTION -PRODUCT_NAME = $(PRODUCT_NAME_PREFIX) Privacy Pro diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 4f192d5fc1..477d0430f8 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -4170,7 +4170,7 @@ 4B9292D82667124B00AD2C21 /* BookmarkListTreeControllerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarkListTreeControllerDataSource.swift; sourceTree = ""; }; 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextualMenu.swift; sourceTree = ""; }; 4B9579202AC687170062CA31 /* HardwareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareModel.swift; sourceTree = ""; }; - 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DuckDuckGo Privacy Pro.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DuckDuckGo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4B957C432AC7AF190062CA31 /* DuckDuckGoPrivacyPro.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DuckDuckGoPrivacyPro.xcconfig; sourceTree = ""; }; 4B980E202817604000282EE1 /* NSNotificationName+Debug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotificationName+Debug.swift"; sourceTree = ""; }; 4B98D27928D95F1A003C2B6F /* ChromiumFaviconsReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumFaviconsReaderTests.swift; sourceTree = ""; }; @@ -6974,7 +6974,7 @@ 4B5F14E12A1476BD0060320F /* stopVPN.app */, 7B736E5F2A4A22B700F9922A /* enableOnDemand.app */, 3192A26E2A4C4CFF0084EA89 /* DuckDuckGoDBP.app */, - 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */, + 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */, ); name = Products; sourceTree = ""; @@ -8827,7 +8827,7 @@ 4B9579422AC7AE700062CA31 /* Purchase */, ); productName = DuckDuckGo; - productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */; + productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */; productType = "com.apple.product-type.application"; }; 7B4CE8D926F02108009134B1 /* UI Tests */ = { diff --git a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme index 92eea327b3..0570ef6e22 100644 --- a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme +++ b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme @@ -15,7 +15,7 @@ @@ -44,7 +44,7 @@ @@ -61,7 +61,7 @@ From 0d58e9f8f94a2f911aa4630ea3f108e4bad24f35 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 8 Oct 2023 15:37:58 -0700 Subject: [PATCH 08/27] Update branch version. --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4ada827c3a..8301db87b7 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "sam/add-netp-subscription-auth-support", - "revision" : "7db030e80d699011ff61926a5799f4f30c2d6c94" + "revision" : "a6d78a3a7b03e9a6b6fbd1013415eafc41089fba" } }, { From 6925cf577ec9e5b6f8a54b13f031aa69847f5f0a Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 8 Oct 2023 15:48:31 -0700 Subject: [PATCH 09/27] Fix SwiftLint violation. --- .../NetworkProtectionSubscriptionEventHandler.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift index 2bcfc4afdf..fdbd317206 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -23,7 +23,7 @@ import Account import NetworkProtection final class NetworkProtectionSubscriptionEventHandler { - + private let accountManager: Account.AccountManaging private let networkProtectionRedemptionCoordinator: NetworkProtectionCodeRedeeming private let networkProtectionTokenStorage: NetworkProtectionTokenStore From 94c6e396c63d5451cfe3e2719d7de6333f74d607 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 8 Oct 2023 15:49:27 -0700 Subject: [PATCH 10/27] Update compile-time checks. --- .../NetworkProtectionSubscriptionEventHandler.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift index fdbd317206..3fb356d132 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -16,7 +16,7 @@ // limitations under the License. // -#if SUBSCRIPTION +#if NETWORK_PROTECTION && SUBSCRIPTION import Foundation import Account From 0fa00103528aa8cd0f4f0cccf88c9ea14322c5a4 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 8 Oct 2023 16:11:55 -0700 Subject: [PATCH 11/27] Fix compilation again. --- DuckDuckGo/AppDelegate/AppDelegate.swift | 5 ++++- .../Mocks/MockNetworkProtectionCodeRedeemer.swift | 11 ++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/AppDelegate/AppDelegate.swift b/DuckDuckGo/AppDelegate/AppDelegate.swift index e3eeffd0a8..1c66bd8ea8 100644 --- a/DuckDuckGo/AppDelegate/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate/AppDelegate.swift @@ -70,7 +70,10 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel private var bookmarksSyncErrorCancellable: AnyCancellable? private var emailCancellables = Set() let bookmarksManager = LocalBookmarkManager.shared + +#if NETWORK_PROTECTION && SUBSCRIPTION private let networkProtectionSubscriptionEventHandler = NetworkProtectionSubscriptionEventHandler() +#endif private var didFinishLaunching = false @@ -216,7 +219,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel UserDefaultsWrapper.clearRemovedKeys() -#if SUBSCRIPTION +#if NETWORK_PROTECTION && SUBSCRIPTION networkProtectionSubscriptionEventHandler.registerForSubscriptionAccountManagerEvents() #endif diff --git a/UnitTests/Waitlist/Mocks/MockNetworkProtectionCodeRedeemer.swift b/UnitTests/Waitlist/Mocks/MockNetworkProtectionCodeRedeemer.swift index b9f5b7fb08..629639fd4b 100644 --- a/UnitTests/Waitlist/Mocks/MockNetworkProtectionCodeRedeemer.swift +++ b/UnitTests/Waitlist/Mocks/MockNetworkProtectionCodeRedeemer.swift @@ -27,9 +27,9 @@ final class MockNetworkProtectionCodeRedeemer: NetworkProtectionCodeRedeeming { case error } - var redeemedCode: String? var throwError: Bool = false + var redeemedCode: String? func redeem(_ code: String) async throws { if throwError { throw MockNetworkProtectionCodeRedeemerError.error @@ -38,6 +38,15 @@ final class MockNetworkProtectionCodeRedeemer: NetworkProtectionCodeRedeeming { } } + var redeemedAccessToken: String? + func exchange(accessToken: String) async throws { + if throwError { + throw MockNetworkProtectionCodeRedeemerError.error + } else { + redeemedAccessToken = accessToken + } + } + } #endif From 6ae04eacc59fc9f296a8ec53f075bdeaba507c39 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 26 Nov 2023 16:29:00 -0800 Subject: [PATCH 12/27] Fix compilation errors. --- .../BothAppTargets/EventMapping+NetworkProtectionError.swift | 2 +- .../NetworkExtensionTargets/MacPacketTunnelProvider.swift | 4 ++-- .../Plugins/InputFilesChecker/InputFilesChecker.swift | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift index 323ed9ba26..c354e16bd7 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/EventMapping+NetworkProtectionError.swift @@ -71,7 +71,7 @@ extension EventMapping where Event == NetworkProtectionError { .wireGuardDnsResolution, .wireGuardSetNetworkSettings, .startWireGuardBackend, - .failedToRetrieveAuthToken: + .failedToRetrieveAuthToken, .failedToFetchLocationList, .failedToParseLocationListResponse: domainEvent = .networkProtectionUnhandledError(function: #function, line: #line, error: event) diff --git a/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift b/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift index fd97786d61..e4ab329262 100644 --- a/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift +++ b/DuckDuckGo/NetworkProtection/NetworkExtensionTargets/NetworkExtensionTargets/MacPacketTunnelProvider.swift @@ -133,8 +133,8 @@ final class MacPacketTunnelProvider: PacketTunnelProvider { domainEvent = .networkProtectionNoAuthTokenFoundError case .unhandledError(function: let function, line: let line, error: let error): domainEvent = .networkProtectionUnhandledError(function: function, line: line, error: error) - case .failedToRetrieveAuthToken: - case .failedToFetchLocationList, + case .failedToRetrieveAuthToken, + .failedToFetchLocationList, .failedToParseLocationListResponse: // Needs Privacy triage for macOS Geoswitching pixels return diff --git a/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift b/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift index 5eb9a976e9..9ab9095266 100644 --- a/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift +++ b/LocalPackages/BuildToolPlugins/Plugins/InputFilesChecker/InputFilesChecker.swift @@ -32,6 +32,7 @@ let nonSandboxedExtraInputFiles: Set = [ .init("NetworkProtectionAppEvents.swift", .source), .init("NetworkProtectionIPCTunnelController.swift", .source), .init("NetworkProtectionNavBarPopoverManager.swift", .source), + .init("NetworkProtectionSubscriptionEventHandler.swift", .source), .init("KeychainType+ClientDefault.swift", .source), .init("DBPHomeViewController.swift", .source), .init("DataBrokerProtectionManager.swift", .source), From 5ee81150a5cf7c3a62fab28ae53aa5ffb0ed37bd Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 26 Nov 2023 16:38:05 -0800 Subject: [PATCH 13/27] Fix Privacy Pro build. --- Configuration/App/DuckDuckGoPrivacyPro.xcconfig | 2 +- DuckDuckGo.xcodeproj/project.pbxproj | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig index 86947568bd..38ce13a0d2 100644 --- a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig +++ b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig @@ -21,4 +21,4 @@ #include "DuckDuckGo.xcconfig" -FEATURE_FLAGS = FEEDBACK NETWORK_PROTECTION SPARKLE SUBSCRIPTION +FEATURE_FLAGS = FEEDBACK NETWORK_PROTECTION SPARKLE SUBSCRIPTION DBP diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 2c87781544..b11d62785b 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -3450,7 +3450,7 @@ 4B9292D82667124B00AD2C21 /* BookmarkListTreeControllerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarkListTreeControllerDataSource.swift; sourceTree = ""; }; 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextualMenu.swift; sourceTree = ""; }; 4B9579202AC687170062CA31 /* HardwareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareModel.swift; sourceTree = ""; }; - 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = "DuckDuckGo Privacy Pro.app"; path = DuckDuckGo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DuckDuckGo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4B957C432AC7AF190062CA31 /* DuckDuckGoPrivacyPro.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DuckDuckGoPrivacyPro.xcconfig; sourceTree = ""; }; 4B980E202817604000282EE1 /* NSNotificationName+Debug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotificationName+Debug.swift"; sourceTree = ""; }; 4B98D27928D95F1A003C2B6F /* ChromiumFaviconsReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumFaviconsReaderTests.swift; sourceTree = ""; }; @@ -6341,7 +6341,7 @@ 4B2D06692A13318400DE1F49 /* DuckDuckGo VPN App Store.app */, 9D9AE8D12AAA39A70026E7DC /* DuckDuckGoDBPBackgroundAgent.app */, 9D9AE8F22AAA39D30026E7DC /* .app */, - 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */, + 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */, 7B96D0CF2ADFDA7E007E02C8 /* DuckDuckGoDBPTests.xctest */, ); name = Products; @@ -8130,7 +8130,7 @@ 3143C8782B0D1F3D00382627 /* DataBrokerProtection */, ); productName = DuckDuckGo; - productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */; + productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */; productType = "com.apple.product-type.application"; }; 7B4CE8D926F02108009134B1 /* UI Tests */ = { From d4aa6e92824501908104d804de765b40a614c69f Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 26 Nov 2023 17:47:58 -0800 Subject: [PATCH 14/27] Undo an xcconfig change. --- Configuration/App/DuckDuckGoPrivacyPro.xcconfig | 1 + DuckDuckGo.xcodeproj/project.pbxproj | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig index 38ce13a0d2..75c0f3a963 100644 --- a/Configuration/App/DuckDuckGoPrivacyPro.xcconfig +++ b/Configuration/App/DuckDuckGoPrivacyPro.xcconfig @@ -22,3 +22,4 @@ #include "DuckDuckGo.xcconfig" FEATURE_FLAGS = FEEDBACK NETWORK_PROTECTION SPARKLE SUBSCRIPTION DBP +PRODUCT_NAME = $(PRODUCT_NAME_PREFIX) Privacy Pro diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index b11d62785b..104cbc19cf 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -3450,7 +3450,7 @@ 4B9292D82667124B00AD2C21 /* BookmarkListTreeControllerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarkListTreeControllerDataSource.swift; sourceTree = ""; }; 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextualMenu.swift; sourceTree = ""; }; 4B9579202AC687170062CA31 /* HardwareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareModel.swift; sourceTree = ""; }; - 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DuckDuckGo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DuckDuckGo Privacy Pro.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 4B957C432AC7AF190062CA31 /* DuckDuckGoPrivacyPro.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DuckDuckGoPrivacyPro.xcconfig; sourceTree = ""; }; 4B980E202817604000282EE1 /* NSNotificationName+Debug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotificationName+Debug.swift"; sourceTree = ""; }; 4B98D27928D95F1A003C2B6F /* ChromiumFaviconsReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumFaviconsReaderTests.swift; sourceTree = ""; }; @@ -6341,7 +6341,7 @@ 4B2D06692A13318400DE1F49 /* DuckDuckGo VPN App Store.app */, 9D9AE8D12AAA39A70026E7DC /* DuckDuckGoDBPBackgroundAgent.app */, 9D9AE8F22AAA39D30026E7DC /* .app */, - 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */, + 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */, 7B96D0CF2ADFDA7E007E02C8 /* DuckDuckGoDBPTests.xctest */, ); name = Products; @@ -8130,7 +8130,7 @@ 3143C8782B0D1F3D00382627 /* DataBrokerProtection */, ); productName = DuckDuckGo; - productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo.app */; + productReference = 4B957C412AC7AE700062CA31 /* DuckDuckGo Privacy Pro.app */; productType = "com.apple.product-type.application"; }; 7B4CE8D926F02108009134B1 /* UI Tests */ = { From 0b1bf007be208d7305604b32c65ba1b2f3f6c00a Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 26 Nov 2023 17:51:32 -0800 Subject: [PATCH 15/27] Simplify some token fetching logic. --- .../NetworkProtectionSubscriptionEventHandler.swift | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift index 3fb356d132..d66cafaf8c 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -50,17 +50,6 @@ final class NetworkProtectionSubscriptionEventHandler { return } - // Remove the existing auth token: - - do { - try networkProtectionTokenStorage.deleteToken() - print("[NetP Subscription] Removed existing token") - } catch { - print("[NetP Subscription] Failed to remove existing token") - } - - // Get the new auth token: - Task { do { try await networkProtectionRedemptionCoordinator.exchange(accessToken: token) From accfbba9bf0734ebcc3d7fd4ec3d578350e78a37 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 26 Nov 2023 17:59:33 -0800 Subject: [PATCH 16/27] Fix App Store build compilation. --- DuckDuckGo/MainWindow/MainViewController.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DuckDuckGo/MainWindow/MainViewController.swift b/DuckDuckGo/MainWindow/MainViewController.swift index 2d4c5f4d17..fa8792c66b 100644 --- a/DuckDuckGo/MainWindow/MainViewController.swift +++ b/DuckDuckGo/MainWindow/MainViewController.swift @@ -20,7 +20,10 @@ import Cocoa import Carbon.HIToolbox import Combine import Common + +#if NETWORK_PROTECTION import NetworkProtection +#endif final class MainViewController: NSViewController { From 0a565adfa7a3f3b8412c8ba349811cce2f7f2e0a Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:20:19 -0800 Subject: [PATCH 17/27] Update Package.resolved. --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a65e37f1fd..394477550b 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "sam/add-netp-subscription-auth-support", - "revision" : "22506de8f9fcadddf2a949ac922ad4377b0a3188" + "revision" : "a2e41dbf95c49f66120497002c680b929e969f97" } }, { From 5e5857564ff6159eb16b68dc9bdb88f899ed77a4 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:21:16 -0800 Subject: [PATCH 18/27] Remove recovered references post-merge. --- DuckDuckGo.xcodeproj/project.pbxproj | 92 +--------------------------- 1 file changed, 2 insertions(+), 90 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 4566bec78c..c2fe6766e9 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -308,7 +308,6 @@ 3706FB3B293F65D500E42796 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B7184D27677CBB00B4277F /* RootView.swift */; }; 3706FB3C293F65D500E42796 /* AddressBarTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABEE6AE24AD22B90043105B /* AddressBarTextField.swift */; }; 3706FB3D293F65D500E42796 /* FocusRingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693953E26F04BE70015B914 /* FocusRingView.swift */; }; - 3706FB3E293F65D500E42796 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; 3706FB3F293F65D500E42796 /* NSPopUpButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1E6EEF27AB5E5D00F51793 /* NSPopUpButtonView.swift */; }; 3706FB40293F65D500E42796 /* ContextualMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */; }; 3706FB41293F65D500E42796 /* NavigationBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA68C3D22490ED62001B8783 /* NavigationBarViewController.swift */; }; @@ -472,7 +471,6 @@ 3706FBF6293F65D500E42796 /* Pixel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E45226142B070067D1B9 /* Pixel.swift */; }; 3706FBF7293F65D500E42796 /* PixelEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E47626146A570067D1B9 /* PixelEvent.swift */; }; 3706FBF8293F65D500E42796 /* TabBarFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2CB1342587C29500AA6FBE /* TabBarFooter.swift */; }; - 3706FBF9293F65D500E42796 /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; 3706FBFA293F65D500E42796 /* FileDownloadError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23826E742610031CB7F /* FileDownloadError.swift */; }; 3706FBFB293F65D500E42796 /* MoreOrLessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E9F27BFE60E0038AD11 /* MoreOrLessView.swift */; }; 3706FBFD293F65D500E42796 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E46F26146A250067D1B9 /* DateExtension.swift */; }; @@ -507,7 +505,6 @@ 3706FC1B293F65D500E42796 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68458BF25C7E9E000DC17B6 /* TabCollectionViewModel+NSSecureCoding.swift */; }; 3706FC1D293F65D500E42796 /* EmailManagerRequestDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85378DA1274E7F25007C5CBF /* EmailManagerRequestDelegate.swift */; }; 3706FC1E293F65D500E42796 /* ApplicationVersionReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D43EB35292ACE690065E5D6 /* ApplicationVersionReader.swift */; }; - 3706FC1F293F65D500E42796 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; 3706FC20293F65D500E42796 /* PreferencesAutofillView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DE4BC27EA31AC002CC3DE /* PreferencesAutofillView.swift */; }; 3706FC21293F65D500E42796 /* UserText+PasswordManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A797E26A79EAA00A75A42 /* UserText+PasswordManager.swift */; }; 3706FC22293F65D500E42796 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954026F04BE80015B914 /* ProgressView.swift */; }; @@ -611,7 +608,6 @@ 3706FC93293F65D500E42796 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFCE8027DA2CA600471A10 /* PreferencesViewController.swift */; }; 3706FC94293F65D500E42796 /* FireproofDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */; }; 3706FC95293F65D500E42796 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B677440255DBEEA00025BD8 /* Database.swift */; }; - 3706FC96293F65D500E42796 /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 3706FC97293F65D500E42796 /* BookmarksOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92928526670D1600AD2C21 /* BookmarksOutlineView.swift */; }; 3706FC98293F65D500E42796 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65482271FCD53008D1D63 /* CountryList.swift */; }; 3706FC99293F65D500E42796 /* PreferencesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37CD54C427F2FDD100F1F7B9 /* PreferencesSection.swift */; }; @@ -658,12 +654,10 @@ 3706FCCC293F65D500E42796 /* TabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA80EC7B256C46AA007083E7 /* TabBar.storyboard */; }; 3706FCCD293F65D500E42796 /* shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396B2754D4E300B241FA /* shield-dot.json */; }; 3706FCCF293F65D500E42796 /* Bookmarks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AAC5E4C625D6A6E8007F5990 /* Bookmarks.storyboard */; }; - 3706FCD0293F65D500E42796 /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; 3706FCD1293F65D500E42796 /* PrivacyDashboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6FA893C269C423100588ECD /* PrivacyDashboard.storyboard */; }; 3706FCD2293F65D500E42796 /* shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396A2754D4E200B241FA /* shield.json */; }; 3706FCD4293F65D500E42796 /* TabBarViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA7412B124D0B3AC00D22FE0 /* TabBarViewItem.xib */; }; 3706FCD6293F65D500E42796 /* httpsMobileV2FalsePositives.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B67742A255DBEB800025BD8 /* httpsMobileV2FalsePositives.json */; }; - 3706FCD8293F65D500E42796 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 3706FCD9293F65D500E42796 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; @@ -1419,7 +1413,6 @@ 4B9579D92AC7AE700062CA31 /* DownloadListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23526E732000031CB7F /* DownloadListItem.swift */; }; 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9DB00A2A983B24000927DB /* WaitlistRequest.swift */; }; 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6B1E87D26D5DA0E0062C350 /* DownloadsPopover.swift */; }; - 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92929626670D2A00AD2C21 /* SpacerNode.swift */; }; 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3775913529AB9A1C00E26367 /* SyncManagementDialogViewController.swift */; }; 4B9579E02AC7AE700062CA31 /* BookmarkExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0BB6629AEFF8100AE8E3C /* BookmarkExtension.swift */; }; @@ -1498,7 +1491,6 @@ 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B7184D27677CBB00B4277F /* RootView.swift */; }; 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABEE6AE24AD22B90043105B /* AddressBarTextField.swift */; }; 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693953E26F04BE70015B914 /* FocusRingView.swift */; }; - 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1E6EEF27AB5E5D00F51793 /* NSPopUpButtonView.swift */; }; 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */; }; @@ -1720,7 +1712,6 @@ 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E47626146A570067D1B9 /* PixelEvent.swift */; }; 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2CB1342587C29500AA6FBE /* TabBarFooter.swift */; }; 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC111E5294D06290086524F /* JSAlertViewModel.swift */; }; - 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23826E742610031CB7F /* FileDownloadError.swift */; }; 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E9F27BFE60E0038AD11 /* MoreOrLessView.swift */; }; 4B957B112AC7AE700062CA31 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E46F26146A250067D1B9 /* DateExtension.swift */; }; @@ -1758,14 +1749,12 @@ 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8EDF2624923EC70071C2E8 /* StringExtension.swift */; }; 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85378DA1274E7F25007C5CBF /* EmailManagerRequestDelegate.swift */; }; 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D43EB35292ACE690065E5D6 /* ApplicationVersionReader.swift */; }; - 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DE4BC27EA31AC002CC3DE /* PreferencesAutofillView.swift */; }; 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DCFBC8929ADF32B00313531 /* BurnerHomePageView.swift */; }; 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A797E26A79EAA00A75A42 /* UserText+PasswordManager.swift */; }; 4B957B382AC7AE700062CA31 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954026F04BE80015B914 /* ProgressView.swift */; }; 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B69B50362726A12000758A2B /* StatisticsStore.swift */; }; 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBDEE8C28FC14760092FAA6 /* BWInstallationService.swift */; }; - 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4D606F2A0B29FA00BCD287 /* NetworkProtectionInvitePresenter.swift */; }; 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954626F04BEA0015B914 /* ColorView.swift */; }; 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5C1DD2285A217F0089850C /* RecentlyClosedCacheItem.swift */; }; @@ -1897,7 +1886,6 @@ 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFCE8027DA2CA600471A10 /* PreferencesViewController.swift */; }; 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */; }; 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B677440255DBEEA00025BD8 /* Database.swift */; }; - 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92928526670D1600AD2C21 /* BookmarksOutlineView.swift */; }; 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65482271FCD53008D1D63 /* CountryList.swift */; }; 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37CD54C427F2FDD100F1F7B9 /* PreferencesSection.swift */; }; @@ -1948,7 +1936,6 @@ 4B957BF52AC7AE700062CA31 /* clickToLoadConfig.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47767F272A21B700419EDA /* clickToLoadConfig.json */; }; 4B957BF62AC7AE700062CA31 /* Downloads.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6B1E88126D5DAC30062C350 /* Downloads.storyboard */; }; 4B957BF72AC7AE700062CA31 /* dark-shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396F2754D4E900B241FA /* dark-shield.json */; }; - 4B957BF82AC7AE700062CA31 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 4B957BF92AC7AE700062CA31 /* dark-shield-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6EA27E880AE00036718 /* dark-shield-mouse-over.json */; }; 4B957BFA2AC7AE700062CA31 /* autoconsent-bundle.js in Resources */ = {isa = PBXBuildFile; fileRef = B31055C327A1BA1D001AC618 /* autoconsent-bundle.js */; }; 4B957BFB2AC7AE700062CA31 /* ContentOverlay.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7B1E819C27C8874900FF0E60 /* ContentOverlay.storyboard */; }; @@ -1966,12 +1953,10 @@ 4B957C072AC7AE700062CA31 /* TabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA80EC7B256C46AA007083E7 /* TabBar.storyboard */; }; 4B957C082AC7AE700062CA31 /* shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396B2754D4E300B241FA /* shield-dot.json */; }; 4B957C0A2AC7AE700062CA31 /* Bookmarks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AAC5E4C625D6A6E8007F5990 /* Bookmarks.storyboard */; }; - 4B957C0B2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; 4B957C0C2AC7AE700062CA31 /* PrivacyDashboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6FA893C269C423100588ECD /* PrivacyDashboard.storyboard */; }; 4B957C0D2AC7AE700062CA31 /* shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396A2754D4E200B241FA /* shield.json */; }; 4B957C0E2AC7AE700062CA31 /* TabBarViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA7412B124D0B3AC00D22FE0 /* TabBarViewItem.xib */; }; 4B957C102AC7AE700062CA31 /* httpsMobileV2FalsePositives.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B67742A255DBEB800025BD8 /* httpsMobileV2FalsePositives.json */; }; - 4B957C112AC7AE700062CA31 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 4B957C122AC7AE700062CA31 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; @@ -2101,8 +2086,6 @@ 4BCF15EF2ABBDBFF0083F6DF /* NetworkProtectionRemoteMessaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15D62ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift */; }; 4BCF15F02ABBDC010083F6DF /* NetworkProtectionRemoteMessagingStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15DA2ABB8CED0083F6DF /* NetworkProtectionRemoteMessagingStorage.swift */; }; 4BCF15F12ABBDC030083F6DF /* NetworkProtectionRemoteMessagingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15DC2ABB8CFC0083F6DF /* NetworkProtectionRemoteMessagingRequest.swift */; }; - 4BD18F01283F0BC500058124 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; - 4BD18F05283F151F00058124 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 4BD57C012AC0FF7500B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57BFF2AC0FC4E00B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift */; }; 4BD57C042AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */; }; 4BD57C052AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */; }; @@ -2112,10 +2095,6 @@ 4BE344EF2B23786F003FC223 /* VPNFeedbackFormViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */; }; 4BE4005327CF3DC3007D3161 /* SavePaymentMethodPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4005227CF3DC3007D3161 /* SavePaymentMethodPopover.swift */; }; 4BE4005527CF3F19007D3161 /* SavePaymentMethodViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4005427CF3F19007D3161 /* SavePaymentMethodViewController.swift */; }; - 4BE41A5E28446EAD00760399 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; - 4BE5336B286912D40019DBFD /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; - 4BE5336C286912D40019DBFD /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; - 4BE5336E286915A10019DBFD /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 4BE53374286E39F10019DBFD /* ChromiumKeychainPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE53373286E39F10019DBFD /* ChromiumKeychainPrompt.swift */; }; 4BE65474271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6546E271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift */; }; 4BE65476271FCD41008D1D63 /* PasswordManagementCreditCardItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65470271FCD40008D1D63 /* PasswordManagementCreditCardItemView.swift */; }; @@ -2271,7 +2250,6 @@ 85393C872A6FF1B600F11EB3 /* BookmarksBarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850E8DFA2A6FEC5E00691187 /* BookmarksBarAppearance.swift */; }; 8546DE6225C03056000CA5E1 /* UserAgentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8546DE6125C03056000CA5E1 /* UserAgentTests.swift */; }; 85480FCF25D1AA22009424E3 /* ConfigurationStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85480FCE25D1AA22009424E3 /* ConfigurationStore.swift */; }; - 854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 85589E7F27BBB8630038AD11 /* AddEditFavoriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7927BBB8620038AD11 /* AddEditFavoriteViewController.swift */; }; 85589E8127BBB8630038AD11 /* AddEditFavoriteViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85589E7B27BBB8630038AD11 /* AddEditFavoriteViewController.storyboard */; }; 85589E8227BBB8630038AD11 /* HomePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7C27BBB8630038AD11 /* HomePageView.swift */; }; @@ -2297,8 +2275,6 @@ 85707F2A276A35FE00DC0649 /* ActionSpeech.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F29276A35FE00DC0649 /* ActionSpeech.swift */; }; 85707F2C276A364E00DC0649 /* OnboardingFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F2B276A364E00DC0649 /* OnboardingFlow.swift */; }; 85707F31276A7DCA00DC0649 /* OnboardingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F30276A7DCA00DC0649 /* OnboardingViewModel.swift */; }; - 85774AFF2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; - 85774B002A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; 85774B032A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 85774B042A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 85799C1825DEBB3F0007EC87 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85799C1725DEBB3F0007EC87 /* Logging.swift */; }; @@ -2318,9 +2294,6 @@ 858A798A26A9B35E00A75A42 /* PasswordManagementItemModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */; }; 859E7D6B27453BF3009C2B69 /* BookmarksExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */; }; 859E7D6D274548F2009C2B69 /* BookmarksExporterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */; }; - 859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; - 859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; - 859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 85A0116925AF1D8900FA6A0C /* FindInPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */; }; 85A0117425AF2EDF00FA6A0C /* FindInPage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */; }; 85A0118225AF60E700FA6A0C /* FindInPageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0118125AF60E700FA6A0C /* FindInPageModel.swift */; }; @@ -3580,8 +3553,6 @@ 4BCF15DC2ABB8CFC0083F6DF /* NetworkProtectionRemoteMessagingRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingRequest.swift; sourceTree = ""; }; 4BCF15E42ABB98990083F6DF /* NetworkProtectionRemoteMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessageTests.swift; sourceTree = ""; }; 4BCF15E92ABB99470083F6DF /* network-protection-messages.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "network-protection-messages.json"; sourceTree = ""; }; - 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksBarViewController.swift; sourceTree = ""; }; - 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BookmarksBar.storyboard; sourceTree = ""; }; 4BD57BFF2AC0FC4E00B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingStorageTests.swift; sourceTree = ""; }; 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingTests.swift; sourceTree = ""; }; 4BDFA4AD27BF19E500648192 /* ToggleableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleableScrollView.swift; sourceTree = ""; }; @@ -3590,10 +3561,6 @@ 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNFeedbackFormViewModelTests.swift; sourceTree = ""; }; 4BE4005227CF3DC3007D3161 /* SavePaymentMethodPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePaymentMethodPopover.swift; sourceTree = ""; }; 4BE4005427CF3F19007D3161 /* SavePaymentMethodViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePaymentMethodViewController.swift; sourceTree = ""; }; - 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarViewModel.swift; sourceTree = ""; }; - 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BookmarksBarCollectionViewItem.xib; sourceTree = ""; }; - 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksBarCollectionViewItem.swift; sourceTree = ""; }; - 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontallyCenteredLayout.swift; sourceTree = ""; }; 4BE53373286E39F10019DBFD /* ChromiumKeychainPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumKeychainPrompt.swift; sourceTree = ""; }; 4BE6546E271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordManagementIdentityItemView.swift; sourceTree = ""; }; 4BE65470271FCD40008D1D63 /* PasswordManagementCreditCardItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordManagementCreditCardItemView.swift; sourceTree = ""; }; @@ -3716,7 +3683,6 @@ 85707F29276A35FE00DC0649 /* ActionSpeech.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSpeech.swift; sourceTree = ""; }; 85707F2B276A364E00DC0649 /* OnboardingFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlow.swift; sourceTree = ""; }; 85707F30276A7DCA00DC0649 /* OnboardingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewModel.swift; sourceTree = ""; }; - 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarMenuFactory.swift; sourceTree = ""; }; 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockMenuItem.swift; sourceTree = ""; }; 85799C1725DEBB3F0007EC87 /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; 857E44612A9F6F3500ED77A7 /* CampaignVariantTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CampaignVariantTests.swift; sourceTree = ""; }; @@ -3732,8 +3698,6 @@ 858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordManagementItemModelTests.swift; sourceTree = ""; }; 859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporter.swift; sourceTree = ""; }; 859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporterTests.swift; sourceTree = ""; }; - 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarPromptPopover.swift; sourceTree = ""; }; - 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = BookmarksBarPromptAssets.xcassets; sourceTree = ""; }; 85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageViewController.swift; sourceTree = ""; }; 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = FindInPage.storyboard; sourceTree = ""; }; 85A0118125AF60E700FA6A0C /* FindInPageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageModel.swift; sourceTree = ""; }; @@ -5774,22 +5738,7 @@ path = Resources; sourceTree = ""; }; - 4BD18F02283F0F1000058124 /* View */ = { - isa = PBXGroup; - children = ( - 859F30622A72A7A900C20372 /* Prompt */, - 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */, - 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */, - 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */, - 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */, - 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */, - 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */, - 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */, - ); - path = View; - sourceTree = ""; - 4BE344EC2B2376AE003FC223 /* VPNFeedbackForm */ = { - }; + 4BD18F02283F0F1000058124 /* VPNFeedbackForm */ = { isa = PBXGroup; children = ( 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */, @@ -5819,7 +5768,7 @@ 4BFD356E283ADE8B00CE9234 /* BookmarksBar */ = { isa = PBXGroup; children = ( - 4BD18F02283F0F1000058124 /* View */, + 4BD18F02283F0F1000058124 /* VPNFeedbackForm */, 850E8DFA2A6FEC5E00691187 /* BookmarksBarAppearance.swift */, ); path = BookmarksBar; @@ -6095,15 +6044,6 @@ path = SecureVault; sourceTree = ""; }; - 859F30622A72A7A900C20372 /* Prompt */ = { - isa = PBXGroup; - children = ( - 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */, - 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */, - ); - path = Prompt; - sourceTree = ""; - }; 85A0115D25AF1C4700FA6A0C /* FindInPage */ = { isa = PBXGroup; children = ( @@ -6576,7 +6516,6 @@ 4B9DB04D2A983B55000927DB /* Waitlist */, 3776582B27F7163B009A6B35 /* WebsiteBreakageReport */, 376718FE28E58504003A2A15 /* YoutubePlayer */, - 4BE344EC2B2376AE003FC223 /* VPNFeedbackForm */, AA585D96248FD31400E9A3E2 /* Info.plist */, ); path = UnitTests; @@ -8592,7 +8531,6 @@ 3706FCBA293F65D500E42796 /* clickToLoadConfig.json in Resources */, 3706FCBB293F65D500E42796 /* Downloads.storyboard in Resources */, 3706FCBC293F65D500E42796 /* dark-shield.json in Resources */, - 854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */, 3706FCBD293F65D500E42796 /* dark-shield-mouse-over.json in Resources */, 3706FCBE293F65D500E42796 /* autoconsent-bundle.js in Resources */, 3706FCBF293F65D500E42796 /* ContentOverlay.storyboard in Resources */, @@ -8610,12 +8548,10 @@ 3706FCCC293F65D500E42796 /* TabBar.storyboard in Resources */, 3706FCCD293F65D500E42796 /* shield-dot.json in Resources */, 3706FCCF293F65D500E42796 /* Bookmarks.storyboard in Resources */, - 3706FCD0293F65D500E42796 /* BookmarksBarCollectionViewItem.xib in Resources */, 3706FCD1293F65D500E42796 /* PrivacyDashboard.storyboard in Resources */, 3706FCD2293F65D500E42796 /* shield.json in Resources */, 3706FCD4293F65D500E42796 /* TabBarViewItem.xib in Resources */, 3706FCD6293F65D500E42796 /* httpsMobileV2FalsePositives.json in Resources */, - 3706FCD8293F65D500E42796 /* BookmarksBar.storyboard in Resources */, 3706FCD9293F65D500E42796 /* trackers-1.json in Resources */, 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */, 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */, @@ -8726,7 +8662,6 @@ 4B957BF52AC7AE700062CA31 /* clickToLoadConfig.json in Resources */, 4B957BF62AC7AE700062CA31 /* Downloads.storyboard in Resources */, 4B957BF72AC7AE700062CA31 /* dark-shield.json in Resources */, - 4B957BF82AC7AE700062CA31 /* BookmarksBarPromptAssets.xcassets in Resources */, 4B957BF92AC7AE700062CA31 /* dark-shield-mouse-over.json in Resources */, 4B957BFA2AC7AE700062CA31 /* autoconsent-bundle.js in Resources */, 4B957BFB2AC7AE700062CA31 /* ContentOverlay.storyboard in Resources */, @@ -8744,12 +8679,10 @@ 4B957C072AC7AE700062CA31 /* TabBar.storyboard in Resources */, 4B957C082AC7AE700062CA31 /* shield-dot.json in Resources */, 4B957C0A2AC7AE700062CA31 /* Bookmarks.storyboard in Resources */, - 4B957C0B2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.xib in Resources */, 4B957C0C2AC7AE700062CA31 /* PrivacyDashboard.storyboard in Resources */, 4B957C0D2AC7AE700062CA31 /* shield.json in Resources */, 4B957C0E2AC7AE700062CA31 /* TabBarViewItem.xib in Resources */, 4B957C102AC7AE700062CA31 /* httpsMobileV2FalsePositives.json in Resources */, - 4B957C112AC7AE700062CA31 /* BookmarksBar.storyboard in Resources */, 4B957C122AC7AE700062CA31 /* trackers-1.json in Resources */, 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */, 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */, @@ -8829,7 +8762,6 @@ EA477680272A21B700419EDA /* clickToLoadConfig.json in Resources */, B6B1E88226D5DAC30062C350 /* Downloads.storyboard in Resources */, AA3439712754D4E900B241FA /* dark-shield.json in Resources */, - 859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */, AA7EB6EB27E880AE00036718 /* dark-shield-mouse-over.json in Resources */, B31055CB27A1BA1D001AC618 /* autoconsent-bundle.js in Resources */, 7B1E819F27C8874900FF0E60 /* ContentOverlay.storyboard in Resources */, @@ -8847,12 +8779,10 @@ AA80EC79256C46AA007083E7 /* TabBar.storyboard in Resources */, AA34396D2754D4E300B241FA /* shield-dot.json in Resources */, AAC5E4C925D6A6E8007F5990 /* Bookmarks.storyboard in Resources */, - 4BE5336B286912D40019DBFD /* BookmarksBarCollectionViewItem.xib in Resources */, B6FA893D269C423100588ECD /* PrivacyDashboard.storyboard in Resources */, AA34396C2754D4E300B241FA /* shield.json in Resources */, AA7412B324D0B3AC00D22FE0 /* TabBarViewItem.xib in Resources */, 4B677435255DBEB800025BD8 /* httpsMobileV2FalsePositives.json in Resources */, - 4BD18F05283F151F00058124 /* BookmarksBar.storyboard in Resources */, AA3439792754D55100B241FA /* trackers-1.json in Resources */, AA34397C2754D55100B241FA /* dark-trackers-1.json in Resources */, AA3863C527A1E28F00749AB5 /* Feedback.storyboard in Resources */, @@ -9231,7 +9161,6 @@ 3707C724294B5D2900682A9F /* StringExtension.swift in Sources */, 3706FA9F293F65D500E42796 /* FeedbackPresenter.swift in Sources */, 37A6A8F22AFCC988008580A3 /* FaviconsFetcherOnboarding.swift in Sources */, - 859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */, 37197EA22942441900394917 /* Tab+Dialogs.swift in Sources */, 3706FAA0293F65D500E42796 /* UserAgent.swift in Sources */, 3706FAA1293F65D500E42796 /* NSAlert+DataImport.swift in Sources */, @@ -9418,7 +9347,6 @@ 3706FB3B293F65D500E42796 /* RootView.swift in Sources */, 3706FB3C293F65D500E42796 /* AddressBarTextField.swift in Sources */, 3706FB3D293F65D500E42796 /* FocusRingView.swift in Sources */, - 3706FB3E293F65D500E42796 /* BookmarksBarViewModel.swift in Sources */, 3706FB3F293F65D500E42796 /* NSPopUpButtonView.swift in Sources */, 3706FB40293F65D500E42796 /* ContextualMenu.swift in Sources */, 3706FB41293F65D500E42796 /* NavigationBarViewController.swift in Sources */, @@ -9595,7 +9523,6 @@ 3706FBC6293F65D500E42796 /* MouseOverView.swift in Sources */, 4B9DB0212A983B24000927DB /* ProductWaitlistRequest.swift in Sources */, 56D145EC29E6C99B00E3488A /* DataImportStatusProviding.swift in Sources */, - 85774B002A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */, B602E81E2A1E25B1006D261F /* NEOnDemandRuleExtension.swift in Sources */, 3706FBC7293F65D500E42796 /* HistoryStore.swift in Sources */, 3706FBC8293F65D500E42796 /* FirePopoverCollectionViewItem.swift in Sources */, @@ -9661,7 +9588,6 @@ 3706FBF7293F65D500E42796 /* PixelEvent.swift in Sources */, 3706FBF8293F65D500E42796 /* TabBarFooter.swift in Sources */, B626A7612992407D00053070 /* CancellableExtension.swift in Sources */, - 3706FBF9293F65D500E42796 /* BookmarksBarCollectionViewItem.swift in Sources */, 3706FBFA293F65D500E42796 /* FileDownloadError.swift in Sources */, 379E877729E98729001C8BB0 /* BookmarksCleanupErrorHandling.swift in Sources */, 3706FBFB293F65D500E42796 /* MoreOrLessView.swift in Sources */, @@ -9709,7 +9635,6 @@ 3706FC1B293F65D500E42796 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */, 3706FC1D293F65D500E42796 /* EmailManagerRequestDelegate.swift in Sources */, 3706FC1E293F65D500E42796 /* ApplicationVersionReader.swift in Sources */, - 3706FC1F293F65D500E42796 /* BookmarksBarViewController.swift in Sources */, 3706FC20293F65D500E42796 /* PreferencesAutofillView.swift in Sources */, 3706FC21293F65D500E42796 /* UserText+PasswordManager.swift in Sources */, 3706FC22293F65D500E42796 /* ProgressView.swift in Sources */, @@ -9847,7 +9772,6 @@ 3706FC94293F65D500E42796 /* FireproofDomains.swift in Sources */, 3706FC95293F65D500E42796 /* Database.swift in Sources */, 3707C71B294B5D0F00682A9F /* AutofillTabExtension.swift in Sources */, - 3706FC96293F65D500E42796 /* HorizontallyCenteredLayout.swift in Sources */, 3706FC97293F65D500E42796 /* BookmarksOutlineView.swift in Sources */, 3706FC98293F65D500E42796 /* CountryList.swift in Sources */, 3706FC99293F65D500E42796 /* PreferencesSection.swift in Sources */, @@ -10449,7 +10373,6 @@ 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */, 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */, 37A6A8F92AFCCA59008580A3 /* FaviconsFetcherOnboardingViewController.swift in Sources */, - 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */, 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */, B62B483C2ADE46FC000DECE5 /* Application.swift in Sources */, 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */, @@ -10535,7 +10458,6 @@ 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */, 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */, 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */, - 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */, 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */, 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */, 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */, @@ -10774,7 +10696,6 @@ 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */, 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */, 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */, - 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */, 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */, 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */, 4B957B112AC7AE700062CA31 /* DateExtension.swift in Sources */, @@ -10813,7 +10734,6 @@ 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */, 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */, 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */, - 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */, 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */, 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */, 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */, @@ -10822,7 +10742,6 @@ 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */, EEC4A66B2B2C87D300F7C0AA /* VPNLocationView.swift in Sources */, 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */, - 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */, 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */, 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */, 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */, @@ -10969,7 +10888,6 @@ 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */, 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */, 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */, - 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */, 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */, 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */, 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */, @@ -11192,7 +11110,6 @@ B6C0B23626E732000031CB7F /* DownloadListItem.swift in Sources */, 4B9DB0232A983B24000927DB /* WaitlistRequest.swift in Sources */, B6B1E87E26D5DA0E0062C350 /* DownloadsPopover.swift in Sources */, - 85774AFF2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */, 4B9292A026670D2A00AD2C21 /* SpacerNode.swift in Sources */, 3775913629AB9A1C00E26367 /* SyncManagementDialogViewController.swift in Sources */, B6C0BB6729AEFF8100AE8E3C /* BookmarkExtension.swift in Sources */, @@ -11276,7 +11193,6 @@ 85B7184E27677CBB00B4277F /* RootView.swift in Sources */, AABEE6AF24AD22B90043105B /* AddressBarTextField.swift in Sources */, B693954C26F04BEB0015B914 /* FocusRingView.swift in Sources */, - 4BE41A5E28446EAD00760399 /* BookmarksBarViewModel.swift in Sources */, 4B1E6EF127AB5E5D00F51793 /* NSPopUpButtonView.swift in Sources */, 372A0FEC2B2379310033BF7F /* SyncMetricsEventsHandler.swift in Sources */, 85774B032A71CDD000DE0561 /* BlockMenuItem.swift in Sources */, @@ -11521,7 +11437,6 @@ B6A9E47726146A570067D1B9 /* PixelEvent.swift in Sources */, AA2CB1352587C29500AA6FBE /* TabBarFooter.swift in Sources */, EEC111E6294D06290086524F /* JSAlertViewModel.swift in Sources */, - 4BE5336C286912D40019DBFD /* BookmarksBarCollectionViewItem.swift in Sources */, B6C0B23926E742610031CB7F /* FileDownloadError.swift in Sources */, 85589EA027BFE60E0038AD11 /* MoreOrLessView.swift in Sources */, B6A9E47026146A250067D1B9 /* DateExtension.swift in Sources */, @@ -11563,7 +11478,6 @@ AA8EDF2724923EC70071C2E8 /* StringExtension.swift in Sources */, 85378DA2274E7F25007C5CBF /* EmailManagerRequestDelegate.swift in Sources */, 1D43EB36292ACE690065E5D6 /* ApplicationVersionReader.swift in Sources */, - 4BD18F01283F0BC500058124 /* BookmarksBarViewController.swift in Sources */, 379DE4BD27EA31AC002CC3DE /* PreferencesAutofillView.swift in Sources */, 1DCFBC8A29ADF32B00313531 /* BurnerHomePageView.swift in Sources */, 858A797F26A79EAA00A75A42 /* UserText+PasswordManager.swift in Sources */, @@ -11571,7 +11485,6 @@ B69B503C2726A12500758A2B /* StatisticsStore.swift in Sources */, 3158B14A2B0BF74300AF130C /* DataBrokerProtectionDebugMenu.swift in Sources */, 4BBDEE9128FC14760092FAA6 /* BWInstallationService.swift in Sources */, - 859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */, 4B4D60CA2A0C849600BCD287 /* NetworkProtectionInvitePresenter.swift in Sources */, B693955426F04BEC0015B914 /* ColorView.swift in Sources */, AA5C1DD3285A217F0089850C /* RecentlyClosedCacheItem.swift in Sources */, @@ -11710,7 +11623,6 @@ 37AFCE8127DA2CA600471A10 /* PreferencesViewController.swift in Sources */, 4B02198A25E05FAC00ED7DEA /* FireproofDomains.swift in Sources */, 4B677442255DBEEA00025BD8 /* Database.swift in Sources */, - 4BE5336E286915A10019DBFD /* HorizontallyCenteredLayout.swift in Sources */, 4B92928B26670D1700AD2C21 /* BookmarksOutlineView.swift in Sources */, 4BF01C00272AE74C00884A61 /* CountryList.swift in Sources */, 37CD54CC27F2FDD100F1F7B9 /* PreferencesSection.swift in Sources */, From ff35a3ddcfd4a911f0c2fee1108d8c34a85f8cd9 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:24:46 -0800 Subject: [PATCH 19/27] Fix the project file after some merge issues. --- DuckDuckGo.xcodeproj/project.pbxproj | 104 ++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 8 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index c2fe6766e9..1415d4afb4 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -308,6 +308,7 @@ 3706FB3B293F65D500E42796 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B7184D27677CBB00B4277F /* RootView.swift */; }; 3706FB3C293F65D500E42796 /* AddressBarTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABEE6AE24AD22B90043105B /* AddressBarTextField.swift */; }; 3706FB3D293F65D500E42796 /* FocusRingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693953E26F04BE70015B914 /* FocusRingView.swift */; }; + 3706FB3E293F65D500E42796 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; 3706FB3F293F65D500E42796 /* NSPopUpButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1E6EEF27AB5E5D00F51793 /* NSPopUpButtonView.swift */; }; 3706FB40293F65D500E42796 /* ContextualMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */; }; 3706FB41293F65D500E42796 /* NavigationBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA68C3D22490ED62001B8783 /* NavigationBarViewController.swift */; }; @@ -471,6 +472,7 @@ 3706FBF6293F65D500E42796 /* Pixel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E45226142B070067D1B9 /* Pixel.swift */; }; 3706FBF7293F65D500E42796 /* PixelEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E47626146A570067D1B9 /* PixelEvent.swift */; }; 3706FBF8293F65D500E42796 /* TabBarFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2CB1342587C29500AA6FBE /* TabBarFooter.swift */; }; + 3706FBF9293F65D500E42796 /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; 3706FBFA293F65D500E42796 /* FileDownloadError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23826E742610031CB7F /* FileDownloadError.swift */; }; 3706FBFB293F65D500E42796 /* MoreOrLessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E9F27BFE60E0038AD11 /* MoreOrLessView.swift */; }; 3706FBFD293F65D500E42796 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E46F26146A250067D1B9 /* DateExtension.swift */; }; @@ -505,6 +507,7 @@ 3706FC1B293F65D500E42796 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68458BF25C7E9E000DC17B6 /* TabCollectionViewModel+NSSecureCoding.swift */; }; 3706FC1D293F65D500E42796 /* EmailManagerRequestDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85378DA1274E7F25007C5CBF /* EmailManagerRequestDelegate.swift */; }; 3706FC1E293F65D500E42796 /* ApplicationVersionReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D43EB35292ACE690065E5D6 /* ApplicationVersionReader.swift */; }; + 3706FC1F293F65D500E42796 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; 3706FC20293F65D500E42796 /* PreferencesAutofillView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DE4BC27EA31AC002CC3DE /* PreferencesAutofillView.swift */; }; 3706FC21293F65D500E42796 /* UserText+PasswordManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A797E26A79EAA00A75A42 /* UserText+PasswordManager.swift */; }; 3706FC22293F65D500E42796 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954026F04BE80015B914 /* ProgressView.swift */; }; @@ -608,6 +611,7 @@ 3706FC93293F65D500E42796 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFCE8027DA2CA600471A10 /* PreferencesViewController.swift */; }; 3706FC94293F65D500E42796 /* FireproofDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */; }; 3706FC95293F65D500E42796 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B677440255DBEEA00025BD8 /* Database.swift */; }; + 3706FC96293F65D500E42796 /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 3706FC97293F65D500E42796 /* BookmarksOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92928526670D1600AD2C21 /* BookmarksOutlineView.swift */; }; 3706FC98293F65D500E42796 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65482271FCD53008D1D63 /* CountryList.swift */; }; 3706FC99293F65D500E42796 /* PreferencesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37CD54C427F2FDD100F1F7B9 /* PreferencesSection.swift */; }; @@ -654,10 +658,12 @@ 3706FCCC293F65D500E42796 /* TabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA80EC7B256C46AA007083E7 /* TabBar.storyboard */; }; 3706FCCD293F65D500E42796 /* shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396B2754D4E300B241FA /* shield-dot.json */; }; 3706FCCF293F65D500E42796 /* Bookmarks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AAC5E4C625D6A6E8007F5990 /* Bookmarks.storyboard */; }; + 3706FCD0293F65D500E42796 /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; 3706FCD1293F65D500E42796 /* PrivacyDashboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6FA893C269C423100588ECD /* PrivacyDashboard.storyboard */; }; 3706FCD2293F65D500E42796 /* shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396A2754D4E200B241FA /* shield.json */; }; 3706FCD4293F65D500E42796 /* TabBarViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA7412B124D0B3AC00D22FE0 /* TabBarViewItem.xib */; }; 3706FCD6293F65D500E42796 /* httpsMobileV2FalsePositives.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B67742A255DBEB800025BD8 /* httpsMobileV2FalsePositives.json */; }; + 3706FCD8293F65D500E42796 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 3706FCD9293F65D500E42796 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; @@ -1097,6 +1103,8 @@ 4B2D067C2A13340900DE1F49 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4BEC322A11B509001D9AC5 /* Logging.swift */; }; 4B2D067F2A1334D700DE1F49 /* NetworkProtectionUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */; }; 4B2E7D6326FF9D6500D2DB17 /* PrintingUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E7D6226FF9D6500D2DB17 /* PrintingUserScript.swift */; }; + 4B36CD362B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B36CD352B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift */; }; + 4B36CD372B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B36CD352B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift */; }; 4B379C1527BD91E3008A968E /* QuartzIdleStateProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C1427BD91E3008A968E /* QuartzIdleStateProvider.swift */; }; 4B379C1E27BDB7FF008A968E /* DeviceAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C1D27BDB7FF008A968E /* DeviceAuthenticator.swift */; }; 4B379C2227BDBA29008A968E /* LocalAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C2127BDBA29008A968E /* LocalAuthenticationService.swift */; }; @@ -1169,8 +1177,6 @@ 4B4D60E22A0C883A00BCD287 /* AppMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4D60E12A0C883A00BCD287 /* AppMain.swift */; }; 4B4D60E32A0C883A00BCD287 /* AppMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4D60E12A0C883A00BCD287 /* AppMain.swift */; }; 4B4F72EC266B2ED300814C60 /* CollectionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F72EB266B2ED300814C60 /* CollectionExtension.swift */; }; - 4B5293BA2B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B5293B92B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift */; }; - 4B5293BB2B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B5293B92B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift */; }; 4B59023D26B35F3600489384 /* ChromeDataImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B59023826B35F3600489384 /* ChromeDataImporter.swift */; }; 4B59023E26B35F3600489384 /* ChromiumLoginReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B59023926B35F3600489384 /* ChromiumLoginReader.swift */; }; 4B59024026B35F3600489384 /* ChromiumDataImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B59023B26B35F3600489384 /* ChromiumDataImporter.swift */; }; @@ -1413,6 +1419,7 @@ 4B9579D92AC7AE700062CA31 /* DownloadListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23526E732000031CB7F /* DownloadListItem.swift */; }; 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9DB00A2A983B24000927DB /* WaitlistRequest.swift */; }; 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6B1E87D26D5DA0E0062C350 /* DownloadsPopover.swift */; }; + 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92929626670D2A00AD2C21 /* SpacerNode.swift */; }; 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3775913529AB9A1C00E26367 /* SyncManagementDialogViewController.swift */; }; 4B9579E02AC7AE700062CA31 /* BookmarkExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0BB6629AEFF8100AE8E3C /* BookmarkExtension.swift */; }; @@ -1491,6 +1498,7 @@ 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B7184D27677CBB00B4277F /* RootView.swift */; }; 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABEE6AE24AD22B90043105B /* AddressBarTextField.swift */; }; 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693953E26F04BE70015B914 /* FocusRingView.swift */; }; + 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1E6EEF27AB5E5D00F51793 /* NSPopUpButtonView.swift */; }; 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9292DA2667125D00AD2C21 /* ContextualMenu.swift */; }; @@ -1712,6 +1720,7 @@ 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E47626146A570067D1B9 /* PixelEvent.swift */; }; 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2CB1342587C29500AA6FBE /* TabBarFooter.swift */; }; 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC111E5294D06290086524F /* JSAlertViewModel.swift */; }; + 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B23826E742610031CB7F /* FileDownloadError.swift */; }; 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E9F27BFE60E0038AD11 /* MoreOrLessView.swift */; }; 4B957B112AC7AE700062CA31 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A9E46F26146A250067D1B9 /* DateExtension.swift */; }; @@ -1749,12 +1758,14 @@ 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8EDF2624923EC70071C2E8 /* StringExtension.swift */; }; 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85378DA1274E7F25007C5CBF /* EmailManagerRequestDelegate.swift */; }; 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D43EB35292ACE690065E5D6 /* ApplicationVersionReader.swift */; }; + 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DE4BC27EA31AC002CC3DE /* PreferencesAutofillView.swift */; }; 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DCFBC8929ADF32B00313531 /* BurnerHomePageView.swift */; }; 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A797E26A79EAA00A75A42 /* UserText+PasswordManager.swift */; }; 4B957B382AC7AE700062CA31 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954026F04BE80015B914 /* ProgressView.swift */; }; 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B69B50362726A12000758A2B /* StatisticsStore.swift */; }; 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBDEE8C28FC14760092FAA6 /* BWInstallationService.swift */; }; + 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4D606F2A0B29FA00BCD287 /* NetworkProtectionInvitePresenter.swift */; }; 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693954626F04BEA0015B914 /* ColorView.swift */; }; 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5C1DD2285A217F0089850C /* RecentlyClosedCacheItem.swift */; }; @@ -1886,6 +1897,7 @@ 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFCE8027DA2CA600471A10 /* PreferencesViewController.swift */; }; 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B02198125E05FAC00ED7DEA /* FireproofDomains.swift */; }; 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B677440255DBEEA00025BD8 /* Database.swift */; }; + 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92928526670D1600AD2C21 /* BookmarksOutlineView.swift */; }; 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65482271FCD53008D1D63 /* CountryList.swift */; }; 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37CD54C427F2FDD100F1F7B9 /* PreferencesSection.swift */; }; @@ -1936,6 +1948,7 @@ 4B957BF52AC7AE700062CA31 /* clickToLoadConfig.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47767F272A21B700419EDA /* clickToLoadConfig.json */; }; 4B957BF62AC7AE700062CA31 /* Downloads.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6B1E88126D5DAC30062C350 /* Downloads.storyboard */; }; 4B957BF72AC7AE700062CA31 /* dark-shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396F2754D4E900B241FA /* dark-shield.json */; }; + 4B957BF82AC7AE700062CA31 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 4B957BF92AC7AE700062CA31 /* dark-shield-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6EA27E880AE00036718 /* dark-shield-mouse-over.json */; }; 4B957BFA2AC7AE700062CA31 /* autoconsent-bundle.js in Resources */ = {isa = PBXBuildFile; fileRef = B31055C327A1BA1D001AC618 /* autoconsent-bundle.js */; }; 4B957BFB2AC7AE700062CA31 /* ContentOverlay.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7B1E819C27C8874900FF0E60 /* ContentOverlay.storyboard */; }; @@ -1953,10 +1966,12 @@ 4B957C072AC7AE700062CA31 /* TabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA80EC7B256C46AA007083E7 /* TabBar.storyboard */; }; 4B957C082AC7AE700062CA31 /* shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396B2754D4E300B241FA /* shield-dot.json */; }; 4B957C0A2AC7AE700062CA31 /* Bookmarks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AAC5E4C625D6A6E8007F5990 /* Bookmarks.storyboard */; }; + 4B957C0B2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; 4B957C0C2AC7AE700062CA31 /* PrivacyDashboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6FA893C269C423100588ECD /* PrivacyDashboard.storyboard */; }; 4B957C0D2AC7AE700062CA31 /* shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396A2754D4E200B241FA /* shield.json */; }; 4B957C0E2AC7AE700062CA31 /* TabBarViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA7412B124D0B3AC00D22FE0 /* TabBarViewItem.xib */; }; 4B957C102AC7AE700062CA31 /* httpsMobileV2FalsePositives.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B67742A255DBEB800025BD8 /* httpsMobileV2FalsePositives.json */; }; + 4B957C112AC7AE700062CA31 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 4B957C122AC7AE700062CA31 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; @@ -2086,6 +2101,8 @@ 4BCF15EF2ABBDBFF0083F6DF /* NetworkProtectionRemoteMessaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15D62ABB8A110083F6DF /* NetworkProtectionRemoteMessaging.swift */; }; 4BCF15F02ABBDC010083F6DF /* NetworkProtectionRemoteMessagingStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15DA2ABB8CED0083F6DF /* NetworkProtectionRemoteMessagingStorage.swift */; }; 4BCF15F12ABBDC030083F6DF /* NetworkProtectionRemoteMessagingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF15DC2ABB8CFC0083F6DF /* NetworkProtectionRemoteMessagingRequest.swift */; }; + 4BD18F01283F0BC500058124 /* BookmarksBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */; }; + 4BD18F05283F151F00058124 /* BookmarksBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */; }; 4BD57C012AC0FF7500B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57BFF2AC0FC4E00B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift */; }; 4BD57C042AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */; }; 4BD57C052AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */; }; @@ -2095,6 +2112,10 @@ 4BE344EF2B23786F003FC223 /* VPNFeedbackFormViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */; }; 4BE4005327CF3DC3007D3161 /* SavePaymentMethodPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4005227CF3DC3007D3161 /* SavePaymentMethodPopover.swift */; }; 4BE4005527CF3F19007D3161 /* SavePaymentMethodViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4005427CF3F19007D3161 /* SavePaymentMethodViewController.swift */; }; + 4BE41A5E28446EAD00760399 /* BookmarksBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */; }; + 4BE5336B286912D40019DBFD /* BookmarksBarCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */; }; + 4BE5336C286912D40019DBFD /* BookmarksBarCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */; }; + 4BE5336E286915A10019DBFD /* HorizontallyCenteredLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */; }; 4BE53374286E39F10019DBFD /* ChromiumKeychainPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE53373286E39F10019DBFD /* ChromiumKeychainPrompt.swift */; }; 4BE65474271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6546E271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift */; }; 4BE65476271FCD41008D1D63 /* PasswordManagementCreditCardItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE65470271FCD40008D1D63 /* PasswordManagementCreditCardItemView.swift */; }; @@ -2250,6 +2271,7 @@ 85393C872A6FF1B600F11EB3 /* BookmarksBarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850E8DFA2A6FEC5E00691187 /* BookmarksBarAppearance.swift */; }; 8546DE6225C03056000CA5E1 /* UserAgentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8546DE6125C03056000CA5E1 /* UserAgentTests.swift */; }; 85480FCF25D1AA22009424E3 /* ConfigurationStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85480FCE25D1AA22009424E3 /* ConfigurationStore.swift */; }; + 854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 85589E7F27BBB8630038AD11 /* AddEditFavoriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7927BBB8620038AD11 /* AddEditFavoriteViewController.swift */; }; 85589E8127BBB8630038AD11 /* AddEditFavoriteViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85589E7B27BBB8630038AD11 /* AddEditFavoriteViewController.storyboard */; }; 85589E8227BBB8630038AD11 /* HomePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7C27BBB8630038AD11 /* HomePageView.swift */; }; @@ -2275,6 +2297,8 @@ 85707F2A276A35FE00DC0649 /* ActionSpeech.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F29276A35FE00DC0649 /* ActionSpeech.swift */; }; 85707F2C276A364E00DC0649 /* OnboardingFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F2B276A364E00DC0649 /* OnboardingFlow.swift */; }; 85707F31276A7DCA00DC0649 /* OnboardingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85707F30276A7DCA00DC0649 /* OnboardingViewModel.swift */; }; + 85774AFF2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; + 85774B002A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */; }; 85774B032A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 85774B042A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; }; 85799C1825DEBB3F0007EC87 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85799C1725DEBB3F0007EC87 /* Logging.swift */; }; @@ -2294,6 +2318,9 @@ 858A798A26A9B35E00A75A42 /* PasswordManagementItemModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */; }; 859E7D6B27453BF3009C2B69 /* BookmarksExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */; }; 859E7D6D274548F2009C2B69 /* BookmarksExporterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */; }; + 859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; + 859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; }; + 859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; }; 85A0116925AF1D8900FA6A0C /* FindInPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */; }; 85A0117425AF2EDF00FA6A0C /* FindInPage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */; }; 85A0118225AF60E700FA6A0C /* FindInPageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0118125AF60E700FA6A0C /* FindInPageModel.swift */; }; @@ -3340,6 +3367,7 @@ 4B2D06642A132F3A00DE1F49 /* NetworkProtectionAppExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetworkProtectionAppExtension.entitlements; sourceTree = ""; }; 4B2D06692A13318400DE1F49 /* DuckDuckGo VPN App Store.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DuckDuckGo VPN App Store.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 4B2E7D6226FF9D6500D2DB17 /* PrintingUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrintingUserScript.swift; sourceTree = ""; }; + 4B36CD352B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkProtectionSubscriptionEventHandler.swift; sourceTree = ""; }; 4B379C1427BD91E3008A968E /* QuartzIdleStateProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuartzIdleStateProvider.swift; sourceTree = ""; }; 4B379C1D27BDB7FF008A968E /* DeviceAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceAuthenticator.swift; sourceTree = ""; }; 4B379C2127BDBA29008A968E /* LocalAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthenticationService.swift; sourceTree = ""; }; @@ -3385,7 +3413,6 @@ 4B4D60D22A0C84F700BCD287 /* UserText+NetworkProtection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UserText+NetworkProtection.swift"; sourceTree = ""; }; 4B4D60E12A0C883A00BCD287 /* AppMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppMain.swift; sourceTree = ""; }; 4B4F72EB266B2ED300814C60 /* CollectionExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionExtension.swift; sourceTree = ""; }; - 4B5293B92B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkProtectionSubscriptionEventHandler.swift; sourceTree = ""; }; 4B59023826B35F3600489384 /* ChromeDataImporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChromeDataImporter.swift; sourceTree = ""; }; 4B59023926B35F3600489384 /* ChromiumLoginReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChromiumLoginReader.swift; sourceTree = ""; }; 4B59023B26B35F3600489384 /* ChromiumDataImporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChromiumDataImporter.swift; sourceTree = ""; }; @@ -3553,6 +3580,8 @@ 4BCF15DC2ABB8CFC0083F6DF /* NetworkProtectionRemoteMessagingRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingRequest.swift; sourceTree = ""; }; 4BCF15E42ABB98990083F6DF /* NetworkProtectionRemoteMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessageTests.swift; sourceTree = ""; }; 4BCF15E92ABB99470083F6DF /* network-protection-messages.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "network-protection-messages.json"; sourceTree = ""; }; + 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksBarViewController.swift; sourceTree = ""; }; + 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BookmarksBar.storyboard; sourceTree = ""; }; 4BD57BFF2AC0FC4E00B580EE /* NetworkProtectionRemoteMessagingStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingStorageTests.swift; sourceTree = ""; }; 4BD57C032AC112DF00B580EE /* NetworkProtectionRemoteMessagingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionRemoteMessagingTests.swift; sourceTree = ""; }; 4BDFA4AD27BF19E500648192 /* ToggleableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleableScrollView.swift; sourceTree = ""; }; @@ -3561,6 +3590,10 @@ 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNFeedbackFormViewModelTests.swift; sourceTree = ""; }; 4BE4005227CF3DC3007D3161 /* SavePaymentMethodPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePaymentMethodPopover.swift; sourceTree = ""; }; 4BE4005427CF3F19007D3161 /* SavePaymentMethodViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavePaymentMethodViewController.swift; sourceTree = ""; }; + 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarViewModel.swift; sourceTree = ""; }; + 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BookmarksBarCollectionViewItem.xib; sourceTree = ""; }; + 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksBarCollectionViewItem.swift; sourceTree = ""; }; + 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontallyCenteredLayout.swift; sourceTree = ""; }; 4BE53373286E39F10019DBFD /* ChromiumKeychainPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumKeychainPrompt.swift; sourceTree = ""; }; 4BE6546E271FCD40008D1D63 /* PasswordManagementIdentityItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordManagementIdentityItemView.swift; sourceTree = ""; }; 4BE65470271FCD40008D1D63 /* PasswordManagementCreditCardItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordManagementCreditCardItemView.swift; sourceTree = ""; }; @@ -3683,6 +3716,7 @@ 85707F29276A35FE00DC0649 /* ActionSpeech.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSpeech.swift; sourceTree = ""; }; 85707F2B276A364E00DC0649 /* OnboardingFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlow.swift; sourceTree = ""; }; 85707F30276A7DCA00DC0649 /* OnboardingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewModel.swift; sourceTree = ""; }; + 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarMenuFactory.swift; sourceTree = ""; }; 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockMenuItem.swift; sourceTree = ""; }; 85799C1725DEBB3F0007EC87 /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; 857E44612A9F6F3500ED77A7 /* CampaignVariantTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CampaignVariantTests.swift; sourceTree = ""; }; @@ -3698,6 +3732,8 @@ 858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordManagementItemModelTests.swift; sourceTree = ""; }; 859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporter.swift; sourceTree = ""; }; 859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporterTests.swift; sourceTree = ""; }; + 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarPromptPopover.swift; sourceTree = ""; }; + 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = BookmarksBarPromptAssets.xcassets; sourceTree = ""; }; 85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageViewController.swift; sourceTree = ""; }; 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = FindInPage.storyboard; sourceTree = ""; }; 85A0118125AF60E700FA6A0C /* FindInPageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageModel.swift; sourceTree = ""; }; @@ -5144,7 +5180,7 @@ children = ( 4BCF15D52ABB83D70083F6DF /* NetworkProtectionRemoteMessaging */, 7BA7CC4D2AD11F6F0042E5CE /* NetworkProtectionIPCTunnelController.swift */, - 4B5293B92B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift */, + 4B36CD352B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift */, ); path = DeveloperIDTarget; sourceTree = ""; @@ -5738,7 +5774,22 @@ path = Resources; sourceTree = ""; }; - 4BD18F02283F0F1000058124 /* VPNFeedbackForm */ = { + 4BD18F02283F0F1000058124 /* View */ = { + isa = PBXGroup; + children = ( + 859F30622A72A7A900C20372 /* Prompt */, + 4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */, + 4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */, + 4BD18F04283F151F00058124 /* BookmarksBar.storyboard */, + 4BE5336A286912D40019DBFD /* BookmarksBarCollectionViewItem.swift */, + 4BE53369286912D40019DBFD /* BookmarksBarCollectionViewItem.xib */, + 4BE5336D286915A10019DBFD /* HorizontallyCenteredLayout.swift */, + 85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */, + ); + path = View; + sourceTree = ""; + }; + 4BE344EC2B2376AE003FC223 /* VPNFeedbackForm */ = { isa = PBXGroup; children = ( 4BE344ED2B2376DF003FC223 /* VPNFeedbackFormViewModelTests.swift */, @@ -5768,7 +5819,7 @@ 4BFD356E283ADE8B00CE9234 /* BookmarksBar */ = { isa = PBXGroup; children = ( - 4BD18F02283F0F1000058124 /* VPNFeedbackForm */, + 4BD18F02283F0F1000058124 /* View */, 850E8DFA2A6FEC5E00691187 /* BookmarksBarAppearance.swift */, ); path = BookmarksBar; @@ -6044,6 +6095,15 @@ path = SecureVault; sourceTree = ""; }; + 859F30622A72A7A900C20372 /* Prompt */ = { + isa = PBXGroup; + children = ( + 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */, + 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */, + ); + path = Prompt; + sourceTree = ""; + }; 85A0115D25AF1C4700FA6A0C /* FindInPage */ = { isa = PBXGroup; children = ( @@ -6516,6 +6576,7 @@ 4B9DB04D2A983B55000927DB /* Waitlist */, 3776582B27F7163B009A6B35 /* WebsiteBreakageReport */, 376718FE28E58504003A2A15 /* YoutubePlayer */, + 4BE344EC2B2376AE003FC223 /* VPNFeedbackForm */, AA585D96248FD31400E9A3E2 /* Info.plist */, ); path = UnitTests; @@ -8531,6 +8592,7 @@ 3706FCBA293F65D500E42796 /* clickToLoadConfig.json in Resources */, 3706FCBB293F65D500E42796 /* Downloads.storyboard in Resources */, 3706FCBC293F65D500E42796 /* dark-shield.json in Resources */, + 854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */, 3706FCBD293F65D500E42796 /* dark-shield-mouse-over.json in Resources */, 3706FCBE293F65D500E42796 /* autoconsent-bundle.js in Resources */, 3706FCBF293F65D500E42796 /* ContentOverlay.storyboard in Resources */, @@ -8548,10 +8610,12 @@ 3706FCCC293F65D500E42796 /* TabBar.storyboard in Resources */, 3706FCCD293F65D500E42796 /* shield-dot.json in Resources */, 3706FCCF293F65D500E42796 /* Bookmarks.storyboard in Resources */, + 3706FCD0293F65D500E42796 /* BookmarksBarCollectionViewItem.xib in Resources */, 3706FCD1293F65D500E42796 /* PrivacyDashboard.storyboard in Resources */, 3706FCD2293F65D500E42796 /* shield.json in Resources */, 3706FCD4293F65D500E42796 /* TabBarViewItem.xib in Resources */, 3706FCD6293F65D500E42796 /* httpsMobileV2FalsePositives.json in Resources */, + 3706FCD8293F65D500E42796 /* BookmarksBar.storyboard in Resources */, 3706FCD9293F65D500E42796 /* trackers-1.json in Resources */, 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */, 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */, @@ -8662,6 +8726,7 @@ 4B957BF52AC7AE700062CA31 /* clickToLoadConfig.json in Resources */, 4B957BF62AC7AE700062CA31 /* Downloads.storyboard in Resources */, 4B957BF72AC7AE700062CA31 /* dark-shield.json in Resources */, + 4B957BF82AC7AE700062CA31 /* BookmarksBarPromptAssets.xcassets in Resources */, 4B957BF92AC7AE700062CA31 /* dark-shield-mouse-over.json in Resources */, 4B957BFA2AC7AE700062CA31 /* autoconsent-bundle.js in Resources */, 4B957BFB2AC7AE700062CA31 /* ContentOverlay.storyboard in Resources */, @@ -8679,10 +8744,12 @@ 4B957C072AC7AE700062CA31 /* TabBar.storyboard in Resources */, 4B957C082AC7AE700062CA31 /* shield-dot.json in Resources */, 4B957C0A2AC7AE700062CA31 /* Bookmarks.storyboard in Resources */, + 4B957C0B2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.xib in Resources */, 4B957C0C2AC7AE700062CA31 /* PrivacyDashboard.storyboard in Resources */, 4B957C0D2AC7AE700062CA31 /* shield.json in Resources */, 4B957C0E2AC7AE700062CA31 /* TabBarViewItem.xib in Resources */, 4B957C102AC7AE700062CA31 /* httpsMobileV2FalsePositives.json in Resources */, + 4B957C112AC7AE700062CA31 /* BookmarksBar.storyboard in Resources */, 4B957C122AC7AE700062CA31 /* trackers-1.json in Resources */, 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */, 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */, @@ -8762,6 +8829,7 @@ EA477680272A21B700419EDA /* clickToLoadConfig.json in Resources */, B6B1E88226D5DAC30062C350 /* Downloads.storyboard in Resources */, AA3439712754D4E900B241FA /* dark-shield.json in Resources */, + 859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */, AA7EB6EB27E880AE00036718 /* dark-shield-mouse-over.json in Resources */, B31055CB27A1BA1D001AC618 /* autoconsent-bundle.js in Resources */, 7B1E819F27C8874900FF0E60 /* ContentOverlay.storyboard in Resources */, @@ -8779,10 +8847,12 @@ AA80EC79256C46AA007083E7 /* TabBar.storyboard in Resources */, AA34396D2754D4E300B241FA /* shield-dot.json in Resources */, AAC5E4C925D6A6E8007F5990 /* Bookmarks.storyboard in Resources */, + 4BE5336B286912D40019DBFD /* BookmarksBarCollectionViewItem.xib in Resources */, B6FA893D269C423100588ECD /* PrivacyDashboard.storyboard in Resources */, AA34396C2754D4E300B241FA /* shield.json in Resources */, AA7412B324D0B3AC00D22FE0 /* TabBarViewItem.xib in Resources */, 4B677435255DBEB800025BD8 /* httpsMobileV2FalsePositives.json in Resources */, + 4BD18F05283F151F00058124 /* BookmarksBar.storyboard in Resources */, AA3439792754D55100B241FA /* trackers-1.json in Resources */, AA34397C2754D55100B241FA /* dark-trackers-1.json in Resources */, AA3863C527A1E28F00749AB5 /* Feedback.storyboard in Resources */, @@ -9161,6 +9231,7 @@ 3707C724294B5D2900682A9F /* StringExtension.swift in Sources */, 3706FA9F293F65D500E42796 /* FeedbackPresenter.swift in Sources */, 37A6A8F22AFCC988008580A3 /* FaviconsFetcherOnboarding.swift in Sources */, + 859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */, 37197EA22942441900394917 /* Tab+Dialogs.swift in Sources */, 3706FAA0293F65D500E42796 /* UserAgent.swift in Sources */, 3706FAA1293F65D500E42796 /* NSAlert+DataImport.swift in Sources */, @@ -9347,6 +9418,7 @@ 3706FB3B293F65D500E42796 /* RootView.swift in Sources */, 3706FB3C293F65D500E42796 /* AddressBarTextField.swift in Sources */, 3706FB3D293F65D500E42796 /* FocusRingView.swift in Sources */, + 3706FB3E293F65D500E42796 /* BookmarksBarViewModel.swift in Sources */, 3706FB3F293F65D500E42796 /* NSPopUpButtonView.swift in Sources */, 3706FB40293F65D500E42796 /* ContextualMenu.swift in Sources */, 3706FB41293F65D500E42796 /* NavigationBarViewController.swift in Sources */, @@ -9523,6 +9595,7 @@ 3706FBC6293F65D500E42796 /* MouseOverView.swift in Sources */, 4B9DB0212A983B24000927DB /* ProductWaitlistRequest.swift in Sources */, 56D145EC29E6C99B00E3488A /* DataImportStatusProviding.swift in Sources */, + 85774B002A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */, B602E81E2A1E25B1006D261F /* NEOnDemandRuleExtension.swift in Sources */, 3706FBC7293F65D500E42796 /* HistoryStore.swift in Sources */, 3706FBC8293F65D500E42796 /* FirePopoverCollectionViewItem.swift in Sources */, @@ -9588,6 +9661,7 @@ 3706FBF7293F65D500E42796 /* PixelEvent.swift in Sources */, 3706FBF8293F65D500E42796 /* TabBarFooter.swift in Sources */, B626A7612992407D00053070 /* CancellableExtension.swift in Sources */, + 3706FBF9293F65D500E42796 /* BookmarksBarCollectionViewItem.swift in Sources */, 3706FBFA293F65D500E42796 /* FileDownloadError.swift in Sources */, 379E877729E98729001C8BB0 /* BookmarksCleanupErrorHandling.swift in Sources */, 3706FBFB293F65D500E42796 /* MoreOrLessView.swift in Sources */, @@ -9635,6 +9709,7 @@ 3706FC1B293F65D500E42796 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */, 3706FC1D293F65D500E42796 /* EmailManagerRequestDelegate.swift in Sources */, 3706FC1E293F65D500E42796 /* ApplicationVersionReader.swift in Sources */, + 3706FC1F293F65D500E42796 /* BookmarksBarViewController.swift in Sources */, 3706FC20293F65D500E42796 /* PreferencesAutofillView.swift in Sources */, 3706FC21293F65D500E42796 /* UserText+PasswordManager.swift in Sources */, 3706FC22293F65D500E42796 /* ProgressView.swift in Sources */, @@ -9772,6 +9847,7 @@ 3706FC94293F65D500E42796 /* FireproofDomains.swift in Sources */, 3706FC95293F65D500E42796 /* Database.swift in Sources */, 3707C71B294B5D0F00682A9F /* AutofillTabExtension.swift in Sources */, + 3706FC96293F65D500E42796 /* HorizontallyCenteredLayout.swift in Sources */, 3706FC97293F65D500E42796 /* BookmarksOutlineView.swift in Sources */, 3706FC98293F65D500E42796 /* CountryList.swift in Sources */, 3706FC99293F65D500E42796 /* PreferencesSection.swift in Sources */, @@ -10260,7 +10336,6 @@ 4B95796C2AC7AE700062CA31 /* BurnerMode.swift in Sources */, 4B95796D2AC7AE700062CA31 /* UserAgent.swift in Sources */, 4B95796E2AC7AE700062CA31 /* LegacyBookmarkStore.swift in Sources */, - 4B5293BB2B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 4B95796F2AC7AE700062CA31 /* NSAlert+DataImport.swift in Sources */, 4B9579702AC7AE700062CA31 /* MainWindow.swift in Sources */, 4B9579712AC7AE700062CA31 /* CrashReportPromptViewController.swift in Sources */, @@ -10373,6 +10448,7 @@ 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */, 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */, 37A6A8F92AFCCA59008580A3 /* FaviconsFetcherOnboardingViewController.swift in Sources */, + 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */, 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */, B62B483C2ADE46FC000DECE5 /* Application.swift in Sources */, 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */, @@ -10458,6 +10534,7 @@ 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */, 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */, 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */, + 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */, 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */, 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */, 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */, @@ -10696,6 +10773,7 @@ 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */, 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */, 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */, + 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */, 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */, 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */, 4B957B112AC7AE700062CA31 /* DateExtension.swift in Sources */, @@ -10734,6 +10812,7 @@ 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */, 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */, 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */, + 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */, 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */, 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */, 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */, @@ -10742,6 +10821,7 @@ 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */, EEC4A66B2B2C87D300F7C0AA /* VPNLocationView.swift in Sources */, 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */, + 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */, 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */, 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */, 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */, @@ -10800,6 +10880,7 @@ 4B957B722AC7AE700062CA31 /* NSSizeExtension.swift in Sources */, 4B957B732AC7AE700062CA31 /* Fire.swift in Sources */, 4B957B742AC7AE700062CA31 /* SyncBookmarksAdapter.swift in Sources */, + 4B36CD372B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 4B957B752AC7AE700062CA31 /* RandomAccessCollectionExtension.swift in Sources */, 4B957B762AC7AE700062CA31 /* NSOutlineViewExtensions.swift in Sources */, 4B957B772AC7AE700062CA31 /* AppDelegate.swift in Sources */, @@ -10888,6 +10969,7 @@ 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */, 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */, 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */, + 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */, 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */, 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */, 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */, @@ -11110,6 +11192,7 @@ B6C0B23626E732000031CB7F /* DownloadListItem.swift in Sources */, 4B9DB0232A983B24000927DB /* WaitlistRequest.swift in Sources */, B6B1E87E26D5DA0E0062C350 /* DownloadsPopover.swift in Sources */, + 85774AFF2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift in Sources */, 4B9292A026670D2A00AD2C21 /* SpacerNode.swift in Sources */, 3775913629AB9A1C00E26367 /* SyncManagementDialogViewController.swift in Sources */, B6C0BB6729AEFF8100AE8E3C /* BookmarkExtension.swift in Sources */, @@ -11193,6 +11276,7 @@ 85B7184E27677CBB00B4277F /* RootView.swift in Sources */, AABEE6AF24AD22B90043105B /* AddressBarTextField.swift in Sources */, B693954C26F04BEB0015B914 /* FocusRingView.swift in Sources */, + 4BE41A5E28446EAD00760399 /* BookmarksBarViewModel.swift in Sources */, 4B1E6EF127AB5E5D00F51793 /* NSPopUpButtonView.swift in Sources */, 372A0FEC2B2379310033BF7F /* SyncMetricsEventsHandler.swift in Sources */, 85774B032A71CDD000DE0561 /* BlockMenuItem.swift in Sources */, @@ -11202,6 +11286,7 @@ 37F19A6A28E2F2D000740DC6 /* DuckPlayer.swift in Sources */, AA5FA69A275F91C700DCE9C9 /* Favicon.swift in Sources */, AABEE69A24A902A90043105B /* SuggestionContainerViewModel.swift in Sources */, + 4B36CD362B34E46900FBC707 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, AA840A9827319D1600E63CDD /* FirePopoverWrapperViewController.swift in Sources */, 4B85A48028821CC500FC4C39 /* NSPasteboardItemExtension.swift in Sources */, 37CD54CA27F2FDD100F1F7B9 /* AutofillPreferencesModel.swift in Sources */, @@ -11230,7 +11315,6 @@ B602E8162A1E2570006D261F /* URL+NetworkProtection.swift in Sources */, CB6BCDF927C6BEFF00CC76DC /* PrivacyFeatures.swift in Sources */, 378F44EB29B4C73E00899924 /* View+RoundedCorners.swift in Sources */, - 4B5293BA2B141974007860EB /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, B6DB3CF926A00E2D00D459B7 /* AVCaptureDevice+SwizzledAuthState.swift in Sources */, 1E0C72062ABC63BD00802009 /* SubscriptionPagesUserScript.swift in Sources */, AAAB9116288EB46B00A057A9 /* VisitMenuItem.swift in Sources */, @@ -11437,6 +11521,7 @@ B6A9E47726146A570067D1B9 /* PixelEvent.swift in Sources */, AA2CB1352587C29500AA6FBE /* TabBarFooter.swift in Sources */, EEC111E6294D06290086524F /* JSAlertViewModel.swift in Sources */, + 4BE5336C286912D40019DBFD /* BookmarksBarCollectionViewItem.swift in Sources */, B6C0B23926E742610031CB7F /* FileDownloadError.swift in Sources */, 85589EA027BFE60E0038AD11 /* MoreOrLessView.swift in Sources */, B6A9E47026146A250067D1B9 /* DateExtension.swift in Sources */, @@ -11478,6 +11563,7 @@ AA8EDF2724923EC70071C2E8 /* StringExtension.swift in Sources */, 85378DA2274E7F25007C5CBF /* EmailManagerRequestDelegate.swift in Sources */, 1D43EB36292ACE690065E5D6 /* ApplicationVersionReader.swift in Sources */, + 4BD18F01283F0BC500058124 /* BookmarksBarViewController.swift in Sources */, 379DE4BD27EA31AC002CC3DE /* PreferencesAutofillView.swift in Sources */, 1DCFBC8A29ADF32B00313531 /* BurnerHomePageView.swift in Sources */, 858A797F26A79EAA00A75A42 /* UserText+PasswordManager.swift in Sources */, @@ -11485,6 +11571,7 @@ B69B503C2726A12500758A2B /* StatisticsStore.swift in Sources */, 3158B14A2B0BF74300AF130C /* DataBrokerProtectionDebugMenu.swift in Sources */, 4BBDEE9128FC14760092FAA6 /* BWInstallationService.swift in Sources */, + 859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */, 4B4D60CA2A0C849600BCD287 /* NetworkProtectionInvitePresenter.swift in Sources */, B693955426F04BEC0015B914 /* ColorView.swift in Sources */, AA5C1DD3285A217F0089850C /* RecentlyClosedCacheItem.swift in Sources */, @@ -11623,6 +11710,7 @@ 37AFCE8127DA2CA600471A10 /* PreferencesViewController.swift in Sources */, 4B02198A25E05FAC00ED7DEA /* FireproofDomains.swift in Sources */, 4B677442255DBEEA00025BD8 /* Database.swift in Sources */, + 4BE5336E286915A10019DBFD /* HorizontallyCenteredLayout.swift in Sources */, 4B92928B26670D1700AD2C21 /* BookmarksOutlineView.swift in Sources */, 4BF01C00272AE74C00884A61 /* CountryList.swift in Sources */, 37CD54CC27F2FDD100F1F7B9 /* PreferencesSection.swift in Sources */, From b024422103abd193bd361d9ccf1a158128309a71 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:25:53 -0800 Subject: [PATCH 20/27] Fix a compiler error with the Privacy Pro target. --- DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift | 2 +- .../NetworkProtectionSubscriptionEventHandler.swift | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift b/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift index b6ea21c7e7..5a85c39762 100644 --- a/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift +++ b/DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift @@ -122,7 +122,7 @@ public final class BookmarkStoreMock: BookmarkStore { } var moveObjectUUIDCalled = false - func move(objectUUIDs: [String], toIndex: Int?, withinParentFolder: DuckDuckGo_Privacy_Browser.ParentFolderType, completion: @escaping (Error?) -> Void) { + func move(objectUUIDs: [String], toIndex: Int?, withinParentFolder: ParentFolderType, completion: @escaping (Error?) -> Void) { moveObjectUUIDCalled = true } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift index d66cafaf8c..0f0782dfee 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -62,7 +62,10 @@ final class NetworkProtectionSubscriptionEventHandler { @objc private func handleAccountDidSignOut() { print("[NetP Subscription] Deleted NetP auth token after signing out from Privacy Pro") - networkProtectionFeatureDisabler.disable(keepAuthToken: false, uninstallSystemExtension: false) + + Task { + await networkProtectionFeatureDisabler.disable(keepAuthToken: false, uninstallSystemExtension: false) + } } } From c517b1cab6e3fadae0a171ad5252402a0b0b6084 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:34:53 -0800 Subject: [PATCH 21/27] Fix SwiftLint. --- DuckDuckGo/Application/AppDelegate.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/DuckDuckGo/Application/AppDelegate.swift b/DuckDuckGo/Application/AppDelegate.swift index 5693a4b2bf..940dfc6439 100644 --- a/DuckDuckGo/Application/AppDelegate.swift +++ b/DuckDuckGo/Application/AppDelegate.swift @@ -188,6 +188,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel appIconChanger = AppIconChanger(internalUserDecider: internalUserDecider) } + // swiftlint:disable:next function_body_length func applicationDidFinishLaunching(_ notification: Notification) { guard NSApp.runType.requiresEnvironment else { return } defer { From cb505aba18ab3be23ba9983d06ee78daa144904d Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Thu, 21 Dec 2023 13:38:37 -0800 Subject: [PATCH 22/27] Reset the Privacy Pro scheme back to the main branch state. --- .../xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme index 0570ef6e22..92eea327b3 100644 --- a/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme +++ b/DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Pro.xcscheme @@ -15,7 +15,7 @@ @@ -44,7 +44,7 @@ @@ -61,7 +61,7 @@ From 04a16f34201358b6ce3f72ab7b2f686570071d64 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 24 Dec 2023 15:44:38 -0800 Subject: [PATCH 23/27] Resolve post-merge issues. --- DuckDuckGo.xcodeproj/project.pbxproj | 10 ++++++++-- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 4b185eebdc..93551e29be 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -1090,6 +1090,8 @@ 4B2D067C2A13340900DE1F49 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B4BEC322A11B509001D9AC5 /* Logging.swift */; }; 4B2D067F2A1334D700DE1F49 /* NetworkProtectionUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4B2D067E2A1334D700DE1F49 /* NetworkProtectionUI */; }; 4B2E7D6326FF9D6500D2DB17 /* PrintingUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E7D6226FF9D6500D2DB17 /* PrintingUserScript.swift */; }; + 4B2F565C2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B2F565B2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift */; }; + 4B2F565D2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B2F565B2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift */; }; 4B379C1527BD91E3008A968E /* QuartzIdleStateProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C1427BD91E3008A968E /* QuartzIdleStateProvider.swift */; }; 4B379C1E27BDB7FF008A968E /* DeviceAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C1D27BDB7FF008A968E /* DeviceAuthenticator.swift */; }; 4B379C2227BDBA29008A968E /* LocalAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B379C2127BDBA29008A968E /* LocalAuthenticationService.swift */; }; @@ -3393,6 +3395,7 @@ 4B2D06642A132F3A00DE1F49 /* NetworkProtectionAppExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetworkProtectionAppExtension.entitlements; sourceTree = ""; }; 4B2D06692A13318400DE1F49 /* DuckDuckGo VPN App Store.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DuckDuckGo VPN App Store.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 4B2E7D6226FF9D6500D2DB17 /* PrintingUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrintingUserScript.swift; sourceTree = ""; }; + 4B2F565B2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkProtectionSubscriptionEventHandler.swift; sourceTree = ""; }; 4B379C1427BD91E3008A968E /* QuartzIdleStateProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuartzIdleStateProvider.swift; sourceTree = ""; }; 4B379C1D27BDB7FF008A968E /* DeviceAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceAuthenticator.swift; sourceTree = ""; }; 4B379C2127BDBA29008A968E /* LocalAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthenticationService.swift; sourceTree = ""; }; @@ -5213,6 +5216,7 @@ children = ( 4BCF15D52ABB83D70083F6DF /* NetworkProtectionRemoteMessaging */, 7BA7CC4D2AD11F6F0042E5CE /* NetworkProtectionIPCTunnelController.swift */, + 4B2F565B2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift */, ); path = DeveloperIDTarget; sourceTree = ""; @@ -10830,6 +10834,7 @@ 4B957B052AC7AE700062CA31 /* FindInPageModel.swift in Sources */, 4B957B062AC7AE700062CA31 /* PseudoFolder.swift in Sources */, 4B957B072AC7AE700062CA31 /* Visit.swift in Sources */, + 4B2F565D2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 4B957B082AC7AE700062CA31 /* PixelDataStore.swift in Sources */, 4B957B092AC7AE700062CA31 /* WaitlistStorage.swift in Sources */, 4B957B0A2AC7AE700062CA31 /* Pixel.swift in Sources */, @@ -11243,6 +11248,7 @@ 1DFAB51D2A8982A600A0F7F6 /* SetExtension.swift in Sources */, 315AA07028CA5CC800200030 /* YoutubePlayerNavigationHandler.swift in Sources */, 37AFCE9227DB8CAD00471A10 /* PreferencesAboutView.swift in Sources */, + 4B2F565C2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, 9826B0A02747DF3D0092F683 /* ContentBlocking.swift in Sources */, 4B379C2227BDBA29008A968E /* LocalAuthenticationService.swift in Sources */, 37CEFCA92A6737A2001EF741 /* CredentialsCleanupErrorHandling.swift in Sources */, @@ -13043,8 +13049,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = exactVersion; - version = 99.0.2; + branch = "sam/add-netp-subscription-auth-support"; + kind = branch; }; }; AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2a122ea08a..b2abded710 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "revision" : "18043cbc24e5bb79aa1f44e01a367e0bccd2fa6e", - "version" : "99.0.2" + "branch" : "sam/add-netp-subscription-auth-support", + "revision" : "8dd2ee07f8651424db9711f5103a7c9fff60cd64" } }, { From c2ee46455c4ea4bba862485407f6df654a177138 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 24 Dec 2023 15:49:08 -0800 Subject: [PATCH 24/27] Fix Privacy Pro build. --- DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift index 41b0b70a02..e39d858301 100644 --- a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift @@ -28,6 +28,7 @@ import NetworkProtectionUI #endif #if SUBSCRIPTION +import Account import SubscriptionUI #endif From 66c11b9ca7c514aecb02369f8779cf18bf8db9ff Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 24 Dec 2023 15:56:05 -0800 Subject: [PATCH 25/27] Fix the Privacy Pro build, attempt #2. --- .../NavigationBar/View/NavigationBarViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift index e39d858301..933ff3df51 100644 --- a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift @@ -28,7 +28,7 @@ import NetworkProtectionUI #endif #if SUBSCRIPTION -import Account +import Subscription import SubscriptionUI #endif @@ -336,7 +336,7 @@ final class NavigationBarViewController: NSViewController { let accountManager = AccountManager() let networkProtectionTokenStorage = NetworkProtectionKeychainTokenStore() - if accountManager.token != nil && (try? networkProtectionTokenStorage.fetchToken()) == nil { + if accountManager.authToken != nil && (try? networkProtectionTokenStorage.fetchToken()) == nil { print("[NetP Subscription] Got access token but not auth token, meaning token exchange failed") return } From a4a6d0e97925ecd8e0dd52a0513e80335c4f51a3 Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 24 Dec 2023 16:00:47 -0800 Subject: [PATCH 26/27] Rename token to accessToken. --- .../NavigationBar/View/NavigationBarViewController.swift | 2 +- .../NetworkProtectionSubscriptionEventHandler.swift | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift index 933ff3df51..fb8f9bff1f 100644 --- a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift @@ -336,7 +336,7 @@ final class NavigationBarViewController: NSViewController { let accountManager = AccountManager() let networkProtectionTokenStorage = NetworkProtectionKeychainTokenStore() - if accountManager.authToken != nil && (try? networkProtectionTokenStorage.fetchToken()) == nil { + if accountManager.accessToken != nil && (try? networkProtectionTokenStorage.fetchToken()) == nil { print("[NetP Subscription] Got access token but not auth token, meaning token exchange failed") return } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift index 0f0782dfee..7ad69d346b 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/DeveloperIDTarget/NetworkProtectionSubscriptionEventHandler.swift @@ -19,17 +19,17 @@ #if NETWORK_PROTECTION && SUBSCRIPTION import Foundation -import Account +import Subscription import NetworkProtection final class NetworkProtectionSubscriptionEventHandler { - private let accountManager: Account.AccountManaging + private let accountManager: AccountManaging private let networkProtectionRedemptionCoordinator: NetworkProtectionCodeRedeeming private let networkProtectionTokenStorage: NetworkProtectionTokenStore private let networkProtectionFeatureDisabler: NetworkProtectionFeatureDisabling - init(accountManager: Account.AccountManaging = Account.AccountManager(), + init(accountManager: AccountManaging = AccountManager(), networkProtectionRedemptionCoordinator: NetworkProtectionCodeRedeeming = NetworkProtectionCodeRedemptionCoordinator(), networkProtectionTokenStorage: NetworkProtectionTokenStore = NetworkProtectionKeychainTokenStore(), networkProtectionFeatureDisabler: NetworkProtectionFeatureDisabling = NetworkProtectionFeatureDisabler()) { @@ -45,7 +45,7 @@ final class NetworkProtectionSubscriptionEventHandler { } @objc private func handleAccountDidSignIn() { - guard let token = accountManager.token else { + guard let token = accountManager.accessToken else { assertionFailure("[NetP Subscription] AccountManager signed in but token could not be retrieved") return } From dcb60d0846f10da3afd14bb3b08b37877b15268c Mon Sep 17 00:00:00 2001 From: Sam Symons Date: Sun, 24 Dec 2023 16:09:46 -0800 Subject: [PATCH 27/27] Set BSK to 100.0.0. --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- LocalPackages/DataBrokerProtection/Package.swift | 2 +- LocalPackages/LoginItems/Package.swift | 2 +- LocalPackages/NetworkProtectionMac/Package.swift | 2 +- LocalPackages/PixelKit/Package.swift | 2 +- LocalPackages/Subscription/Package.swift | 2 +- LocalPackages/SwiftUIExtensions/Package.swift | 2 +- LocalPackages/SyncUI/Package.swift | 2 +- LocalPackages/SystemExtensionManager/Package.swift | 2 +- LocalPackages/XPCHelper/Package.swift | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 93551e29be..be147b4f12 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -13049,8 +13049,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - branch = "sam/add-netp-subscription-auth-support"; - kind = branch; + kind = exactVersion; + version = 100.0.0; }; }; AA06B6B52672AF8100F541C5 /* XCRemoteSwiftPackageReference "Sparkle" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index b2abded710..96ffc4f465 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "branch" : "sam/add-netp-subscription-auth-support", - "revision" : "8dd2ee07f8651424db9711f5103a7c9fff60cd64" + "revision" : "c3a482a4ca22d706207d08a68db8f23f0c262040", + "version" : "100.0.0" } }, { diff --git a/LocalPackages/DataBrokerProtection/Package.swift b/LocalPackages/DataBrokerProtection/Package.swift index 367711f3cb..4794e9e768 100644 --- a/LocalPackages/DataBrokerProtection/Package.swift +++ b/LocalPackages/DataBrokerProtection/Package.swift @@ -29,7 +29,7 @@ let package = Package( targets: ["DataBrokerProtection"]) ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), .package(path: "../PixelKit"), .package(path: "../SwiftUIExtensions"), .package(path: "../XPCHelper") diff --git a/LocalPackages/LoginItems/Package.swift b/LocalPackages/LoginItems/Package.swift index f9f32c0b06..e937cc86e2 100644 --- a/LocalPackages/LoginItems/Package.swift +++ b/LocalPackages/LoginItems/Package.swift @@ -13,7 +13,7 @@ let package = Package( ), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ .target( diff --git a/LocalPackages/NetworkProtectionMac/Package.swift b/LocalPackages/NetworkProtectionMac/Package.swift index 661052b917..ae7d1f94b5 100644 --- a/LocalPackages/NetworkProtectionMac/Package.swift +++ b/LocalPackages/NetworkProtectionMac/Package.swift @@ -30,7 +30,7 @@ let package = Package( .library(name: "NetworkProtectionUI", targets: ["NetworkProtectionUI"]) ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), .package(path: "../XPCHelper"), .package(path: "../SwiftUIExtensions") ], diff --git a/LocalPackages/PixelKit/Package.swift b/LocalPackages/PixelKit/Package.swift index f84c9c457f..fc9e1e4e96 100644 --- a/LocalPackages/PixelKit/Package.swift +++ b/LocalPackages/PixelKit/Package.swift @@ -20,7 +20,7 @@ let package = Package( ) ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ .target( diff --git a/LocalPackages/Subscription/Package.swift b/LocalPackages/Subscription/Package.swift index ed2768e73d..c7d45ec7a4 100644 --- a/LocalPackages/Subscription/Package.swift +++ b/LocalPackages/Subscription/Package.swift @@ -12,7 +12,7 @@ let package = Package( targets: ["Subscription"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ .target( diff --git a/LocalPackages/SwiftUIExtensions/Package.swift b/LocalPackages/SwiftUIExtensions/Package.swift index c15221a974..a669a83fce 100644 --- a/LocalPackages/SwiftUIExtensions/Package.swift +++ b/LocalPackages/SwiftUIExtensions/Package.swift @@ -13,7 +13,7 @@ let package = Package( ), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ .target( diff --git a/LocalPackages/SyncUI/Package.swift b/LocalPackages/SyncUI/Package.swift index dae7ebfe0d..9f7d02d9a8 100644 --- a/LocalPackages/SyncUI/Package.swift +++ b/LocalPackages/SyncUI/Package.swift @@ -13,7 +13,7 @@ let package = Package( ], dependencies: [ .package(path: "../SwiftUIExtensions"), - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ .target( diff --git a/LocalPackages/SystemExtensionManager/Package.swift b/LocalPackages/SystemExtensionManager/Package.swift index f4891de858..0678143ab0 100644 --- a/LocalPackages/SystemExtensionManager/Package.swift +++ b/LocalPackages/SystemExtensionManager/Package.swift @@ -16,7 +16,7 @@ let package = Package( ), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ // Targets are the basic building blocks of a package, defining a module or a test suite. diff --git a/LocalPackages/XPCHelper/Package.swift b/LocalPackages/XPCHelper/Package.swift index dcedd7be38..4a76947d8b 100644 --- a/LocalPackages/XPCHelper/Package.swift +++ b/LocalPackages/XPCHelper/Package.swift @@ -30,7 +30,7 @@ let package = Package( .library(name: "XPCHelper", targets: ["XPCHelper"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "99.0.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "100.0.0"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite.