@@ -1360,6 +1360,19 @@ class PDFPageProxy {
13601360 this . imageCoordinates = null ;
13611361 }
13621362
1363+ clone ( id ) {
1364+ const clone = new PDFPageProxy (
1365+ id ,
1366+ this . _pageInfo ,
1367+ this . _transport ,
1368+ this . #pagesMapper,
1369+ this . _pdfBug
1370+ ) ;
1371+ clone . clonedFromIndex = this . clonedFromIndex ?? this . _pageIndex ;
1372+ this . _transport . updatePage ( clone ) ;
1373+ return clone ;
1374+ }
1375+
13631376 /**
13641377 * @type {number } Page number of the page. First page is 1.
13651378 */
@@ -1372,6 +1385,7 @@ class PDFPageProxy {
13721385 */
13731386 set pageNumber ( value ) {
13741387 this . _pageIndex = value - 1 ;
1388+ this . _transport . updatePage ( this ) ;
13751389 }
13761390
13771391 /**
@@ -2428,10 +2442,6 @@ class WorkerTransport {
24282442
24292443 #passwordCapability = null ;
24302444
2431- #copiedPageInfo = null ;
2432-
2433- #savedPageInfo = null ;
2434-
24352445 constructor (
24362446 messageHandler ,
24372447 loadingTask ,
@@ -2465,7 +2475,6 @@ class WorkerTransport {
24652475 this . setupMessageHandler ( ) ;
24662476
24672477 this . pagesMapper = pagesMapper ;
2468- this . pagesMapper . addListener ( this . #updateCaches. bind ( this ) ) ;
24692478
24702479 if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
24712480 // For testing purposes.
@@ -2491,76 +2500,10 @@ class WorkerTransport {
24912500 }
24922501 }
24932502
2494- #updateCaches( { type, pageNumbers } ) {
2495- if ( type === "copy" ) {
2496- this . #copiedPageInfo = new Map ( ) ;
2497- for ( const pageNum of pageNumbers ) {
2498- this . #copiedPageInfo. set ( pageNum , {
2499- proxy : this . #pageCache. get ( pageNum - 1 ) || null ,
2500- promise : this . #pagePromises. get ( pageNum - 1 ) || null ,
2501- } ) ;
2502- }
2503- return ;
2504- }
2505-
2506- if ( type === "cancelCopy" ) {
2507- this . #copiedPageInfo = null ;
2508- return ;
2509- }
2510-
2511- if ( type === "delete" ) {
2512- this . #savedPageInfo = {
2513- pageCache : new Map ( this . #pageCache) ,
2514- pagePromises : new Map ( this . #pagePromises) ,
2515- } ;
2516- for ( const pageNum of pageNumbers ) {
2517- this . #pageCache. delete ( pageNum - 1 ) ;
2518- this . #pagePromises. delete ( pageNum - 1 ) ;
2519- }
2520- }
2521-
2522- if ( type === "cancelDelete" ) {
2523- if ( this . #savedPageInfo) {
2524- this . #pageCache = this . #savedPageInfo. pageCache ;
2525- this . #pagePromises = this . #savedPageInfo. pagePromises ;
2526- this . #savedPageInfo = null ;
2527- }
2528- return ;
2529- }
2530-
2531- if ( type === "cleanSavedData" ) {
2532- this . #savedPageInfo = null ;
2533- return ;
2534- }
2535-
2536- const newPageCache = new Map ( ) ;
2537- const newPromiseCache = new Map ( ) ;
2538- const { pagesMapper } = this ;
2539- for ( let i = 0 , ii = pagesMapper . pagesNumber ; i < ii ; i ++ ) {
2540- const prevPageNumber = pagesMapper . getPrevPageNumber ( i + 1 ) ;
2541- if ( prevPageNumber < 0 ) {
2542- const { proxy, promise } =
2543- this . #copiedPageInfo?. get ( - prevPageNumber ) || { } ;
2544- if ( proxy ) {
2545- newPageCache . set ( i , proxy ) ;
2546- }
2547- if ( promise ) {
2548- newPromiseCache . set ( i , promise ) ;
2549- }
2550- continue ;
2551- }
2552- const prevPageIndex = prevPageNumber - 1 ;
2553- const page = this . #pageCache. get ( prevPageIndex ) ;
2554- if ( page ) {
2555- newPageCache . set ( i , page ) ;
2556- }
2557- const promise = this . #pagePromises. get ( prevPageIndex ) ;
2558- if ( promise ) {
2559- newPromiseCache . set ( i , promise ) ;
2560- }
2561- }
2562- this . #pageCache = newPageCache ;
2563- this . #pagePromises = newPromiseCache ;
2503+ updatePage ( page ) {
2504+ const { _pageIndex } = page ;
2505+ this . #pageCache. set ( _pageIndex , page ) ;
2506+ this . #pagePromises. set ( _pageIndex , Promise . resolve ( page ) ) ;
25642507 }
25652508
25662509 #cacheSimpleMethod( name , data = null ) {
0 commit comments