@@ -1355,4 +1355,57 @@ describe("PDF viewer", () => {
13551355 ) ;
13561356 } ) ;
13571357 } ) ;
1358+
1359+ describe ( "Pinch-zoom" , ( ) => {
1360+ let pages ;
1361+ beforeEach ( async ( ) => {
1362+ pages = await loadAndWait (
1363+ "tracemonkey.pdf" ,
1364+ `.page[data-page-number = "1"] .endOfContent`
1365+ ) ;
1366+ } ) ;
1367+ it ( "keeps the content under the pinch centre fixed on the screen" , async ( ) => {
1368+ await Promise . all (
1369+ pages . map ( async ( [ browserName , page ] ) => {
1370+ if ( browserName === "firefox" ) {
1371+ // Firefox does not support touch events on devices
1372+ // with no touch screen.
1373+ return ;
1374+ }
1375+
1376+ const rect = await getSpanRectFromText ( page , 1 , "type-stable" ) ;
1377+ const originX = rect . x + rect . width / 2 ;
1378+ const originY = rect . y + rect . height / 2 ;
1379+ const rendered = await createPromise ( page , resolve => {
1380+ const cb = e => {
1381+ if ( e . pageNumber === 1 ) {
1382+ window . PDFViewerApplication . eventBus . off (
1383+ "textlayerrendered" ,
1384+ cb
1385+ ) ;
1386+ resolve ( ) ;
1387+ }
1388+ } ;
1389+ window . PDFViewerApplication . eventBus . on ( "textlayerrendered" , cb ) ;
1390+ } ) ;
1391+ const client = await page . target ( ) . createCDPSession ( ) ;
1392+ await client . send ( "Input.synthesizePinchGesture" , {
1393+ x : originX ,
1394+ y : originY ,
1395+ scaleFactor : 3 ,
1396+ gestureSourceType : "touch" ,
1397+ } ) ;
1398+ await awaitPromise ( rendered ) ;
1399+ const spanHandle = await page . evaluateHandle ( ( ) =>
1400+ Array . from (
1401+ document . querySelectorAll (
1402+ '.page[data-page-number="1"] .textLayer span'
1403+ )
1404+ ) . find ( span => span . textContent . includes ( "type-stable" ) )
1405+ ) ;
1406+ expect ( await spanHandle . isIntersectingViewport ( ) ) . toBeTrue ( ) ;
1407+ } )
1408+ ) ;
1409+ } ) ;
1410+ } ) ;
13581411} ) ;
0 commit comments