Browse Source

fix for #2219, "provide a better error message when file= not found/accessible"

summary: create a new Exception class for missing PDF's, use it in place of generic

add new MissingPDFException to util.js
handle MissingPDF in api.js
handle MissingPDF in viewer.js, using new missing_file_error message
add new missing_file_error to l10n/en-US/viewer.properties
send MissingPDF from WorkerMessageHandler's loadDocument
send MissingPDF from GetDocRequest handler
Bill Walker 12 years ago
parent
commit
12af2f9431
  1. 1
      l10n/en-US/viewer.properties
  2. 4
      src/api.js
  3. 12
      src/util.js
  4. 17
      src/worker.js
  5. 11
      web/viewer.js

1
l10n/en-US/viewer.properties

@ -111,6 +111,7 @@ page_scale_actual=Actual Size
loading_error_indicator=Error loading_error_indicator=Error
loading_error=An error occurred while loading the PDF. loading_error=An error occurred while loading the PDF.
invalid_file_error=Invalid or corrupted PDF file. invalid_file_error=Invalid or corrupted PDF file.
missing_file_error=Missing PDF file.
# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip. # LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
# "{{type}}" will be replaced with an annotation type from a list defined in # "{{type}}" will be replaced with an annotation type from a list defined in

4
src/api.js

@ -547,6 +547,10 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.workerReadyPromise.reject(data.exception.name, data.exception); this.workerReadyPromise.reject(data.exception.name, data.exception);
}, this); }, this);
messageHandler.on('MissingPDF', function transportMissingPDF(data) {
this.workerReadyPromise.reject(data.exception.message, data.exception);
}, this);
messageHandler.on('UnknownError', function transportUnknownError(data) { messageHandler.on('UnknownError', function transportUnknownError(data) {
this.workerReadyPromise.reject(data.exception.message, data.exception); this.workerReadyPromise.reject(data.exception.message, data.exception);
}, this); }, this);

12
src/util.js

@ -175,6 +175,18 @@ var InvalidPDFException = (function InvalidPDFExceptionClosure() {
return InvalidPDFException; return InvalidPDFException;
})(); })();
var MissingPDFException = (function MissingPDFExceptionClosure() {
function MissingPDFException(msg) {
this.name = 'MissingPDFException';
this.message = msg;
}
MissingPDFException.prototype = new Error();
MissingPDFException.constructor = MissingPDFException;
return MissingPDFException;
})();
function bytesToString(bytes) { function bytesToString(bytes) {
var str = ''; var str = '';
var length = bytes.length; var length = bytes.length;

17
src/worker.js

@ -130,6 +130,12 @@ var WorkerMessageHandler = {
exception: e exception: e
}); });
return;
} else if (e instanceof MissingPDFException) {
handler.send('MissingPDF', {
exception: e
});
return; return;
} else { } else {
handler.send('UnknownError', { handler.send('UnknownError', {
@ -185,8 +191,15 @@ var WorkerMessageHandler = {
}); });
}, },
error: function getPDFError(e) { error: function getPDFError(e) {
handler.send('DocError', 'Unexpected server response of ' + if (e.target.status == 404) {
e.target.status + '.'); handler.send('MissingPDF', {
exception: new MissingPDFException(
'Missing PDF \"' + source.url + '\".')});
} else {
handler.send('DocError', 'Unexpected server response (' +
e.target.status + ') while retrieving PDF \"' +
source.url + '\".');
}
}, },
headers: source.httpHeaders headers: source.httpHeaders
}, },

11
web/viewer.js

@ -1000,6 +1000,17 @@ var PDFView = {
//#endif //#endif
} }
if (exception && exception.name === 'MissingPDFException') {
// special message for missing PDF's
var loadingErrorMessage = mozL10n.get('missing_file_error', null,
'Missing PDF file.');
//#if B2G
// window.alert(loadingErrorMessage);
// return window.close();
//#endif
}
var loadingIndicator = document.getElementById('loading'); var loadingIndicator = document.getElementById('loading');
loadingIndicator.textContent = mozL10n.get('loading_error_indicator', loadingIndicator.textContent = mozL10n.get('loading_error_indicator',
null, 'Error'); null, 'Error');

Loading…
Cancel
Save