Repository navigation
MV3 parity upgrade: roadmap steps 2–8 - #3
Draft
kayurachann wants to merge 2 commits into
Draft
kayurachann wants to merge 2 commits into
kayurachann wants to merge 2 commits into
Conversation
Strict blocking no longer spends a regex rule per filter:
- Strict-block rules are plain extensionPath redirects to
strictblock.html; only filters that are themselves regexes need a
regex rule. With the default lists, 108 shared regex slots are used
instead of 1,000, and the 278 strict-block rules dropped for lack of
room are installed again.
- The blocked address is recovered from rule-match, webRequest (when
granted) or navigation events and carried in the page's own history
entry, so it is exact after server redirects, Back/Forward, duplicated
tabs and reloads. When only the navigation start is known the page
says the address is approximate; on the low-memory profile the
matched-rule listener that keeps the worker awake is not used.
- $doc filters in imported lists and My filters get the warning page
with Proceed when strict blocking is on and site access is granted.
- Stock regex rules move into each list's static ruleset (a separate
1,000 pool), validated at build time with Chrome's isRegexSupported
(Chrome 153: 473 of 607 valid); an offline RE2 check guards the load.
Filters Chrome cannot run are counted as not converted.
- Imported lists and My filters get the freed regex capacity
(regex-capacity.js accounts usage per owner); only imported regex
rules are skipped when the pool is full.
- Diagnostics shows regex capacity, skipped built-in regex rules
("Check now") and how the warning page learns the address.
Shared foundations for later steps: dnr-namespaces.js (rule-ID ranges,
priority bands, one DNR write queue), strictblock-rules.js, an
exclusions provider that no longer erases exclusions when strict mode
or site access is turned off, and sender checks for extension pages and
user-script messages.
Tests: unit tests for every module, a package validator for static
regex, and real-Chrome tests (test-strictblock-chrome,
test-static-regex-chrome) run in CI. Compiled-cache revision 5.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
re2-portable.js used the host JS engine as a syntax pre-check. Node 22 (CI) rejects RE2 flag groups such as (?i:abc) which Node 23+ accepts, so the static regex rules packaged by a build depended on the Node version. The JS check now gets a plain group for flag groups; the parser still checks the flags. A bare (?i) stays outside the subset. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or 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
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.
Summary
Implements the roadmap of docs/MV3-LIMITS-RESEARCH-2026-09-24.md, one commit per step. Each step goes through design, implementation, a three-lens review (correctness, tests, security/UX), fixes, and a full verification before it is committed: every test, both lints, both builds and their validators, the new real-Chrome tests, and the auto-update end-to-end test.
$inline-script/$inline-font$badfilteragainst stock, package size$ipaddressDeferred on purpose: the native CNAME companion and the
chrome.debuggerbody-filtering edition (roadmap steps 10–11). They are optional tiers with security costs, which the research recommends against enabling by default.Step 2
$docfilters show the warning page with Proceed, and they gain regex capacity.isRegexSupported(473 of 607 valid on Chrome 153).test-strictblock-chrome(22 pages) andtest-static-regex-chromepass on Standard and Experimental; the auto-update e2e passes.🤖 Generated with Claude Code