Move logic from viewer.js to chromecom.js
and also default to '' instead of DEFAULT_URL to avoid trying to load a non-existent file when no file has been specified.
This commit is contained in:
parent
b64c06f68d
commit
bfcc8af6ed
@ -14,21 +14,22 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* globals chrome */
|
/* globals chrome, PDFJS, PDFView */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var ChromeCom = (function ChromeComClosure() {
|
var ChromeCom = (function ChromeComClosure() {
|
||||||
return {
|
var ChromeCom = {};
|
||||||
/**
|
/**
|
||||||
* Creates an event that the extension is listening for and will
|
* Creates an event that the extension is listening for and will
|
||||||
* asynchronously respond by calling the callback.
|
* asynchronously respond by calling the callback.
|
||||||
|
*
|
||||||
* @param {String} action The action to trigger.
|
* @param {String} action The action to trigger.
|
||||||
* @param {String} data Optional data to send.
|
* @param {String} data Optional data to send.
|
||||||
* @param {Function} callback Optional response callback that will be called
|
* @param {Function} callback Optional response callback that will be called
|
||||||
* with one data argument. When the request cannot be handled, the callback
|
* with one data argument. When the request cannot be handled, the callback
|
||||||
* is immediately invoked with no arguments.
|
* is immediately invoked with no arguments.
|
||||||
*/
|
*/
|
||||||
request: function(action, data, callback) {
|
ChromeCom.request = function ChromeCom_request(action, data, callback) {
|
||||||
var message = {
|
var message = {
|
||||||
action: action,
|
action: action,
|
||||||
data: data
|
data: data
|
||||||
@ -43,6 +44,68 @@ var ChromeCom = (function ChromeComClosure() {
|
|||||||
} else {
|
} else {
|
||||||
chrome.runtime.sendMessage(message);
|
chrome.runtime.sendMessage(message);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a PDF file with the PDF viewer.
|
||||||
|
*
|
||||||
|
* @param {String} file Absolute URL of PDF file.
|
||||||
|
*/
|
||||||
|
ChromeCom.openPDFFile = function ChromeCom_openPDFFile(file) {
|
||||||
|
// Expand drive:-URLs to filesystem URLs (Chrome OS)
|
||||||
|
file = file.replace(/^drive:/i,
|
||||||
|
'filesystem:' + location.origin + '/external/');
|
||||||
|
|
||||||
|
ChromeCom.request('getPDFStream', file, function(response) {
|
||||||
|
if (response) {
|
||||||
|
// We will only get a response when the streamsPrivate API is available.
|
||||||
|
|
||||||
|
var isFTPFile = /^ftp:/i.test(file);
|
||||||
|
var streamUrl = response.streamUrl;
|
||||||
|
if (streamUrl) {
|
||||||
|
console.log('Found data stream for ' + file);
|
||||||
|
PDFView.open(streamUrl, 0, undefined, undefined, {
|
||||||
|
length: response.contentLength
|
||||||
|
});
|
||||||
|
PDFView.setTitleUsingUrl(file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isFTPFile && !response.extensionSupportsFTP) {
|
||||||
|
// Stream not found, and it's loaded from FTP.
|
||||||
|
// When the browser does not support loading ftp resources over
|
||||||
|
// XMLHttpRequest, just reload the page.
|
||||||
|
// NOTE: This will not lead to an infinite redirect loop, because
|
||||||
|
// if the file exists, then the streamsPrivate API will capture the
|
||||||
|
// stream and send back the response. If the stream does not exist,
|
||||||
|
// a "Webpage not available" error will be shown (not the PDF Viewer).
|
||||||
|
location.replace(file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (/^filesystem:/.test(file) && !PDFJS.disableWorker) {
|
||||||
|
// The security origin of filesystem:-URLs are not preserved when the
|
||||||
|
// URL is passed to a Web worker, (http://crbug.com/362061), so we have
|
||||||
|
// to create an intermediate blob:-URL as a work-around.
|
||||||
|
var resolveLocalFileSystemURL = window.resolveLocalFileSystemURL ||
|
||||||
|
window.webkitResolveLocalFileSystemURL;
|
||||||
|
resolveLocalFileSystemURL(file, function onResolvedFSURL(fileEntry) {
|
||||||
|
fileEntry.file(function(fileObject) {
|
||||||
|
var blobUrl = URL.createObjectURL(fileObject);
|
||||||
|
PDFView.open(blobUrl, 0, undefined, undefined, {
|
||||||
|
length: fileObject.size
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, function onFileSystemError(error) {
|
||||||
|
// This should not happen. When it happens, just fall back to the
|
||||||
|
// usual way of getting the File's data (via the Web worker).
|
||||||
|
console.warn('Cannot resolve file ' + file + ', ' + error.name + ' ' +
|
||||||
|
error.message);
|
||||||
|
PDFView.open(file, 0);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PDFView.open(file, 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return ChromeCom;
|
||||||
})();
|
})();
|
||||||
|
@ -1660,7 +1660,7 @@ var DocumentOutlineView = function documentOutlineView(outline) {
|
|||||||
// // Run this code outside DOMContentLoaded to make sure that the URL
|
// // Run this code outside DOMContentLoaded to make sure that the URL
|
||||||
// // is rewritten as soon as possible.
|
// // is rewritten as soon as possible.
|
||||||
// var params = PDFView.parseQueryString(document.location.search.slice(1));
|
// var params = PDFView.parseQueryString(document.location.search.slice(1));
|
||||||
// DEFAULT_URL = params.file || DEFAULT_URL;
|
// DEFAULT_URL = params.file || '';
|
||||||
//
|
//
|
||||||
// // Example: chrome-extension://.../http://example.com/file.pdf
|
// // Example: chrome-extension://.../http://example.com/file.pdf
|
||||||
// var humanReadableUrl = '/' + DEFAULT_URL + location.hash;
|
// var humanReadableUrl = '/' + DEFAULT_URL + location.hash;
|
||||||
@ -1685,9 +1685,6 @@ function webViewerInitialized() {
|
|||||||
//#endif
|
//#endif
|
||||||
//#if CHROME
|
//#if CHROME
|
||||||
//var file = DEFAULT_URL;
|
//var file = DEFAULT_URL;
|
||||||
//// XHR cannot get data from drive:-URLs, so expand to filesystem: (Chrome OS)
|
|
||||||
//file = file.replace(/^drive:/i,
|
|
||||||
// 'filesystem:' + location.origin + '/external/');
|
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//#if !(FIREFOX || MOZCENTRAL || CHROME || B2G)
|
//#if !(FIREFOX || MOZCENTRAL || CHROME || B2G)
|
||||||
@ -1913,58 +1910,10 @@ function webViewerInitialized() {
|
|||||||
PDFView.open(file, 0);
|
PDFView.open(file, 0);
|
||||||
}
|
}
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//#if CHROME
|
//#if CHROME
|
||||||
//ChromeCom.request('getPDFStream', file, function(response) {
|
//if (file) {
|
||||||
// if (response) {
|
// ChromeCom.openPDFFile(file);
|
||||||
// // We will only get a response when the streamsPrivate API is available.
|
|
||||||
//
|
|
||||||
// var isFTPFile = /^ftp:/i.test(file);
|
|
||||||
// var streamUrl = response.streamUrl;
|
|
||||||
// if (streamUrl) {
|
|
||||||
// console.log('Found data stream for ' + file);
|
|
||||||
// PDFView.open(streamUrl, 0, undefined, undefined, {
|
|
||||||
// length: response.contentLength
|
|
||||||
// });
|
|
||||||
// PDFView.setTitleUsingUrl(file);
|
|
||||||
// return;
|
|
||||||
//}
|
//}
|
||||||
// if (isFTPFile && !response.extensionSupportsFTP) {
|
|
||||||
// // Stream not found, and it's loaded from FTP.
|
|
||||||
// // When the browser does not support loading ftp resources over
|
|
||||||
// // XMLHttpRequest, just reload the page.
|
|
||||||
// // NOTE: This will not lead to an infinite redirect loop, because
|
|
||||||
// // if the file exists, then the streamsPrivate API will capture the
|
|
||||||
// // stream and send back the response. If the stream does not exist, then
|
|
||||||
// // a "Webpage not available" error will be shown (not the PDF Viewer).
|
|
||||||
// location.replace(file);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (/^filesystem:/.test(file) && !PDFJS.disableWorker) {
|
|
||||||
// // The security origin of filesystem:-URLs are not preserved when the URL
|
|
||||||
// // is passed to a Web worker, (http://crbug.com/362061), so we have to
|
|
||||||
// // create an intermediate blob:-URL as a work-around.
|
|
||||||
// var resolveLocalFileSystemURL = window.resolveLocalFileSystemURL ||
|
|
||||||
// window.webkitResolveLocalFileSystemURL;
|
|
||||||
// resolveLocalFileSystemURL(file, function onFileSystemSuccess(fileEntry) {
|
|
||||||
// fileEntry.file(function(fileObject) {
|
|
||||||
// var blobUrl = URL.createObjectURL(fileObject);
|
|
||||||
// PDFView.open(blobUrl, 0, undefined, undefined, {
|
|
||||||
// length: fileObject.size
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
// }, function onFileSystemError(error) {
|
|
||||||
// // This should not happen. When it happens, just fall back to the normal
|
|
||||||
// // way of getting the File's data (via the Web worker).
|
|
||||||
// console.warn('Cannot resolve file ' + file + ', ' + error.name + ' ' +
|
|
||||||
// error.message);
|
|
||||||
// PDFView.open(file, 0);
|
|
||||||
// });
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// PDFView.open(file, 0);
|
|
||||||
//});
|
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user