@ -190,7 +190,7 @@ PdfDataListener.prototype = {
this . oncompleteCallback ( null , errorCode ) ;
this . oncompleteCallback ( null , errorCode ) ;
}
}
} ,
} ,
onprogress : function ( ) { } ,
onprogress ( ) { } ,
get oncomplete ( ) {
get oncomplete ( ) {
return this . oncompleteCallback ;
return this . oncompleteCallback ;
} ,
} ,
@ -205,24 +205,27 @@ PdfDataListener.prototype = {
}
}
} ;
} ;
// All the priviledged actions.
/ * *
function ChromeActions ( domWindow , contentDispositionFilename ) {
* All the privileged actions .
this . domWindow = domWindow ;
* /
this . contentDispositionFilename = contentDispositionFilename ;
class ChromeActions {
this . telemetryState = {
constructor ( domWindow , contentDispositionFilename ) {
documentInfo : false ,
this . domWindow = domWindow ;
firstPageInfo : false ,
this . contentDispositionFilename = contentDispositionFilename ;
streamTypesUsed : [ ] ,
this . telemetryState = {
fontTypesUsed : [ ] ,
documentInfo : false ,
startAt : Date . now ( )
firstPageInfo : false ,
} ;
streamTypesUsed : [ ] ,
}
fontTypesUsed : [ ] ,
startAt : Date . now ( )
} ;
}
ChromeActions . prototype = {
isInPrivateBrowsing ( ) {
isInPrivateBrowsing : function ( ) {
return PrivateBrowsingUtils . isContentWindowPrivate ( this . domWindow ) ;
return PrivateBrowsingUtils . isContentWindowPrivate ( this . domWindow ) ;
} ,
}
download : function ( data , sendResponse ) {
download ( data , sendResponse ) {
var self = this ;
var self = this ;
var originalUrl = data . originalUrl ;
var originalUrl = data . originalUrl ;
var blobUrl = data . blobUrl || originalUrl ;
var blobUrl = data . blobUrl || originalUrl ;
@ -279,7 +282,7 @@ ChromeActions.prototype = {
var listener = {
var listener = {
extListener : null ,
extListener : null ,
onStartRequest : function ( aRequest , aContext ) {
onStartRequest ( aRequest , aContext ) {
var loadContext = self . domWindow
var loadContext = self . domWindow
. QueryInterface ( Ci . nsIInterfaceRequestor )
. QueryInterface ( Ci . nsIInterfaceRequestor )
. getInterface ( Ci . nsIWebNavigation )
. getInterface ( Ci . nsIWebNavigation )
@ -290,7 +293,7 @@ ChromeActions.prototype = {
aRequest , loadContext , false ) ;
aRequest , loadContext , false ) ;
this . extListener . onStartRequest ( aRequest , aContext ) ;
this . extListener . onStartRequest ( aRequest , aContext ) ;
} ,
} ,
onStopRequest : function ( aRequest , aContext , aStatusCode ) {
onStopRequest ( aRequest , aContext , aStatusCode ) {
if ( this . extListener ) {
if ( this . extListener ) {
this . extListener . onStopRequest ( aRequest , aContext , aStatusCode ) ;
this . extListener . onStopRequest ( aRequest , aContext , aStatusCode ) ;
}
}
@ -299,20 +302,21 @@ ChromeActions.prototype = {
sendResponse ( false ) ;
sendResponse ( false ) ;
}
}
} ,
} ,
onDataAvailable : function ( aRequest , aContext , aInputStream , aOffset ,
onDataAvailable ( aRequest , aContext , aDataInputStream , aOffset , aCount ) {
aCount ) {
this . extListener . onDataAvailable ( aRequest , aContext , aDataInputStream ,
this . extListener . onDataAvailable ( aRequest , aContext , aInputStream ,
aOffset , aCount ) ;
aOffset , aCount ) ;
}
}
} ;
} ;
channel . asyncOpen2 ( listener ) ;
channel . asyncOpen2 ( listener ) ;
} ) ;
} ) ;
} ,
}
getLocale : function ( ) {
getLocale ( ) {
return getStringPref ( 'general.useragent.locale' , 'en-US' ) ;
return getStringPref ( 'general.useragent.locale' , 'en-US' ) ;
} ,
}
getStrings : function ( data ) {
getStrings ( data ) {
try {
try {
// Lazy initialization of localizedStrings
// Lazy initialization of localizedStrings
if ( ! ( 'localizedStrings' in this ) ) {
if ( ! ( 'localizedStrings' in this ) ) {
@ -324,8 +328,9 @@ ChromeActions.prototype = {
log ( 'Unable to retrieve localized strings: ' + e ) ;
log ( 'Unable to retrieve localized strings: ' + e ) ;
return 'null' ;
return 'null' ;
}
}
} ,
}
supportsIntegratedFind : function ( ) {
supportsIntegratedFind ( ) {
// Integrated find is only supported when we're not in a frame
// Integrated find is only supported when we're not in a frame
if ( this . domWindow . frameElement !== null ) {
if ( this . domWindow . frameElement !== null ) {
return false ;
return false ;
@ -339,22 +344,26 @@ ChromeActions.prototype = {
// ... or when the new find events code exists.
// ... or when the new find events code exists.
var findBar = getFindBar ( this . domWindow ) ;
var findBar = getFindBar ( this . domWindow ) ;
return ! ! findBar && ( 'updateControlState' in findBar ) ;
return ! ! findBar && ( 'updateControlState' in findBar ) ;
} ,
}
supportsDocumentFonts : function ( ) {
supportsDocumentFonts ( ) {
var prefBrowser = getIntPref ( 'browser.display.use_document_fonts' , 1 ) ;
var prefBrowser = getIntPref ( 'browser.display.use_document_fonts' , 1 ) ;
var prefGfx = getBoolPref ( 'gfx.downloadable_fonts.enabled' , true ) ;
var prefGfx = getBoolPref ( 'gfx.downloadable_fonts.enabled' , true ) ;
return ( ! ! prefBrowser && prefGfx ) ;
return ( ! ! prefBrowser && prefGfx ) ;
} ,
}
supportsDocumentColors : function ( ) {
supportsDocumentColors ( ) {
return getIntPref ( 'browser.display.document_color_use' , 0 ) !== 2 ;
return getIntPref ( 'browser.display.document_color_use' , 0 ) !== 2 ;
} ,
}
supportedMouseWheelZoomModifierKeys : function ( ) {
supportedMouseWheelZoomModifierKeys ( ) {
return {
return {
ctrlKey : getIntPref ( 'mousewheel.with_control.action' , 3 ) === 3 ,
ctrlKey : getIntPref ( 'mousewheel.with_control.action' , 3 ) === 3 ,
metaKey : getIntPref ( 'mousewheel.with_meta.action' , 1 ) === 3 ,
metaKey : getIntPref ( 'mousewheel.with_meta.action' , 1 ) === 3 ,
} ;
} ;
} ,
}
reportTelemetry : function ( data ) {
reportTelemetry ( data ) {
var probeInfo = JSON . parse ( data ) ;
var probeInfo = JSON . parse ( data ) ;
switch ( probeInfo . type ) {
switch ( probeInfo . type ) {
case 'documentInfo' :
case 'documentInfo' :
@ -409,12 +418,15 @@ ChromeActions.prototype = {
PdfJsTelemetry . onPrint ( ) ;
PdfJsTelemetry . onPrint ( ) ;
break ;
break ;
}
}
} ,
}
fallback : function ( args , sendResponse ) {
/ * *
* @ param { Object } args - Object with ` featureId ` and ` url ` properties .
* @ param { function } sendResponse - Callback function .
* /
fallback ( args , sendResponse ) {
var featureId = args . featureId ;
var featureId = args . featureId ;
var url = args . url ;
var self = this ;
var domWindow = this . domWindow ;
var domWindow = this . domWindow ;
var strings = getLocalizedStrings ( 'chrome.properties' ) ;
var strings = getLocalizedStrings ( 'chrome.properties' ) ;
var message ;
var message ;
@ -441,8 +453,9 @@ ChromeActions.prototype = {
winmm . removeMessageListener ( 'PDFJS:Child:fallbackDownload' ,
winmm . removeMessageListener ( 'PDFJS:Child:fallbackDownload' ,
fallbackDownload ) ;
fallbackDownload ) ;
} ) ;
} ) ;
} ,
}
updateFindControlState : function ( data ) {
updateFindControlState ( data ) {
if ( ! this . supportsIntegratedFind ( ) ) {
if ( ! this . supportsIntegratedFind ( ) ) {
return ;
return ;
}
}
@ -461,8 +474,9 @@ ChromeActions.prototype = {
. getInterface ( Ci . nsIContentFrameMessageManager ) ;
. getInterface ( Ci . nsIContentFrameMessageManager ) ;
winmm . sendAsyncMessage ( 'PDFJS:Parent:updateControlState' , data ) ;
winmm . sendAsyncMessage ( 'PDFJS:Parent:updateControlState' , data ) ;
} ,
}
setPreferences : function ( prefs , sendResponse ) {
setPreferences ( prefs , sendResponse ) {
var defaultBranch = Services . prefs . getDefaultBranch ( PREF _PREFIX + '.' ) ;
var defaultBranch = Services . prefs . getDefaultBranch ( PREF _PREFIX + '.' ) ;
var numberOfPrefs = 0 ;
var numberOfPrefs = 0 ;
var prefValue , prefName ;
var prefValue , prefName ;
@ -496,8 +510,9 @@ ChromeActions.prototype = {
if ( sendResponse ) {
if ( sendResponse ) {
sendResponse ( true ) ;
sendResponse ( true ) ;
}
}
} ,
}
getPreferences : function ( prefs , sendResponse ) {
getPreferences ( prefs , sendResponse ) {
var defaultBranch = Services . prefs . getDefaultBranch ( PREF _PREFIX + '.' ) ;
var defaultBranch = Services . prefs . getDefaultBranch ( PREF _PREFIX + '.' ) ;
var currentPrefs = { } , numberOfPrefs = 0 ;
var currentPrefs = { } , numberOfPrefs = 0 ;
var prefValue , prefName ;
var prefValue , prefName ;
@ -529,17 +544,16 @@ ChromeActions.prototype = {
return JSON . stringify ( currentPrefs ) ;
return JSON . stringify ( currentPrefs ) ;
}
}
}
}
} ;
}
var RangedChromeActions = ( function RangedChromeActionsClosure ( ) {
/ * *
/ * *
* This is for range requests .
* This is for range requests
* /
* /
class RangedChromeActions extends ChromeActions {
function RangedChromeActions (
constructor ( domWindow , contentDispositionFilename , originalRequest ,
domWindow , contentDispositionFilename , originalRequest ,
rangeEnabled , streamingEnabled , dataListener ) {
rangeEnabled , streamingEnabled , dataListener ) {
ChromeActions . call ( this , domWindow , contentDispositionFilename ) ;
super ( domWindow , contentDispositionFilename ) ;
this . dataListener = dataListener ;
this . dataListener = dataListener ;
this . originalRequest = originalRequest ;
this . originalRequest = originalRequest ;
this . rangeEnabled = rangeEnabled ;
this . rangeEnabled = rangeEnabled ;
@ -551,7 +565,7 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
// Pass all the headers from the original request through
// Pass all the headers from the original request through
var httpHeaderVisitor = {
var httpHeaderVisitor = {
headers : { } ,
headers : { } ,
visitHeader : function ( aHeader , aValue ) {
visitHeader ( aHeader , aValue ) {
if ( aHeader === 'Range' ) {
if ( aHeader === 'Range' ) {
// When loading the PDF from cache, firefox seems to set the Range
// When loading the PDF from cache, firefox seems to set the Range
// request header to fetch only the unfetched portions of the file
// request header to fetch only the unfetched portions of the file
@ -587,7 +601,7 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
this . networkManager = new NetworkManager ( this . pdfUrl , {
this . networkManager = new NetworkManager ( this . pdfUrl , {
httpHeaders : httpHeaderVisitor . headers ,
httpHeaders : httpHeaderVisitor . headers ,
getXhr : getXhr
getXhr ,
} ) ;
} ) ;
// If we are in range request mode, this means we manually issued xhr
// If we are in range request mode, this means we manually issued xhr
@ -598,12 +612,7 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
} ) ;
} ) ;
}
}
RangedChromeActions . prototype = Object . create ( ChromeActions . prototype ) ;
initPassiveLoading ( ) {
var proto = RangedChromeActions . prototype ;
proto . constructor = RangedChromeActions ;
proto . initPassiveLoading = function RangedChromeActions _initPassiveLoading ( ) {
var self = this ;
var data ;
var data ;
if ( ! this . streamingEnabled ) {
if ( ! this . streamingEnabled ) {
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
@ -613,16 +622,16 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
} else {
} else {
data = this . dataListener . readData ( ) ;
data = this . dataListener . readData ( ) ;
this . dataListener . onprogress = function ( loaded , total ) {
this . dataListener . onprogress = ( loaded , total ) => {
self . domWindow . postMessage ( {
this . domWindow . postMessage ( {
pdfjsLoadAction : 'progressiveRead' ,
pdfjsLoadAction : 'progressiveRead' ,
loaded : loaded ,
loaded ,
total : total ,
total ,
chunk : self . dataListener . readData ( )
chunk : this . dataListener . readData ( ) ,
} , '*' ) ;
} , '*' ) ;
} ;
} ;
this . dataListener . oncomplete = function ( ) {
this . dataListener . oncomplete = ( ) => {
self . dataListener = null ;
this . dataListener = null ;
} ;
} ;
}
}
@ -632,13 +641,13 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
streamingEnabled : this . streamingEnabled ,
streamingEnabled : this . streamingEnabled ,
pdfUrl : this . pdfUrl ,
pdfUrl : this . pdfUrl ,
length : this . contentLength ,
length : this . contentLength ,
data : data
data ,
} , '*' ) ;
} , '*' ) ;
return true ;
return true ;
} ;
}
proto . requestDataRange = function RangedChromeActions _ requestDataRange( args ) {
requestDataRange ( args ) {
if ( ! this . rangeEnabled ) {
if ( ! this . rangeEnabled ) {
return ;
return ;
}
}
@ -650,11 +659,11 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
// errors from chrome code for non-range requests, so this doesn't
// errors from chrome code for non-range requests, so this doesn't
// seem high-pri
// seem high-pri
this . networkManager . requestRange ( begin , end , {
this . networkManager . requestRange ( begin , end , {
onDone : function RangedChromeActions _onDone ( args ) {
onDone : function RangedChromeActions _onDone ( aA rgs ) {
domWindow . postMessage ( {
domWindow . postMessage ( {
pdfjsLoadAction : 'range' ,
pdfjsLoadAction : 'range' ,
begin : args . begin ,
begin : aA rgs . begin ,
chunk : args . chunk
chunk : aA rgs . chunk ,
} , '*' ) ;
} , '*' ) ;
} ,
} ,
onProgress : function RangedChromeActions _onProgress ( evt ) {
onProgress : function RangedChromeActions _onProgress ( evt ) {
@ -664,162 +673,155 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
} , '*' ) ;
} , '*' ) ;
}
}
} ) ;
} ) ;
} ;
}
proto . abortLoading = function RangedChromeActions _ abortLoading( ) {
abortLoading ( ) {
this . networkManager . abortAllRequests ( ) ;
this . networkManager . abortAllRequests ( ) ;
if ( this . originalRequest ) {
if ( this . originalRequest ) {
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
this . originalRequest = null ;
this . originalRequest = null ;
}
}
this . dataListener = null ;
this . dataListener = null ;
} ;
}
}
return RangedChromeActions ;
} ) ( ) ;
var StandardChromeActions = ( function StandardChromeActionsClosure ( ) {
/ * *
* This is for a single network stream
* /
function StandardChromeActions ( domWindow , contentDispositionFilename ,
originalRequest , dataListener ) {
ChromeActions . call ( this , domWindow , contentDispositionFilename ) ;
/ * *
* This is for a single network stream .
* /
class StandardChromeActions extends ChromeActions {
constructor ( domWindow , contentDispositionFilename , originalRequest ,
dataListener ) {
super ( domWindow , contentDispositionFilename ) ;
this . originalRequest = originalRequest ;
this . originalRequest = originalRequest ;
this . dataListener = dataListener ;
this . dataListener = dataListener ;
}
}
StandardChromeActions . prototype = Object . create ( ChromeActions . prototype ) ;
initPassiveLoading ( ) {
var proto = StandardChromeActions . prototype ;
proto . constructor = StandardChromeActions ;
proto . initPassiveLoading =
function StandardChromeActions _initPassiveLoading ( ) {
if ( ! this . dataListener ) {
if ( ! this . dataListener ) {
return false ;
return false ;
}
}
var self = this ;
this . dataListener . onprogress = ( loaded , total ) => {
this . domWindow . postMessage ( {
this . dataListener . onprogress = function ChromeActions _dataListenerProgress (
loaded , total ) {
self . domWindow . postMessage ( {
pdfjsLoadAction : 'progress' ,
pdfjsLoadAction : 'progress' ,
loaded : loaded ,
loaded ,
total : total
total ,
} , '*' ) ;
} , '*' ) ;
} ;
} ;
this . dataListener . oncomplete =
this . dataListener . oncomplete = ( data , errorCode ) => {
function StandardChromeActions _dataListenerComplete ( data , errorCode ) {
this . domWindow . postMessage ( {
self . domWindow . postMessage ( {
pdfjsLoadAction : 'complete' ,
pdfjsLoadAction : 'complete' ,
data : data ,
data ,
errorCode : errorCode
errorCode ,
} , '*' ) ;
} , '*' ) ;
self . dataListener = null ;
this . dataListener = null ;
self . originalRequest = null ;
this . originalRequest = null ;
} ;
} ;
return true ;
return true ;
} ;
}
proto . abortLoading = function StandardChromeActions _ abortLoading( ) {
abortLoading ( ) {
if ( this . originalRequest ) {
if ( this . originalRequest ) {
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
this . originalRequest . cancel ( Cr . NS _BINDING _ABORTED ) ;
this . originalRequest = null ;
this . originalRequest = null ;
}
}
this . dataListener = null ;
this . dataListener = null ;
} ;
}
return StandardChromeActions ;
} ) ( ) ;
// Event listener to trigger chrome privileged code.
function RequestListener ( actions ) {
this . actions = actions ;
}
}
// Receive an event and synchronously or asynchronously responds.
RequestListener . prototype . receive = function ( event ) {
/ * *
var message = event . target ;
* Event listener to trigger chrome privileged code .
var doc = message . ownerDocument ;
* /
var action = event . detail . action ;
class RequestListener {
var data = event . detail . data ;
constructor ( actions ) {
var sync = event . detail . sync ;
this . actions = actions ;
var actions = this . actions ;
if ( ! ( action in actions ) ) {
log ( 'Unknown action: ' + action ) ;
return ;
}
}
var response ;
if ( sync ) {
// Receive an event and synchronously or asynchronously responds.
response = actions [ action ] . call ( this . actions , data ) ;
receive ( event ) {
event . detail . response = Cu . cloneInto ( response , doc . defaultView ) ;
var message = event . target ;
} else {
var doc = message . ownerDocument ;
if ( ! event . detail . responseExpected ) {
var action = event . detail . action ;
doc . documentElement . removeChild ( message ) ;
var data = event . detail . data ;
response = null ;
var sync = event . detail . sync ;
var actions = this . actions ;
if ( ! ( action in actions ) ) {
log ( 'Unknown action: ' + action ) ;
return ;
}
var response ;
if ( sync ) {
response = actions [ action ] . call ( this . actions , data ) ;
event . detail . response = Cu . cloneInto ( response , doc . defaultView ) ;
} else {
} else {
response = function sendResponse ( response ) {
if ( ! event . detail . responseExpected ) {
try {
doc . documentElement . removeChild ( message ) ;
var listener = doc . createEvent ( 'CustomEvent' ) ;
response = null ;
let detail = Cu . cloneInto ( { response : response } , doc . defaultView ) ;
} else {
listener . initCustomEvent ( 'pdf.js.response' , true , false , detail ) ;
response = function sendResponse ( aResponse ) {
return message . dispatchEvent ( listener ) ;
try {
} catch ( e ) {
var listener = doc . createEvent ( 'CustomEvent' ) ;
// doc is no longer accessible because the requestor is already
let detail = Cu . cloneInto ( { response : aResponse } , doc . defaultView ) ;
// gone. unloaded content cannot receive the response anyway.
listener . initCustomEvent ( 'pdf.js.response' , true , false , detail ) ;
return false ;
return message . dispatchEvent ( listener ) ;
}
} catch ( e ) {
} ;
// doc is no longer accessible because the requestor is already
// gone. unloaded content cannot receive the response anyway.
return false ;
}
} ;
}
actions [ action ] . call ( this . actions , data , response ) ;
}
}
actions [ action ] . call ( this . actions , data , response ) ;
}
}
} ;
// Forwards events from the eventElement to the contentWindow only if the
// content window matches the currently selected browser window.
function FindEventManager ( contentWindow ) {
this . contentWindow = contentWindow ;
this . winmm = contentWindow . QueryInterface ( Ci . nsIInterfaceRequestor )
. getInterface ( Ci . nsIDocShell )
. QueryInterface ( Ci . nsIInterfaceRequestor )
. getInterface ( Ci . nsIContentFrameMessageManager ) ;
}
}
FindEventManager . prototype . bind = function ( ) {
/ * *
var unload = function ( e ) {
* Forwards events from the eventElement to the contentWindow only if the
this . unbind ( ) ;
* content window matches the currently selected browser window .
this . contentWindow . removeEventListener ( e . type , unload ) ;
* /
} . bind ( this ) ;
class FindEventManager {
this . contentWindow . addEventListener ( 'unload' , unload ) ;
constructor ( contentWindow ) {
this . contentWindow = contentWindow ;
// We cannot directly attach listeners to for the find events
this . winmm = contentWindow . QueryInterface ( Ci . nsIInterfaceRequestor )
// since the FindBar is in the parent process. Instead we're
. getInterface ( Ci . nsIDocShell )
// asking the PdfjsChromeUtils to do it for us and forward
. QueryInterface ( Ci . nsIInterfaceRequestor )
// all the find events to us.
. getInterface ( Ci . nsIContentFrameMessageManager ) ;
this . winmm . sendAsyncMessage ( 'PDFJS:Parent:addEventListener' ) ;
}
this . winmm . addMessageListener ( 'PDFJS:Child:handleEvent' , this ) ;
} ;
FindEventManager . prototype . receiveMessage = function ( msg ) {
bind ( ) {
var detail = msg . data . detail ;
var unload = function ( e ) {
var type = msg . data . type ;
this . unbind ( ) ;
var contentWindow = this . contentWindow ;
this . contentWindow . removeEventListener ( e . type , unload ) ;
} . bind ( this ) ;
this . contentWindow . addEventListener ( 'unload' , unload ) ;
// We cannot directly attach listeners to for the find events
// since the FindBar is in the parent process. Instead we're
// asking the PdfjsChromeUtils to do it for us and forward
// all the find events to us.
this . winmm . sendAsyncMessage ( 'PDFJS:Parent:addEventListener' ) ;
this . winmm . addMessageListener ( 'PDFJS:Child:handleEvent' , this ) ;
}
detail = Cu . cloneInto ( detail , contentWindow ) ;
receiveMessage ( msg ) {
var forward = contentWindow . document . createEvent ( 'CustomEvent' ) ;
var detail = msg . data . detail ;
forward . initCustomEvent ( type , true , true , detail ) ;
var type = msg . data . type ;
contentWindow . dispatchEvent ( forward ) ;
var contentWindow = this . contentWindow ;
} ;
FindEventManager . prototype . unbind = function ( ) {
detail = Cu . cloneInto ( detail , contentWindow ) ;
this . winmm . sendAsyncMessage ( 'PDFJS:Parent:removeEventListener' ) ;
var forward = contentWindow . document . createEvent ( 'CustomEvent' ) ;
} ;
forward . initCustomEvent ( type , true , true , detail ) ;
contentWindow . dispatchEvent ( forward ) ;
}
unbind ( ) {
this . winmm . sendAsyncMessage ( 'PDFJS:Parent:removeEventListener' ) ;
}
}
function PdfStreamConverter ( ) {
function PdfStreamConverter ( ) {
}
}
@ -858,18 +860,18 @@ PdfStreamConverter.prototype = {
* /
* /
// nsIStreamConverter::convert
// nsIStreamConverter::convert
convert : function ( aFromStream , aFromType , aToType , aCtxt ) {
convert ( aFromStream , aFromType , aToType , aCtxt ) {
throw Cr . NS _ERROR _NOT _IMPLEMENTED ;
throw Cr . NS _ERROR _NOT _IMPLEMENTED ;
} ,
} ,
// nsIStreamConverter::asyncConvertData
// nsIStreamConverter::asyncConvertData
asyncConvertData : function ( aFromType , aToType , aListener , aCtxt ) {
asyncConvertData ( aFromType , aToType , aListener , aCtxt ) {
// Store the listener passed to us
// Store the listener passed to us
this . listener = aListener ;
this . listener = aListener ;
} ,
} ,
// nsIStreamListener::onDataAvailable
// nsIStreamListener::onDataAvailable
onDataAvailable : function ( aRequest , aContext , aInputStream , aOffset , aCount ) {
onDataAvailable ( aRequest , aContext , aInputStream , aOffset , aCount ) {
if ( ! this . dataListener ) {
if ( ! this . dataListener ) {
return ;
return ;
}
}
@ -881,7 +883,7 @@ PdfStreamConverter.prototype = {
} ,
} ,
// nsIRequestObserver::onStartRequest
// nsIRequestObserver::onStartRequest
onStartRequest : function ( aRequest , aContext ) {
onStartRequest ( aRequest , aContext ) {
// Setup the request so we can use it below.
// Setup the request so we can use it below.
var isHttpRequest = false ;
var isHttpRequest = false ;
try {
try {
@ -960,14 +962,14 @@ PdfStreamConverter.prototype = {
// request(aRequest) below so we don't overwrite the original channel and
// request(aRequest) below so we don't overwrite the original channel and
// trigger an assertion.
// trigger an assertion.
var proxy = {
var proxy = {
onStartRequest : function ( request , context ) {
onStartRequest ( request , context ) {
listener . onStartRequest ( aRequest , aContext ) ;
listener . onStartRequest ( aRequest , aContext ) ;
} ,
} ,
onDataAvailable : function ( request , context , inputStream , offset , count ) {
onDataAvailable ( request , context , inputStream , offset , count ) {
listener . onDataAvailable ( aRequest , aContext , inputStream ,
listener . onDataAvailable ( aRequest , aContext , inputStream ,
offset , count ) ;
offset , count ) ;
} ,
} ,
onStopRequest : function ( request , context , statusCode ) {
onStopRequest ( request , context , statusCode ) {
// We get the DOM window here instead of before the request since it
// We get the DOM window here instead of before the request since it
// may have changed during a redirect.
// may have changed during a redirect.
var domWindow = getDOMWindow ( channel ) ;
var domWindow = getDOMWindow ( channel ) ;
@ -1017,7 +1019,7 @@ PdfStreamConverter.prototype = {
} ,
} ,
// nsIRequestObserver::onStopRequest
// nsIRequestObserver::onStopRequest
onStopRequest : function ( aRequest , aContext , aStatusCode ) {
onStopRequest ( aRequest , aContext , aStatusCode ) {
if ( ! this . dataListener ) {
if ( ! this . dataListener ) {
// Do nothing
// Do nothing
return ;
return ;