|
|
@ -1,8 +1,10 @@ |
|
|
|
|
|
|
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / |
|
|
|
|
|
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
/* |
|
|
|
* A Test Driver for PDF.js |
|
|
|
* A Test Driver for PDF.js |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var appPath, browser, canvas, currentTaskIdx, manifest, stdout; |
|
|
|
var appPath, browser, canvas, currentTaskIdx, manifest, stdout; |
|
|
|
|
|
|
|
|
|
|
|
function queryParams() { |
|
|
|
function queryParams() { |
|
|
@ -21,16 +23,16 @@ function load() { |
|
|
|
browser = params.browser; |
|
|
|
browser = params.browser; |
|
|
|
manifestFile = params.manifestFile; |
|
|
|
manifestFile = params.manifestFile; |
|
|
|
appPath = params.path; |
|
|
|
appPath = params.path; |
|
|
|
|
|
|
|
|
|
|
|
canvas = document.createElement("canvas"); |
|
|
|
canvas = document.createElement("canvas"); |
|
|
|
canvas.mozOpaque = true; |
|
|
|
canvas.mozOpaque = true; |
|
|
|
stdout = document.getElementById("stdout"); |
|
|
|
stdout = document.getElementById("stdout"); |
|
|
|
|
|
|
|
|
|
|
|
log("load...\n"); |
|
|
|
log("load...\n"); |
|
|
|
|
|
|
|
|
|
|
|
log("Harness thinks this browser is '"+ browser + "' with path " + appPath + "\n"); |
|
|
|
log("Harness thinks this browser is '"+ browser + "' with path " + appPath + "\n"); |
|
|
|
log("Fetching manifest "+ manifestFile +"..."); |
|
|
|
log("Fetching manifest "+ manifestFile +"..."); |
|
|
|
|
|
|
|
|
|
|
|
var r = new XMLHttpRequest(); |
|
|
|
var r = new XMLHttpRequest(); |
|
|
|
r.open("GET", manifestFile, false); |
|
|
|
r.open("GET", manifestFile, false); |
|
|
|
r.onreadystatechange = function(e) { |
|
|
|
r.onreadystatechange = function(e) { |
|
|
@ -61,15 +63,15 @@ function nextTask() { |
|
|
|
if (r.readyState == 4) { |
|
|
|
if (r.readyState == 4) { |
|
|
|
var data = r.mozResponseArrayBuffer || r.mozResponse || |
|
|
|
var data = r.mozResponseArrayBuffer || r.mozResponse || |
|
|
|
r.responseArrayBuffer || r.response; |
|
|
|
r.responseArrayBuffer || r.response; |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
try { |
|
|
|
task.pdfDoc = new PDFDoc(new Stream(data)); |
|
|
|
task.pdfDoc = new PDFDoc(new Stream(data)); |
|
|
|
} catch(e) { |
|
|
|
} catch(e) { |
|
|
|
failure = 'load PDF doc: '+ e.toString(); |
|
|
|
failure = 'load PDF doc: '+ e.toString(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
task.pageNum = 1, nextPage(task, failure); |
|
|
|
task.pageNum = 1, nextPage(task, failure); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
r.send(null); |
|
|
|
r.send(null); |
|
|
|
} |
|
|
|
} |
|
|
@ -92,25 +94,13 @@ function nextPage(task, loadError) { |
|
|
|
var failure = loadError || ''; |
|
|
|
var failure = loadError || ''; |
|
|
|
|
|
|
|
|
|
|
|
var ctx = null; |
|
|
|
var ctx = null; |
|
|
|
var fonts; |
|
|
|
|
|
|
|
var gfx = null; |
|
|
|
|
|
|
|
var page = null; |
|
|
|
var page = null; |
|
|
|
|
|
|
|
|
|
|
|
if (!failure) { |
|
|
|
if (!failure) { |
|
|
|
log(" loading page "+ task.pageNum +"... "); |
|
|
|
|
|
|
|
ctx = canvas.getContext("2d"); |
|
|
|
|
|
|
|
fonts = []; |
|
|
|
|
|
|
|
try { |
|
|
|
try { |
|
|
|
gfx = new CanvasGraphics(ctx); |
|
|
|
log(" loading page "+ task.pageNum +"... "); |
|
|
|
|
|
|
|
ctx = canvas.getContext("2d"); |
|
|
|
page = task.pdfDoc.getPage(task.pageNum); |
|
|
|
page = task.pdfDoc.getPage(task.pageNum); |
|
|
|
page.compile(gfx, fonts); |
|
|
|
|
|
|
|
} catch(e) { |
|
|
|
|
|
|
|
failure = 'compile: '+ e.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!failure) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
var pdfToCssUnitsCoef = 96.0 / 72.0; |
|
|
|
var pdfToCssUnitsCoef = 96.0 / 72.0; |
|
|
|
// using mediaBox for the canvas size
|
|
|
|
// using mediaBox for the canvas size
|
|
|
|
var pageWidth = (page.mediaBox[2] - page.mediaBox[0]); |
|
|
|
var pageWidth = (page.mediaBox[2] - page.mediaBox[0]); |
|
|
@ -118,42 +108,28 @@ function nextPage(task, loadError) { |
|
|
|
canvas.width = pageWidth * pdfToCssUnitsCoef; |
|
|
|
canvas.width = pageWidth * pdfToCssUnitsCoef; |
|
|
|
canvas.height = pageHeight * pdfToCssUnitsCoef; |
|
|
|
canvas.height = pageHeight * pdfToCssUnitsCoef; |
|
|
|
clear(ctx); |
|
|
|
clear(ctx); |
|
|
|
} catch(e) { |
|
|
|
|
|
|
|
failure = 'page setup: '+ e.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!failure) { |
|
|
|
page.startRendering( |
|
|
|
try { |
|
|
|
ctx, |
|
|
|
FontLoader.bind(fonts, function() { |
|
|
|
function() { snapshotCurrentPage(page, task, failure); }); |
|
|
|
snapshotCurrentPage(gfx, page, task, failure); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} catch(e) { |
|
|
|
} catch(e) { |
|
|
|
failure = 'fonts: '+ e.toString(); |
|
|
|
failure = 'page setup: '+ e.toString(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (failure) { |
|
|
|
if (failure) { |
|
|
|
// Skip right to snapshotting if there was a failure, since the
|
|
|
|
// Skip right to snapshotting if there was a failure, since the
|
|
|
|
// fonts might be in an inconsistent state.
|
|
|
|
// fonts might be in an inconsistent state.
|
|
|
|
snapshotCurrentPage(gfx, page, task, failure); |
|
|
|
snapshotCurrentPage(page, task, failure); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function snapshotCurrentPage(gfx, page, task, failure) { |
|
|
|
function snapshotCurrentPage(page, task, failure) { |
|
|
|
log("done, snapshotting... "); |
|
|
|
log("done, snapshotting... "); |
|
|
|
|
|
|
|
|
|
|
|
if (!failure) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
page.display(gfx); |
|
|
|
|
|
|
|
} catch(e) { |
|
|
|
|
|
|
|
failure = 'render: '+ e.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sendTaskResult(canvas.toDataURL("image/png"), task, failure); |
|
|
|
sendTaskResult(canvas.toDataURL("image/png"), task, failure); |
|
|
|
log("done"+ (failure ? " (failed!: "+ failure +")" : "") +"\n"); |
|
|
|
log("done"+ (failure ? " (failed!: "+ failure +")" : "") +"\n"); |
|
|
|
|
|
|
|
|
|
|
|
// Set up the next request
|
|
|
|
// Set up the next request
|
|
|
|
backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0; |
|
|
|
backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0; |
|
|
|
setTimeout(function() { |
|
|
|
setTimeout(function() { |
|
|
|