mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-20 15:18:08 +02:00
Merge pull request #15920 from Snuffleupagus/transfer-pdf-data
[api-minor] Enable transferring of TypedArray PDF data by default (PR 15908 follow-up)
This commit is contained in:
commit
8f3fa18c93
4 changed files with 97 additions and 126 deletions
|
@ -193,44 +193,10 @@ describe("api", function () {
|
|||
expect(data[0] instanceof PDFDocumentProxy).toEqual(true);
|
||||
expect(data[1].loaded / data[1].total).toEqual(1);
|
||||
|
||||
// Check that the TypedArray wasn't transferred.
|
||||
expect(typedArrayPdf.length).toEqual(basicApiFileLength);
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
it("creates pdf doc from TypedArray, with `transferPdfData` set", async function () {
|
||||
if (isNodeJS) {
|
||||
pending("Worker is not supported in Node.js.");
|
||||
if (!isNodeJS) {
|
||||
// Check that the TypedArray was transferred.
|
||||
expect(typedArrayPdf.length).toEqual(0);
|
||||
}
|
||||
const typedArrayPdf = await DefaultFileReaderFactory.fetch({
|
||||
path: TEST_PDFS_PATH + basicApiFileName,
|
||||
});
|
||||
|
||||
// Sanity check to make sure that we fetched the entire PDF file.
|
||||
expect(typedArrayPdf instanceof Uint8Array).toEqual(true);
|
||||
expect(typedArrayPdf.length).toEqual(basicApiFileLength);
|
||||
|
||||
const loadingTask = getDocument({
|
||||
data: typedArrayPdf,
|
||||
transferPdfData: true,
|
||||
});
|
||||
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
|
||||
|
||||
const progressReportedCapability = createPromiseCapability();
|
||||
loadingTask.onProgress = function (data) {
|
||||
progressReportedCapability.resolve(data);
|
||||
};
|
||||
|
||||
const data = await Promise.all([
|
||||
loadingTask.promise,
|
||||
progressReportedCapability.promise,
|
||||
]);
|
||||
expect(data[0] instanceof PDFDocumentProxy).toEqual(true);
|
||||
expect(data[1].loaded / data[1].total).toEqual(1);
|
||||
|
||||
// Check that the TypedArray was transferred.
|
||||
expect(typedArrayPdf.length).toEqual(0);
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
@ -259,6 +225,11 @@ describe("api", function () {
|
|||
expect(data[0] instanceof PDFDocumentProxy).toEqual(true);
|
||||
expect(data[1].loaded / data[1].total).toEqual(1);
|
||||
|
||||
if (!isNodeJS) {
|
||||
// Check that the ArrayBuffer was transferred.
|
||||
expect(arrayBufferPdf.byteLength).toEqual(0);
|
||||
}
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
|
@ -3275,16 +3246,22 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
|||
|
||||
it("should fetch document info and page using ranges", async function () {
|
||||
const initialDataLength = 4000;
|
||||
const subArrays = [];
|
||||
let fetches = 0;
|
||||
|
||||
const data = await dataPromise;
|
||||
const initialData = data.subarray(0, initialDataLength);
|
||||
const initialData = new Uint8Array(data.subarray(0, initialDataLength));
|
||||
subArrays.push(initialData);
|
||||
|
||||
const transport = new PDFDataRangeTransport(data.length, initialData);
|
||||
transport.requestDataRange = function (begin, end) {
|
||||
fetches++;
|
||||
waitSome(function () {
|
||||
transport.onDataProgress(4000);
|
||||
transport.onDataRange(begin, data.subarray(begin, end));
|
||||
const chunk = new Uint8Array(data.subarray(begin, end));
|
||||
subArrays.push(chunk);
|
||||
|
||||
transport.onDataProgress(initialDataLength);
|
||||
transport.onDataRange(begin, chunk);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -3296,65 +3273,40 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
|||
expect(pdfPage.rotate).toEqual(0);
|
||||
expect(fetches).toBeGreaterThan(2);
|
||||
|
||||
// Check that the TypedArray wasn't transferred.
|
||||
expect(initialData.length).toEqual(initialDataLength);
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
it("should fetch document info and page using ranges, with `transferPdfData` set", async function () {
|
||||
if (isNodeJS) {
|
||||
pending("Worker is not supported in Node.js.");
|
||||
if (!isNodeJS) {
|
||||
// Check that the TypedArrays were transferred.
|
||||
for (const array of subArrays) {
|
||||
expect(array.length).toEqual(0);
|
||||
}
|
||||
}
|
||||
const initialDataLength = 4000;
|
||||
let fetches = 0;
|
||||
|
||||
const data = await dataPromise;
|
||||
const initialData = new Uint8Array(data.subarray(0, initialDataLength));
|
||||
const transport = new PDFDataRangeTransport(data.length, initialData);
|
||||
transport.requestDataRange = function (begin, end) {
|
||||
fetches++;
|
||||
waitSome(function () {
|
||||
transport.onDataProgress(4000);
|
||||
transport.onDataRange(
|
||||
begin,
|
||||
new Uint8Array(data.subarray(begin, end))
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
const loadingTask = getDocument({
|
||||
range: transport,
|
||||
transferPdfData: true,
|
||||
});
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
expect(pdfDocument.numPages).toEqual(14);
|
||||
|
||||
const pdfPage = await pdfDocument.getPage(10);
|
||||
expect(pdfPage.rotate).toEqual(0);
|
||||
expect(fetches).toBeGreaterThan(2);
|
||||
|
||||
// Check that the TypedArray was transferred.
|
||||
expect(initialData.length).toEqual(0);
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
it("should fetch document info and page using range and streaming", async function () {
|
||||
const initialDataLength = 4000;
|
||||
const subArrays = [];
|
||||
let fetches = 0;
|
||||
|
||||
const data = await dataPromise;
|
||||
const initialData = data.subarray(0, initialDataLength);
|
||||
const initialData = new Uint8Array(data.subarray(0, initialDataLength));
|
||||
subArrays.push(initialData);
|
||||
|
||||
const transport = new PDFDataRangeTransport(data.length, initialData);
|
||||
transport.requestDataRange = function (begin, end) {
|
||||
fetches++;
|
||||
if (fetches === 1) {
|
||||
const chunk = new Uint8Array(data.subarray(initialDataLength));
|
||||
subArrays.push(chunk);
|
||||
|
||||
// Send rest of the data on first range request.
|
||||
transport.onDataProgressiveRead(data.subarray(initialDataLength));
|
||||
transport.onDataProgressiveRead(chunk);
|
||||
}
|
||||
waitSome(function () {
|
||||
transport.onDataRange(begin, data.subarray(begin, end));
|
||||
const chunk = new Uint8Array(data.subarray(begin, end));
|
||||
subArrays.push(chunk);
|
||||
|
||||
transport.onDataRange(begin, chunk);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -3369,6 +3321,14 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
|||
await new Promise(resolve => {
|
||||
waitSome(resolve);
|
||||
});
|
||||
|
||||
if (!isNodeJS) {
|
||||
// Check that the TypedArrays were transferred.
|
||||
for (const array of subArrays) {
|
||||
expect(array.length).toEqual(0);
|
||||
}
|
||||
}
|
||||
|
||||
await loadingTask.destroy();
|
||||
});
|
||||
|
||||
|
@ -3376,12 +3336,16 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
|||
"should fetch document info and page, without range, " +
|
||||
"using complete initialData",
|
||||
async function () {
|
||||
const subArrays = [];
|
||||
let fetches = 0;
|
||||
|
||||
const data = await dataPromise;
|
||||
const initialData = new Uint8Array(data);
|
||||
subArrays.push(initialData);
|
||||
|
||||
const transport = new PDFDataRangeTransport(
|
||||
data.length,
|
||||
data,
|
||||
initialData,
|
||||
/* progressiveDone = */ true
|
||||
);
|
||||
transport.requestDataRange = function (begin, end) {
|
||||
|
@ -3399,6 +3363,13 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`)
|
|||
expect(pdfPage.rotate).toEqual(0);
|
||||
expect(fetches).toEqual(0);
|
||||
|
||||
if (!isNodeJS) {
|
||||
// Check that the TypedArrays were transferred.
|
||||
for (const array of subArrays) {
|
||||
expect(array.length).toEqual(0);
|
||||
}
|
||||
}
|
||||
|
||||
await loadingTask.destroy();
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue