Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Commit d496b2c

Browse files
authored
Fire Button, simplified (#1320)
Task/Issue URL: https://app.asana.com/0/1142021229838617/1204935764841103/f CC: **Description**: We have decided to simplify the Fire Button with the following changes: 1. Adjust the scope of the Fire Button (and Fireproofing) to eTLD+1 domains. It means that burning [duckduckgo.com](https://duckduckgo.com/) will burn all its subdomains. If you fireproof [login.duckduckgo.com](https://login.duckduckgo.com/), it will fireproof the entire [duckduckgo.com](https://duckduckgo.com/) domain tree. _For more information, refer to [Change Fire Button and fireproofing scope to eTLD+1](https://app.asana.com/0/0/1204638259406450)._ 2. Close the window or tab completely when burning, instead of keeping tabs with fireproof domains open. _For additional details, see [Fire button clearing and closing logic refinement](https://app.asana.com/0/0/1204658078836158)_ 3. Burn history related only to the burning window/tab, instead of burning the entire history related to selected domains. _More information can be found in [Fire button clearing and closing logic refinement](https://app.asana.com/0/0/1204658078836158)_
1 parent c45aa91 commit d496b2c

File tree

54 files changed

+1124
-762
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1124
-762
lines changed

DuckDuckGo.xcodeproj/project.pbxproj

+18
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
1D36E659298AA3BA00AA485D /* InternalUserDeciderStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D36E657298AA3BA00AA485D /* InternalUserDeciderStore.swift */; };
3232
1D36E65B298ACD2900AA485D /* AppIconChanger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D36E65A298ACD2900AA485D /* AppIconChanger.swift */; };
3333
1D36E65C298ACD2900AA485D /* AppIconChanger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D36E65A298ACD2900AA485D /* AppIconChanger.swift */; };
34+
1D36F4242A3B85C50052B527 /* TabCleanupPreparer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D36F4232A3B85C50052B527 /* TabCleanupPreparer.swift */; };
35+
1D36F4252A3B85C50052B527 /* TabCleanupPreparer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D36F4232A3B85C50052B527 /* TabCleanupPreparer.swift */; };
3436
1D3B1AB92934062B006F4388 /* PasswordManagerCoordinatingMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3B1AB82934062B006F4388 /* PasswordManagerCoordinatingMock.swift */; };
3537
1D3B1ABF29369FC8006F4388 /* BWEncryptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3B1ABE29369FC8006F4388 /* BWEncryptionTests.swift */; };
3638
1D3B1AC22936B816006F4388 /* BWMessageIdGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3B1AC12936B816006F4388 /* BWMessageIdGeneratorTests.swift */; };
@@ -56,6 +58,10 @@
5658
1D7D5B7129CA04560054A4DC /* BurnerWindowPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D7D5B6929C9DED80054A4DC /* BurnerWindowPopover.swift */; };
5759
1D8B7D6A2A38BF050045C6F6 /* FireproofDomainsStoreMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BBF1712744CE36004F850E /* FireproofDomainsStoreMock.swift */; };
5860
1D8B7D6B2A38BF060045C6F6 /* FireproofDomainsStoreMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BBF1712744CE36004F850E /* FireproofDomainsStoreMock.swift */; };
61+
1DA6D0FD2A1FF9A100540406 /* HTTPCookie.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA6D0FC2A1FF9A100540406 /* HTTPCookie.swift */; };
62+
1DA6D0FE2A1FF9A100540406 /* HTTPCookie.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA6D0FC2A1FF9A100540406 /* HTTPCookie.swift */; };
63+
1DA6D1022A1FFA3700540406 /* HTTPCookieTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA6D0FF2A1FF9DC00540406 /* HTTPCookieTests.swift */; };
64+
1DA6D1032A1FFA3B00540406 /* HTTPCookieTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA6D0FF2A1FF9DC00540406 /* HTTPCookieTests.swift */; };
5965
1DB9617A29F1D06D00CF5568 /* InternalUserDeciderMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB9617929F1D06D00CF5568 /* InternalUserDeciderMock.swift */; };
6066
1DB9617B29F1D06D00CF5568 /* InternalUserDeciderMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB9617929F1D06D00CF5568 /* InternalUserDeciderMock.swift */; };
6167
1DB9618229F67F6100CF5568 /* FaviconNullStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB9617F29F67F3E00CF5568 /* FaviconNullStore.swift */; };
@@ -2104,6 +2110,7 @@
21042110
1D1C36E529FB019C001FA40C /* HistoryTabExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryTabExtensionTests.swift; sourceTree = "<group>"; };
21052111
1D36E657298AA3BA00AA485D /* InternalUserDeciderStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalUserDeciderStore.swift; sourceTree = "<group>"; };
21062112
1D36E65A298ACD2900AA485D /* AppIconChanger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconChanger.swift; sourceTree = "<group>"; };
2113+
1D36F4232A3B85C50052B527 /* TabCleanupPreparer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabCleanupPreparer.swift; sourceTree = "<group>"; };
21072114
1D3B1AB82934062B006F4388 /* PasswordManagerCoordinatingMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordManagerCoordinatingMock.swift; sourceTree = "<group>"; };
21082115
1D3B1ABE29369FC8006F4388 /* BWEncryptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BWEncryptionTests.swift; sourceTree = "<group>"; };
21092116
1D3B1AC12936B816006F4388 /* BWMessageIdGeneratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BWMessageIdGeneratorTests.swift; sourceTree = "<group>"; };
@@ -2125,6 +2132,8 @@
21252132
1D77921928FDC79800BE0210 /* FaviconStoringMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconStoringMock.swift; sourceTree = "<group>"; };
21262133
1D77921C28FFF27C00BE0210 /* RunningApplicationCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunningApplicationCheck.swift; sourceTree = "<group>"; };
21272134
1D7D5B6929C9DED80054A4DC /* BurnerWindowPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurnerWindowPopover.swift; sourceTree = "<group>"; };
2135+
1DA6D0FC2A1FF9A100540406 /* HTTPCookie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPCookie.swift; sourceTree = "<group>"; };
2136+
1DA6D0FF2A1FF9DC00540406 /* HTTPCookieTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPCookieTests.swift; sourceTree = "<group>"; };
21282137
1DB9617929F1D06D00CF5568 /* InternalUserDeciderMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalUserDeciderMock.swift; sourceTree = "<group>"; };
21292138
1DB9617F29F67F3E00CF5568 /* FaviconNullStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconNullStore.swift; sourceTree = "<group>"; };
21302139
1DCFBC8929ADF32B00313531 /* BurnerHomePageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurnerHomePageView.swift; sourceTree = "<group>"; };
@@ -5207,6 +5216,7 @@
52075216
children = (
52085217
8511E18325F82B34002F516B /* 01_Fire_really_small.json */,
52095218
AA6820EA25503D6A005ED0D5 /* Fire.swift */,
5219+
1D36F4232A3B85C50052B527 /* TabCleanupPreparer.swift */,
52105220
);
52115221
path = Model;
52125222
sourceTree = "<group>";
@@ -5800,6 +5810,7 @@
58005810
B63D467025BFA6C100874977 /* DispatchQueueExtensions.swift */,
58015811
B6E61EE2263AC0C8004E11AB /* FileManagerExtension.swift */,
58025812
B634DBE6293C98C500C3C99E /* FutureExtension.swift */,
5813+
1DA6D0FC2A1FF9A100540406 /* HTTPCookie.swift */,
58035814
AAECA41F24EEA4AC00EFA63A /* IndexPathExtension.swift */,
58045815
0230C0A2272080090018F728 /* KeyedCodingExtension.swift */,
58055816
4B8D9061276D1D880078DB17 /* LocaleExtension.swift */,
@@ -5971,6 +5982,7 @@
59715982
4B4F72EB266B2ED300814C60 /* CollectionExtension.swift */,
59725983
B65349A9265CF45000DCC645 /* DispatchQueueExtensionsTests.swift */,
59735984
B67C6C462654C643006C872E /* FileManagerExtensionTests.swift */,
5985+
1DA6D0FF2A1FF9DC00540406 /* HTTPCookieTests.swift */,
59745986
B6C0B24526E9CB190031CB7F /* RunLoopExtensionTests.swift */,
59755987
AADE11BF26D916D70032D8A7 /* StringExtensionTests.swift */,
59765988
85F69B3B25EDE81F00978E59 /* URLExtensionTests.swift */,
@@ -7527,6 +7539,7 @@
75277539
37197EA72942443D00394917 /* AuthenticationAlert.swift in Sources */,
75287540
3706FEC3293F6F0600E42796 /* BWCommunicator.swift in Sources */,
75297541
3706FAFA293F65D500E42796 /* CleanThisHistoryMenuItem.swift in Sources */,
7542+
1DA6D0FE2A1FF9A100540406 /* HTTPCookie.swift in Sources */,
75307543
3706FAFB293F65D500E42796 /* TimedPixel.swift in Sources */,
75317544
3706FAFC293F65D500E42796 /* DownloadListItem.swift in Sources */,
75327545
3706FAFD293F65D500E42796 /* DownloadsPopover.swift in Sources */,
@@ -7703,6 +7716,7 @@
77037716
4B4D60BE2A0C848A00BCD287 /* NetworkProtection+ConvenienceInitializers.swift in Sources */,
77047717
3706FB95293F65D500E42796 /* PermissionType.swift in Sources */,
77057718
3706FB96293F65D500E42796 /* RecentlyClosedWindow.swift in Sources */,
7719+
1D36F4252A3B85C50052B527 /* TabCleanupPreparer.swift in Sources */,
77067720
3706FB97293F65D500E42796 /* ActionSpeech.swift in Sources */,
77077721
3706FB99293F65D500E42796 /* PrivacySecurityPreferences.swift in Sources */,
77087722
B6AFE6BD29A5D621002FF962 /* HTTPSUpgradeTabExtension.swift in Sources */,
@@ -8134,6 +8148,7 @@
81348148
3706FE42293F661700E42796 /* BWMessageIdGeneratorTests.swift in Sources */,
81358149
3706FE43293F661700E42796 /* TestDataModel.xcdatamodeld in Sources */,
81368150
3706FE44293F661700E42796 /* GeolocationServiceTests.swift in Sources */,
8151+
1DA6D1032A1FFA3B00540406 /* HTTPCookieTests.swift in Sources */,
81378152
3706FE45293F661700E42796 /* ProgressEstimationTests.swift in Sources */,
81388153
3706FE46293F661700E42796 /* EncryptedValueTransformerTests.swift in Sources */,
81398154
3706FE47293F661700E42796 /* URLExtensionTests.swift in Sources */,
@@ -8552,6 +8567,7 @@
85528567
9826B0A02747DF3D0092F683 /* ContentBlocking.swift in Sources */,
85538568
4B379C2227BDBA29008A968E /* LocalAuthenticationService.swift in Sources */,
85548569
4BB99D0326FE191E001E4761 /* SafariBookmarksReader.swift in Sources */,
8570+
1DA6D0FD2A1FF9A100540406 /* HTTPCookie.swift in Sources */,
85558571
AACF6FD626BC366D00CF09F9 /* SafariVersionReader.swift in Sources */,
85568572
4BE65485271FCD7B008D1D63 /* LoginFaviconView.swift in Sources */,
85578573
4B0511CA262CAA5A00F6079C /* FireproofDomainsViewController.swift in Sources */,
@@ -8968,6 +8984,7 @@
89688984
4B59024126B35F3600489384 /* BraveDataImporter.swift in Sources */,
89698985
B6A9E46B2614618A0067D1B9 /* OperatingSystemVersionExtension.swift in Sources */,
89708986
4BDFA4AE27BF19E500648192 /* ToggleableScrollView.swift in Sources */,
8987+
1D36F4242A3B85C50052B527 /* TabCleanupPreparer.swift in Sources */,
89718988
4B4D60DF2A0C875F00BCD287 /* NetworkProtectionSharedState.swift in Sources */,
89728989
85AC3AEF25D5CE9800C7D2AA /* UserScripts.swift in Sources */,
89738990
B643BF1427ABF772000BACEC /* NSWorkspaceExtension.swift in Sources */,
@@ -9174,6 +9191,7 @@
91749191
B693955F26F1C17F0015B914 /* DownloadListCoordinatorTests.swift in Sources */,
91759192
1D3B1AC22936B816006F4388 /* BWMessageIdGeneratorTests.swift in Sources */,
91769193
B6C2C9F62760B659005B7F0A /* TestDataModel.xcdatamodeld in Sources */,
9194+
1DA6D1022A1FFA3700540406 /* HTTPCookieTests.swift in Sources */,
91779195
B68172AE269EB43F006D1092 /* GeolocationServiceTests.swift in Sources */,
91789196
B6AE74342609AFCE005B9B1A /* ProgressEstimationTests.swift in Sources */,
91799197
4BA1A6FE258C5C1300F6F690 /* EncryptedValueTransformerTests.swift in Sources */,

DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Browser App Store.xcscheme

+3
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@
9999
<Test
100100
Identifier = "CBRCompileTimeReporterTests">
101101
</Test>
102+
<Test
103+
Identifier = "FireproofingReferenceTests/testFireproofing()">
104+
</Test>
102105
<Test
103106
Identifier = "PixelStoreTests/testWhenValuesAreAddedThenCallbacksAreCalled()">
104107
</Test>

DuckDuckGo.xcodeproj/xcshareddata/xcschemes/DuckDuckGo Privacy Browser.xcscheme

+3
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@
100100
<Test
101101
Identifier = "CBRCompileTimeReporterTests">
102102
</Test>
103+
<Test
104+
Identifier = "FireproofingReferenceTests/testFireproofing()">
105+
</Test>
103106
<Test
104107
Identifier = "PixelStoreTests/testWhenValuesAreAddedThenCallbacksAreCalled()">
105108
</Test>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// HTTPCookie.swift
3+
//
4+
// Copyright © 2023 DuckDuckGo. All rights reserved.
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
19+
import Foundation
20+
21+
extension HTTPCookie {
22+
23+
func belongsTo(_ eTLDPlus1Domain: String) -> Bool {
24+
let cookieDomain = self.domain
25+
26+
// Check if the cookie's domain is the same as the given eTLD+1 domain
27+
if cookieDomain == eTLDPlus1Domain { return true }
28+
29+
// Check if the cookie's domain is a subdomain of the given eTLD+1 domain
30+
if cookieDomain.hasSuffix(".\(eTLDPlus1Domain)") { return true }
31+
32+
return false
33+
}
34+
35+
}

DuckDuckGo/Common/Localizables/UserText.swift

+21-4
Original file line numberDiff line numberDiff line change
@@ -127,17 +127,34 @@ struct UserText {
127127
static let fireDialogFireproofSites = NSLocalizedString("fire.dialog.fireproof.sites", value: "Fireproof sites won't be cleared", comment: "Category of domains in fire button dialog")
128128
static let fireDialogClearSites = NSLocalizedString("fire.dialog.clear.sites", value: "Selected sites will be cleared", comment: "Category of domains in fire button dialog")
129129
static let allData = NSLocalizedString("fire.all-sites", value: "All sites", comment: "Configuration option for fire button")
130-
static let currentSite = NSLocalizedString("fire.currentSite", value: "Current site", comment: "Configuration option for fire button")
131130
static let currentTab = NSLocalizedString("fire.currentTab", value: "All sites visited in current tab", comment: "Configuration option for fire button")
132131
static let currentWindow = NSLocalizedString("fire.currentWindow", value: "All sites visited in current window", comment: "Configuration option for fire button")
133132
static let allDataDescription = NSLocalizedString("fire.all-data.description", value: "Clear all tabs and related site data", comment: "Description of the 'All Data' configuration option for the fire button")
134133
static let currentWindowDescription = NSLocalizedString("fire.current-window.description", value: "Clear current window and related site data", comment: "Description of the 'Current Window' configuration option for the fire button")
135-
static let selectedDomainsDescription = NSLocalizedString("fire.selected-domains.description", value: "Clear selected domains and related site data", comment: "Description of the 'Current Window' configuration option for the fire button")
134+
static let selectedDomainsDescription = NSLocalizedString("fire.selected-domains.description", value: "Clear data only for selected domains", comment: "Description of the 'Current Window' configuration option for the fire button")
135+
static let selectSiteToClear = NSLocalizedString("fire.select-site-to-clear", value: "Select a site to clear its data.", comment: "Info label in the fire button popover")
136+
static func activeTabsInfo(tabs: Int, sites: Int) -> String {
137+
let siteString = sites == 1 ? "site" : "sites"
138+
let tabsString = tabs == 1 ? "tab" : "tabs"
139+
let localized = NSLocalizedString("fire.active-tabs-info",
140+
value: "Close %d active %@ and clear all browsing history and cookies (%d %@).",
141+
comment: "Info in the Fire Button popover")
142+
return String(format: localized, tabs, tabsString, sites, siteString)
143+
}
144+
static func oneTabInfo(sites: Int) -> String {
145+
let siteString = sites == 1 ? "site" : "sites"
146+
let localized = NSLocalizedString("fire.one-tab-info",
147+
value: "Close this tab and clear its browsing history and cookies (%d %@).",
148+
comment: "Info in the Fire Button popover")
149+
return String(format: localized, sites, siteString)
150+
}
136151
static let fireDialogNothingToBurn = NSLocalizedString("fire.dialog.nothing-to-burn", value: "No data to clear", comment: "Information label to inform there is no domain for burning")
137152
static let fireDialogSiteIsFireproof = NSLocalizedString("fire.dialog.site-is-fireproof", value: "Nothing to clear. This is one of your Fireproof Sites.", comment: "Information label to inform that a fireproof website won't be burned")
138153
static let fireDialogDetails = NSLocalizedString("fire.dialog.details", value: "Details", comment: "Button to show more details")
139-
static let fireDialogAllTabsWillClose = NSLocalizedString("fire.dialog.all-tabs-will-close", value: "All tabs open to selected sites will close", comment: "Warning label shown in an expanded view of the fire popover")
140-
static let fireDialogAllUnpinnedTabsWillClose = NSLocalizedString("fire.dialog.all-unpinned-tabs-will-close", value: "All unpinned tabs open to selected sites will close", comment: "Warning label shown in an expanded view of the fire popover")
154+
static let fireDialogWindowWillClose = NSLocalizedString("fire.dialog.window-will-close", value: "Current window will close", comment: "Warning label shown in an expanded view of the fire popover")
155+
static let fireDialogTabWillClose = NSLocalizedString("fire.dialog.tab-will-close", value: "Current tab will close", comment: "Warning label shown in an expanded view of the fire popover")
156+
static let fireDialogPinnedTabWillReload = NSLocalizedString("fire.dialog.tab-will-reload", value: "Pinned tab will reload", comment: "Warning label shown in an expanded view of the fire popover")
157+
static let fireDialogAllWindowsWillClose = NSLocalizedString("fire.dialog.all-windows-will-close", value: "All windows will close", comment: "Warning label shown in an expanded view of the fire popover")
141158
static let fireproofSite = NSLocalizedString("options.menu.fireproof-site", value: "Fireproof This Site", comment: "Context menu item")
142159
static let removeFireproofing = NSLocalizedString("options.menu.remove-fireproofing", value: "Remove Fireproofing", comment: "Context menu item")
143160
static let fireproof = NSLocalizedString("fireproof", value: "Fireproof", comment: "Fireproof button")

DuckDuckGo/Common/Utilities/UserDefaultsWrapper.swift

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public struct UserDefaultsWrapper<T> {
3434
case configFBConfigEtag = "config.storage.fbconfig.etag"
3535

3636
case fireproofDomains = "com.duckduckgo.fireproofing.allowedDomains"
37+
case areDomainsMigratedToETLDPlus1 = "com.duckduckgo.are-domains-migrated-to-etldplus1"
3738
case unprotectedDomains = "com.duckduckgo.contentblocker.unprotectedDomains"
3839
case contentBlockingRulesCache = "com.duckduckgo.contentblocker.rules.cache"
3940

DuckDuckGo/Favicons/Model/FaviconImageCache.swift

+9-4
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,20 @@ final class FaviconImageCache {
120120
}, completionHandler: completion)
121121
}
122122

123-
func burnDomains(_ domains: Set<String>,
123+
func burnDomains(_ baseDomains: Set<String>,
124124
exceptBookmarks bookmarkManager: BookmarkManager,
125-
exceptSavedLogins: Set<String>,
125+
exceptSavedLogins logins: Set<String>,
126+
exceptHistoryDomains history: Set<String>,
127+
tld: TLD,
126128
completion: @escaping () -> Void) {
127129
removeFavicons(filter: { favicon in
128-
guard let host = favicon.documentUrl.host else {
130+
guard let host = favicon.documentUrl.host, let baseDomain = tld.eTLDplus1(host) else {
129131
return false
130132
}
131-
return domains.contains(host) && !bookmarkManager.isHostInBookmarks(host: host) && !exceptSavedLogins.contains(host)
133+
return baseDomains.contains(baseDomain) &&
134+
!bookmarkManager.isHostInBookmarks(host: host) &&
135+
!logins.contains(host) &&
136+
!history.contains(host)
132137
}, completionHandler: completion)
133138
}
134139

0 commit comments

Comments
 (0)