Skip to content

Commit

Permalink
Merge branch 'main' into fcappelli/oslog_to_logger
Browse files Browse the repository at this point in the history
  • Loading branch information
federicocappelli committed Aug 20, 2024
2 parents 0849509 + 2fafe3c commit 414d4ad
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 44 deletions.
2 changes: 1 addition & 1 deletion Configuration/BuildNumber.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
CURRENT_PROJECT_VERSION = 245
CURRENT_PROJECT_VERSION = 246
2 changes: 1 addition & 1 deletion Configuration/Version.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MARKETING_VERSION = 1.102.0
MARKETING_VERSION = 1.103.0
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ import BrowserServicesKit
final class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider {

public struct Constants {
public static let embeddedDataETag = "\"984fa972f7e1c1268029ce326d253b20\""
public static let embeddedDataSHA = "d46728fd2bef22a3705d986e92497611d3544a37cfadbf4071a36f9ab79cbe1d"
public static let embeddedDataETag = "\"60a7573208b3468e30391f023f68c361\""
public static let embeddedDataSHA = "03ea154ce4b6a1f96533b49e05e33b87f69b97d0bef23a5872ede6be4d061dec"
}

var embeddedDataEtag: String {
Expand Down
91 changes: 73 additions & 18 deletions DuckDuckGo/ContentBlocker/macos-config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"readme": "https://github.com/duckduckgo/privacy-configuration",
"version": 1723142919820,
"version": 1724097047421,
"features": {
"adClickAttribution": {
"readme": "https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#3rd-party-tracker-loading-protection",
Expand Down Expand Up @@ -363,7 +363,12 @@
]
},
"state": "enabled",
"hash": "ee9a64bd4f869975e27812b48f8a2061"
"features": {
"filterlistExperiment": {
"state": "enabled"
}
},
"hash": "d9a57acae7aadd9377e59b3f803728b1"
},
"autofillBreakageReporter": {
"state": "disabled",
Expand All @@ -387,6 +392,37 @@
},
"hash": "1832dd4088cba6eaf3a9776a6fc9a1f5"
},
"breakageReporting": {
"state": "disabled",
"exceptions": [
{
"domain": "marvel.com"
},
{
"domain": "sundancecatalog.com"
},
{
"domain": "noaprints.com"
},
{
"domain": "flexmls.com"
},
{
"domain": "instructure.com"
}
],
"hash": "37e0cf88badfc8b01b6394f0884502f6"
},
"brokenSitePrompt": {
"state": "disabled",
"exceptions": [],
"settings": {
"maxDismissStreak": 3,
"dismissStreakResetDays": 30,
"coolDownDays": 7
},
"hash": "f93d54aff00a2110443fffcd8b3f26c9"
},
"brokenSiteReportExperiment": {
"exceptions": [],
"state": "disabled",
Expand Down Expand Up @@ -1357,10 +1393,12 @@
"state": "enabled"
},
"autoplay": {
"state": "disabled"
"state": "enabled",
"minSupportedVersion": "1.103.0"
},
"openInNewTab": {
"state": "disabled"
"state": "enabled",
"minSupportedVersion": "1.101.0"
}
},
"settings": {
Expand Down Expand Up @@ -1427,7 +1465,7 @@
]
},
"state": "enabled",
"hash": "5ccb9e0379c691ea67bb2e73ba0ac194"
"hash": "6940b6c86bc86c501deef031208acdca"
},
"elementHiding": {
"exceptions": [
Expand Down Expand Up @@ -4026,6 +4064,15 @@
}
]
},
{
"domain": "signupgenius.com",
"rules": [
{
"selector": ".mktg",
"type": "hide"
}
]
},
{
"domain": "skysports.com",
"rules": [
Expand Down Expand Up @@ -4693,7 +4740,7 @@
]
},
"state": "enabled",
"hash": "4e344fae2b186575742da5eedccb5e86"
"hash": "a68277763576ac92bfbbefa717bb78c0"
},
"exceptionHandler": {
"exceptions": [
Expand Down Expand Up @@ -5141,6 +5188,9 @@
{
"domain": "npr.org"
},
{
"domain": "norton.com"
},
{
"domain": "marvel.com"
},
Expand All @@ -5166,7 +5216,7 @@
"privacy-test-pages.site"
]
},
"hash": "c299dcdfe928b8fb57fcb671d22680c8"
"hash": "1f76ccef190bbe46af6766d2efcb4da3"
},
"harmfulApis": {
"settings": {
Expand Down Expand Up @@ -5738,6 +5788,19 @@
},
"hash": "abe9584048f7f8157f71a14e7914cb1c"
},
"syncPromotion": {
"state": "enabled",
"features": {
"bookmarks": {
"state": "enabled"
},
"passwords": {
"state": "enabled"
}
},
"exceptions": [],
"hash": "8081a0cf08f5bbda622df55361c72cfe"
},
"sync": {
"state": "enabled",
"features": {
Expand Down Expand Up @@ -6047,16 +6110,6 @@
}
]
},
"amazon.dev": {
"rules": [
{
"rule": "prime.amazon.dev",
"domains": [
"<all>"
]
}
]
},
"amazonaws.com": {
"rules": [
{
Expand Down Expand Up @@ -7376,6 +7429,7 @@
"pointstreaksites.com",
"post-gazette.com",
"raleighcw.com",
"signupgenius.com",
"siouxlandnews.com",
"southernoregoncw.com",
"star64.tv",
Expand Down Expand Up @@ -8314,6 +8368,7 @@
{
"rule": "a.pub.network/core/prebid-universal-creative.js",
"domains": [
"signupgenius.com",
"titantv.com"
]
}
Expand Down Expand Up @@ -9118,7 +9173,7 @@
"domain": "instructure.com"
}
],
"hash": "5b165417204a223eecb181ae535bc194"
"hash": "b5f1a24bc6fb5801f91ab2e6c5067ff4"
},
"trackingCookies1p": {
"settings": {
Expand Down
3 changes: 2 additions & 1 deletion DuckDuckGo/RemoteMessaging/RemoteMessagingClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,8 @@ final class RemoteMessagingClient: RemoteMessagingProcessing {
isRemoteMessagingDatabaseLoaded = true
}

private var isRemoteMessagingDatabaseLoaded = false
// Publicly accessible for use in RemoteMessagingDebugMenu
private(set) var isRemoteMessagingDatabaseLoaded = false
private let remoteMessagingStoreProvider: RemoteMessagingStoreProviding
private var scheduledRefreshCancellable: AnyCancellable?
private var featureFlagCancellable: AnyCancellable?
Expand Down
63 changes: 44 additions & 19 deletions DuckDuckGo/RemoteMessaging/RemoteMessagingDebugMenu.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,36 @@ import AppKitExtensions

final class RemoteMessagingDebugMenu: NSMenu {

struct MessageModel: CustomStringConvertible {
let id: String
let shown: String
let status: String

init(message: RemoteMessageManagedObject) {
self.id = message.id ?? "?"
self.shown = message.shown ? "shown" : "not shown"
self.status = Self.statusString(for: message.status)
}

var description: String {
"ID: \(id) | \(shown) | \(status)"
}

/// This should be kept in sync with `RemoteMessageStatus` private enum from BSK
private static func statusString(for status: NSNumber?) -> String {
switch status?.int16Value {
case 0:
return "scheduled"
case 1:
return "dismissed"
case 2:
return "done"
default:
return "unknown"
}
}
}

init() {
super.init(title: "")

Expand All @@ -48,24 +78,32 @@ final class RemoteMessagingDebugMenu: NSMenu {
removeItem(at: 3)
}

guard NSApplication.runType.requiresEnvironment else {
guard NSApplication.runType.requiresEnvironment, NSApp.delegateTyped.remoteMessagingClient.isRemoteMessagingDatabaseLoaded else {
return
}

let database = NSApp.delegateTyped.remoteMessagingClient.database
let context = database.makeContext(concurrencyType: .mainQueueConcurrencyType)
let context = database.makeContext(concurrencyType: .privateQueueConcurrencyType)
let fetchRequest = RemoteMessageManagedObject.fetchRequest()
fetchRequest.returnsObjectsAsFaults = false
let messages = (try? context.fetch(fetchRequest)) ?? []

let headerItem = NSMenuItem(title: "\(messages.count) Message(s) in database:")
var messageModels: [MessageModel] = []

context.performAndWait {
let messages = (try? context.fetch(fetchRequest)) ?? []
for message in messages {
messageModels.append(MessageModel(message: message))
}
}

let headerItem = NSMenuItem(title: "\(messageModels.count) Message(s) in database:")
headerItem.isEnabled = false

addItem(NSMenuItem.separator())
addItem(headerItem)

for message in messages {
let item = NSMenuItem(title: "ID: \(message.id ?? "?") | \(message.shown ? "shown" : "not shown") | \(statusString(for: message.status))")
for message in messageModels {
let item = NSMenuItem(title: message.description)
item.isEnabled = false
addItem(item)
}
Expand All @@ -81,17 +119,4 @@ final class RemoteMessagingDebugMenu: NSMenu {
}
}

/// This should be kept in sync with `RemoteMessageStatus` private enum from BSK
private func statusString(for status: NSNumber?) -> String {
switch status?.int16Value {
case 0:
return "scheduled"
case 1:
return "dismissed"
case 2:
return "done"
default:
return "unknown"
}
}
}
8 changes: 6 additions & 2 deletions DuckDuckGo/Tab/TabExtensions/DuckPlayerTabExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -307,8 +307,7 @@ extension DuckPlayerTabExtension: NavigationResponder {

// “Watch in YouTube” selected
// when currently displayed content is the Duck Player and loading a YouTube URL, don‘t override it
if navigationAction.targetFrame?.url.isDuckPlayer == true,
navigationAction.targetFrame?.url.youtubeVideoID == videoID {
if didUserSelectWatchInYoutubeFromDuckPlayer(navigationAction, preferences: preferences, videoID: videoID) {
PixelKit.fire(GeneralPixel.duckPlayerWatchOnYoutube)
return .next

Expand Down Expand Up @@ -344,6 +343,11 @@ extension DuckPlayerTabExtension: NavigationResponder {
return .next
}

private func didUserSelectWatchInYoutubeFromDuckPlayer(_ navigationAction: NavigationAction, preferences: DuckPlayerPreferences, videoID: String) -> Bool {
let url = preferences.duckPlayerOpenInNewTab ? navigationAction.sourceFrame.url : navigationAction.targetFrame?.url
return url?.isDuckPlayer == true && url?.youtubeVideoID == videoID
}

func didCommit(_ navigation: Navigation) {
guard duckPlayer.isAvailable, duckPlayer.mode != .disabled else {
return
Expand Down

0 comments on commit 414d4ad

Please sign in to comment.