Contributing to Page Extractor
Start with the type definitions for the caller-facing contract, then follow a request from the parent actor into the child actor. General page traversal has its own module. Keep site-specific and observability code out of that path.
Design guidelines
Treat page data as untrusted. Review changes to hidden navigation, permissions, actor replacement, and cleanup for security impact.
Avoid mutating the live page to make extraction easier. If a page interaction is unavoidable, review it as a separate behavior.
Reject a node with cheap checks before you query style or geometry. Preserve early termination and caller-requested limits.
Keep caller-visible types in the type definitions and describe each option by its effect on the result.
Document decisions and invariants the code does not make clear. Do not restate the implementation.
Run the tests
Browser mochitests live in toolkit/components/pageextractor/tests/browser:
./mach test toolkit/components/pageextractor/tests/browser
Use a small page fixture and assert on the result the caller sees. Cover both sides of a behavior, such as visible and hidden content. For navigation races, assert which event fired instead of sleeping for a fixed delay.
For documentation-only changes, run:
./mach lint -l codespell -l file-whitespace -l trojan-source toolkit/components/pageextractor/docs
./mach doc toolkit/components/pageextractor --no-serve --no-open
Known limitations
Page Extractor does not read embedded frames, preserve page structure as Markdown, return PDF links, or expose clickability and ARIA semantics. Authentication and anti-bot systems can block hidden loads. Search the component’s open bugs before you expand one of these areas.