Skip to content

Commit ae507c4

Browse files
Merge pull request #20784 from Snuffleupagus/PdfTextExtractor-fix-intermittent
Prevent `PdfTextExtractor.prototype.extractTextContent` from failing intermittently
2 parents d859d78 + 54a8c04 commit ae507c4

1 file changed

Lines changed: 12 additions & 10 deletions

File tree

web/pdf_viewer.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,6 @@ class PDFViewer {
272272

273273
#hiddenCopyElement = null;
274274

275-
#interruptCopyCondition = false;
276-
277275
#previousContainerHeight = 0;
278276

279277
#resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));
@@ -771,15 +769,15 @@ class PDFViewer {
771769
ac.abort(); // Remove the "visibilitychange" listener immediately.
772770
}
773771

774-
async getAllText() {
772+
async getAllText(interruptSignal = null) {
775773
const texts = [];
776774
const buffer = [];
777775
for (
778776
let pageNum = 1, pagesCount = this.pdfDocument.numPages;
779777
pageNum <= pagesCount;
780778
++pageNum
781779
) {
782-
if (this.#interruptCopyCondition) {
780+
if (interruptSignal?.aborted) {
783781
return null;
784782
}
785783
buffer.length = 0;
@@ -833,14 +831,19 @@ class PDFViewer {
833831
const { classList } = this.viewer;
834832
classList.add("copyAll");
835833

836-
const ac = new AbortController();
834+
const keydownAC = new AbortController(),
835+
interruptAC = new AbortController();
837836
window.addEventListener(
838837
"keydown",
839-
ev => (this.#interruptCopyCondition = ev.key === "Escape"),
840-
{ signal: ac.signal }
838+
ev => {
839+
if (ev.key === "Escape") {
840+
interruptAC.abort();
841+
}
842+
},
843+
{ signal: keydownAC.signal }
841844
);
842845

843-
this.getAllText()
846+
this.getAllText(interruptAC.signal)
844847
.then(async text => {
845848
if (text !== null) {
846849
await navigator.clipboard.writeText(text);
@@ -853,8 +856,7 @@ class PDFViewer {
853856
})
854857
.finally(() => {
855858
this.#getAllTextInProgress = false;
856-
this.#interruptCopyCondition = false;
857-
ac.abort();
859+
keydownAC.abort();
858860
classList.remove("copyAll");
859861
});
860862

0 commit comments

Comments
 (0)