diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js b/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js index 5e6ccb8159..f347bde51d 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js @@ -59,6 +59,15 @@ export function generatePdfCachingTransportFactory(PDFJS) { abortSignal, }) .catch(err => { + if ( + err.message === 'non successful response status: 404' && + OError.getFullInfo(err).url === this.url + ) { + // Do not consider a 404 on the main pdf url as pdf caching failure. + // Still, bail out during the initial launch phase. + failedOnce = true + throw new PDFJS.MissingPDFException() + } metrics.failedCount++ failedOnce = true if (!enablePdfCaching) { @@ -75,7 +84,9 @@ export function generatePdfCachingTransportFactory(PDFJS) { .catch(err => { err = OError.tag(err, 'fatal pdf download error', errorInfo) console.error(err) - captureException(err, { tags: { fromPdfCaching: true } }) + if (!(err instanceof PDFJS.MissingPDFException)) { + captureException(err, { tags: { fromPdfCaching: true } }) + } this.reject(err) }) } diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js b/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js index e28a254b9c..7dd6e83431 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js @@ -274,12 +274,16 @@ function checkChunkResponse(response) { * @param {AbortSignal} abortSignal */ export async function fallbackRequest({ url, start, end, abortSignal }) { - const response = await fetch(url, { - headers: { Range: `bytes=${start}-${end - 1}` }, - signal: abortSignal, - }) - checkChunkResponse(response) - return response.arrayBuffer() + try { + const response = await fetch(url, { + headers: { Range: `bytes=${start}-${end - 1}` }, + signal: abortSignal, + }) + checkChunkResponse(response) + return await response.arrayBuffer() + } catch (e) { + throw OError.tag(e, 'fallback request failed', { url, start, end }) + } } /**