|
|
@ -439,9 +439,12 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { |
|
|
|
* This is for range requests |
|
|
|
* This is for range requests |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
function RangedChromeActions( |
|
|
|
function RangedChromeActions( |
|
|
|
domWindow, contentDispositionFilename, originalRequest) { |
|
|
|
domWindow, contentDispositionFilename, originalRequest, |
|
|
|
|
|
|
|
dataListener) { |
|
|
|
|
|
|
|
|
|
|
|
ChromeActions.call(this, domWindow, contentDispositionFilename); |
|
|
|
ChromeActions.call(this, domWindow, contentDispositionFilename); |
|
|
|
|
|
|
|
this.dataListener = dataListener; |
|
|
|
|
|
|
|
this.originalRequest = originalRequest; |
|
|
|
|
|
|
|
|
|
|
|
this.pdfUrl = originalRequest.URI.spec; |
|
|
|
this.pdfUrl = originalRequest.URI.spec; |
|
|
|
this.contentLength = originalRequest.contentLength; |
|
|
|
this.contentLength = originalRequest.contentLength; |
|
|
@ -487,11 +490,15 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { |
|
|
|
proto.constructor = RangedChromeActions; |
|
|
|
proto.constructor = RangedChromeActions; |
|
|
|
|
|
|
|
|
|
|
|
proto.initPassiveLoading = function RangedChromeActions_initPassiveLoading() { |
|
|
|
proto.initPassiveLoading = function RangedChromeActions_initPassiveLoading() { |
|
|
|
|
|
|
|
this.originalRequest.cancel(Cr.NS_BINDING_ABORTED); |
|
|
|
|
|
|
|
this.originalRequest = null; |
|
|
|
this.domWindow.postMessage({ |
|
|
|
this.domWindow.postMessage({ |
|
|
|
pdfjsLoadAction: 'supportsRangedLoading', |
|
|
|
pdfjsLoadAction: 'supportsRangedLoading', |
|
|
|
pdfUrl: this.pdfUrl, |
|
|
|
pdfUrl: this.pdfUrl, |
|
|
|
length: this.contentLength |
|
|
|
length: this.contentLength, |
|
|
|
|
|
|
|
data: this.dataListener.getData() |
|
|
|
}, '*'); |
|
|
|
}, '*'); |
|
|
|
|
|
|
|
this.dataListener = null; |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
}; |
|
|
|
}; |
|
|
@ -692,8 +699,8 @@ PdfStreamConverter.prototype = { |
|
|
|
* 1. asyncConvertData stores the listener |
|
|
|
* 1. asyncConvertData stores the listener |
|
|
|
* 2. onStartRequest creates a new channel, streams the viewer |
|
|
|
* 2. onStartRequest creates a new channel, streams the viewer |
|
|
|
* 3. If range requests are supported: |
|
|
|
* 3. If range requests are supported: |
|
|
|
* 3.1. Suspends and cancels the request so we can issue range |
|
|
|
* 3.1. Leave the request open until the viewer is ready to switch to |
|
|
|
* requests instead. |
|
|
|
* range requests. |
|
|
|
* |
|
|
|
* |
|
|
|
* If range rquests are not supported: |
|
|
|
* If range rquests are not supported: |
|
|
|
* 3.1. Read the stream as it's loaded in onDataAvailable to send |
|
|
|
* 3.1. Read the stream as it's loaded in onDataAvailable to send |
|
|
@ -779,18 +786,12 @@ PdfStreamConverter.prototype = { |
|
|
|
PdfJsTelemetry.onViewerIsUsed(); |
|
|
|
PdfJsTelemetry.onViewerIsUsed(); |
|
|
|
PdfJsTelemetry.onDocumentSize(aRequest.contentLength); |
|
|
|
PdfJsTelemetry.onDocumentSize(aRequest.contentLength); |
|
|
|
|
|
|
|
|
|
|
|
if (!rangeRequest) { |
|
|
|
|
|
|
|
// Creating storage for PDF data
|
|
|
|
// Creating storage for PDF data
|
|
|
|
var contentLength = aRequest.contentLength; |
|
|
|
var contentLength = aRequest.contentLength; |
|
|
|
this.dataListener = new PdfDataListener(contentLength); |
|
|
|
this.dataListener = new PdfDataListener(contentLength); |
|
|
|
this.binaryStream = Cc['@mozilla.org/binaryinputstream;1'] |
|
|
|
this.binaryStream = Cc['@mozilla.org/binaryinputstream;1'] |
|
|
|
.createInstance(Ci.nsIBinaryInputStream); |
|
|
|
.createInstance(Ci.nsIBinaryInputStream); |
|
|
|
} else { |
|
|
|
|
|
|
|
// Suspend the request so we're not consuming any of the stream,
|
|
|
|
|
|
|
|
// but we can't cancel the request yet. Otherwise, the original
|
|
|
|
|
|
|
|
// listener will think we do not want to go the new PDF url
|
|
|
|
|
|
|
|
aRequest.suspend(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create a new channel that is viewer loaded as a resource.
|
|
|
|
// Create a new channel that is viewer loaded as a resource.
|
|
|
|
var ioService = Services.io; |
|
|
|
var ioService = Services.io; |
|
|
@ -816,12 +817,8 @@ PdfStreamConverter.prototype = { |
|
|
|
var domWindow = getDOMWindow(channel); |
|
|
|
var domWindow = getDOMWindow(channel); |
|
|
|
var actions; |
|
|
|
var actions; |
|
|
|
if (rangeRequest) { |
|
|
|
if (rangeRequest) { |
|
|
|
// We are going to be issuing range requests, so cancel the
|
|
|
|
actions = new RangedChromeActions( |
|
|
|
// original request
|
|
|
|
domWindow, contentDispositionFilename, aRequest, dataListener); |
|
|
|
aRequest.resume(); |
|
|
|
|
|
|
|
aRequest.cancel(Cr.NS_BINDING_ABORTED); |
|
|
|
|
|
|
|
actions = new RangedChromeActions(domWindow, |
|
|
|
|
|
|
|
contentDispositionFilename, aRequest); |
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
actions = new StandardChromeActions( |
|
|
|
actions = new StandardChromeActions( |
|
|
|
domWindow, contentDispositionFilename, dataListener); |
|
|
|
domWindow, contentDispositionFilename, dataListener); |
|
|
|