forked from duckduckgo/Android
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[pull] develop from duckduckgo:develop #10
Open
pull
wants to merge
3,668
commits into
sloppyjuicy:develop
Choose a base branch
from
duckduckgo:develop
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Automated content scope scripts dependency update This PR updates the content scope scripts dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/1202561462274611/1203986899650836/f for further information on what to do next. - [ ] All tests must pass Co-authored-by: daxmobile <[email protected]>
Task/Issue URL: https://app.asana.com/0/1200019156869587/1207815400172115/f ### Description See more information in https://app.asana.com/0/1200019156869587/1207962930855838/f ### Steps to test this PR https://app.asana.com/0/1200019156869587/1208675181927862/f
Task/Issue URL: https://app.asana.com/0/1207908166761516/1208167186867401/f ### Description This is the feature branch for the implementation of https://app.asana.com/0/1207908166761516/1207644558291046/f ### Steps to test this PR See stacked PRs. --------- Co-authored-by: Marcos Holgado <[email protected]> Co-authored-by: Dax The Translator <[email protected]>
Task/Issue URL: https://app.asana.com/0/1198194956794324/1208714463179856/f ### Description 10.x.x.x range (traffic) should go through the VPN when local networks are included. ### Steps to test this PR _Test_ - [x] install from this branch, launch and sign into PPro - [x] in settigns -> VPN -> VPN settings disable `Exclude local Networks` setting - [x] enable VPN - [x] verify 10.x.x.x route is included (you can do that by filtering logcat by `Adding route`) - [x] smoke test apps and browser, all should work normally - [x] in settigns -> VPN -> VPN settings enable `Exclude local Networks` setting and navigate out of VPN settings for the VPN to re-configre - [x] verify 10.x.x.x route is excluded (you can do that by filtering logcat by `Adding route`) - [x] smoke test apps and browser, all should work normally
Task/Issue URL: https://app.asana.com/0/488551667048375/1208721460896060/f ----- - Automated content scope scripts dependency update This PR updates the content scope scripts dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/1202561462274611/1203986899650836/f for further information on what to do next. - [x] All tests must pass Co-authored-by: daxmobile <[email protected]>
Task/Issue URL: https://app.asana.com/0/1198194956794324/1208264562025856/f ### Description Enable SERP Promo for PPro ### Steps to test this PR _Test_ - [x] clean install from this branch - [x] filter logcat by `privacy_pro_access_token` - [x] launch the app - [x] veriry `Setting cookie privacy_pro_access_token=; for domain .subscriptions.duckduckgo.com` logcat shows - [x] open tab and navigate to `https://subscriptions.duckduckgo.com` (this page doesn't exist) - [x] open chrome dev tools (chrome://inspect/#devices) in your desktop and inspect the webview - [x] verify the `privacy_pro_access_token` is set for `.subscriptions.duckduckgo.com` with empty value - [x] open tab and open duckduckgo.com - [x] open chrome dev tools (chrome://inspect/#devices) in your desktop and inspect the webview - [x] verify the `privacy_pro_access_token` is NOT set - [x] go to settings -> sbyscription dev settings and recover your existing account - [x] open tab and navigate to `https://subscriptions.duckduckgo.com` (or refresh an already open one) - [x] open chrome dev tools (chrome://inspect/#devices) in your desktop and inspect the webview - [x] verify the `privacy_pro_access_token` is set for `.subscriptions.duckduckgo.com` with token value - [x] open tab and open duckduckgo.com - [x] verify the `privacy_pro_access_token` is NOT set - [x] remove the PPro account from this device - [x] open tab and navigate to `https://subscriptions.duckduckgo.com` (or refresh an already open one) - [x] verify the `privacy_pro_access_token` is set for `.subscriptions.duckduckgo.com` with empty value
Task/Issue URL: https://app.asana.com/0/414730916066338/1208721570762160 ### Description Use the checkout action to fetch all tags, instead of fetching them manually ### Steps to test this PR https://github.com/duckduckgo/Android/actions/runs/11741977861/workflow
Task/Issue URL: https://app.asana.com/0/488551667048375/1208214707691913/f ### Description Remove the loading bar experiment. ### Steps to test this PR _Bottom Address Bar_ - [x] Go to “Settings” > “Appearance" - [x] Verify that the “Address Bar” option is available _URI Loaded_ - [x] Open a page and wait for the loading bar to fully load - [x] Verify that `m_uri_loaded` pixel is sent _URI Loaded (Disabled)_ - [x] Load the privacy config linked in the task - [x] Open a page and wait for the loading bar to fully load - [x] Verify that `m_uri_loaded` pixel is not sent _Pull to refresh_ - [x] Pull to refresh - [x] Verify that `m_browser_pull_to_refresh` pixel is sent - [x] Verify that `m_refresh_action_daily` pixel is sent - [x] Pull to refresh again - [x] Verify that only `m_browser_pull_to_refresh` pixel is sent _Menu refresh_ - [x] Fresh install - [x] Refresh from the overflow menu - [x] Verify that `m_nav_r_p` pixel is sent - [x] Verify that `m_refresh_action_daily` pixel is sent - [x] Refresh from the overflow menu again - [x] Verify that only `m_nav_r_p` pixel is sent _Feedback_ - [x] Go to “Settings" > “About” > “Share Feedback” - [x] Share feedback - [x] Verify that `mfbs_*` pixel is sent
- Automated content scope scripts dependency update This PR updates the content scope scripts dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/1202561462274611/1203986899650836/f for further information on what to do next. - [ ] All tests must pass Co-authored-by: daxmobile <[email protected]>
…5096) Task/Issue URL: https://app.asana.com/0/608920331025315/1207446004465151/f ### Description Sets up new remote config handling for autofill subfeature: `canImportFromGooglePasswordManager` This dictates whether we offer up the option to import passwords directly from Google Password Manager or not. Additional config: | Key | Type | Description | |--------|--------|--------| | `launchUrl` | `String` | The initial URL to launch for Google Password Manager | | `javascriptConfig` | `String` | The config to pass onto the JS layer handling GPM imports | ### Steps to test this PR - QA optional; they'll be tested more easily in the branches above **Optional** - [x] Apply patch below - [x] Fresh install, launch app and allow time for remote config to be downloaded - [x] Open `Device Explorer` and check values look correct in `shared_prefs/com.duckduckgo.feature.toggle.autofill.xml` ### Patch ``` Index: privacy-config/privacy-config-api/src/main/java/com/duckduckgo/privacy/config/api/PrivacyFeatureName.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/privacy-config/privacy-config-api/src/main/java/com/duckduckgo/privacy/config/api/PrivacyFeatureName.kt b/privacy-config/privacy-config-api/src/main/java/com/duckduckgo/privacy/config/api/PrivacyFeatureName.kt --- a/privacy-config/privacy-config-api/src/main/java/com/duckduckgo/privacy/config/api/PrivacyFeatureName.kt (revision Staged) +++ b/privacy-config/privacy-config-api/src/main/java/com/duckduckgo/privacy/config/api/PrivacyFeatureName.kt (date 1730729845774) @@ -27,4 +27,5 @@ TrackingParametersFeatureName("trackingParameters"), } -const val PRIVACY_REMOTE_CONFIG_URL = "https://staticcdn.duckduckgo.com/trackerblocking/config/v4/android-config.json" +// in use for ship review build #2 const val PRIVACY_REMOTE_CONFIG_URL = "https://jsonblob.com/api/1299412335805194240" +const val PRIVACY_REMOTE_CONFIG_URL = "https://jsonblob.com/api/1301563859532636160" ```
Task/Issue URL: https://app.asana.com/0/1208589375218614/1208715446356293/f ### Description Remove unused API ### Steps to test this PR QA-optional
…tions during search (#5251) Task/Issue URL: https://app.asana.com/0/1200905986587319/1208698915378414/f ### Description Added temporary pixel for android features enabled during search. ### Steps to test this PR See Asana -> https://app.asana.com/0/0/1208698915378414/1208697268653508/f ### NO UI changes
Task/Issue URL: https://app.asana.com/0/414730916066338/1208730920240537/f ### Description When creating a tag, we weren’t checking out the develop branch. This is because action/checkout doesn’t check a branch out, but the latest commit. ### Steps to test this PR https://github.com/duckduckgo/Android/actions/runs/11768521519/job/32778443538
Task/Issue URL: https://app.asana.com/0/1174433894299346/1208236772414095/f ### Description This PR adds the final workflow for production releases ### Steps to test this PR Run job
Task/Issue URL: ### Description ### Steps to test this PR _Feature 1_ - [ ] - [ ] ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
Task/Issue URL: https://app.asana.com/0/1202552961248957/1208676143593571/f ### Description ### Steps to test this PR _Feature 1_ - [ ] Smoke test Duck Player - [ ] ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
Task/Issue URL: https://app.asana.com/0/1202552961248957/1208700688753511/f ### Description ### Steps to test this PR _Feature 1_ - [x] Set Duck Player to Always Ask (default) - [x] Search for a video - [x] Click a search result - [x] Click button to watch on Duck Player - [x] Check `duckplayer_view-from_serp` is fired and no query params are added _Feature 1_ - [x] From the last use case, press watch on YouTube - [x] Refresh the video on YouTube so the overlay is shown - [x] Click button to watch on Duck Player - [x] Check `duckplayer_view-from_youtube_main-overlay` is fired and no query params are added _Feature 1_ - [x] Set Duck Player to "Always" - [x] Search for a video - [x] Click a search result - [x] Check `duckplayer_view-from_serp` is fired and no query params are added _Feature 1_ - [x] Set Duck Player to "Always" - [x] Open a YouTube video through the omnibar - [x] Check `duckplayer_view-from_youtube_automatic` is fired and no query params are added ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
Task/Issue URL: https://app.asana.com/0/1207418217763355/1208722298581325/f ### Description This PR fixes an issue with bottom omnibar scrolling. ### Steps to test this PR _The fix_ - [x] Enable the bottom omnibar position - [x] Open some website - [x] Slowly scroll the site up and down - [x] Observe that the bottom omnibar is slowly hidden & shown - [x] Notice there is no gap and the browser view moves with the omnibar _Smoke tests_ - [x] Verify the bottom bar is displayed correctly in autocomplete - [x] Verify the bottom bar is displayed correctly during onboarding - [x] Verify the bottom bar is displayed correctly on NTP
Task/Issue URL: https://app.asana.com/0/488551667048375/1208740714999313/f ### Description Separates non-editable state from disabled state of `DaxTextInput`. An input can be: - non-editable but enabled (i.e., read-only text that isn't greyed out, with buttons in the view still working) - disabled (i.e., non-editable and greyed out, and all buttons disabled too) ### Steps to test this PR **Passwords** - [x] Go to Passwords and tap ➕ to manually start adding a password - [x] Verify the input fields behave correctly - [x] Save the password; verify the fields correctly go to read-only mode (non-editable state), and that the buttons on the fields work (like copy password, reveal password etc...) - [x] Edit the password again and verify the fields correctly go to editable state **App launch setting** - [x] Go to `Settings` -> `General` -> `Show on App Launch` - [x] Verify the URL is greyed out and non-editable when it is not selected - [x] Select it, and verify the URL is no longer greyed out, and is now editable - [x] Unselect it again and make sure that works correctly **Anything else that might be affected?** --------- Co-authored-by: David González <[email protected]>
Task/Issue URL: https://app.asana.com/0/1198194956794324/1209235567837627/f ### Description Fix scheduled runs the ps-analysis GHA ### Steps to test this PR Code review
Task/Issue URL: https://app.asana.com/0/72649045549333/1206048666874234/f ### Description Increases the ratio of complete credential saves by being able to capture a username-only form submission, and then re-attach it to a nearby password-only form submission. This is useful for scenarios like resetting passwords and multi-step logins. ### Steps to test this PR Logcat filter: `message~:"partial save" | message~:”backfill"` **Simulating a multi-step login form** - [x] Ensure no passwords currently saved (or none for autofill.me at least) - [x] Visit https://autofill.me/form/login-simple - [x] Enter username `test` - [x] Leave password blank - [x] Hit `Login` button (this simulates getting the first part of a multi-step login form) - [x] Now clear the username - [x] Enter password (>=4 characters) - [x] Hit `Login` button (this is submitting only a password now, simulating the second part of a multi-step login form) - [x] Save password when prompted, then go view it in the Password Management view (e.g., tap on `View` in snackbar) - [x] Verify it has `username=test` and password matches what you provided (i.e., the username was _backfilled_ because the partial form submission’s username was later applied to the final form submission which didn’t have the username) **Updating password for the above (not backfilling)** - [x] Visit https://autofill.me/form/login-simple (decline offer to autofill) - [x] Enter username `test` - [x] Enter a different password than what is stored already - [x] Hit `Login` button; verify you are offered to update the password - [x] Verify that when you decline, the saved password hasn’t changed - [x] Then repeat and accept the offer to update the password; verify it was updated correctly (and there are no dupes for that username) **Updating password (with backfilling)** - [x] Visit https://autofill.me/form/login-simple (decline offer to autofill) - [x] Enter username `test` - [x] Leave password blank - [x] Hit `Login` button (this simulates getting the first part of a multi-step login form) - [x] Now clear the username - [x] Enter a different password than what is stored already - [x] Hit `Login` button; verify you are offered to update the password - [x] Verify `Backfilling username [test] from partial save` in logs - [x] Test both updating password when prompted, and declining and make sure in both cases the password is correct and there are no duplicates for that username **Password reset flow (with backfilling, automatic password generation)** - [x] Visit scribd.com and create an account if you don’t have one (recommend using email address that you can get on the device you’re testing on, as you’ll need to click a reset password link) - [x] (Sign out if signed in) - [x] Click **Forgot password?** from scribd.com - [x] Enter your email address - [x] Get the email from them, and click the link to reset your password **within 3 minutes** - [x] Choose to use a generated password when prompted (note the last few characters so you can verify it later) - [x] Verify the credential is saved. Verify the password is correct and there are no duplicate credentials. - [x] Repeat this flow when you have a password saved for that username already. This time after accepting autogenerated password, verify that you are prompted to update it with the new password. **Password reset flow (with backfilling, manual password entry)** - [x] Visit scribd.com (sign out if signed in) - [x] Click **Forgot password?** from scribd.com - [x] Enter your email address - [x] Get the email from them, and click the link to reset your password **within 3 minutes** - [x] Choose to manually enter a password that conforms to their rules - [x] Verify you are prompted to update your password (note, **update**, not to save a new one) - [x] Agree to `Update Password`. Verify the password is correct and there are no duplicate credentials. **Password reset flow (no backfilling, automatic password generation)** - [x] Visit scribd.com (sign out if signed in) - [x] Click **Forgot password?** from scribd.com - [x] Enter your email address - [x] **Wait > 3 minutes** - [x] Get the email from them, and click the link to reset your password - [x] Choose to use a generated password when prompted (note the last few characters so you can verify it later) - [x] Verify you see a snackbar that password has been saved. Note, this is a _separate_ credential that is saved with no username attached (i.e, existing behaviour because this was ineligible for backfilling) **Password reset flow (no backfilling, manual password entry)** - [x] Visit scribd.com (sign out if signed in) - [x] Click **Forgot password?** from scribd.com - [x] Enter your email address - [x] **Wait > 3 minutes** - [x] Get the email from them, and click the link to reset your password - [x] Choose to manually enter a password - [x] Verify you are prompted to save ❓. Note, this is a _separate_ credential that is saved with no username attached (i.e, existing behaviour because this was ineligible for backfilling) **Email Protection, autofilling personal duck address contributes as username backfill candidate** - [x] Be signed into Email Protection - [x] remove any saved logins for https://privacy-test-pages.site - [x] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [x] Tap on email field and autofill using your **personal** duck address. Do not submit the form. - [x] Now navigate to https://privacy-test-pages.site/autofill/password-update.html (use same tab) - [x] In the **2nd form**, enter password manually into the `New Password` field (can leave other two password fields blank) and tap the button - [x] Verify you are prompted to save the password, and it successfully joins your duck address to the password you entered - [x] Repeat this, but use an autogenerated password. Verify this is autosaved (i.e., user not prompted) into a single, complete credential **Email Protection, autofilling private duck address contributes as username backfill candidate** - [x] Be signed into Email Protection - [x] remove any saved logins for https://privacy-test-pages.site - [x] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [x] Tap on email field and autofill using your **private** duck address. Do not submit the form. - [x] Now navigate to https://privacy-test-pages.site/autofill/password-update.html (use same tab) - [x] In the **2nd form**, enter password manually into the `New Password` field (can leave other two password fields blank) and tap the button - [x] Verify this is autosaved (i.e., user not prompted) into a single, complete credential - [x] Repeat this, but use an autogenerated password. Verify this is autosaved (i.e., user not prompted) into a single, complete credential **Disable feature flag** - [x] Disable `partialFormSaves` - [x] Ensure no passwords currently saved for autofill.me - [x] Visit https://autofill.me/form/login-simple - [x] Enter username `test` - [x] Leave password blank - [x] Hit `Login` button (this simulates getting the first part of a multi-step login form) - [x] Now clear the username - [x] Enter password (>=4 characters) - [x] Hit `Login` button (this is submitting only a password now, simulating the second part of a multi-step login form) - [x] Accept to save the password. Verify this has no username (since it wasn’t allowed to backfill it) ### Ensuring existing business rules are maintained **Autofill personal duck address and autogenerated password** - [ ] remove any saved logins for https://privacy-test-pages.site - [ ] Be signed into Email Protection - [ ] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [ ] Tap on email field and autofill using your **personal** duck address - [ ] Tap on password field and autofill using autogenerated password - [ ] Sign `Sign Up` button, verify a single, complete credential is saved with correct username+password **Autofill private duck address and autogenerated password** - [ ] remove any saved logins for https://privacy-test-pages.site - [ ] Be signed into Email Protection - [ ] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [ ] Tap on email field and autofill using your **private** duck address - [ ] Tap on password field and autofill using autogenerated password - [ ] Sign `Sign Up` button, verify a single, complete credential is saved with correct username+password **Autofill personal duck address and manual password** - [ ] remove any saved logins for https://privacy-test-pages.site - [ ] Be signed into Email Protection - [ ] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [ ] Tap on email field and autofill using your **personal** duck address - [ ] Tap on password field and decline autogenerated password. Enter your own one (> 4 characters) - [ ] Sign `Sign Up` button, verify you are prompted to save and upon accepting, a single, complete credential is saved with correct username+password **Autofill private duck address and manual password** - [ ] remove any saved logins for https://privacy-test-pages.site - [ ] Be signed into Email Protection - [ ] Visit https://privacy-test-pages.site/autofill/autoprompt/0-standard-signup-form.html - [ ] Tap on email field and autofill using your **private** duck address - [ ] Tap on password field and decline autogenerated password. Enter your own one (> 4 characters) - [ ] Sign `Sign Up` button, verify you are prompted to save and upon accepting, a single, complete credential is saved with correct username+password
Task/Issue URL: https://app.asana.com/0/1201807753394693/1209226459318682/f ### Description Include `offerId` argument in subscriptions purchase method ### Steps to test this PR _Pre steps_ - [x] Apply patch to being able to test subscriptions in staging _Privacy Pro Eligible US_ - [x] Make sure you are US eligible - [x] Install form branch - [x] Go to Settings - [x] Check you can see Privacy Pro option - [x] Tap on that option - [x] Check Subscriptions page looks as expected with full price subscriptions - [x] Purchase any of the options - [x] Check Free Trial is not offered when GooglePlay dialog for purchase is shown - [x] Subscribe - [x] Check everything works as expected _Privacy Pro Eligible ROW (Optional)_ - [x] Make sure you are ROW eligible - [x] Install form branch - [x] Check browser works as expected - [x] Go to Settings - [x] Check you can see Privacy Pro option - [x] Tap on that option - [x] Check Subscription page looks as expected - [x] Purchase any of the options and check it works well - [x] Go to Subscription Settings - [x] Check everything works as expected ### No UI changes
…er (#5392) Task/Issue URL: https://app.asana.com/0/1202926619870900/1208976665268815/f ### Description ### Steps to test this PR Logcat filter: `message~:"Determined that username" message~:"Storing username " message~:"partial form" message~:"Pixel sent:..*backf”` **Saving 1st login (onboarding prompt)** - [x] Clean install - [x] Visit https://autofill.me/form/login-simple - [x] For username, enter `test` and enter a password (>= 4 characters) - [x] In logs, verify `autofill_logins_save_login_inline_onboarding_displayed` has `backfilled=false` - [x] Agree to save, and verify `autofill_logins_save_login_inline_onboarding_confirmed` has `backfilled=false` - [x] Delete the login - [x] Repeat the test again and this time verify `backfilled=false` for: - [x] `m_autofill_logins_save_login_inline_displayed` (save dialog displayed) - [x] `m_autofill_logins_save_login_inline_dismissed` (save dialog dismissed) - [x] `m_autofill_logins_save_login_inline_confirmed` (save dialog confirmed) - [x] (Keep this saved login around for the next test….) **Updating password (with backfilling)** - [x] Visit https://autofill.me/form/login-simple and decline offer to autofill - [x] Enter username `test` - [x] Leave password empty, and hit the `Login` button (to simulate a partial save) - [x] Clear the username - [x] Enter a different password than what is stored already - [x] Hit the `Login` button - [x] Verify in log that for `m_autofill_logins_update_password_inline_displayed`, `backfilled=true` - [x] Dismiss the dialog, and verify that for `m_autofill_logins_update_password_inline_dismissed`, `backfilled=true` - [x] Repeat from **Clear the username** step, and this time accept to update the password. Verify that `m_autofill_logins_update_password_inline_confirmed` has `backfilled=true` **Updating password (without backfilling)** - [x] Add a single login for `autofill.me` with `username=test` and set a password for it (deleting any others you have) - [x] Visit https://autofill.me/form/login-simple and decline offer to autofill - [x] Enter username `test` - [x] Enter a different password than what is stored already - [x] Hit the `Login` button - [x] Verify in log that for `m_autofill_logins_update_password_inline_displayed`, `backfilled=false` - [x] Dismiss the dialog, and verify that for `m_autofill_logins_update_password_inline_dismissed`, `backfilled=false` - [x] Repeat and this time accept to update the password. Verify that `m_autofill_logins_update_password_inline_confirmed` has `backfilled=false`
Task/Issue URL: https://app.asana.com/0/414730916066338/1209239612696930/f - Automated content scope scripts dependency update This PR updates the content scope scripts dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/1202561462274611/1203986899650836/f for further information on what to do next. - [x] All tests must pass Co-authored-by: daxmobile <[email protected]>
Task/Issue URL: https://app.asana.com/0/488551667048375/1209239539307487/f - Automated reference tests dependency update This PR updates the reference tests dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/0/1203766026095653/f for further information on what to do next. - [x] All tests must pass Co-authored-by: daxmobile <[email protected]>
Task/Issue URL: https://app.asana.com/0/1205648422731273/1209247061971056/f ### Description This PR adds two pixels to monitor potential issues with validating or storing auth v2 tokens. ### Steps to test this PR QA-optional ### No UI changes
Task/Issue URL: https://app.asana.com/0/1205008441501016/1209225018365506/f ### Description ### Steps to test this PR No QA needed, not easy to reproduce ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
Task/Issue URL: https://app.asana.com/0/inbox/1157893581871899/1209241492038549/1209247138084841 ### Description This PR fixes the non showing of the PopupMenu, by ensuring there’s a default width. ### Steps to test this PR _Test trailing icons in_ - [x] Bookmarks - [x] Downloads - [x] Fireproof sites - [x] Unprotected sites - [x] Sync - Synced devices - [x] My Apps (AppTP) - [x] Site Permissions
Task/Issue URL: https://app.asana.com/0/1205782359654716/1209252104628635/f ### Description - Renamed getUserValues to getAIChatNativeHandoffData - Added getAIChatNativeConfigValues - - This method is the same as getAIChatNativeHandoffData but does not contain a payload. ### Steps to test this PR _Apply the patch linked in the task_ _Standard flow_ - [ ] Search for “bread recipe” (You may need to log in) - [ ] Tap the “Ask AI Chat” button - [ ] Verify that the dedicated WebView is opened with “bread recipe” auto-prompted _DuckAssist_ - [ ] Go to settings in SERP > AI features - [ ] Change the setting to show DuckAssist often - [ ] Change the language to English(US) - [ ] Search for “how tall is a giraffe” (You should see “DuckAssist”) - [ ] Tap the “Ask AI Chat” button - [ ] Verify that the dedicated WebView is opened _Chat tab pill button_ - [ ] Tap the small chat button at the top of SERP - [ ] Verify that the dedicated WebView is opened with the prompt pre-filled
Task/Issue URL: https://app.asana.com/0/1202552961248957/1209246799465881/f ### Description Replaced hardcoded strings with string resources in the app launch settings screen for better localization support. Updated text references for "Last Opened Tab," "New Tab Page," and "Specific Page" options. ### Steps to test this PR _String Resources Implementation_ - [x] Navigate to Show on App launch settings - [x] Verify "Last Opened Tab" displays correctly from string resources - [x] Verify "New Tab Page" displays correctly from string resources - [x] Verify "Specific Page" displays correctly from string resources - [x] Test in different locales to ensure proper translation support ### UI changes | Before | After | | ------ | ----- | |![Screenshot_20250127_160409](https://github.com/user-attachments/assets/39c0ed22-a23a-4fe4-b137-c88cf04f2cf1)|![Screenshot_20250127_161411](https://github.com/user-attachments/assets/40026550-b30a-46bd-9e9e-89b45362c4cc)|
Task/Issue URL: https://app.asana.com/0/488551667048375/1209252957928805/f ### Description Updates the password management screen so that popup menus (triggered from a password’s overflow menu) take on the default size instead of specifying a custom width. ### Steps to test this PR - [x] On a phone, visit `Settings->Passwords`, manually add a password, then return to the password list view. - [x] Tap on the password’s overflow, and verify the sizing of the popup menu looks ok - [x] Flip to landscape, and check it still looks good. - [x] As a final check, keep it in landscape and leave the screen. re-enter password management screen and check the overflow size is still good. - [x] Repeat on a tablet. Co-authored-by: Craig Russell <[email protected]>
Task/Issue URL: https://app.asana.com/0/488551667048375/1209261327263714/f ----- - Automated content scope scripts dependency update This PR updates the content scope scripts dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/1202561462274611/1203986899650836/f for further information on what to do next. - [x] All tests must pass Co-authored-by: daxmobile <[email protected]>
…5551) Task/Issue URL: https://app.asana.com/0/1198194956794324/1209242164061666/f ### Description Ensure all custom views cancel coroutineScope ### Steps to test this PR Smoke tests features that related to the custom view changes
Task/Issue URL: https://app.asana.com/0/72649045549333/1209267733740226/f ### Description Added new method in `CtaViewModel` to check if all in-context dialogs have been shown ### Steps to test this PR - [x] Tests pass ### No UI changes
Task/Issue URL: https://app.asana.com/0/488551667048375/1209277179409140/f ----- - Automated reference tests dependency update This PR updates the reference tests dependency to the latest available version and copies the necessary files. If tests have failed, see https://app.asana.com/0/0/1203766026095653/f for further information on what to do next. - [x] All tests must pass Co-authored-by: daxmobile <[email protected]>
Task/Issue URL: https://app.asana.com/0/72649045549333/1207151848931036/f Also includes: https://app.asana.com/0/72649045549333/1208870183150418/f ### Description * Add logic to keep a malicious site dataset up-to-date * Add blocking algorithm for malicious sites (temporarily show a snackbar whenever a site is identified as malicious) * Add algorithm to determine whether a URL is malicious or not. Details are described [here](https://app.asana.com/0/481882893211075/1207273224076497/f) (Approach A, _"Implement MaliciousSiteDetection client library that"_ section). API was discussed [here](https://app.asana.com/0/1202552961248957/1208934234411796/f) ### Steps to test this PR _Pre-requisites_ - [x] Enable `enableMaliciousSiteProtection` under `androidBrowserConfig` > [!NOTE] > Since this implementation only shows a toast, my recommendation is to do the testing along with #5416 _Feature 1_ - [x] Open https://privacy-test-pages.site/security/badware/, check snackbar isn't shown - [x] Check a Snackbar informing of a malicious site is shown for the following tests - [ ] [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [ ] [Standard Malware Test](https://privacy-test-pages.site/security/badware/malware.html) - [ ] [Phishing iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-iframe-loader.html) - [ ] [Phishing JS Redirector (Direct)](https://privacy-test-pages.site/security/badware/phishing-js-redirector-helper.html) - [ ] [Phishing JS Redirector (Indirect)](https://privacy-test-pages.site/security/badware/phishing-js-redirector.html) - [ ] [Phishing Legit iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-legit-iframe-loader.html) - [ ] [Phishing Redirect via Meta Refresh (Not Flagged in Dataset)](https://privacy-test-pages.site/security/badware/phishing-meta-redirect-clean.html) - [ ] [Phishing Redirect via Meta Refresh (Flagged in Dataset)](https://privacy-test-pages.site/security/badware/phishing-meta-redirect.html) - [ ] [Phishing Open via Popups](https://privacy-test-pages.site/security/badware/phishing-popups.html) - [ ] [Phishing Opening with URL Tampering](https://privacy-test-pages.site/security/badware/phishing-url-tampering.html) - [ ] [Phishing Form Submission](https://privacy-test-pages.site/security/badware/phishing-form-submission.html) -> Submit form - [ ] [Phishing Service Worker](https://privacy-test-pages.site/security/badware/phishing-service-worker.html) - Only navigate, not fetch - [ ] [HTTP 301 Redirect to Main Phishing Test Page](https://privacy-test-pages.site/security/badware/phishing-redirect/) - [ ] [HTTP 302 Redirect to Main Phishing Test Page](https://privacy-test-pages.site/security/badware/phishing-redirect/302) - [ ] [HTTP Redirect to Phishing JS Redirector (Indirect)](https://privacy-test-pages.site/security/badware/phishing-redirect/js) - [ ] [HTTP Redirect to Phishing JS Redirector (Direct)](https://privacy-test-pages.site/security/badware/phishing-redirect/js2) - [ ] [HTTP Redirect to Phishing iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-redirect/iframe) - [ ] [HTTP Redirect to Clean Meta Refresh Redirector](https://privacy-test-pages.site/security/badware/phishing-redirect/meta) - [ ] [HTTP Redirect to Flagged Meta Refresh Redirector](https://privacy-test-pages.site/security/badware/phishing-redirect/meta2) ### UI changes n/a, toast is temporary, an error page will be added in the next PR
Task/Issue URL: https://app.asana.com/0/72649045549333/1208836754662807/f ### Description ### Steps to test this PR _Pre-requisites_ - [ ] Enable maliciousSiteProtection and enableMaliciousSiteProtection RC flags _Feature 1_ - [ ] Open https://privacy-test-pages.site/security/badware/, check snackbar isn't shown - [ ] Check a Snackbar informing of a malicious site is shown for the following tests - [ ] [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [ ] [Standard Malware Test](https://privacy-test-pages.site/security/badware/malware.html) - [ ] [Phishing iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-iframe-loader.html) - [ ] [Phishing JS Redirector (Direct)](https://privacy-test-pages.site/security/badware/phishing-js-redirector-helper.html) - [ ] [Phishing JS Redirector (Indirect)](https://privacy-test-pages.site/security/badware/phishing-js-redirector.html) - [ ] [Phishing Legit iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-legit-iframe-loader.html) - [ ] [Phishing Redirect via Meta Refresh (Not Flagged in Dataset)](https://privacy-test-pages.site/security/badware/phishing-meta-redirect-clean.html) - [ ] [Phishing Redirect via Meta Refresh (Flagged in Dataset)](https://privacy-test-pages.site/security/badware/phishing-meta-redirect.html) - [ ] [Phishing Open via Popups](https://privacy-test-pages.site/security/badware/phishing-popups.html) - [ ] [Phishing Opening with URL Tampering](https://privacy-test-pages.site/security/badware/phishing-url-tampering.html) - [ ] [Phishing Form Submission](https://privacy-test-pages.site/security/badware/phishing-form-submission.html) -> Submit form - [ ] [Phishing Service Worker](https://privacy-test-pages.site/security/badware/phishing-service-worker.html) - Only navigate, not fetch - [ ] [HTTP 301 Redirect to Main Phishing Test Page](https://privacy-test-pages.site/security/badware/phishing-redirect/) - [ ] [HTTP 302 Redirect to Main Phishing Test Page](https://privacy-test-pages.site/security/badware/phishing-redirect/302) - [ ] [HTTP Redirect to Phishing JS Redirector (Indirect)](https://privacy-test-pages.site/security/badware/phishing-redirect/js) - [ ] [HTTP Redirect to Phishing JS Redirector (Direct)](https://privacy-test-pages.site/security/badware/phishing-redirect/js2) - [ ] [HTTP Redirect to Phishing iFrame Loader](https://privacy-test-pages.site/security/badware/phishing-redirect/iframe) - [ ] [HTTP Redirect to Clean Meta Refresh Redirector](https://privacy-test-pages.site/security/badware/phishing-redirect/meta) - [ ] [HTTP Redirect to Flagged Meta Refresh Redirector](https://privacy-test-pages.site/security/badware/phishing-redirect/meta2) _Feature 2_ - [x] Open [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [x] Wait for the error page to show - [ ] Check the globe icon is shown instead of privacy shield. Known issue, will be addressed as a follow-up. See https://app.asana.com/0/0/1209270355529416/f - [x] Tap on the omnibar and load the same page again - [x] Check the error is shown again _Feature 3_ - [x] Open wikipedia - [x] On the same tab, navigate to [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [x] Wait for the error page to show - [x] Tap on the omnibar and load the same page again - [x] Check the error is shown again _Feature 4_ - [x] Open [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [x] Wait for the error page to show - [x] Tap on the omnibar and navigate to a different site - [x] Check navigation is performed normally _Feature 5_ - [x] Open [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [x] Wait for the error page to show - [x] Tap on "Leave This Site" - [x] Check current tab is closed and a new one is opened _Feature 6_ - [x] Open [Standard Phishing Test](https://privacy-test-pages.site/security/badware/phishing.html) - [x] Wait for the error page to show - [x] Tap on "Advanced" - [x] Tap on "Accept Risk and Visit Site" - [x] Check the site is loaded - [x] Reload the site - [x] Check it's loaded normally, no error page shown - [x] Kill the app - [x] Open it again and load the same site again - [x] Check error page is now shown ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)| --------- Co-authored-by: laghee <[email protected]>
Task/Issue URL: https://app.asana.com/0/1198194956794324/1209254818228169/f ### Description Remove unused BackupAgentScope annotation ### Steps to test this PR NA, code review
Task/Issue URL: https://app.asana.com/0/1202552961248957/1206857429109107/f ### Description try-catch the call to queryIntentActivities and return empty list instead ### Steps to test this PR NA, just code review
Task/Issue URL: https://app.asana.com/0/1209290303492896/1209290303492896 Autoconsent Release: https://github.com/duckduckgo/autoconsent/releases/tag/v12.8.0 ## Description Updates Autoconsent to version [v12.8.0](https://github.com/duckduckgo/autoconsent/releases/tag/v12.8.0). ### Autoconsent v12.8.0 release notes See release notes [here](https://github.com/duckduckgo/autoconsent/blob/v12.8.0/CHANGELOG.md) ## Steps to test This release has been tested during Autoconsent development. You can check the release notes for more information. 1. Make sure that there's no unexpected failures in CI checks 2. (optional) smoke test some of the sites mentioned in the release notes 3. If there are problems, reach out to a CPM DRI Co-authored-by: muodov <[email protected]>
#5535) Task/Issue URL: https://app.asana.com/0/1125189844152671/1209213126411295/f ### Description This PR stores the full enrollment date for better comparison but still truncates it when sending pixels. ### Steps to test this PR - [ ] Tests should pass - [ ] Load https://www.jsonblob.com/api/1304478638945460224 to enroll in an experiment - [ ] Filter the logcat by "pixel sent" - [ ] You should see an experiment_enroll pixel sent with the enrollment date truncated - [ ] Make a search - [ ] You should see an experiment_metric... pixel sent with the enrollment date truncated - [ ] Check shared prefs `com.duckduckgo.feature.toggle.blocklist`. The enrollment date for `blockList_tdsNextExperimentBaselineBackup` should have the full date rather than be truncated to days.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )