Skip to content

Commit

Permalink
Merge branch 'main' into dominik/xcode-16
Browse files Browse the repository at this point in the history
# By Daniel Bernal (1) and others
# Via Federico Cappelli (1) and GitHub (1)
* main:
  Remediate TunnelVision, TunnelCrack and fix "Exclude Local Networks" (#3460)
  Sync: Send pixels for account removal + decoding issues (#3557)
  Release 7.145.0-0 (#3560)
  [DuckPlayer] Base Overlay Pixel Implementation (#3545)
  Refresh toast updates (#3552)
  point to BSK branch (#3559)
  Remove ATB from attribution pixel (#3550)

# Conflicts:
#	DuckDuckGo.xcodeproj/project.pbxproj
#	DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • Loading branch information
samsymons committed Nov 12, 2024
2 parents 3cad996 + f8fc6c5 commit edf5dca
Show file tree
Hide file tree
Showing 61 changed files with 890 additions and 657 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
name: Unit Tests

runs-on: macos-14-xlarge
timeout-minutes: 15
timeout-minutes: 20

outputs:
commit_author: ${{ steps.fetch_commit_author.outputs.commit_author }}
Expand Down
2 changes: 1 addition & 1 deletion Configuration/Version.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MARKETING_VERSION = 7.144.0
MARKETING_VERSION = 7.145.0
4 changes: 2 additions & 2 deletions Core/AppPrivacyConfigurationDataProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ import BrowserServicesKit
final public class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider {

public struct Constants {
public static let embeddedDataETag = "\"516f95a16f7a556c58e14ee6f193cc30\""
public static let embeddedDataSHA = "87314e1ac02784472a722844a27b443b0387a164ac72afaac00d9a70731fc572"
public static let embeddedDataETag = "\"bd1f5490770791f68fa9667d530758a9\""
public static let embeddedDataSHA = "86b8c31a53f781d66dbc16eb09578d28149fee6c0e280fc75ddafeed8a4b46ac"
}

public var embeddedDataEtag: String {
Expand Down
5 changes: 5 additions & 0 deletions Core/FeatureFlag.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ public enum FeatureFlag: String {

/// https://app.asana.com/0/72649045549333/1208231259093710/f
case networkProtectionUserTips

/// https://app.asana.com/0/72649045549333/1208617860225199/f
case networkProtectionEnforceRoutes
}

extension FeatureFlag: FeatureFlagSourceProviding {
Expand Down Expand Up @@ -104,6 +107,8 @@ extension FeatureFlag: FeatureFlagSourceProviding {
return .remoteReleasable(.feature(.autocompleteTabs))
case .networkProtectionUserTips:
return .remoteReleasable(.subfeature(NetworkProtectionSubfeature.userTips))
case .networkProtectionEnforceRoutes:
return .remoteDevelopment(.subfeature(NetworkProtectionSubfeature.enforceRoutes))
case .adAttributionReporting:
return .remoteReleasable(.feature(.adAttributionReporting))
}
Expand Down
1 change: 1 addition & 0 deletions Core/Pixel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ public struct PixelParameters {
public static let adAttributionKeywordID = "keyword_id"
public static let adAttributionAdID = "ad_id"
public static let adAttributionToken = "attribution_token"
public static let adAttributionIsReinstall = "is_reinstall"

// Autofill
public static let countBucket = "count_bucket"
Expand Down
36 changes: 31 additions & 5 deletions Core/PixelEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,8 @@ extension Pixel {
case syncDeleteAccountError
case syncLoginExistingAccountError
case syncSecureStorageReadError
case syncSecureStorageDecodingError
case syncAccountRemoved(reason: String)

case syncGetOtherDevices
case syncGetOtherDevicesCopy
Expand Down Expand Up @@ -671,8 +673,10 @@ extension Pixel {
case toggleReportDoNotSend
case toggleReportDismiss

case userBehaviorReloadTwiceWithin12Seconds
case userBehaviorReloadThreeTimesWithin20Seconds
case pageRefreshThreeTimesWithin20Seconds

case siteNotWorkingShown
case siteNotWorkingWebsiteIsBroken

// MARK: History
case historyStoreLoadFailed
Expand Down Expand Up @@ -848,6 +852,14 @@ extension Pixel {
case protectedDataUnavailableWhenBecomeActive
case statisticsLoaderATBStateMismatch
case adAttributionReportStateMismatch

// MARK: - DuckPlayer Overlay Navigation
case duckPlayerYouTubeOverlayNavigationBack
case duckPlayerYouTubeOverlayNavigationRefresh
case duckPlayerYouTubeNavigationWithinYouTube
case duckPlayerYouTubeOverlayNavigationOutsideYoutube
case duckPlayerYouTubeOverlayNavigationClosed
case duckPlayerYouTubeNavigationIdle30
}

}
Expand Down Expand Up @@ -1447,6 +1459,8 @@ extension Pixel.Event {
case .syncDeleteAccountError: return "m_d_sync_delete_account_error"
case .syncLoginExistingAccountError: return "m_d_sync_login_existing_account_error"
case .syncSecureStorageReadError: return "m_d_sync_secure_storage_error"
case .syncSecureStorageDecodingError: return "sync_secure_storage_decoding_error"
case .syncAccountRemoved(let reason): return "sync_account_removed_reason_\(reason)"

case .syncGetOtherDevices: return "sync_get_other_devices"
case .syncGetOtherDevicesCopy: return "sync_get_other_devices_copy"
Expand Down Expand Up @@ -1494,9 +1508,11 @@ extension Pixel.Event {
// MARK: - Apple Ad Attribution
case .appleAdAttribution: return "m_apple-ad-attribution"

// MARK: - User behavior
case .userBehaviorReloadTwiceWithin12Seconds: return "m_reload-twice-within-12-seconds"
case .userBehaviorReloadThreeTimesWithin20Seconds: return "m_reload-three-times-within-20-seconds"
// MARK: - Page refresh toasts
case .pageRefreshThreeTimesWithin20Seconds: return "m_reload-three-times-within-20-seconds"

case .siteNotWorkingShown: return "m_site-not-working_shown"
case .siteNotWorkingWebsiteIsBroken: return "m_site-not-working_website-is-broken"

// MARK: - History debug
case .historyStoreLoadFailed: return "m_debug_history-store-load-failed"
Expand Down Expand Up @@ -1686,6 +1702,16 @@ extension Pixel.Event {
case .protectedDataUnavailableWhenBecomeActive: return "m_protected_data_unavailable_when_become_active"
case .statisticsLoaderATBStateMismatch: return "m_statistics_loader_atb_state_mismatch"
case .adAttributionReportStateMismatch: return "m_ad_attribution_report_state_mismatch"

// MARK: - DuckPlayer Overlay Navigation
case .duckPlayerYouTubeOverlayNavigationBack: return "duckplayer.youtube.overlay.navigation.back"
case .duckPlayerYouTubeOverlayNavigationRefresh: return "duckplayer.youtube.overlay.navigation.refresh"
case .duckPlayerYouTubeNavigationWithinYouTube: return "duckplayer.youtube.overlay.navigation.within-youtube"
case .duckPlayerYouTubeOverlayNavigationOutsideYoutube: return "duckplayer.youtube.overlay.navigation.outside-youtube"
case .duckPlayerYouTubeOverlayNavigationClosed: return "duckplayer.youtube.overlay.navigation.closed"
case .duckPlayerYouTubeNavigationIdle30: return "duckplayer.youtube.overlay.idle-30"


}
}
}
Expand Down
4 changes: 4 additions & 0 deletions Core/SyncErrorHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ public class SyncErrorHandler: EventMapping<SyncError> {
Pixel.fire(pixel: .syncFailedToSetupEngine, error: error)
case .failedToReadSecureStore:
Pixel.fire(pixel: .syncSecureStorageReadError, error: error)
case .failedToDecodeSecureStoreData(let error):
Pixel.fire(pixel: .syncSecureStorageDecodingError, error: error)
case .accountRemoved(let reason):
Pixel.fire(pixel: .syncAccountRemoved(reason: reason.rawValue), error: error)
default:
// Should this be so generic?
let domainEvent = Pixel.Event.syncSentUnauthenticatedRequest
Expand Down
4 changes: 1 addition & 3 deletions Core/UserDefaultsPropertyWrapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,7 @@ public struct UserDefaultsWrapper<T> {

case appleAdAttributionReportCompleted = "com.duckduckgo.ios.appleAdAttributionReport.completed"

case didRefreshTimestamp = "com.duckduckgo.ios.userBehavior.didRefreshTimestamp"
case didDoubleRefreshTimestamp = "com.duckduckgo.ios.userBehavior.didDoubleRefreshTimestamp"
case didRefreshCounter = "com.duckduckgo.ios.userBehavior.didRefreshCounter"
case refreshTimestamps = "com.duckduckgo.ios.pageRefreshMonitor.refreshTimestamps"
case lastBrokenSiteToastShownDate = "com.duckduckgo.ios.userBehavior.lastBrokenSiteToastShownDate"
case toastDismissStreakCounter = "com.duckduckgo.ios.userBehavior.toastDismissStreakCounter"

Expand Down
98 changes: 89 additions & 9 deletions Core/ios-config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"readme": "https://github.com/duckduckgo/privacy-configuration",
"version": 1730481067679,
"version": 1731320660413,
"features": {
"adClickAttribution": {
"readme": "https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#3rd-party-tracker-loading-protection",
Expand Down Expand Up @@ -1357,14 +1357,11 @@
{
"domain": "flexmls.com"
},
{
"domain": "centerwellpharmacy.com"
},
{
"domain": "instructure.com"
}
],
"hash": "1cc80acd10d985c950e40c5b876c581b"
"hash": "96b2f778bab196aa424e9c859ddea778"
},
"contextualOnboarding": {
"exceptions": [],
Expand Down Expand Up @@ -1424,6 +1421,12 @@
{
"domain": "instructure.com"
},
{
"domain": "humana.com"
},
{
"domain": "centerwellpharmacy.com"
},
{
"domain": "marvel.com"
},
Expand All @@ -1441,7 +1444,7 @@
}
],
"state": "disabled",
"hash": "fce0a9ccd7ae060d25e7debe4d8905fb"
"hash": "33c2d56a2a9dd43c88a353d8a57dfa72"
},
"customUserAgent": {
"settings": {
Expand Down Expand Up @@ -1802,6 +1805,10 @@
"selector": ".top-ad",
"type": "hide-empty"
},
{
"selector": "#top-ad",
"type": "hide"
},
{
"selector": "#topAd",
"type": "hide-empty"
Expand Down Expand Up @@ -1854,6 +1861,10 @@
"selector": "#google-one-tap-popup-container",
"type": "hide"
},
{
"selector": ".google-one-tap__module",
"type": "hide"
},
{
"selector": ".google-one-tap-modal-div",
"type": "hide"
Expand Down Expand Up @@ -2165,6 +2176,7 @@
"content continues below",
"x",
"_",
"sponsor message",
"sponsored",
"sponsorisé",
"story continues below advertisement",
Expand Down Expand Up @@ -3227,6 +3239,10 @@
{
"selector": "[aria-labelledby='promo-header']",
"type": "hide"
},
{
"selector": "div[role='banner']:has(div > a[href='https://support.google.com/a/answer/33864'])",
"type": "hide"
}
]
},
Expand Down Expand Up @@ -4965,7 +4981,7 @@
]
},
"state": "enabled",
"hash": "d8fb8089fcfbd527940703c8e2665966"
"hash": "2fa4c7c9bfd50585ee22d6c2d3bd3279"
},
"exceptionHandler": {
"exceptions": [
Expand Down Expand Up @@ -5638,10 +5654,13 @@
},
"userTips": {
"state": "enabled"
},
"enforceRoutes": {
"state": "enabled"
}
},
"exceptions": [],
"hash": "324309d731591edf4174a6e5d11b837c"
"hash": "137177ca43449da8ce870fc838b35845"
},
"newTabContinueSetUp": {
"exceptions": [],
Expand Down Expand Up @@ -5917,6 +5936,27 @@
"state": "disabled",
"hash": "be6751fe0307a7e1b9476f4d8b8d0aaf"
},
"showOnAppLaunch": {
"exceptions": [
{
"domain": "marvel.com"
},
{
"domain": "sundancecatalog.com"
},
{
"domain": "noaprints.com"
},
{
"domain": "flexmls.com"
},
{
"domain": "instructure.com"
}
],
"state": "disabled",
"hash": "be6751fe0307a7e1b9476f4d8b8d0aaf"
},
"sslCertificates": {
"state": "enabled",
"exceptions": [],
Expand All @@ -5927,6 +5967,27 @@
},
"hash": "abe9584048f7f8157f71a14e7914cb1c"
},
"swipingTabs": {
"exceptions": [
{
"domain": "marvel.com"
},
{
"domain": "sundancecatalog.com"
},
{
"domain": "noaprints.com"
},
{
"domain": "flexmls.com"
},
{
"domain": "instructure.com"
}
],
"state": "disabled",
"hash": "be6751fe0307a7e1b9476f4d8b8d0aaf"
},
"syncPromotion": {
"state": "enabled",
"features": {
Expand Down Expand Up @@ -6765,6 +6826,12 @@
"homedepot.com",
"sbs.com.au"
]
},
{
"rule": "sbs.demdex.net",
"domains": [
"sbs.com.au"
]
}
]
},
Expand Down Expand Up @@ -6863,6 +6930,12 @@
"wunderground.com"
]
},
{
"rule": "securepubads.g.doubleclick.net/pagead/ima_ppub_config",
"domains": [
"sbs.com.au"
]
},
{
"rule": "securepubads.g.doubleclick.net/pagead/managed/js/gpt",
"domains": [
Expand Down Expand Up @@ -8944,6 +9017,13 @@
"<all>"
]
},
{
"rule": "tags.tiqcdn.com/utag/cbsi/",
"domains": [
"cbs.com",
"paramountplus.com"
]
},
{
"rule": "tags.tiqcdn.com/utag/",
"domains": [
Expand Down Expand Up @@ -9347,7 +9427,7 @@
"domain": "instructure.com"
}
],
"hash": "c28128dee65a2aa7fef1528b73f33c7f"
"hash": "b7c276ffe1417313a46c0d13fbc9fcd9"
},
"trackingCookies1p": {
"settings": {
Expand Down
Loading

0 comments on commit edf5dca

Please sign in to comment.