fix(stealth): make language picker invisible to screen capture - #53
Open
ignitinsharma wants to merge 1 commit into
Open
fix(stealth): make language picker invisible to screen capture#53ignitinsharma wants to merge 1 commit into
ignitinsharma wants to merge 1 commit into
Conversation
Replace native <select> in main overlay with in-window custom menu so it stays inside the BrowserWindow covered by setContentProtection (NSWindowSharingNone / WDA_EXCLUDEFROMCAPTURE). Native OS popup was an uncaptured window visible in Google Meet/Zoom/OBS. - index.html: button + ul.lang-menu, CSS keeps menu inside window - main-window.js: custom toggle/saveSettings, resize handling, auto-close with interaction mode Fixes stealth leak where C++/Java picker was captured during share
|
@ignitinsharma is attempting to deploy a commit to the csrsoftwares' projects Team on Vercel. A member of the Team first needs to authorize it. |
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
Fixes critical stealth leak where the language picker (C++ / C / Python / Java / JavaScript) was visible to remote participants during Google Meet / Zoom / OBS screen share, while the rest of the overlay was hidden.
Severity
High — users could be exposed during interviews.
Steps to Reproduce
git clone https://github.com/TechyCSR/OpenCluely.git && cd OpenCluely && ./setup.shnpm starton macOS (or Windows)JavaScriptdropdown)C++,C,Python,Java,JavaScript) appears in the remote capture, even though the pill itself is hidden.Root Cause
src/managers/window.manager.js:628callswindow.setContentProtection(true)for everyBrowserWindow(maps toNSWindowSharingTypeNoneon macOS /WDA_EXCLUDEFROMCAPTUREon Windows).The pill used a native
<select id="codingLanguage">(index.html:372). Chromium renders the options popup as a separate OSNSMenu/NSPopUpwindow, not inside theBrowserWindow. That OS window is not covered bysetContentProtectionand is captured normally.Fix
Replace the native
<select>with a custom in-window menu so it stays inside the protectedBrowserWindow:index.html: Replace<select>with<button id="codingLanguageBtn">+<ul id="codingLanguageMenu" class="lang-menu">(5li[data-value]). Add.lang-menuCSS (absolute,top:32px, backdrop blur,opacity/visibilitytoggle) alongside.shortcuts-popover. Menu never leaves the window bounds, sosetContentProtectionapplies. Comment added:ponytail: custom in-window lang menu...src/ui/main-window.js:resizeWindowToContent()now includeslangMenuheight (likeshortcutsPopover).languageSelect.value/onchangewithlangBtn/langMenuhandling:applyLang(), toggleis-open/aria-expanded,saveSettings({codingLanguage}), close on outside click /Escape.shortcutsPopover(opening one closes the other).handleInteractionModeChanged()closes menu when leaving interactive mode.onCodingLanguageChangednow syncs via_currentLang/_langLabels.No new dependencies.
settings.htmlstill uses its own<select>— only the overlay is changed.Testing
node --check src/ui/main-window.js/htmlhint index.htmlpassnpm startboots without renderer errors (Gemini AI client initialized)setContentProtectionpath covered (same logic)JavaScript→ menu toggles, pickPython→ persists viasaveSettings, window resizes correctly,Esc/outside click closes,Alt+A(non-interactive) hides menuREADME Limitations—setContentProtectionis no-op on X11/Wayland; menu still clips correctly but will be visible (platform limitation, documented)Files Changed
index.html(+71)src/ui/main-window.js(+66)Checklist
Fixes invisible-overlay contract stated in
README.md Highlights: “Invisible overlay. Windows stay out of Zoom, Google Meet, …”.