зеркало из https://github.com/mozilla/gecko-dev.git
50 строки
1.7 KiB
JavaScript
50 строки
1.7 KiB
JavaScript
/* global XPCOMUtils, BackgroundPageThumbs, FileUtils, PageThumbsStorage, Task, MIMEService */
|
|
/* exported PreviewProvider */
|
|
|
|
"use strict";
|
|
|
|
this.EXPORTED_SYMBOLS = ["PreviewProvider"];
|
|
|
|
const {utils: Cu} = Components;
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/Task.jsm");
|
|
Cu.import("resource://gre/modules/PageThumbs.jsm");
|
|
Cu.import("resource://gre/modules/FileUtils.jsm");
|
|
const {OS} = Cu.import("resource://gre/modules/osfile.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "BackgroundPageThumbs",
|
|
"resource://gre/modules/BackgroundPageThumbs.jsm");
|
|
XPCOMUtils.defineLazyServiceGetter(this, "MIMEService",
|
|
"@mozilla.org/mime;1", "nsIMIMEService");
|
|
|
|
let PreviewProvider = {
|
|
/**
|
|
* Returns a thumbnail as a data URI for a url, creating it if necessary
|
|
*
|
|
* @param {String} url
|
|
* a url to obtain a thumbnail for
|
|
* @return {Promise} A Promise that resolves with a base64 encoded thumbnail
|
|
*/
|
|
getThumbnail: Task.async(function* PreviewProvider_getThumbnail(url) {
|
|
try {
|
|
yield BackgroundPageThumbs.captureIfMissing(url);
|
|
let imgPath = PageThumbsStorage.getFilePathForURL(url);
|
|
|
|
// OS.File object used to easily read off-thread
|
|
let file = yield OS.File.open(imgPath, {read: true, existing: true});
|
|
|
|
// nsIFile object needed for MIMEService
|
|
let nsFile = FileUtils.File(imgPath);
|
|
|
|
let contentType = MIMEService.getTypeFromFile(nsFile);
|
|
let bytes = yield file.read();
|
|
let encodedData = btoa(String.fromCharCode.apply(null, bytes));
|
|
file.close();
|
|
return `data:${contentType};base64,${encodedData}`;
|
|
} catch (err) {
|
|
Cu.reportError(`PreviewProvider_getThumbnail error: ${err}`);
|
|
throw err;
|
|
}
|
|
})
|
|
};
|