Skip to content
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

fix(privacy): Improve cosmetic filtering performance on iOS #27272

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

StephenHeaps
Copy link
Collaborator

@StephenHeaps StephenHeaps commented Jan 17, 2025

  • Update setRulesOnStylesheetThrottled to throttle instead of debounce.
    • Currently we wait for a page to not have any mutations for 200ms before we update the stylesheet. This can result in us knowing about selectors to hide but not hiding them until a page has stopped mutating. By throttling instead, we update the stylesheet at most every 200ms.
  • Cache previously hidden selectors for each eTLD+1 on the tab.
    • When we first inject SelectorsPollerScript.js we provide the page with a initial list of selectors to hide, then we send the remaining selectors on the page to CosmeticFiltersScriptHandler to check against AdblockEngine. The AdblockEngine tells us which selectors to hide, and we send these back to the page to be hidden.
    • By caching these selectors (in memory only, cached per-tab), we can then inject them with the initial when we first inject SelectorsPollerScript.js so we don't have to wait for the round trip from our javascript -> ScriptHandler -> AdblockEngine -> our javascript. This cache is reset when:
      • Tab is closed / browser restart.
      • Tab eTLD+1 is changed.
      • Filter lists are updated.
      • Global shields level (standard/aggressive) is changed.
      • Domain specific shields level is changed.

Resolves brave/brave-browser#42530

Submitter Checklist:

  • I confirm that no security/privacy review is needed and no other type of reviews are needed, or that I have requested them
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally:
    • npm run test -- brave_browser_tests, npm run test -- brave_unit_tests wiki
    • npm run presubmit wiki, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

@StephenHeaps StephenHeaps added CI/skip-android Do not run CI builds for Android CI/skip-macos-x64 Do not run CI builds for macOS x64 CI/skip-windows-x64 Do not run CI builds for Windows x64 CI/skip-macos-arm64 Do not run CI builds for macOS arm64 labels Jan 17, 2025
@StephenHeaps StephenHeaps self-assigned this Jan 17, 2025
@StephenHeaps StephenHeaps force-pushed the privacy/ios-cosmetic-filtering-performance branch from f713600 to 852da71 Compare January 20, 2025 18:06
@StephenHeaps StephenHeaps marked this pull request as ready for review January 21, 2025 00:05
@StephenHeaps StephenHeaps requested a review from a team as a code owner January 21, 2025 00:05
@StephenHeaps StephenHeaps force-pushed the privacy/ios-cosmetic-filtering-performance branch from 5a844a9 to e120887 Compare January 21, 2025 00:29
@StephenHeaps StephenHeaps force-pushed the privacy/ios-cosmetic-filtering-performance branch from e120887 to a98de07 Compare January 23, 2025 18:54
Copy link
Contributor

Chromium major version is behind target branch (132.0.6834.111 vs 133.0.6943.27). Please rebase.

@github-actions github-actions bot added the chromium-version-mismatch The Chromium version on the PR branch does not match the version on the target branch label Jan 27, 2025
@StephenHeaps StephenHeaps force-pushed the privacy/ios-cosmetic-filtering-performance branch from a98de07 to 542448d Compare January 27, 2025 21:21
@github-actions github-actions bot removed the chromium-version-mismatch The Chromium version on the PR branch does not match the version on the target branch label Jan 27, 2025
@StephenHeaps StephenHeaps force-pushed the privacy/ios-cosmetic-filtering-performance branch from 542448d to 76bea3a Compare January 30, 2025 15:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI/skip-android Do not run CI builds for Android CI/skip-macos-arm64 Do not run CI builds for macOS arm64 CI/skip-macos-x64 Do not run CI builds for macOS x64 CI/skip-windows-x64 Do not run CI builds for Windows x64
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve cosmetic filtering performance on iOS
2 participants