Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sabrina/disable contextual onboarding #3666

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5d200c0
Merge release/1.118.0 into main
daxmobile Dec 9, 2024
13fd870
BSK update for iOS system credential provider support (#3628)
amddg44 Dec 9, 2024
4bd587e
Adding pixel info for content blocking compilation performance tracki…
studiosutara Dec 9, 2024
5af0557
Merge branch 'release/1.118.0'
ayoy Dec 10, 2024
763dbb4
include config dir clearance in clean-app script (#3657)
mallexxx Dec 10, 2024
708655c
Malware protection 6: Malware integration (#3604)
mallexxx Dec 10, 2024
39ca01c
Merge release/1.118.0 into main
daxmobile Dec 11, 2024
da7b683
Add NewTabPagePixel and implement PrivacyStatsErrorHandler
ayoy Dec 9, 2024
6260d3d
Implement showLess and showMore and connect them to pixels
ayoy Dec 9, 2024
682ce67
Use top-level error for Pixel argument
ayoy Dec 9, 2024
237d31c
Move couldNotLoadDatabase pixel to NewTabPagePixel.swift
ayoy Dec 11, 2024
7854b22
Privacy Pro Free Trials - Models and API (#3641)
aataraxiaa Dec 11, 2024
2a6eb56
Add pixels for Privacy Stats on HTML NTP (#3659)
ayoy Dec 11, 2024
69f53e5
Merge branch 'release/1.118.0'
ayoy Dec 11, 2024
154efab
Merge release/1.118.0 into main
daxmobile Dec 12, 2024
f79b202
Replace NewTabPage tests folder reference with an Xcode file group (#…
ayoy Dec 12, 2024
880e065
Update BSK to latest (#3663)
miasma13 Dec 12, 2024
f17094d
Fix displaying multi-line custom background category names (#3664)
ayoy Dec 12, 2024
49d4654
Merge branch 'release/1.118.0'
ayoy Dec 13, 2024
1194e32
disable contextual onboarding
SabrinaTardio Dec 13, 2024
b00ef09
Merge branch 'main' into sabrina/disable-contextual-onboarding
SabrinaTardio Dec 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 54 additions & 10 deletions DuckDuckGo.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/duckduckgo/BrowserServicesKit",
"state" : {
"revision" : "155b47e287dfc9d5edb25b10da0bac8e638d08b7",
"version" : "219.0.0-1"
"revision" : "08c3dca42c5f943d45136823f264ba14bbcc0eb9",
"version" : "221.2.0"
}
},
{
"identity" : "content-scope-scripts",
"kind" : "remoteSourceControl",
"location" : "https://github.com/duckduckgo/content-scope-scripts",
"state" : {
"revision" : "c4bb146afdf0c7a93fb9a7d95b1cb255708a470d",
"version" : "6.41.0"
"revision" : "93ea6c3e771bc0b743b38cefbff548c10add9898",
"version" : "6.42.0"
}
},
{
Expand Down Expand Up @@ -104,8 +104,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/duckduckgo/privacy-dashboard",
"state" : {
"revision" : "49db79829dcb166b3524afdbc1c680890452ce1c",
"version" : "7.2.1"
"revision" : "022c845b06ace6a4aa712a4fa3e79da32193d5c6",
"version" : "7.4.0"
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/Application/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {

#if DEBUG
if NSApplication.runType.requiresEnvironment {
privacyStats = PrivacyStats(databaseProvider: PrivacyStatsDatabase())
privacyStats = PrivacyStats(databaseProvider: PrivacyStatsDatabase(), errorEvents: PrivacyStatsErrorHandler())
} else {
privacyStats = MockPrivacyStats()
}
Expand Down
1 change: 0 additions & 1 deletion DuckDuckGo/Bookmarks/Services/BookmarkStoreMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ final class BookmarkStoreMock: BookmarkStore, CustomDebugStringConvertible {
queue.append(contentsOf: folder.children)
}
}
var indexInFavoritesArray = 0
store?.save(entitiesAtIndices: entities.map { ($0, nil, nil) }, completion: { _ in })
}
}
Expand Down
2 changes: 2 additions & 0 deletions DuckDuckGo/Common/Extensions/URLExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,8 @@ extension URL {
return URL(string: "https://duckduckgo.com/duckduckgo-help-pages/sync-and-backup/password-manager-security/")!
}

static var maliciousSiteProtectionLearnMore = URL(string: "https://duckduckgo.com/duckduckgo-help-pages/privacy/phishing-and-malware-protection/")!

static var searchSettings: URL {
return URL(string: "https://duckduckgo.com/settings/")!
}
Expand Down
5 changes: 3 additions & 2 deletions DuckDuckGo/Common/Localizables/UserText.swift
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ struct UserText {
static let webProcessCrashPageMessage = NSLocalizedString("page.crash.message", value: "Try reloading the page or come back later.", comment: "Error page message text shown when a Web Page process had crashed")
static let sslErrorPageTabTitle = NSLocalizedString("ssl.error.page.tab.title", value: "Warning: Site May Be Insecure", comment: "Title shown in an error page tab that warn users of security risks on a website due to SSL issues")
static let phishingErrorPageTabTitle = NSLocalizedString("phishing.error.page.tab.title", value: "Warning: Site May Be Deceptive", comment: "Title shown in an error page tab that warn users of security risks on a website that has been flagged as Phishing.")
static let malwareErrorPageTabTitle = NSLocalizedString("malware.error.page.tab.title", value: "Warning: Site May Be Malicious", comment: "Title shown in an error page tab that warn users of security risks on a website that has been flagged as Malware.")

static let openSystemPreferences = NSLocalizedString("open.preferences", value: "Open System Preferences", comment: "Open System Preferences (to re-enable permission for the App) (up to and including macOS 12")
static let openSystemSettings = NSLocalizedString("open.settings", value: "Open System Settings…", comment: "This string represents a prompt or button label prompting the user to open system settings")
Expand Down Expand Up @@ -446,8 +447,8 @@ struct UserText {
static let downloadsOpenPopupOnCompletion = NSLocalizedString("downloads.open.on.completion", value: "Automatically open the Downloads panel when downloads complete", comment: "Checkbox to open a Download Manager popover when downloads are completed")

static let maliciousSiteDetectionHeader = NSLocalizedString("phishing-detection.enabled.header", value: "Malicious Site Protection", comment: "Header for phishing site protection section in the settings page")
static let maliciousSiteDetectionIsEnabled = NSLocalizedString("phishing-detection.enabled.checkbox", value: "Allow DuckDuckGo to warn you before loading a webpage that has been flagged as malicious or fraudulent.", comment: "Checkbox that enables or disables the phishing detection feature in the browser")
static let maliciousDetectionEnabledWarning = NSLocalizedString("phishing-detection.enabled.warning", value: "Disabling this feature can put your personal information at risk. Only do so if you fully understand the risk involved.", comment: "A description box to warn users away from disabling malicious site protection")
static let maliciousSiteDetectionIsEnabled = NSLocalizedString("phishing-detection.enabled.checkbox", value: "Warn me on sites flagged for phishing or malware.", comment: "Checkbox that enables or disables the phishing and malware detection feature in the browser")
static let maliciousDetectionEnabledWarning = NSLocalizedString("phishing-detection.enabled.warning", value: "Disabling this feature can put your personal information at risk.", comment: "A description box to warn users away from disabling the phishing and malware protection feature")

// MARK: Password Manager
static let passwordManagementAllItems = NSLocalizedString("passsword.management.all-items", value: "All Items", comment: "Used as title for the Autofill All Items option")
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/Common/Utilities/UserDefaultsWrapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public struct UserDefaultsWrapper<T> {

case homeButtonPosition = "preferences.appeareance.home-button-position"

case phishingDetectionEnabled = "preferences.security.phishing-detection-enabled"
case maliciousSiteDetectionEnabled = "preferences.security.phishing-detection-enabled"

// ATB
case installDate = "statistics.installdate.key"
Expand Down
9 changes: 5 additions & 4 deletions DuckDuckGo/ContentBlocker/ContentBlocking.swift
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,11 @@ final class AppContentBlocking {

case .contentBlockingLRCMissing:
domainEvent = .contentBlockingLRCMissing
case .contentBlockingCompilationTime:
// Temporarily avoid firing this pixel. This can be re-enabled if it's determined to be necessary later.
// domainEvent = .contentBlockingCompilationTime
return

case .contentBlockingCompilationTaskPerformance(let iterationCount, let timeBucketAggregation):
let timeBucket = GeneralPixel.CompileTimeBucketAggregation(number: timeBucketAggregation)
domainEvent = .contentBlockingCompilationTaskPerformance(iterationCount: iterationCount,
timeBucketAggregation: timeBucket)
}

PixelKit.fire(DebugEvent(domainEvent, error: error), withAdditionalParameters: parameters) { _, error in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,28 @@ extension HomePage.Views {

var body: some View {
Button(action: action) {
VStack(alignment: .leading, spacing: Const.titleSpacing) {
ZStack {
if modeModel.contentType == .customImagePicker && !model.hasUserImages {
BackgroundThumbnailView(displayMode: .addBackground)
} else if modeModel.contentType == .defaultBackground {
BackgroundThumbnailView(displayMode: .categoryView) {
Color.newTabPageBackground
VStack(alignment: .leading, spacing: 0) {
VStack(alignment: .leading, spacing: Const.titleSpacing) {
ZStack {
if modeModel.contentType == .customImagePicker && !model.hasUserImages {
BackgroundThumbnailView(displayMode: .addBackground)
} else if modeModel.contentType == .defaultBackground {
BackgroundThumbnailView(displayMode: .categoryView) {
Color.newTabPageBackground
}
} else {
BackgroundThumbnailView(
displayMode: .categoryView,
customBackground: modeModel.customBackgroundThumbnail ?? .solidColor(.color01)
)
}
} else {
BackgroundThumbnailView(
displayMode: .categoryView,
customBackground: modeModel.customBackgroundThumbnail ?? .solidColor(.color01)
)
}
if showTitle {
Text(modeModel.title)
.font(.system(size: 11))
}
}
if showTitle {
Text(modeModel.title)
.font(.system(size: 11))
}
Spacer(minLength: 0)
}
}
.buttonStyle(.plain)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,17 @@ extension HomePage.Views {

var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 4)
.fill(.clear)
.background(thumbnailContent)
.cornerRadius(4)
RoundedRectangle(cornerRadius: 4)
.stroke(Color.homeSettingsBackgroundPreviewStroke)
.frame(height: SettingsView.Const.gridItemHeight)
.background(selectionBackground)
Group {
RoundedRectangle(cornerRadius: 4)
.fill(.clear)
.background(thumbnailContent)
.cornerRadius(4)
RoundedRectangle(cornerRadius: 4)
.stroke(Color.homeSettingsBackgroundPreviewStroke)
.background(selectionBackground)
}
.frame(height: SettingsView.Const.gridItemHeight)

if displayMode.allowsDeletingCustomBackgrounds, case .userImage(let image) = customBackground {
HStack {
Spacer()
Expand Down
52 changes: 32 additions & 20 deletions DuckDuckGo/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -37009,6 +37009,18 @@
}
}
},
"malware.error.page.tab.title" : {
"comment" : "Title shown in an error page tab that warn users of security risks on a website that has been flagged as Malware.",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Warning: Site May Be Malicious"
}
}
}
},
"Manage Bookmarks" : {
"comment" : "Main Menu History item",
"localizations" : {
Expand Down Expand Up @@ -47087,60 +47099,60 @@
}
},
"phishing-detection.enabled.checkbox" : {
"comment" : "Checkbox that enables or disables the phishing detection feature in the browser",
"comment" : "Checkbox that enables or disables the phishing and malware detection feature in the browser",
"extractionState" : "extracted_with_value",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Erlaube DuckDuckGo, dich zu warnen, bevor eine Webseite geladen wird, die als bösartig oder betrügerisch gekennzeichnet wurde."
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Allow DuckDuckGo to warn you before loading a webpage that has been flagged as malicious or fraudulent."
"value" : "Warn me on sites flagged for phishing or malware."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Permite que DuckDuckGo te avise antes de cargar una página web que se haya marcado como maliciosa o fraudulenta."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Autorisez DuckDuckGo à vous avertir avant de charger une page Web signalée comme malveillante ou frauduleuse."
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Consenti a DuckDuckGo di avvisarti prima di caricare una pagina web contrassegnata come dannosa o fraudolenta."
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Laat DuckDuckGo je waarschuwen voordat je een webpagina laadt die als kwaadaardig of frauduleus is gemarkeerd."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Zezwól DuckDuckGo na ostrzeganie przed załadowaniem strony internetowej, która została oznaczona jako złośliwa lub jako oszustwo."
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Permitir que o DuckDuckGo te avise antes de carregar uma página que foi sinalizada como maliciosa ou fraudulenta."
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Разрешить DuckDuckGo предупреждать вас о потенциально вредоносных или мошеннических сайтах перед загрузкой страницы."
}
}
Expand Down Expand Up @@ -47207,60 +47219,60 @@
}
},
"phishing-detection.enabled.warning" : {
"comment" : "A description box to warn users away from disabling malicious site protection",
"comment" : "A description box to warn users away from disabling the phishing and malware protection feature",
"extractionState" : "extracted_with_value",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Das Deaktivieren dieser Funktion kann deine persönlichen Daten gefährden. Wenn du dir über die damit verbundenen Risiken im Klaren bist, kannst du trotzdem fortfahren."
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Disabling this feature can put your personal information at risk. Only do so if you fully understand the risk involved."
"value" : "Disabling this feature can put your personal information at risk."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Desactivar esta función puede poner en riesgo tu información personal. Hazlo solo si entiendes completamente el riesgo que implica."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "La désactivation de cette fonctionnalité peut mettre vos informations personnelles en danger. Faites-le uniquement si vous comprenez parfaitement les risques encourus."
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Disabilitando questa funzione, potresti mettere a rischio i tuoi dati personali. Fallo solo se comprendi appieno il rischio che comporta."
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Als je deze functie uitschakelt, kunnen je persoonlijke gegevens in gevaar komen. Doe dit alleen als je het risico volledig begrijpt."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Wyłączenie tej funkcji może narazić Twoje dane osobowe na ryzyko. Rób to tylko wtedy, gdy rozumiesz związane z tym zagrożenie."
}
},
"pt" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "Desativar esta funcionalidade pode pôr em risco as tuas informações pessoais. Não desatives a menos que compreendas os riscos."
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"state" : "needs_review",
"value" : "При отключении этой функции ваши личные данные могут оказаться под угрозой. Эту функцию следует деактивировать только в том случае, если вы осознаете связанные с этим риски."
}
}
Expand Down
Loading
Loading