fix(preview): failed tabs no longer sit as a blank floating panel - #7236
fix(preview): failed tabs no longer sit as a blank floating panel#7236gbarros-dev wants to merge 17 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Warning Your free Security trial is over. An organization admin can upgrade to Advanced for continuous pull request security review or dismiss this notice. Comment |
There was a problem hiding this comment.
One finding: the new mini-player overlay's buttons inherit pointer-events: none from the mini-player root, so Retry/Close can't be clicked.
Posted via Macroscope — UI Consistency
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This fixes failed floating previews with a new Retry/Close UI and coordinated desktop, web, automation-readiness, and IPC-status changes. Because it alters an automatic automation gate and adds cross-process production behavior beyond a small isolated fix, human review is warranted. You can add or adjust custom eligibility rules. Learn more. |
042078f to
20612c1
Compare
Dismissing prior approval to re-evaluate 20612c1
|
Rebased onto current main after #7082 / tooltip lint. Conflict was only in |
There was a problem hiding this comment.
One finding on the new mini-player unreachable overlay: the host line can overflow the floating player because nothing constrains or truncates it.
Posted via Macroscope — UI Consistency
20612c1 to
c63e973
Compare
ebf9fe9 to
6c07798
Compare
Dismissing prior approval to re-evaluate 83b931f
|
looking forward to this getting merged 👀 |
a3ff688 to
d4d87f6
Compare
9f0f330 to
ef6fdb7
Compare
b707c47 to
16d209a
Compare
A dead preview URL still has WebContents, so the mini-player rendered a white rectangle and preview_status reported the tab as available. Surface Retry/Close on LoadFailed and mark automation status unavailable.
chrome-error:// is not navigable. available:false plus the Chromium error title already mark the tab dead; status.url stays the page the agent tried.
The listener map was typed as never[], so calling did-fail-load with a real event payload failed tsgo.
…layer The floating preview root is pointer-events-none. The overlay now opts back in so the buttons work, matching the drag chrome and resize handle.
A successful retry can make desktop status available before the server snapshot catches up. Trust live availability on the desktop path. Also disable native PiP on the failed mini-player, matching the full panel.
Disabling the toggle on LoadFailed also blocked closing an already-open separate window. Only prevent opening while the page is unreachable.
LoadFailed still has a live guest. Waiting on available:false blocked navigate and retry. The wait now keys off hasWebContents. The overlay also truncated neither the host nor hostless file/data URLs.
registerWebview now restores audio mute on attach; the LoadFailed automation-status test was still missing those stubs after rebasing onto mute-tab.
LoadFailed reports available:false with a live guest. waitForNavigationReadiness was still polling for available:true, so navigate to a dead URL hung until timeout instead of returning the error status.
available:false + loading:false is LoadFailed only while the webview is still attached. A destroyed webContents now fails as an unavailable target instead of completing waitForNavigationReadiness.
A stale LoadFailed snapshot no longer overwrites an in-flight load. Desktop automation status now reports whether the guest is actually attached, so a destroyed webContents cannot settle as a finished load.
611eb1d to
cb1782b
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 3 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7c268a7. Configure here.

A dead preview URL still counted as a live tab. The floating mini-player stayed a white rectangle, and
preview_statustold the agent the page was healthy.The mini-player now shows Retry and Close on a failed load. Status reports
available: falsewith the URL the agent actually tried, notchrome-error://.Closes #7212.
Verification:
git diff --checkOriginally implemented with Grok 4.6 through Grok CLI. Rebased and updated with GPT-5.6 Luna in Codex.
Note
Medium Risk
Changes preview automation readiness and status semantics across desktop IPC and the web host, which can affect agent navigate/retry behavior but stays within preview UI and automation—not auth or data paths.
Overview
Failed preview navigations no longer look like a healthy, blank mini-player or automation target. LoadFailed tabs show a Retry/Close overlay instead of an empty webview, and agents get
available: falsewith the requested URL and error text—notchrome-error://.Desktop
PreviewManager.automationStatusnow exposes an optionalattachedflag (live guest vs stale overlay), treats LoadFailed as unavailable while keeping the guest reachable for retry, and preserves failure metadata when web contents are destroyed. Web-sideapplyPreviewLoadFailureToAutomationStatusmerges snapshot failures intopreview_statuswithout letting staleLoadFailedstate override a live healthy or loading guest.waitForNavigationReadinessand overlay waiting stop treatingavailable: falseas an infinite wait: attached failed loads settle, detached/destroyed guests fail fast. Picture-in-picture is blocked on unreachable previews unless PiP is already open.Reviewed by Cursor Bugbot for commit 9ef66d5. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Fix failed preview tabs showing blank floating panel with unreachable overlay
PreviewMiniPlayerUnreachableoverlay that displays a parsed host, friendly error description, and Retry/Close actions when a preview navigation failsattachedboolean toDesktopPreviewAutomationStatusSchemaso the main process reports whether the guest webContents is still alive, distinguishing live guests from destroyed or missing onespreviewNavigationReadinessandpreview.waitForDesktopOverlayto resolve readiness after a failed load when the guest is attached, and to reject with target-unavailable when the guest is detached or destroyedLoadFailedstates into unavailable automation status, preserving the requested navigation URL and failure title instead of a chrome-error interstitial URLPreviewManager.automationStatusno longer replaces failed navigation details with chrome-error URLs or in-flight loading state; callers that do not pass live-status precedence will now seeunavailablewith the original requested URL.ThreadPreviewMiniPlayerdisables popping out a failed preview unless already popped out.Macroscope summarized 9ef66d5.