Refactors preferences and PDF opening related chromecom code.
This commit is contained in:
parent
148102b626
commit
3b21b51716
20
web/app.js
20
web/app.js
@ -451,7 +451,7 @@ var PDFViewerApplication = {
|
||||
return this.externalServices.supportedMouseWheelZoomModifierKeys;
|
||||
},
|
||||
|
||||
//#if (FIREFOX || MOZCENTRAL)
|
||||
//#if (FIREFOX || MOZCENTRAL || CHROME)
|
||||
initPassiveLoading: function pdfViewInitPassiveLoading() {
|
||||
this.externalServices.initPassiveLoading({
|
||||
onOpenWithTransport: function (url, length, transport) {
|
||||
@ -464,6 +464,16 @@ var PDFViewerApplication = {
|
||||
onOpenWithData: function (data) {
|
||||
PDFViewerApplication.open(data);
|
||||
},
|
||||
onOpenWithURL: function (url, length, originalURL) {
|
||||
var file = url, args = null;
|
||||
if (length !== undefined) {
|
||||
args = {length: length};
|
||||
}
|
||||
if (originalURL !== undefined) {
|
||||
file = {file: url, originalURL: originalURL};
|
||||
}
|
||||
PDFViewerApplication.open(file, args);
|
||||
},
|
||||
onError: function (e) {
|
||||
PDFViewerApplication.error(mozL10n.get('loading_error', null,
|
||||
'An error occurred while loading the PDF.'), e);
|
||||
@ -1445,7 +1455,7 @@ function webViewerInitialized() {
|
||||
appConfig.toolbar.download.addEventListener('click',
|
||||
SecondaryToolbar.downloadClick.bind(SecondaryToolbar));
|
||||
|
||||
//#if (FIREFOX || MOZCENTRAL)
|
||||
//#if (FIREFOX || MOZCENTRAL || CHROME)
|
||||
//PDFViewerApplication.setTitleUsingUrl(file);
|
||||
//PDFViewerApplication.initPassiveLoading();
|
||||
//return;
|
||||
@ -1476,11 +1486,6 @@ function webViewerInitialized() {
|
||||
PDFViewerApplication.open(file);
|
||||
}
|
||||
//#endif
|
||||
//#if CHROME
|
||||
//if (file) {
|
||||
// ChromeCom.openPDFFile(file);
|
||||
//}
|
||||
//#endif
|
||||
}
|
||||
|
||||
document.addEventListener('pagerendered', function (e) {
|
||||
@ -2141,6 +2146,7 @@ window.addEventListener('afterprint', function afterPrint(evt) {
|
||||
})();
|
||||
|
||||
exports.PDFViewerApplication = PDFViewerApplication;
|
||||
exports.DefaultExernalServices = DefaultExernalServices;
|
||||
|
||||
// TODO remove circular reference of pdfjs-web/secondary_toolbar on app.
|
||||
secondaryToolbarLib._setApp(exports);
|
||||
|
@ -13,27 +13,28 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* globals chrome */
|
||||
/* globals chrome, DEFAULT_PREFERENCES, DEFAULT_URL */
|
||||
'use strict';
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define('pdfjs-web/chromecom', ['exports', 'pdfjs-web/app',
|
||||
'pdfjs-web/overlay_manager', 'pdfjs-web/pdfjs'], factory);
|
||||
'pdfjs-web/overlay_manager', 'pdfjs-web/preferences', 'pdfjs-web/pdfjs'],
|
||||
factory);
|
||||
} else if (typeof exports !== 'undefined') {
|
||||
factory(exports, require('./app.js'), require('./overlay_manager.js'),
|
||||
require('./pdfjs.js'));
|
||||
require('./preferences.js'), require('./pdfjs.js'));
|
||||
} else {
|
||||
factory((root.pdfjsWebChromeCom = {}), root.pdfjsWebApp,
|
||||
root.pdfjsWebOverlayManager, root.pdfjsWebPDFJS);
|
||||
root.pdfjsWebOverlayManager, root.pdfjsWebPreferences,
|
||||
root.pdfjsWebPDFJS);
|
||||
}
|
||||
}(this, function (exports, app, overlayManager, pdfjsLib) {
|
||||
}(this, function (exports, app, overlayManager, preferences, pdfjsLib) {
|
||||
//#if CHROME
|
||||
//#if !CHROME
|
||||
if (true) { return; } // TODO ensure nothing depends on this module.
|
||||
//#endif
|
||||
var PDFViewerApplication = app.PDFViewerApplication;
|
||||
var DefaultExernalServices = app.DefaultExernalServices;
|
||||
var OverlayManager = overlayManager.OverlayManager;
|
||||
var Preferences = preferences.Preferences;
|
||||
|
||||
var ChromeCom = {};
|
||||
/**
|
||||
@ -64,11 +65,12 @@
|
||||
};
|
||||
|
||||
/**
|
||||
* Opens a PDF file with the PDF viewer.
|
||||
* Resolves a PDF file path and attempts to detects length.
|
||||
*
|
||||
* @param {String} file Absolute URL of PDF file.
|
||||
* @param {Function} callback A callback with resolved URL and file length.
|
||||
*/
|
||||
ChromeCom.openPDFFile = function ChromeCom_openPDFFile(file) {
|
||||
ChromeCom.resolvePDFFile = function ChromeCom_resolvePDFFile(file, callback) {
|
||||
// Expand drive:-URLs to filesystem URLs (Chrome OS)
|
||||
file = file.replace(/^drive:/i,
|
||||
'filesystem:' + location.origin + '/external/');
|
||||
@ -81,10 +83,7 @@
|
||||
var streamUrl = response.streamUrl;
|
||||
if (streamUrl) {
|
||||
console.log('Found data stream for ' + file);
|
||||
PDFViewerApplication.open(streamUrl, {
|
||||
length: response.contentLength
|
||||
});
|
||||
PDFViewerApplication.setTitleUsingUrl(file);
|
||||
callback(streamUrl, response.contentLength, file);
|
||||
return;
|
||||
}
|
||||
if (isFTPFile && !response.extensionSupportsFTP) {
|
||||
@ -108,16 +107,14 @@
|
||||
resolveLocalFileSystemURL(file, function onResolvedFSURL(fileEntry) {
|
||||
fileEntry.file(function(fileObject) {
|
||||
var blobUrl = URL.createObjectURL(fileObject);
|
||||
PDFViewerApplication.open(blobUrl, {
|
||||
length: fileObject.size
|
||||
});
|
||||
callback(blobUrl, 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);
|
||||
PDFViewerApplication.open(file);
|
||||
callback(file);
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -126,7 +123,7 @@
|
||||
// There is no UI to input a different URL, so this assumption will hold
|
||||
// for now.
|
||||
setReferer(file, function() {
|
||||
PDFViewerApplication.open(file);
|
||||
callback(file);
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -145,7 +142,7 @@
|
||||
}
|
||||
isAllowedFileSchemeAccess(function(isAllowedAccess) {
|
||||
if (isAllowedAccess) {
|
||||
PDFViewerApplication.open(file);
|
||||
callback(file);
|
||||
} else {
|
||||
requestAccessToLocalFile(file);
|
||||
}
|
||||
@ -153,7 +150,7 @@
|
||||
});
|
||||
return;
|
||||
}
|
||||
PDFViewerApplication.open(file);
|
||||
callback(file);
|
||||
});
|
||||
};
|
||||
|
||||
@ -324,6 +321,55 @@
|
||||
}
|
||||
}
|
||||
|
||||
Preferences._writeToStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
if (prefObj === DEFAULT_PREFERENCES) {
|
||||
var keysToRemove = Object.keys(DEFAULT_PREFERENCES);
|
||||
// If the storage is reset, remove the keys so that the values from
|
||||
// managed storage are applied again.
|
||||
chrome.storage.local.remove(keysToRemove, function() {
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
chrome.storage.local.set(prefObj, function() {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Preferences._readFromStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
if (chrome.storage.managed) {
|
||||
// Get preferences as set by the system administrator.
|
||||
// See extensions/chromium/preferences_schema.json for more information.
|
||||
// These preferences can be overridden by the user.
|
||||
chrome.storage.managed.get(DEFAULT_PREFERENCES, getPreferences);
|
||||
} else {
|
||||
// Managed storage not supported, e.g. in old Chromium versions.
|
||||
getPreferences(DEFAULT_PREFERENCES);
|
||||
}
|
||||
|
||||
function getPreferences(defaultPrefs) {
|
||||
if (chrome.runtime.lastError) {
|
||||
// Managed storage not supported, e.g. in Opera.
|
||||
defaultPrefs = DEFAULT_PREFERENCES;
|
||||
}
|
||||
chrome.storage.local.get(defaultPrefs, function(readPrefs) {
|
||||
resolve(readPrefs);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var ChromeExternalServices = Object.create(DefaultExernalServices);
|
||||
ChromeExternalServices.initPassiveLoading = function (callbacks) {
|
||||
ChromeCom.resolvePDFFile(DEFAULT_URL, function (url, length, originalURL) {
|
||||
callbacks.onOpenWithURL(url, length, originalURL);
|
||||
});
|
||||
};
|
||||
PDFViewerApplication.externalServices = ChromeExternalServices;
|
||||
|
||||
exports.ChromeCom = ChromeCom;
|
||||
//#endif
|
||||
}));
|
||||
|
@ -161,49 +161,6 @@ var Preferences = {
|
||||
}
|
||||
};
|
||||
|
||||
//#if CHROME
|
||||
//Preferences._writeToStorage = function (prefObj) {
|
||||
// return new Promise(function (resolve) {
|
||||
// if (prefObj == DEFAULT_PREFERENCES) {
|
||||
// var keysToRemove = Object.keys(DEFAULT_PREFERENCES);
|
||||
// // If the storage is reset, remove the keys so that the values from
|
||||
// // managed storage are applied again.
|
||||
// chrome.storage.local.remove(keysToRemove, function() {
|
||||
// resolve();
|
||||
// });
|
||||
// } else {
|
||||
// chrome.storage.local.set(prefObj, function() {
|
||||
// resolve();
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
//};
|
||||
//
|
||||
//Preferences._readFromStorage = function (prefObj) {
|
||||
// return new Promise(function (resolve) {
|
||||
// if (chrome.storage.managed) {
|
||||
// // Get preferences as set by the system administrator.
|
||||
// // See extensions/chromium/preferences_schema.json for more information.
|
||||
// // These preferences can be overridden by the user.
|
||||
// chrome.storage.managed.get(DEFAULT_PREFERENCES, getPreferences);
|
||||
// } else {
|
||||
// // Managed storage not supported, e.g. in old Chromium versions.
|
||||
// getPreferences(DEFAULT_PREFERENCES);
|
||||
// }
|
||||
//
|
||||
// function getPreferences(defaultPrefs) {
|
||||
// if (chrome.runtime.lastError) {
|
||||
// // Managed storage not supported, e.g. in Opera.
|
||||
// defaultPrefs = DEFAULT_PREFERENCES;
|
||||
// }
|
||||
// chrome.storage.local.get(defaultPrefs, function(readPrefs) {
|
||||
// resolve(readPrefs);
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
//};
|
||||
//#endif
|
||||
|
||||
//#if !(FIREFOX || MOZCENTRAL || CHROME)
|
||||
Preferences._writeToStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
|
Loading…
Reference in New Issue
Block a user