diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8a23744c96..58f13d0b12 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,12 +73,13 @@ jobs: APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} run: | - bundle exec fastlane release_${{ steps.destination.outputs.destination }} app_version="$(cut -d ' ' -f 3 < Configuration/Version.xcconfig)" echo "dsyms_path=${{ github.workspace }}/DuckDuckGo.app.dSYM.zip" >> $GITHUB_ENV echo "app_version=${app_version}" >> $GITHUB_ENV + bundle exec fastlane release_${{ steps.destination.outputs.destination }} - name: Upload dSYMs artifact + if: always() uses: actions/upload-artifact@v3 with: name: DuckDuckGo-${{ steps.destination.outputs.destination }}-dSYM-${{ env.app_version }} @@ -86,7 +87,7 @@ jobs: - name: Get Asana Task ID id: get-task-id - if: github.event.inputs.asana-task-url + if: ${{ always() && github.event.inputs.asana-task-url }} run: | task_url_regex='^https://app.asana.com/[0-9]/[0-9]*/([0-9]*)/f$' if [[ "${{ github.event.inputs.asana-task-url }}" =~ ${task_url_regex} ]]; then @@ -96,16 +97,18 @@ jobs: fi - name: Upload debug symbols to Asana - if: github.event.inputs.asana-task-url + if: ${{ always() && github.event.inputs.asana-task-url }} env: ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }} run: | - asana_dsyms_path="${{ github.workspace }}/DuckDuckGo-${{ env.app_version }}-dSYM.zip" - mv -f "${{ env.dsyms_path }}" "$asana_dsyms_path" + if [[ -f ${{ env.dsyms_path }} ]]; then + asana_dsyms_path="${{ github.workspace }}/DuckDuckGo-${{ env.app_version }}-dSYM.zip" + mv -f "${{ env.dsyms_path }}" "$asana_dsyms_path" - curl -s "https://app.asana.com/api/1.0/tasks/${{ steps.get-task-id.outputs.task_id }}/attachments" \ - -H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \ - --form "file=@${asana_dsyms_path};type=application/zip" + curl -s "https://app.asana.com/api/1.0/tasks/${{ steps.get-task-id.outputs.task_id }}/attachments" \ + -H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \ + --form "file=@${asana_dsyms_path};type=application/zip" + fi - name: Send Mattermost message env: diff --git a/Configuration/Version.xcconfig b/Configuration/Version.xcconfig index a954f8ae98..5547072ee2 100644 --- a/Configuration/Version.xcconfig +++ b/Configuration/Version.xcconfig @@ -1 +1 @@ -MARKETING_VERSION = 7.88.0 +MARKETING_VERSION = 7.89.0 diff --git a/Core/AppPrivacyConfigurationDataProvider.swift b/Core/AppPrivacyConfigurationDataProvider.swift index 19dbb75942..8f3063c130 100644 --- a/Core/AppPrivacyConfigurationDataProvider.swift +++ b/Core/AppPrivacyConfigurationDataProvider.swift @@ -23,8 +23,8 @@ import BrowserServicesKit final public class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"b3acf772994c82ed870835c27a94de36\"" - public static let embeddedDataSHA = "955ebdcac92bf5589e34e174e9cb8bcbe5170c9bbb5f6d0b4fa32290368a22b2" + public static let embeddedDataETag = "\"357f365c05692d9674849261a9a91f71\"" + public static let embeddedDataSHA = "cfa6f910f8d50b88d44a149f0e007bc8fd88b8b3b390ae013618599794d2c077" } public var embeddedDataEtag: String { diff --git a/Core/UserDefaultsPropertyWrapper.swift b/Core/UserDefaultsPropertyWrapper.swift index 4c64b681f1..e32e0513e5 100644 --- a/Core/UserDefaultsPropertyWrapper.swift +++ b/Core/UserDefaultsPropertyWrapper.swift @@ -95,6 +95,8 @@ public struct UserDefaultsWrapper { case appTPUsed = "com.duckduckgo.ios.appTrackingProtection.appTPUsed" case defaultBrowserUsageLastSeen = "com.duckduckgo.ios.default-browser-usage-last-seen" + + case syncEnvironment = "com.duckduckgo.ios.sync-environment" } private let key: Key diff --git a/Core/ios-config.json b/Core/ios-config.json index fec6b01c21..d78309777d 100644 --- a/Core/ios-config.json +++ b/Core/ios-config.json @@ -1,6 +1,6 @@ { "readme": "https://github.com/duckduckgo/privacy-configuration", - "version": 1693815553365, + "version": 1694438116129, "features": { "adClickAttribution": { "readme": "https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#3rd-party-tracker-loading-protection", @@ -1136,9 +1136,193 @@ { "domain": "welt.de", "reason": "Video pauses at about 13-15 seconds in. Playing the video again results in a single frame rendering without progressing to the next frame." + }, + { + "domain": "bank.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "www7.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "fidelity.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "citi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "americanexpress.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "capitalone.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "marcus.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankofamerica.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wellsfargo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "citizensbankonline.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "sofi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "regions.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usaa.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "boh.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.br", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "pnc.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "edwardjones.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ally.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "metrobank.com.ph", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "key.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "synchronybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "oldglorybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.mx", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "secureinternetbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankfirst.com.au", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "fnbo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "salliemae.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bnc.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "kanza.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "prosperity.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "firstwestern.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "penncrest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "northwest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bell.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dollar.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dellsbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "rcbbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ebt.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "mybct.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wells.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "365.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "atom.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ibanking-services.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bmo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "tsb.co.uk", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" } ], - "hash": "8d35648bb7862913ed30243074e6b6f1" + "hash": "cf151652887581963aad69e4e04fdaab" }, "cookie": { "settings": { @@ -1219,6 +1403,10 @@ "domain": "hulu.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1145" }, + { + "domain": "vsp.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1292" + }, { "domain": "cvs.com", "reason": "Navigation section at the top of the main page renders as text." @@ -1261,7 +1449,7 @@ }, "exceptions": [], "state": "enabled", - "hash": "936f08e59caeb11ccab5691f1bcf1360" + "hash": "aa5caf459578f576616d84a1631dc44a" }, "duckPlayer": { "exceptions": [], @@ -1273,7 +1461,9 @@ "selectors": { "thumbLink": "a[href^='/watch']", "excludedRegions": [ - "#playlist" + "#playlist", + "ytd-movie-renderer", + "ytd-grid-movie-renderer" ], "videoElement": "#player video", "videoElementContainer": "#player .html5-video-player", @@ -1325,7 +1515,7 @@ ] }, "state": "disabled", - "hash": "cd5c420d948ff708f93d17ad2e55cd1b" + "hash": "04c97c3c7425cc18984dd34eda95a112" }, "elementHiding": { "exceptions": [ @@ -1786,13 +1976,13 @@ 300, 500, 1000, - 3000, - 5000 + 2000, + 3000 ], "unhideTimeouts": [ 1250, - 3250, - 5250 + 2250, + 3000 ], "mediaAndFormSelectors": "video,canvas,embed,object,audio,map,form,input,textarea,select,option", "adLabelStrings": [ @@ -2675,6 +2865,23 @@ } ] }, + { + "domain": "polygon.com", + "rules": [ + { + "selector": "[class*='ad_unit']", + "type": "override" + }, + { + "selector": "[id*='gpt-']", + "type": "override" + }, + { + "selector": ".m-ad", + "type": "hide-empty" + } + ] + }, { "domain": "popsci.com", "rules": [ @@ -3176,7 +3383,7 @@ ] }, "state": "enabled", - "hash": "8e8243a91c69f2ead8bf4ad86c4a1af1" + "hash": "d0256677d082637af536e6c25e94a51a" }, "exceptionHandler": { "exceptions": [], @@ -3351,10 +3558,194 @@ { "domain": "hyatt.com", "reason": "Site loads blank and does not proceed." + }, + { + "domain": "bank.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "www7.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "fidelity.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "citi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "americanexpress.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "capitalone.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "marcus.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankofamerica.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wellsfargo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "citizensbankonline.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "sofi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "regions.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usaa.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "boh.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.br", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "pnc.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "edwardjones.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ally.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "metrobank.com.ph", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "key.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "synchronybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "oldglorybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.mx", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "secureinternetbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankfirst.com.au", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "fnbo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "salliemae.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bnc.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "kanza.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "prosperity.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "firstwestern.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "penncrest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "northwest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bell.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dollar.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dellsbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "rcbbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ebt.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "mybct.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wells.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "365.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "atom.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ibanking-services.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bmo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "tsb.co.uk", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" } ], "state": "enabled", - "hash": "6ed61290086daac4afe05039c188918c" + "hash": "0f915a6f428b0f2f26abe67f91e7380f" }, "fingerprintingScreenSize": { "settings": { @@ -3395,10 +3786,194 @@ { "domain": "secureserver.net", "reason": "After entering login details and clicking to log in, the site shows an adwall and prevents login." + }, + { + "domain": "bank.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "www7.marksandspencer.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "fidelity.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "citi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" + }, + { + "domain": "americanexpress.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "capitalone.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "marcus.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankofamerica.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wellsfargo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "citizensbankonline.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "sofi.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "regions.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "usaa.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "boh.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.br", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "pnc.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "edwardjones.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ally.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "metrobank.com.ph", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "key.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "synchronybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "oldglorybank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "santander.com.mx", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "secureinternetbank.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bankfirst.com.au", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "fnbo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "salliemae.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bnc.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "kanza.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "prosperity.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "firstwestern.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "penncrest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "northwest.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bell.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dollar.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "dellsbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "rcbbank.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ebt.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "mybct.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "wells.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "365.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "atom.bank", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "ibanking-services.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "bmo.com", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" + }, + { + "domain": "tsb.co.uk", + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" } ], "state": "enabled", - "hash": "e1ffe29047b2f96b52fd59399b7f034b" + "hash": "4fb28f374e51f1660b657f5c38d8cad2" }, "fingerprintingTemporaryStorage": { "exceptions": [ @@ -3442,14 +4017,6 @@ "domain": "web.whatsapp.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/620" }, - { - "domain": "walmart.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1198" - }, - { - "domain": "myaccountaccess.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1253" - }, { "domain": "verizon.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1282" @@ -3464,7 +4031,7 @@ "privacy-test-pages.glitch.me" ] }, - "hash": "d957f04019743f1d9f443df45184bbdd" + "hash": "04dba37a9d5743fade31b9339f53f654" }, "harmfulApis": { "settings": { @@ -3581,8 +4148,12 @@ }, "incontextSignup": { "exceptions": [], - "state": "disabled", - "hash": "728493ef7a1488e4781656d3f9db84aa" + "state": "enabled", + "minSupportedVersion": "7.87.0", + "settings": { + "installedDays": 21 + }, + "hash": "32608df14a6d195edcea38c1b1a73816" }, "incrementalRolloutTest": { "state": "disabled", @@ -4724,6 +5295,17 @@ } ] }, + "geoip-js.com": { + "rules": [ + { + "rule": "geoip-js.com/js/apis/geoip2/v2.1/geoip2.js", + "domains": [ + "yourrewardcard.com" + ], + "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1288" + } + ] + }, "getshogun.com": { "rules": [ { @@ -6414,7 +6996,7 @@ } }, "exceptions": [], - "hash": "0a04522a36d7fc7f849eb766402d89bc" + "hash": "e9428e3e89692861648df2b817e87406" }, "trackingCookies1p": { "settings": { @@ -6533,14 +7115,6 @@ } }, "unprotectedTemporary": [ - { - "domain": "fidelity.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" - }, - { - "domain": "citi.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" - }, { "domain": "earth.google.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1099" @@ -6553,186 +7127,10 @@ "domain": "marvel.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1194" }, - { - "domain": "bank.marksandspencer.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" - }, - { - "domain": "www7.marksandspencer.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" - }, { "domain": "paramountplus.com", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1085" }, - { - "domain": "americanexpress.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "capitalone.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "marcus.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "bankofamerica.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "wellsfargo.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "usbank.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "citizensbankonline.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "sofi.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "regions.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "usaa.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "boh.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "santander.com.br", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "pnc.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "edwardjones.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "ally.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "metrobank.com.ph", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "key.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "synchronybank.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "oldglorybank.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "santander.com.mx", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "secureinternetbank.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "bankfirst.com.au", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "fnbo.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "salliemae.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "bnc.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "kanza.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "prosperity.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "firstwestern.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "penncrest.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "northwest.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "bell.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "dollar.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "dellsbank.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "rcbbank.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "ebt.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "mybct.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "wells.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "365.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "atom.bank", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "ibanking-services.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "bmo.com", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, - { - "domain": "tsb.co.uk", - "reason": "https://github.com/duckduckgo/privacy-configuration/issues/1265" - }, { "domain": "vinted.fr", "reason": "https://github.com/duckduckgo/privacy-configuration/issues/794" diff --git a/DuckDuckGo/AppDelegate.swift b/DuckDuckGo/AppDelegate.swift index dd27ec01ec..75cdfff465 100644 --- a/DuckDuckGo/AppDelegate.swift +++ b/DuckDuckGo/AppDelegate.swift @@ -191,9 +191,22 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // MARK: Sync initialisation +#if DEBUG + let defaultEnvironment = ServerEnvironment.development +#else + let defaultEnvironment = ServerEnvironment.production +#endif + + let environment = ServerEnvironment( + UserDefaultsWrapper( + key: .syncEnvironment, + defaultValue: defaultEnvironment.description + ).wrappedValue + ) ?? defaultEnvironment + syncDataProviders = SyncDataProviders(bookmarksDatabase: bookmarksDatabase, secureVaultErrorReporter: SecureVaultErrorReporter.shared) - let syncService = DDGSync(dataProvidersSource: syncDataProviders, errorEvents: SyncErrorHandler(), log: .syncLog) - syncService.initializeIfNeeded(isInternalUser: InternalUserStore().isInternalUser) + let syncService = DDGSync(dataProvidersSource: syncDataProviders, errorEvents: SyncErrorHandler(), log: .syncLog, environment: environment) + syncService.initializeIfNeeded() self.syncService = syncService let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) @@ -260,7 +273,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationDidBecomeActive(_ application: UIApplication) { guard !testing else { return } - syncService.initializeIfNeeded(isInternalUser: InternalUserStore().isInternalUser) + syncService.initializeIfNeeded() syncDataProviders.setUpDatabaseCleanersIfNeeded(syncService: syncService) if !(overlayWindow?.rootViewController is AuthenticationViewController) { diff --git a/DuckDuckGo/AutofillLoginDetailsViewController.swift b/DuckDuckGo/AutofillLoginDetailsViewController.swift index 4a2328481f..8fb83a6826 100644 --- a/DuckDuckGo/AutofillLoginDetailsViewController.swift +++ b/DuckDuckGo/AutofillLoginDetailsViewController.swift @@ -118,7 +118,7 @@ class AutofillLoginDetailsViewController: UIViewController { super.viewWillDisappear(animated) if isMovingFromParent { AppDependencyProvider.shared.autofillLoginSession.lastAccessedAccount = nil - } else if authenticator.canAuthenticate() { + } else if authenticator.canAuthenticate() && authenticator.state == .loggedIn { AppDependencyProvider.shared.autofillLoginSession.startSession() } } diff --git a/DuckDuckGo/AutofillLoginListItemViewModel.swift b/DuckDuckGo/AutofillLoginListItemViewModel.swift index 098a6176b4..8bbc5c3f6f 100644 --- a/DuckDuckGo/AutofillLoginListItemViewModel.swift +++ b/DuckDuckGo/AutofillLoginListItemViewModel.swift @@ -23,7 +23,6 @@ import UIKit import Common final class AutofillLoginListItemViewModel: Identifiable, Hashable { - @Published var image = UIImage(systemName: "globe")! var preferredFaviconLetters: String { let accountName = self.account.name(tld: tld, autofillDomainNameUrlMatcher: urlMatcher) @@ -47,20 +46,6 @@ final class AutofillLoginListItemViewModel: Identifiable, Hashable { self.title = account.name(tld: tld, autofillDomainNameUrlMatcher: autofillDomainNameUrlMatcher) self.subtitle = account.username ?? "" self.urlMatcher = autofillDomainNameUrlMatcher - fetchImage() - } - - private func fetchImage() { - FaviconsHelper.loadFaviconSync(forDomain: account.domain, - usingCache: .fireproof, - useFakeFavicon: true, - preferredFakeFaviconLetters: preferredFaviconLetters) { image, _ in - if let image = image { - self.image = image - } else { - self.image = UIImage(systemName: "globe")! - } - } } static func == (lhs: AutofillLoginListItemViewModel, rhs: AutofillLoginListItemViewModel) -> Bool { diff --git a/DuckDuckGo/AutofillLoginSettingsListViewController.swift b/DuckDuckGo/AutofillLoginSettingsListViewController.swift index a7bfb5366e..5207209fd5 100644 --- a/DuckDuckGo/AutofillLoginSettingsListViewController.swift +++ b/DuckDuckGo/AutofillLoginSettingsListViewController.swift @@ -149,7 +149,7 @@ final class AutofillLoginSettingsListViewController: UIViewController { override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - if viewModel.authenticator.canAuthenticate() { + if viewModel.authenticator.canAuthenticate() && viewModel.authenticator.state == .loggedIn { AppDependencyProvider.shared.autofillLoginSession.startSession() } } diff --git a/DuckDuckGo/NetworkProtectionTunnelController.swift b/DuckDuckGo/NetworkProtectionTunnelController.swift index 2c7f98404d..67f9997d03 100644 --- a/DuckDuckGo/NetworkProtectionTunnelController.swift +++ b/DuckDuckGo/NetworkProtectionTunnelController.swift @@ -101,10 +101,10 @@ final class NetworkProtectionTunnelController: TunnelController { // Temporary investigation to see if connection tester is causing energy use issues // To be removed with https://app.asana.com/0/0/1205418028628990/f - options[NetworkProtectionOptionKey.connectionTesterEnabled] = "false" as NSString + options[NetworkProtectionOptionKey.connectionTesterEnabled] = NSNumber(value: false) if let optionKey = Self.enabledSimulationOption?.optionKey { - options[optionKey] = NetworkProtectionOptionValue.true + options[optionKey] = NSNumber(value: true) Self.enabledSimulationOption = nil } diff --git a/DuckDuckGo/Settings.bundle/Root.plist b/DuckDuckGo/Settings.bundle/Root.plist index da3e299a75..45dc9101ea 100644 --- a/DuckDuckGo/Settings.bundle/Root.plist +++ b/DuckDuckGo/Settings.bundle/Root.plist @@ -6,7 +6,7 @@ DefaultValue - 7.88.0 + 7.89.0 Key version Title diff --git a/DuckDuckGo/SyncDebugViewController.swift b/DuckDuckGo/SyncDebugViewController.swift index 5107ad522b..cac0672300 100644 --- a/DuckDuckGo/SyncDebugViewController.swift +++ b/DuckDuckGo/SyncDebugViewController.swift @@ -29,13 +29,15 @@ class SyncDebugViewController: UITableViewController { private let titles = [ Sections.info: "Info", - Sections.models: "Models" + Sections.models: "Models", + Sections.environment: "Environment" ] enum Sections: Int, CaseIterable { case info case models + case environment } @@ -51,6 +53,12 @@ class SyncDebugViewController: UITableViewController { } + enum EnvironmentRows: Int, CaseIterable { + + case toggle + + } + private let bookmarksDatabase: CoreDataDatabase private let sync: DDGSyncing @@ -85,6 +93,7 @@ class SyncDebugViewController: UITableViewController { return titles[section] } + // swiftlint:disable:next cyclomatic_complexity override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) @@ -120,6 +129,17 @@ class SyncDebugViewController: UITableViewController { break } + case .environment: + switch EnvironmentRows(rawValue: indexPath.row) { + case .toggle: + let targetEnvironment: ServerEnvironment = sync.serverEnvironment == .production ? .development : .production + cell.textLabel?.text = sync.serverEnvironment.description + cell.detailTextLabel?.text = "Click to switch to \(targetEnvironment)" + + case .none: + break + } + default: break } @@ -130,6 +150,7 @@ class SyncDebugViewController: UITableViewController { switch Sections(rawValue: section) { case .info: return InfoRows.allCases.count case .models: return ModelRows.allCases.count + case .environment: return EnvironmentRows.allCases.count case .none: return 0 } } @@ -142,6 +163,15 @@ class SyncDebugViewController: UITableViewController { sync.scheduler.requestSyncImmediately() default: break } + case .environment: + switch EnvironmentRows(rawValue: indexPath.row) { + case .toggle: + let targetEnvironment: ServerEnvironment = sync.serverEnvironment == .production ? .development : .production + sync.updateServerEnvironment(targetEnvironment) + UserDefaults.standard.set(targetEnvironment.description, forKey: UserDefaultsWrapper.Key.syncEnvironment.rawValue) + tableView.reloadSections(.init(integer: indexPath.section), with: .automatic) + default: break + } default: break } diff --git a/DuckDuckGo/TabViewController.swift b/DuckDuckGo/TabViewController.swift index b441bff876..37a226049e 100644 --- a/DuckDuckGo/TabViewController.swift +++ b/DuckDuckGo/TabViewController.swift @@ -2281,7 +2281,9 @@ extension TabViewController: SecureVaultManagerDelegate { } func secureVaultManagerIsEnabledStatus(_ manager: SecureVaultManager, forType type: AutofillType?) -> Bool { - let isEnabled = AutofillSettingStatus.isAutofillEnabledInSettings && featureFlagger.isFeatureOn(.autofillCredentialInjecting) + let isEnabled = AutofillSettingStatus.isAutofillEnabledInSettings && + featureFlagger.isFeatureOn(.autofillCredentialInjecting) && + !isLinkPreview let isBackgrounded = UIApplication.shared.applicationState == .background if isEnabled && isBackgrounded { Pixel.fire(pixel: .secureVaultIsEnabledCheckedWhenEnabledAndBackgrounded, diff --git a/DuckDuckGoTests/AutoconsentMessageProtocolTests.swift b/DuckDuckGoTests/AutoconsentMessageProtocolTests.swift index 5c1bcce02e..aae48f81e3 100644 --- a/DuckDuckGoTests/AutoconsentMessageProtocolTests.swift +++ b/DuckDuckGoTests/AutoconsentMessageProtocolTests.swift @@ -133,7 +133,7 @@ final class AutoconsentMessageProtocolTests: XCTestCase { }, message: message ) - waitForExpectations(timeout: 5.0) + waitForExpectations(timeout: 15.0) } @MainActor diff --git a/IntegrationTests/AutoconsentBackgroundTests.swift b/IntegrationTests/AutoconsentBackgroundTests.swift index 93c62c4c23..639a7f37b4 100644 --- a/IntegrationTests/AutoconsentBackgroundTests.swift +++ b/IntegrationTests/AutoconsentBackgroundTests.swift @@ -116,7 +116,7 @@ final class AutoconsentBackgroundTests: XCTestCase { waitForExpectations(timeout: 4) let expectation = expectation(description: "Async call") - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { webview.evaluateJavaScript("window.getComputedStyle(banner).display === 'none'", in: nil, in: .page, completionHandler: { result in switch result { diff --git a/Widgets/LockScreenWidgets.swift b/Widgets/LockScreenWidgets.swift index 1d223db1bb..7ba2e41c5e 100644 --- a/Widgets/LockScreenWidgets.swift +++ b/Widgets/LockScreenWidgets.swift @@ -113,7 +113,7 @@ struct LockScreenWidgetView: View { .resizable() } .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Rectangle().foregroundColor(.white.opacity(0.3))) + .background(Circle().foregroundColor(.white.opacity(0.3))) } }