@@ -1363,6 +1363,19 @@ class PDFPageProxy {
13631363 this . imageCoordinates = null ;
13641364 }
13651365
1366+ clone ( id ) {
1367+ const clone = new PDFPageProxy (
1368+ id ,
1369+ this . _pageInfo ,
1370+ this . _transport ,
1371+ this . #pagesMapper,
1372+ this . _pdfBug
1373+ ) ;
1374+ clone . clonedFromIndex = this . clonedFromIndex ?? this . _pageIndex ;
1375+ this . _transport . updatePage ( clone ) ;
1376+ return clone ;
1377+ }
1378+
13661379 /**
13671380 * @type {number } Page number of the page. First page is 1.
13681381 */
@@ -1375,6 +1388,7 @@ class PDFPageProxy {
13751388 */
13761389 set pageNumber ( value ) {
13771390 this . _pageIndex = value - 1 ;
1391+ this . _transport . updatePage ( this ) ;
13781392 }
13791393
13801394 /**
@@ -2431,10 +2445,6 @@ class WorkerTransport {
24312445
24322446 #passwordCapability = null ;
24332447
2434- #copiedPageInfo = null ;
2435-
2436- #savedPageInfo = null ;
2437-
24382448 constructor (
24392449 messageHandler ,
24402450 loadingTask ,
@@ -2468,7 +2478,6 @@ class WorkerTransport {
24682478 this . setupMessageHandler ( ) ;
24692479
24702480 this . pagesMapper = pagesMapper ;
2471- this . pagesMapper . addListener ( this . #updateCaches. bind ( this ) ) ;
24722481
24732482 if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
24742483 // For testing purposes.
@@ -2494,76 +2503,10 @@ class WorkerTransport {
24942503 }
24952504 }
24962505
2497- #updateCaches( { type, pageNumbers } ) {
2498- if ( type === "copy" ) {
2499- this . #copiedPageInfo = new Map ( ) ;
2500- for ( const pageNum of pageNumbers ) {
2501- this . #copiedPageInfo. set ( pageNum , {
2502- proxy : this . #pageCache. get ( pageNum - 1 ) || null ,
2503- promise : this . #pagePromises. get ( pageNum - 1 ) || null ,
2504- } ) ;
2505- }
2506- return ;
2507- }
2508-
2509- if ( type === "cancelCopy" ) {
2510- this . #copiedPageInfo = null ;
2511- return ;
2512- }
2513-
2514- if ( type === "delete" ) {
2515- this . #savedPageInfo = {
2516- pageCache : new Map ( this . #pageCache) ,
2517- pagePromises : new Map ( this . #pagePromises) ,
2518- } ;
2519- for ( const pageNum of pageNumbers ) {
2520- this . #pageCache. delete ( pageNum - 1 ) ;
2521- this . #pagePromises. delete ( pageNum - 1 ) ;
2522- }
2523- }
2524-
2525- if ( type === "cancelDelete" ) {
2526- if ( this . #savedPageInfo) {
2527- this . #pageCache = this . #savedPageInfo. pageCache ;
2528- this . #pagePromises = this . #savedPageInfo. pagePromises ;
2529- this . #savedPageInfo = null ;
2530- }
2531- return ;
2532- }
2533-
2534- if ( type === "cleanSavedData" ) {
2535- this . #savedPageInfo = null ;
2536- return ;
2537- }
2538-
2539- const newPageCache = new Map ( ) ;
2540- const newPromiseCache = new Map ( ) ;
2541- const { pagesMapper } = this ;
2542- for ( let i = 0 , ii = pagesMapper . pagesNumber ; i < ii ; i ++ ) {
2543- const prevPageNumber = pagesMapper . getPrevPageNumber ( i + 1 ) ;
2544- if ( prevPageNumber < 0 ) {
2545- const { proxy, promise } =
2546- this . #copiedPageInfo?. get ( - prevPageNumber ) || { } ;
2547- if ( proxy ) {
2548- newPageCache . set ( i , proxy ) ;
2549- }
2550- if ( promise ) {
2551- newPromiseCache . set ( i , promise ) ;
2552- }
2553- continue ;
2554- }
2555- const prevPageIndex = prevPageNumber - 1 ;
2556- const page = this . #pageCache. get ( prevPageIndex ) ;
2557- if ( page ) {
2558- newPageCache . set ( i , page ) ;
2559- }
2560- const promise = this . #pagePromises. get ( prevPageIndex ) ;
2561- if ( promise ) {
2562- newPromiseCache . set ( i , promise ) ;
2563- }
2564- }
2565- this . #pageCache = newPageCache ;
2566- this . #pagePromises = newPromiseCache ;
2506+ updatePage ( page ) {
2507+ const { _pageIndex } = page ;
2508+ this . #pageCache. set ( _pageIndex , page ) ;
2509+ this . #pagePromises. set ( _pageIndex , Promise . resolve ( page ) ) ;
25672510 }
25682511
25692512 #cacheSimpleMethod( name , data = null ) {
0 commit comments