diff --git a/.github/ISSUE_TEMPLATE/---bug-report.md b/.github/ISSUE_TEMPLATE/---bug-report.md index b9d0ec5da..e27d73793 100644 --- a/.github/ISSUE_TEMPLATE/---bug-report.md +++ b/.github/ISSUE_TEMPLATE/---bug-report.md @@ -18,6 +18,6 @@ assignees: '' ### Device information -* Android device: ? -* Fenix version: ? +* Device vendor / model and Android version: ? +* Firefox for Android version: ? (go to Settings -> About Firefox) diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..64e7e858f --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,62 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 180 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 7 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - pin + - "feature request 🌟" + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: false + +# Label to use when marking as stale +staleLabel: wontfix + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + See: https://github.com/mozilla-mobile/fenix/issues/17373 + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Comment to post when closing a stale Issue or Pull Request. +# closeComment: > +# Your comment here. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` or `pulls` +only: issues + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +# pulls: +# daysUntilStale: 30 +# markComment: > +# This pull request has been automatically marked as stale because it has not had +# recent activity. It will be closed if no further activity occurs. Thank you +# for your contributions. + +issues: + exemptLabels: + - pin + - "feature request 🌟" diff --git a/.github/workflows/build-contributor-pr.yml b/.github/workflows/build-contributor-pr.yml new file mode 100644 index 000000000..b966cb796 --- /dev/null +++ b/.github/workflows/build-contributor-pr.yml @@ -0,0 +1,103 @@ +name: Android build PR +on: [pull_request] +jobs: + run-build: + runs-on: ubuntu-20.04 + if: github.event.pull_request.head.repo.full_name != github.repository + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: "Clean & Assemble Debug" + uses: eskatos/gradle-command-action@v1 + with: + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + arguments: clean app:assembleDebug + + run-testDebugUnitTest: + runs-on: ubuntu-20.04 + if: github.event.pull_request.head.repo.full_name != github.repository + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: "Test Debug Unit Tests" + uses: eskatos/gradle-command-action@v1 + with: + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + arguments: testDebugUnitTest + + run-detekt: + runs-on: ubuntu-20.04 + if: github.event.pull_request.head.repo.full_name != github.repository + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: "Detekt" + uses: eskatos/gradle-command-action@v1 + with: + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + arguments: detekt + - name: Archive detekt results + uses: actions/upload-artifact@v2 + with: + name: detekt report + path: build/reports/detekt.html + + run-ktlint: + runs-on: ubuntu-20.04 + if: github.event.pull_request.head.repo.full_name != github.repository + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: "Ktlint" + uses: eskatos/gradle-command-action@v1 + with: + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + arguments: ktlint + + run-lintDebug: + runs-on: ubuntu-20.04 + if: github.event.pull_request.head.repo.full_name != github.repository + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: "Lint Debug" + uses: eskatos/gradle-command-action@v1 + with: + wrapper-cache-enabled: true + dependencies-cache-enabled: true + configuration-cache-enabled: true + arguments: lintDebug + - name: Archive lint results + uses: actions/upload-artifact@v2 + with: + name: lintDebug report + path: app/build/reports/lint-results-debug.html + diff --git a/.mergify.yml b/.mergify.yml index 1028efadc..21382057c 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -21,7 +21,7 @@ pull_request_rules: conditions: - author=mozilla-l10n-automation-bot - status-success=pr-complete - - files~=(strings.xml) + - files~=(strings.xml|l10n.toml) actions: review: type: APPROVE diff --git a/.taskcluster.yml b/.taskcluster.yml index 4ee1f0b8c..2e71a5c7b 100644 --- a/.taskcluster.yml +++ b/.taskcluster.yml @@ -103,7 +103,7 @@ tasks: $if: > tasks_for in ["action", "cron"] || (tasks_for == "github-pull-request" && pullRequestAction in ["opened", "reopened", "synchronize"]) - || (tasks_for == "github-push" && head_branch[:10] != "refs/tags/") && (head_branch != "staging.tmp") && (head_branch != "trying.tmp") + || (tasks_for == "github-push" && head_branch[:10] != "refs/tags/") && (head_branch != "staging.tmp") && (head_branch != "trying.tmp") && (head_branch[:8] != "mergify/") || (tasks_for == "github-release" && releaseAction == "published" && (ownerEmail != "mozilla-release-automation-bot@users.noreply.github.com") && (ownerEmail != "mozilla-release-automation-bot-staging@users.noreply.github.com")) then: $let: @@ -166,7 +166,7 @@ tasks: routes: $flattenDeep: - checks - - $if: 'level == "3"' + - $if: 'level == "3" || repoUrl == "https://github.com/mozilla-releng/staging-fenix"' then: - tc-treeherder.v2.${project}.${head_sha} # TODO Bug 1601928: Make this scope fork-friendly once ${project} is better defined. This will enable diff --git a/app/build.gradle b/app/build.gradle index dc1be5113..13507c0b3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,12 +41,25 @@ android { buildConfigField "String", "AMO_BASE_URL", "\"https://addons.mozilla.org\"" buildConfigField "String", "AMO_COLLECTION_NAME", "\"7dfae8669acc4312a65e8ba5553036\"" buildConfigField "String", "AMO_COLLECTION_USER", "\"mozilla\"" + // These add-ons should be excluded for Mozilla Online builds. + buildConfigField "String[]", "MOZILLA_ONLINE_ADDON_EXCLUSIONS", + "{" + + "\"uBlock0@raymondhill.net\"," + + "\"firefox@ghostery.com\"," + + "\"jid1-MnnxcxisBPnSXQ@jetpack\"," + + "\"adguardadblocker@adguard.com\"," + + "\"foxyproxy@eric.h.jung\"," + + "\"{73a6fe31-595d-460b-a920-fcc0f8843232}\"," + + "\"jid1-BoFifL9Vbdl2zQ@jetpack\"," + + "\"woop-NoopscooPsnSXQ@jetpack\"" + + "}" // This should be the base URL used to call the AMO API. buildConfigField "String", "AMO_SERVER_URL", "\"https://services.addons.mozilla.org\"" def deepLinkSchemeValue = "fenix-dev" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] // Build flag for "Mozilla Online" variants. See `Config.isMozillaOnline`. @@ -81,13 +94,19 @@ android { applicationIdSuffix ".fenix.debug" resValue "bool", "IS_DEBUG", "true" pseudoLocalesEnabled true + def deepLinkSchemeValue = "fenix-dev" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" + manifestPlaceholders = [ + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": false + ] } nightly releaseTemplate >> { applicationIdSuffix ".fenix" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" def deepLinkSchemeValue = "fenix-nightly" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" - manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue, "requestLegacyExternalStorage": false] } beta releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" @@ -103,7 +122,8 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] } release releaseTemplate >> { @@ -120,7 +140,8 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] } forkDebug { @@ -398,6 +419,16 @@ android.applicationVariants.all { variant -> buildConfigField 'String', 'NIMBUS_ENDPOINT', 'null' println("--") } + +// ------------------------------------------------------------------------------------------------- +// BuildConfig: Set flag for official builds; similar to MOZILLA_OFFICIAL in mozilla-central. +// ------------------------------------------------------------------------------------------------- + + if (project.hasProperty("official") || gradle.hasProperty("localProperties.official")) { + buildConfigField 'Boolean', 'MOZILLA_OFFICIAL', 'true' + } else { + buildConfigField 'Boolean', 'MOZILLA_OFFICIAL', 'false' + } } androidExtensions { @@ -507,6 +538,7 @@ dependencies { implementation Deps.mozilla_feature_top_sites implementation Deps.mozilla_feature_share implementation Deps.mozilla_feature_accounts_push + implementation Deps.mozilla_feature_webauthn implementation Deps.mozilla_feature_webcompat implementation Deps.mozilla_feature_webnotifications implementation Deps.mozilla_feature_webcompat_reporter diff --git a/app/metrics.yaml b/app/metrics.yaml index 5291a91ca..d2c763aca 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -234,6 +234,25 @@ events: notification_emails: - fenix-core@mozilla.com expires: "2021-08-01" + normal_and_private_uri_count: + type: counter + description: | + A counter of URIs visited by the user in the current session, including + page reloads. This includes private browsing. This does not include + background page requests and URIs from embedded pages but may be + incremented without user interaction by website scripts that + programmatically redirect to a new location. + send_in_pings: + - metrics + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17089 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17935 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" preference_toggled: type: event description: | @@ -623,7 +642,7 @@ login_dialog: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" cancelled: type: event description: | @@ -636,7 +655,7 @@ login_dialog: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" saved: type: event description: | @@ -649,7 +668,7 @@ login_dialog: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" never_save: type: event description: | @@ -662,7 +681,7 @@ login_dialog: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" find_in_page: opened: @@ -3859,14 +3878,21 @@ addons: expires: "2021-04-01" startup.timeline: - framework_start: + framework_primary: send_in_pings: - startup-timeline type: timespan - time_unit: nanosecond + time_unit: millisecond description: | The duration the Android framework takes to start before letting us run - code in `*Application.init`. This is calculated from `appInitTimestamp - + code in `*Application.init` when this device has `clock_ticks_per_second` + equal to 100: if it's not equal to 100, then this value is captured in + `framework_secondary`. We split this into two metrics to make it easier + to analyze in GLAM. We split on 100 because when we did our initial brief + analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results + for clocks ticks were overwhelmingly 100. + + The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock tick time unit, which is expected to be less granular than nanoseconds. Therefore, we convert and round our timestamps to clock ticks before @@ -3876,9 +3902,30 @@ startup.timeline: devices, is also reported as a metric bugs: - https://github.com/mozilla-mobile/fenix/issues/8803 + - https://github.com/mozilla-mobile/fenix/issues/17972 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626 - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 + - https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-01" + framework_secondary: + send_in_pings: + - startup-timeline + type: timespan + time_unit: millisecond + description: | + The duration the Android framework takes to start before letting us run + code in `*Application.init` when this device has `clock_ticks_per_second` + not equal to 100. For more details on this metric, see `framework_primary` + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17972 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284 data_sensitivity: - technical notification_emails: @@ -3890,9 +3937,9 @@ startup.timeline: - startup-timeline type: boolean description: | - An error when attempting to record `framework_start` - the application - init timestamp returned a negative value - which is likely indicative of a - bug in the implementation. + An error when attempting to record `framework_primary/secondary` - the + application init timestamp returned a negative value - which is likely + indicative of a bug in the implementation. bugs: - https://github.com/mozilla-mobile/fenix/issues/8803 data_reviews: @@ -3943,6 +3990,38 @@ startup.timeline: - mcomella@mozilla.com expires: "2021-08-01" +perf.startup: + application_on_create: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `FenixApplication.onCreate` in the main process. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17969 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + home_activity_on_create: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `HomeActivity.onCreate`. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17969 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + perf.awesomebar: history_suggestions: send_in_pings: @@ -4083,7 +4162,7 @@ autoplay: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" setting_changed: type: event description: | @@ -4102,7 +4181,7 @@ autoplay: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-02-01" + expires: "2021-08-01" storage.stats: query_stats_duration: @@ -4308,6 +4387,47 @@ tabs: - fenix-core@mozilla.com expires: "2021-08-01" +banner_open_in_app: + displayed: + type: event + description: | + Open in App banner was shown. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/16828 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17049 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + dismissed: + type: event + description: | + User tapped 'dismiss' on Open in App banner. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/16828 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17049 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + go_to_settings: + type: event + description: | + User tapped 'go to settings' on Open in App banner. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/16828 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17049 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + contextual_menu: copy_tapped: type: event @@ -4361,3 +4481,156 @@ contextual_menu: notification_emails: - fenix-core@mozilla.com expires: "2021-06-01" + +engine: + tab_kills: + type: labeled_counter + labels: + - foreground + - background + description: | + How often was the content process of a foreground (selected) or + background tab killed. + bugs: + - https://github.com/mozilla-mobile/android-components/issues/9366 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17864 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + - skaspari@mozilla.com + expires: "2021-12-31" + kill_foreground_age: + type: timespan + time_unit: millisecond + description: | + Measures the age of the engine session of a foreground (selected) tab + at the time its content process got killed. + bugs: + - https://github.com/mozilla-mobile/android-components/issues/9366 + data_reviews: + - TBD + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + - skaspari@mozilla.com + expires: "2021-12-31" + kill_background_age: + type: timespan + time_unit: millisecond + description: | + Measures the age of the engine session of a background tab at the + time its content process got killed. + bugs: + - https://github.com/mozilla-mobile/android-components/issues/9366 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/17864 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + - skaspari@mozilla.com + expires: "2021-12-31" + +android_keystore_experiment: + experiment_failure: + type: event + description: | + Records an instance of an unexpected failure during the experiment + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment, not caught by the other failure handlers. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + get_failure: + type: event + description: | + Unexpected failure when trying to read from secure prefs. + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + get_result: + type: event + description: | + Success when trying to read from secure prefs. + extra_keys: + result: + description: | + Result code identifying whether the read operation returned the + expected value or not. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + write_failure: + type: event + description: | + Unexpected failure when trying to write to secure prefs. + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + write_success: + type: event + description: | + Success in writing to secure prefs. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + reset: + type: event + description: | + An experiment failed, and was reset to run again in the future from a + blank state. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" diff --git a/app/pings.yaml b/app/pings.yaml index ae1474c71..bd726ff12 100644 --- a/app/pings.yaml +++ b/app/pings.yaml @@ -12,8 +12,8 @@ activation: an hashed version of the Google Advertising ID. include_client_id: false bugs: - - 1538011 - - 1501822 + - https://bugzilla.mozilla.com/1538011/ + - https://bugzilla.mozilla.com/1501822/ data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209 notification_emails: @@ -35,14 +35,19 @@ startup-timeline: description: | This ping is intended to provide an understanding of startup performance. - The ping is intended to be captured by performance testing automation to - report results there, in addition to user telemetry. We place these metrics - into their own ping in order to isolate them and make this process easier. - include_client_id: false + In addition to being captured on real devices, the ping data was prematurely + optimized into this separate ping to be isolated from other metrics to be + more easily captured by performance testing automation but that hasn't + happened in practice. We would have removed it but implementation + details don't make that possible: + https://github.com/mozilla-mobile/fenix/issues/17972#issuecomment-781002987 + include_client_id: true bugs: - https://github.com/mozilla-mobile/fenix/issues/8803 + - https://github.com/mozilla-mobile/fenix/issues/17972 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626 + - https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284 notification_emails: - perf-android-fe@mozilla.com - - esmyth@mozilla.com + - mcomella@mozilla.com diff --git a/app/src/androidTest/assets/pages/trackingPage.html b/app/src/androidTest/assets/pages/trackingPage.html index 1a0d735a6..a0a53c954 100644 --- a/app/src/androidTest/assets/pages/trackingPage.html +++ b/app/src/androidTest/assets/pages/trackingPage.html @@ -9,5 +9,71 @@
+ +social-track-digest256:
+ +ads-track-digest256:
+ +analytics-track-digest256:
+ +Fingerprinting: +
test not run+ + +
Cryptomining: + +
+ +Cookie blocking +
+ + + ++ * Facebook-cookies
+ * LinkedIn-cookies + * Twitter-cookies + + +