diff --git a/examples/components/simpleviewer.js b/examples/components/simpleviewer.js index 090acc3bc..20a0d66ab 100644 --- a/examples/components/simpleviewer.js +++ b/examples/components/simpleviewer.js @@ -70,5 +70,4 @@ pdfjsLib.getDocument({ pdfViewer.setDocument(pdfDocument); pdfLinkService.setDocument(pdfDocument, null); - pdfFindController.setDocument(pdfDocument); }); diff --git a/examples/components/singlepageviewer.js b/examples/components/singlepageviewer.js index 67c7a416e..b3b7ab268 100644 --- a/examples/components/singlepageviewer.js +++ b/examples/components/singlepageviewer.js @@ -70,5 +70,4 @@ pdfjsLib.getDocument({ pdfSinglePageViewer.setDocument(pdfDocument); pdfLinkService.setDocument(pdfDocument, null); - pdfFindController.setDocument(pdfDocument); }); diff --git a/test/unit/pdf_find_controller_spec.js b/test/unit/pdf_find_controller_spec.js index 269e6c65f..9fe9803a0 100644 --- a/test/unit/pdf_find_controller_spec.js +++ b/test/unit/pdf_find_controller_spec.js @@ -51,18 +51,17 @@ describe('pdf_find_controller', function() { beforeEach(function(done) { const loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf')); loadingTask.promise.then(function(pdfDocument) { + eventBus = new EventBus(); + const linkService = new MockLinkService(); linkService.setDocument(pdfDocument); - eventBus = new EventBus(); - pdfFindController = new PDFFindController({ linkService, eventBus, }); - pdfFindController.setDocument(pdfDocument); + pdfFindController.setDocument(pdfDocument); // Enable searching. - eventBus.dispatch('pagesinit'); done(); }); }); diff --git a/web/app.js b/web/app.js index 822cf4fbd..9264ca114 100644 --- a/web/app.js +++ b/web/app.js @@ -569,7 +569,6 @@ let PDFViewerApplication = { if (this.pdfDocument) { this.pdfDocument = null; - this.findController.setDocument(null); this.pdfThumbnailViewer.setDocument(null); this.pdfViewer.setDocument(null); this.pdfLinkService.setDocument(null); @@ -893,7 +892,6 @@ let PDFViewerApplication = { } else if (PDFJSDev.test('CHROME')) { baseDocumentUrl = location.href.split('#')[0]; } - this.findController.setDocument(pdfDocument); this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); this.pdfDocumentProperties.setDocument(pdfDocument, this.url); diff --git a/web/base_viewer.js b/web/base_viewer.js index 57153057f..bf8f091a8 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -363,6 +363,10 @@ class BaseViewer { if (this.pdfDocument) { this._cancelRendering(); this._resetView(); + + if (this.findController) { + this.findController.setDocument(null); + } } this.pdfDocument = pdfDocument; @@ -471,6 +475,9 @@ class BaseViewer { this.eventBus.dispatch('pagesinit', { source: this, }); + if (this.findController) { + this.findController.setDocument(pdfDocument); // Enable searching. + } if (this.defaultRenderingQueue) { this.update(); } diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 93b5d31d0..5c19b4435 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -99,6 +99,7 @@ class PDFFindController { return; } this._pdfDocument = pdfDocument; + this._firstPageCapability.resolve(); } executeCommand(cmd, state) { @@ -110,7 +111,7 @@ class PDFFindController { this._state = state; this._updateUIState(FindState.PENDING); - this._firstPagePromise.then(() => { + this._firstPageCapability.promise.then(() => { if (!this._pdfDocument || (pdfDocument && this._pdfDocument !== pdfDocument)) { // If the document was closed before searching began, or if the search @@ -160,17 +161,7 @@ class PDFFindController { clearTimeout(this._findTimeout); this._findTimeout = null; - this._firstPagePromise = new Promise((resolve) => { - const onPagesInit = () => { - if (!this._pdfDocument) { - throw new Error( - 'PDFFindController: `setDocument()` should have been called.'); - } - this._eventBus.off('pagesinit', onPagesInit); - resolve(); - }; - this._eventBus.on('pagesinit', onPagesInit); - }); + this._firstPageCapability = createPromiseCapability(); } _normalize(text) { @@ -553,7 +544,7 @@ class PDFFindController { // Since searching is asynchronous, ensure that the removal of highlighted // matches (from the UI) is async too such that the 'updatetextlayermatches' // events will always be dispatched in the expected order. - this._firstPagePromise.then(() => { + this._firstPageCapability.promise.then(() => { if (!this._pdfDocument || (pdfDocument && this._pdfDocument !== pdfDocument)) { // Only update the UI if the document is open, and is the current one.