Skip to content

Add pixel instrumentation for "Get Desktop Browser"#7786

Merged
catalinradoiu merged 6 commits intodevelopfrom
feature/cradoiu/get-desktop-browser-pixels
Feb 24, 2026
Merged

Add pixel instrumentation for "Get Desktop Browser"#7786
catalinradoiu merged 6 commits intodevelopfrom
feature/cradoiu/get-desktop-browser-pixels

Conversation

@catalinradoiu
Copy link
Copy Markdown
Contributor

@catalinradoiu catalinradoiu commented Feb 20, 2026

Task/Issue URL: https://app.asana.com/1/137249556945/project/72649045549333/task/1213194326544099?focus=true

Description

Added pixels for the "Get Desktop Browser" feature across all user interaction points.
Added pixels for:

  • “Get Dekstop Browser” impression in “Complete setup"
  • “Get Desktop Browser” settings clicked
  • “Get Desktop Browser” modal dismissed
  • Link clicked and “Share link” button clicked

Also defered reading/ writing for getDesktopBrowserSettingDismissed from SettingsDataStore to io dispatcher.

Steps to test this PR

PixeLs

  • Navigate to Settings and verify impression pixel fires when "Get Desktop Browser" appears in complete setup
  • Click "Get Desktop Browser" from complete setup section and verify click pixel with "complete_setup" source
  • Click "Get Desktop Browser" from bottom settings and verify click pixel with "settings" source
  • In the modal, click "Share Download Link" and verify share pixel fires
  • Click the browser URL link and verify link click pixel fires
  • Click "No Thanks" and verify dismissal pixel with "no_thanks" source
  • Hide the complete setup item via menu and verify dismissal pixel with "hide” source

Also the functionality for dismiss, share, hide should work as before.

UI changes

No UI changes


Note

Low Risk
Mostly adds analytics pixel firing and moves a few SettingsDataStore reads/writes onto IO dispatchers; behavior should be unchanged aside from extra async work in UI/receiver code.

Overview
Adds full pixel instrumentation for the Get Desktop Browser funnel, including impression (when the complete-setup item is shown), clicks (with source of settings vs complete_setup), dismissals (with source of no_thanks vs hide), and modal actions for share and link-copy.

Updates settings/desktop-browser code to fire these pixels and to perform getDesktopBrowserSettingDismissed reads/writes on the IO dispatcher (including making the share broadcast receiver asynchronous via goAsync), and extends pixel definitions/enum plus ATB-parameter removal and unit tests to cover the new events.

Written by Cursor Bugbot for commit 6e4d330. This will update automatically on new commits. Configure here.

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@catalinradoiu catalinradoiu changed the title Add the pixels for "Get Desktop Browser" Add pixel instrumentation "Get Desktop Browser" Feb 20, 2026
@catalinradoiu catalinradoiu marked this pull request as ready for review February 20, 2026 15:18
@github-actions
Copy link
Copy Markdown
Contributor

Privacy Review task: https://app.asana.com/0/69071770703008/1213345628793030

@CDRussell CDRussell self-assigned this Feb 20, 2026
@catalinradoiu catalinradoiu changed the title Add pixel instrumentation "Get Desktop Browser" Add pixel instrumentation for "Get Desktop Browser" Feb 20, 2026
# Conflicts:
#	app/src/main/java/com/duckduckgo/app/global/api/PixelParamRemovalInterceptor.kt
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

coroutineScope.launch(dispatcherProvider.io()) {
settingsDataStore.getDesktopBrowserSettingDismissed = true
pendingResult.finish()
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BroadcastReceiver missing exception handling for pendingResult

Medium Severity

The pendingResult.finish() call lacks try-finally protection. If settingsDataStore.getDesktopBrowserSettingDismissed = true throws an exception, pendingResult.finish() never executes, causing the broadcast to hang for up to 10 seconds before timing out. The codebase has a goAsync() helper function (visible in VpnReminderReceiver.kt) that wraps pending result completion in try-finally, but this receiver doesn't use it.

Fix in Cursor Fix in Web

@catalinradoiu catalinradoiu merged commit 8993f62 into develop Feb 24, 2026
14 checks passed
@catalinradoiu catalinradoiu deleted the feature/cradoiu/get-desktop-browser-pixels branch February 24, 2026 07:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants