| /** |
| * @licstart The following is the entire license notice for the |
| * Javascript code in this page |
| * |
| * Copyright 2020 Mozilla Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * @licend The above is the entire license notice for the |
| * Javascript code in this page |
| */ |
| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.createResponseStatusError = createResponseStatusError; |
| exports.extractFilenameFromHeader = extractFilenameFromHeader; |
| exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; |
| exports.validateResponseStatus = validateResponseStatus; |
| |
| var _util = require("../shared/util.js"); |
| |
| var _content_disposition = require("./content_disposition.js"); |
| |
| function validateRangeRequestCapabilities({ |
| getResponseHeader, |
| isHttp, |
| rangeChunkSize, |
| disableRange |
| }) { |
| (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); |
| const returnValues = { |
| allowRangeRequests: false, |
| suggestedLength: undefined |
| }; |
| const length = parseInt(getResponseHeader("Content-Length"), 10); |
| |
| if (!Number.isInteger(length)) { |
| return returnValues; |
| } |
| |
| returnValues.suggestedLength = length; |
| |
| if (length <= 2 * rangeChunkSize) { |
| return returnValues; |
| } |
| |
| if (disableRange || !isHttp) { |
| return returnValues; |
| } |
| |
| if (getResponseHeader("Accept-Ranges") !== "bytes") { |
| return returnValues; |
| } |
| |
| const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; |
| |
| if (contentEncoding !== "identity") { |
| return returnValues; |
| } |
| |
| returnValues.allowRangeRequests = true; |
| return returnValues; |
| } |
| |
| function extractFilenameFromHeader(getResponseHeader) { |
| const contentDisposition = getResponseHeader("Content-Disposition"); |
| |
| if (contentDisposition) { |
| let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); |
| |
| if (filename.includes("%")) { |
| try { |
| filename = decodeURIComponent(filename); |
| } catch (ex) {} |
| } |
| |
| if (/\.pdf$/i.test(filename)) { |
| return filename; |
| } |
| } |
| |
| return null; |
| } |
| |
| function createResponseStatusError(status, url) { |
| if (status === 404 || status === 0 && url.startsWith("file:")) { |
| return new _util.MissingPDFException('Missing PDF "' + url + '".'); |
| } |
| |
| return new _util.UnexpectedResponseException("Unexpected server response (" + status + ') while retrieving PDF "' + url + '".', status); |
| } |
| |
| function validateResponseStatus(status) { |
| return status === 200 || status === 206; |
| } |