@@ -3,8 +3,11 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
33import {
44 getPixelRatio ,
55 getDomNodeCount ,
6+ getFullPageDisableThreshold ,
67 isFullPageDisabled ,
8+ isSafariBrowser ,
79 FULL_PAGE_DISABLE_THRESHOLD ,
10+ SAFARI_FULL_PAGE_DISABLE_THRESHOLD ,
811 cropScreenshot ,
912 canCaptureViewportNatively ,
1013 beginViewportCapture ,
@@ -109,6 +112,62 @@ describe('isFullPageDisabled', () => {
109112 ) ;
110113 expect ( isFullPageDisabled ( ) ) . toBe ( false ) ;
111114 } ) ;
115+
116+ it ( 'uses the lower Safari threshold to avoid expensive full-page captures' , ( ) => {
117+ const elements = new Array ( SAFARI_FULL_PAGE_DISABLE_THRESHOLD ) . fill (
118+ document . createElement ( 'div' )
119+ ) ;
120+ vi . spyOn ( document . body , 'querySelectorAll' ) . mockReturnValue (
121+ elements as unknown as NodeListOf < Element >
122+ ) ;
123+ vi . spyOn ( navigator , 'userAgent' , 'get' ) . mockReturnValue (
124+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/616.1.16 (KHTML, like Gecko) Version/26.4 Safari/616.1.16'
125+ ) ;
126+
127+ expect ( isFullPageDisabled ( ) ) . toBe ( true ) ;
128+ } ) ;
129+
130+ it ( 'keeps Chromium on the higher full-page threshold' , ( ) => {
131+ const elements = new Array ( SAFARI_FULL_PAGE_DISABLE_THRESHOLD ) . fill (
132+ document . createElement ( 'div' )
133+ ) ;
134+ vi . spyOn ( document . body , 'querySelectorAll' ) . mockReturnValue (
135+ elements as unknown as NodeListOf < Element >
136+ ) ;
137+ vi . spyOn ( navigator , 'userAgent' , 'get' ) . mockReturnValue (
138+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
139+ ) ;
140+
141+ expect ( isFullPageDisabled ( ) ) . toBe ( false ) ;
142+ } ) ;
143+ } ) ;
144+
145+ describe ( 'browser-specific full-page thresholds' , ( ) => {
146+ it ( 'detects Safari without matching Chrome-style user agents' , ( ) => {
147+ expect (
148+ isSafariBrowser (
149+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/616.1.16 (KHTML, like Gecko) Version/26.4 Safari/616.1.16'
150+ )
151+ ) . toBe ( true ) ;
152+ expect (
153+ isSafariBrowser (
154+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
155+ )
156+ ) . toBe ( false ) ;
157+ } ) ;
158+
159+ it ( 'returns the Safari complexity threshold for Safari only' , ( ) => {
160+ expect (
161+ getFullPageDisableThreshold (
162+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/616.1.16 (KHTML, like Gecko) Version/26.4 Safari/616.1.16'
163+ )
164+ ) . toBe ( SAFARI_FULL_PAGE_DISABLE_THRESHOLD ) ;
165+ expect (
166+ getFullPageDisableThreshold (
167+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
168+ )
169+ ) . toBe ( FULL_PAGE_DISABLE_THRESHOLD ) ;
170+ } ) ;
112171} ) ;
113172
114173describe ( 'cropScreenshot' , ( ) => {
0 commit comments