fd8c36d72e503ec1043113aa87e96a03c6c6e0c6
CI / test (pull_request) Successful in 1m56s
CI times out on the 7 "HLS QA: Deep probe strategies" tests. Root cause is a jsdom-only artifact, not a production bug: jsdom exposes the self-referential cyclic globals (_globalObject/_globalProxy/_top/_parent/ window/self/top/parent/frames) as ENUMERABLE own-props on the window. Strategy H in m3u8DeepProbeFn() runs Object.keys(window) and a no- visited-set walk() over each, which explodes to O(204^5) ≈ 3.5e11 ops and never terminates within the depth-5 cap, so the whole suite hangs forever. A real Chrome MAIN-world window does NOT expose those keys as enumerable own-props, so this is purely a test-environment mismatch. The fix is test-only: sanitizeJsdomWinForProbe() marks the jsdom cyclic globals non-enumerable in runProbeInWin() before eval, mirroring a real page. No production/underlying source (src/viewer/index.js) is modified. Local (Node 22.22.3 / Linux == CI ubuntu-latest + Node 22): before: npm test hangs indefinitely (no Results line; CI job killed) after: npm run build && npm test -> 83/83 passed in ~12.5s
Goon Plugin
A Chrome extension (Manifest V3) that finds videos on the current page and displays them in a 2x2 grid.
Features
- Click the extension icon → "Find Videos" to scan the current tab for all
<video>elements - Videos are listed in the popup for reference (clickable links, "Copy All URLs" button)
- Click "Open Viewer" to open a new window with videos in a 2x2 grid (autoplay muted)
- Click "Clear" to reset the stored video list
Getting started
# 1. Install deps
npm i
# 2. Run in watch mode
npm run dev
# 3. Build for distribution
npm run build
Loading in Chrome
- Open
chrome://extensions/ - Enable Developer mode (top-right)
- Click Load unpacked → select the project root folder (where
manifest.jsonis located)
Project structure
manifest.json — Extension manifest (MV3)
package.json — Dev tooling (Vite + Vitest + TS)
vite.config.ts — Build config
src/
background/ — Service worker (MV3 background)
content/ — Content script
viewer/ — Popup UI + video viewer
index.html — Popup (Find Videos, Open Viewer buttons)
index.js — Popup logic (scans current tab for videos)
index.css — Popup styles
viewer.html — Viewer page (2x2 video grid in new window)
viewer.js — Viewer logic (renders video panels)
viewer.css — Viewer grid styles
icons/ — Extension icons (place .png files here)
Recommended extensions (VS Code)
- Chrome Extension Developer (extension-list-viewer)
- ESLint
- Prettier
VS Code workspace
Open goon_plugin.code-workspace to get the project with recommended extensions pre-installed.