@@ -48,6 +48,7 @@ import { useAtomQueryRunner } from "~/state/use-atom-query-runner";
4848import { useAtomCommand } from "~/state/use-atom-command" ;
4949
5050import { previewBridge } from "./previewBridge" ;
51+ import { applyPreviewGuestViewport } from "./previewGuestViewport" ;
5152import {
5253 PreviewAutomationOperationError ,
5354 PreviewAutomationOverlayTimeoutError ,
@@ -178,6 +179,14 @@ const waitForRenderedViewport = async (
178179 const appliedSettingKey = webview ?. getAttribute ( "data-preview-viewport-key" ) ?? null ;
179180 const declaredViewport = readDeclaredViewport ( webview ) ;
180181 const renderedViewport = webview ? await readWebviewViewport ( webview ) : null ;
182+ if (
183+ setting . _tag !== "fill" &&
184+ renderedViewport &&
185+ Math . abs ( renderedViewport . width - setting . width ) <= 1 &&
186+ Math . abs ( renderedViewport . height - setting . height ) <= 1
187+ ) {
188+ return renderedViewport ;
189+ }
181190 if (
182191 renderedViewport &&
183192 isPreviewViewportReady ( {
@@ -497,7 +506,8 @@ function PreviewAutomationHost(props: { readonly environmentId: EnvironmentId })
497506 const ready = await requireReadyTab ( ) ;
498507 const input = request . input as PreviewAutomationResizeInput ;
499508 const setting = resolvePreviewViewport ( input ) ;
500- const applied = await runBrowserViewportMutation ( ready . runtimeTabId , async ( ) => {
509+ const setViewport = ready . bridge . automation . setViewport ;
510+ const persistViewport = async ( ) => {
501511 const operationState = assertPreviewRuntimeCurrent (
502512 threadRef ,
503513 ready . tabId ,
@@ -518,11 +528,22 @@ function PreviewAutomationHost(props: { readonly environmentId: EnvironmentId })
518528 return raiseAtomCommandFailure ( result ) ;
519529 }
520530 updatePreviewServerSnapshot ( threadRef , result . value ) ;
531+ try {
532+ await applyPreviewGuestViewport ( setViewport , ready . runtimeTabId , setting ) ;
533+ } catch ( error ) {
534+ await applyPreviewGuestViewport (
535+ setViewport ,
536+ ready . runtimeTabId ,
537+ previousSetting ,
538+ ) . catch ( ( ) => undefined ) ;
539+ throw error ;
540+ }
521541 return {
522542 previousSetting,
523543 serverEpoch : operationState . serverEpoch ,
524544 } ;
525- } ) ;
545+ } ;
546+ const applied = await runBrowserViewportMutation ( ready . runtimeTabId , persistViewport ) ;
526547 let viewport : PreviewRenderedViewportSize ;
527548 try {
528549 viewport = await waitForRenderedViewport (
@@ -562,6 +583,11 @@ function PreviewAutomationHost(props: { readonly environmentId: EnvironmentId })
562583 } ) ;
563584 if ( rollback . _tag !== "Failure" ) {
564585 updatePreviewServerSnapshot ( threadRef , rollback . value ) ;
586+ await applyPreviewGuestViewport (
587+ setViewport ,
588+ ready . runtimeTabId ,
589+ applied . previousSetting ,
590+ ) . catch ( ( ) => undefined ) ;
565591 }
566592 }
567593 } ) ;
0 commit comments