mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-04-03 04:52:54 +00:00
Merge mozilla-central to autoland
This commit is contained in:
commit
58469cc1a0
@ -199,7 +199,6 @@
|
||||
@RESPATH@/components/dom_presentation.xpt
|
||||
@RESPATH@/components/downloads.xpt
|
||||
@RESPATH@/components/editor.xpt
|
||||
@RESPATH@/components/embed_base.xpt
|
||||
@RESPATH@/components/extensions.xpt
|
||||
@RESPATH@/components/exthandler.xpt
|
||||
@RESPATH@/components/exthelper.xpt
|
||||
@ -208,7 +207,6 @@
|
||||
#ifdef MOZ_GTK
|
||||
@RESPATH@/components/filepicker.xpt
|
||||
#endif
|
||||
@RESPATH@/components/find.xpt
|
||||
@RESPATH@/components/gfx.xpt
|
||||
@RESPATH@/components/gaia_chrome.xpt
|
||||
@RESPATH@/components/hal.xpt
|
||||
@ -309,6 +307,7 @@
|
||||
#ifdef ANDROID
|
||||
@RESPATH@/components/widget_android.xpt
|
||||
#endif
|
||||
@RESPATH@/components/windowcreator.xpt
|
||||
@RESPATH@/components/windowds.xpt
|
||||
@RESPATH@/components/windowwatcher.xpt
|
||||
@RESPATH@/components/xpcom_base.xpt
|
||||
|
@ -2182,6 +2182,13 @@
|
||||
t.setAttribute("hidden", "true");
|
||||
}
|
||||
|
||||
// Related tab inherits current tab's user context unless a different
|
||||
// usercontextid is specified
|
||||
if (aUserContextId == null &&
|
||||
(aRelatedToCurrent == null ? aReferrerURI : aRelatedToCurrent)) {
|
||||
aUserContextId = this.mCurrentTab.getAttribute("usercontextid") || 0;
|
||||
}
|
||||
|
||||
if (aUserContextId) {
|
||||
t.setAttribute("usercontextid", aUserContextId);
|
||||
ContextualIdentityService.setTabStyle(t);
|
||||
|
@ -28,3 +28,4 @@ tags = openwindow
|
||||
[browser_middleClick.js]
|
||||
[browser_imageCache.js]
|
||||
[browser_count_and_remove.js]
|
||||
[browser_relatedTab.js]
|
||||
|
@ -0,0 +1,31 @@
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
* Bug 1325014 - Adding tab related to current tab inherits current tab's container usercontextid unless otherwise specified
|
||||
*/
|
||||
|
||||
add_task(function* () {
|
||||
let tab = gBrowser.addTab("about:blank", {userContextId: 1});
|
||||
|
||||
gBrowser.selectedTab = tab;
|
||||
let relatedTab = gBrowser.addTab("about:blank", {relatedToCurrent: true});
|
||||
is(relatedTab.getAttribute('usercontextid'), 1, "Related tab (relatedToCurrent) inherits current tab's usercontextid");
|
||||
yield BrowserTestUtils.removeTab(relatedTab);
|
||||
|
||||
gBrowser.selectedTab = tab;
|
||||
relatedTab = gBrowser.addTab("about:blank", {relatedToCurrent: true, userContextId: 2});
|
||||
is(relatedTab.getAttribute('usercontextid'), 2, "Related tab (relatedToCurrent) with overridden usercontextid");
|
||||
yield BrowserTestUtils.removeTab(relatedTab);
|
||||
|
||||
gBrowser.selectedTab = tab;
|
||||
relatedTab = gBrowser.addTab("about:blank", {referrerURI: gBrowser.currentURI});
|
||||
is(relatedTab.getAttribute('usercontextid'), 1, "Related tab (referrer) inherits current tab's usercontextid");
|
||||
yield BrowserTestUtils.removeTab(relatedTab);
|
||||
|
||||
gBrowser.selectedTab = tab;
|
||||
relatedTab = gBrowser.addTab("about:blank", {referrerURI: gBrowser.currentURI, userContextId: 2});
|
||||
is(relatedTab.getAttribute('usercontextid'), 2, "Related tab (referrer) with overridden usercontextid");
|
||||
yield BrowserTestUtils.removeTab(relatedTab);
|
||||
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
});
|
@ -1,3 +1,3 @@
|
||||
This is the pdf.js project output, https://github.com/mozilla/pdf.js
|
||||
|
||||
Current extension version is: 1.6.418
|
||||
Current extension version is: 1.6.454
|
||||
|
@ -197,11 +197,11 @@ var PdfJs = {
|
||||
|
||||
uninit: function uninit() {
|
||||
if (this._initialized) {
|
||||
Services.prefs.removeObserver(PREF_DISABLED, this);
|
||||
Services.prefs.removeObserver(PREF_DISABLED_PLUGIN_TYPES, this);
|
||||
Services.obs.removeObserver(this, TOPIC_PDFJS_HANDLER_CHANGED);
|
||||
Services.obs.removeObserver(this, TOPIC_PLUGINS_LIST_UPDATED);
|
||||
Services.obs.removeObserver(this, TOPIC_PLUGIN_INFO_UPDATED);
|
||||
Services.prefs.removeObserver(PREF_DISABLED, this, false);
|
||||
Services.prefs.removeObserver(PREF_DISABLED_PLUGIN_TYPES, this, false);
|
||||
Services.obs.removeObserver(this, TOPIC_PDFJS_HANDLER_CHANGED, false);
|
||||
Services.obs.removeObserver(this, TOPIC_PLUGINS_LIST_UPDATED, false);
|
||||
Services.obs.removeObserver(this, TOPIC_PLUGIN_INFO_UPDATED, false);
|
||||
this._initialized = false;
|
||||
}
|
||||
this._ensureUnregistered();
|
||||
|
@ -147,21 +147,6 @@ function getLocalizedString(strings, id, property) {
|
||||
return id;
|
||||
}
|
||||
|
||||
function createNewChannel(uri, node) {
|
||||
return NetUtil.newChannel({
|
||||
uri: uri,
|
||||
loadUsingSystemPrincipal: true,
|
||||
});
|
||||
}
|
||||
|
||||
function asyncOpenChannel(channel, listener, context) {
|
||||
return channel.asyncOpen2(listener);
|
||||
}
|
||||
|
||||
function asyncFetchChannel(channel, callback) {
|
||||
return NetUtil.asyncFetch(channel, callback);
|
||||
}
|
||||
|
||||
// PDF data storage
|
||||
function PdfDataListener(length) {
|
||||
this.length = length; // less than 0, if length is unknown
|
||||
@ -255,12 +240,15 @@ ChromeActions.prototype = {
|
||||
getService(Ci.nsIExternalHelperAppService);
|
||||
|
||||
var docIsPrivate = this.isInPrivateBrowsing();
|
||||
var netChannel = createNewChannel(blobUri, this.domWindow.document);
|
||||
var netChannel = NetUtil.newChannel({
|
||||
uri: blobUri,
|
||||
loadUsingSystemPrincipal: true,
|
||||
});
|
||||
if ('nsIPrivateBrowsingChannel' in Ci &&
|
||||
netChannel instanceof Ci.nsIPrivateBrowsingChannel) {
|
||||
netChannel.setPrivate(docIsPrivate);
|
||||
}
|
||||
asyncFetchChannel(netChannel, function(aInputStream, aResult) {
|
||||
NetUtil.asyncFetch(netChannel, function(aInputStream, aResult) {
|
||||
if (!Components.isSuccessCode(aResult)) {
|
||||
if (sendResponse) {
|
||||
sendResponse(true);
|
||||
@ -318,7 +306,7 @@ ChromeActions.prototype = {
|
||||
}
|
||||
};
|
||||
|
||||
asyncOpenChannel(channel, listener, null);
|
||||
channel.asyncOpen2(listener);
|
||||
});
|
||||
},
|
||||
getLocale: function() {
|
||||
@ -960,7 +948,10 @@ PdfStreamConverter.prototype = {
|
||||
.createInstance(Ci.nsIBinaryInputStream);
|
||||
|
||||
// Create a new channel that is viewer loaded as a resource.
|
||||
var channel = createNewChannel(PDF_VIEWER_WEB_PAGE, null);
|
||||
var channel = NetUtil.newChannel({
|
||||
uri: PDF_VIEWER_WEB_PAGE,
|
||||
loadUsingSystemPrincipal: true,
|
||||
});
|
||||
|
||||
var listener = this.listener;
|
||||
var dataListener = this.dataListener;
|
||||
@ -1018,11 +1009,11 @@ PdfStreamConverter.prototype = {
|
||||
var ssm = Cc['@mozilla.org/scriptsecuritymanager;1']
|
||||
.getService(Ci.nsIScriptSecurityManager);
|
||||
var uri = NetUtil.newURI(PDF_VIEWER_WEB_PAGE);
|
||||
var resourcePrincipal;
|
||||
resourcePrincipal =
|
||||
var resourcePrincipal =
|
||||
ssm.createCodebasePrincipal(uri, aRequest.loadInfo.originAttributes);
|
||||
aRequest.owner = resourcePrincipal;
|
||||
asyncOpenChannel(channel, proxy, aContext);
|
||||
|
||||
channel.asyncOpen2(proxy);
|
||||
},
|
||||
|
||||
// nsIRequestObserver::onStopRequest
|
||||
|
@ -110,7 +110,7 @@ var PdfjsChromeUtils = {
|
||||
this._mmg.removeMessageListener('PDFJS:Parent:removeEventListener', this);
|
||||
this._mmg.removeMessageListener('PDFJS:Parent:updateControlState', this);
|
||||
|
||||
Services.obs.removeObserver(this, 'quit-application');
|
||||
Services.obs.removeObserver(this, 'quit-application', false);
|
||||
|
||||
this._mmg = null;
|
||||
this._ppmm = null;
|
||||
|
@ -23,8 +23,8 @@
|
||||
}
|
||||
}(this, function (exports) {
|
||||
'use strict';
|
||||
var pdfjsVersion = '1.6.418';
|
||||
var pdfjsBuild = '59afb4b9';
|
||||
var pdfjsVersion = '1.6.454';
|
||||
var pdfjsBuild = 'b8cd1433';
|
||||
var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : null;
|
||||
var pdfjsLibs = {};
|
||||
(function pdfjsWrapper() {
|
||||
@ -1813,9 +1813,8 @@
|
||||
return new RadioButtonWidgetAnnotationElement(parameters);
|
||||
} else if (parameters.data.checkBox) {
|
||||
return new CheckboxWidgetAnnotationElement(parameters);
|
||||
} else {
|
||||
warn('Unimplemented button widget annotation: pushbutton');
|
||||
}
|
||||
warn('Unimplemented button widget annotation: pushbutton');
|
||||
break;
|
||||
case 'Ch':
|
||||
return new ChoiceWidgetAnnotationElement(parameters);
|
||||
@ -6330,6 +6329,7 @@
|
||||
this.fontLoader = new FontLoader(loadingTask.docId);
|
||||
this.destroyed = false;
|
||||
this.destroyCapability = null;
|
||||
this._passwordCapability = null;
|
||||
this.pageCache = [];
|
||||
this.pagePromises = [];
|
||||
this.downloadInfoCapability = createPromiseCapability();
|
||||
@ -6342,6 +6342,9 @@
|
||||
}
|
||||
this.destroyed = true;
|
||||
this.destroyCapability = createPromiseCapability();
|
||||
if (this._passwordCapability) {
|
||||
this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
|
||||
}
|
||||
var waitOn = [];
|
||||
this.pageCache.forEach(function (page) {
|
||||
if (page) {
|
||||
@ -6369,9 +6372,7 @@
|
||||
},
|
||||
setupMessageHandler: function WorkerTransport_setupMessageHandler() {
|
||||
var messageHandler = this.messageHandler;
|
||||
function updatePassword(password) {
|
||||
messageHandler.send('UpdatePassword', password);
|
||||
}
|
||||
var loadingTask = this.loadingTask;
|
||||
var pdfDataRangeTransport = this.pdfDataRangeTransport;
|
||||
if (pdfDataRangeTransport) {
|
||||
pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
|
||||
@ -6398,18 +6399,19 @@
|
||||
this.pdfDocument = pdfDocument;
|
||||
loadingTask._capability.resolve(pdfDocument);
|
||||
}, this);
|
||||
messageHandler.on('NeedPassword', function transportNeedPassword(exception) {
|
||||
var loadingTask = this.loadingTask;
|
||||
messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) {
|
||||
this._passwordCapability = createPromiseCapability();
|
||||
if (loadingTask.onPassword) {
|
||||
return loadingTask.onPassword(updatePassword, PasswordResponses.NEED_PASSWORD);
|
||||
var updatePassword = function (password) {
|
||||
this._passwordCapability.resolve({ password: password });
|
||||
}.bind(this);
|
||||
loadingTask.onPassword(updatePassword, exception.code);
|
||||
} else {
|
||||
this._passwordCapability.reject(new PasswordException(exception.message, exception.code));
|
||||
}
|
||||
loadingTask._capability.reject(new PasswordException(exception.message, exception.code));
|
||||
return this._passwordCapability.promise;
|
||||
}, this);
|
||||
messageHandler.on('IncorrectPassword', function transportIncorrectPassword(exception) {
|
||||
var loadingTask = this.loadingTask;
|
||||
if (loadingTask.onPassword) {
|
||||
return loadingTask.onPassword(updatePassword, PasswordResponses.INCORRECT_PASSWORD);
|
||||
}
|
||||
messageHandler.on('PasswordException', function transportPasswordException(exception) {
|
||||
loadingTask._capability.reject(new PasswordException(exception.message, exception.code));
|
||||
}, this);
|
||||
messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) {
|
||||
@ -6720,9 +6722,8 @@
|
||||
var objs = this.objs;
|
||||
if (!objs[objId]) {
|
||||
return false;
|
||||
} else {
|
||||
return objs[objId].resolved;
|
||||
}
|
||||
return objs[objId].resolved;
|
||||
},
|
||||
hasData: function PDFObjects_hasData(objId) {
|
||||
return this.isResolved(objId);
|
||||
@ -6731,9 +6732,8 @@
|
||||
var objs = this.objs;
|
||||
if (!objs[objId] || !objs[objId].resolved) {
|
||||
return null;
|
||||
} else {
|
||||
return objs[objId].data;
|
||||
}
|
||||
return objs[objId].data;
|
||||
},
|
||||
clear: function PDFObjects_clear() {
|
||||
this.objs = Object.create(null);
|
||||
|
212
browser/extensions/pdfjs/content/build/pdf.worker.js
vendored
212
browser/extensions/pdfjs/content/build/pdf.worker.js
vendored
@ -23,8 +23,8 @@
|
||||
}
|
||||
}(this, function (exports) {
|
||||
'use strict';
|
||||
var pdfjsVersion = '1.6.418';
|
||||
var pdfjsBuild = '59afb4b9';
|
||||
var pdfjsVersion = '1.6.454';
|
||||
var pdfjsBuild = 'b8cd1433';
|
||||
var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : null;
|
||||
var pdfjsLibs = {};
|
||||
(function pdfjsWrapper() {
|
||||
@ -4717,7 +4717,7 @@
|
||||
return createBidiText(str, isLTR);
|
||||
}
|
||||
if (startLevel === -1) {
|
||||
if (strLength / numBidi < 0.3) {
|
||||
if (numBidi / strLength < 0.3) {
|
||||
isLTR = true;
|
||||
startLevel = 0;
|
||||
} else {
|
||||
@ -5674,10 +5674,9 @@
|
||||
return (value - 247) * 256 + dict[pos++] + 108;
|
||||
} else if (value >= 251 && value <= 254) {
|
||||
return -((value - 251) * 256) - dict[pos++] - 108;
|
||||
} else {
|
||||
warn('CFFParser_parseDict: "' + value + '" is a reserved command.');
|
||||
return NaN;
|
||||
}
|
||||
warn('CFFParser_parseDict: "' + value + '" is a reserved command.');
|
||||
return NaN;
|
||||
}
|
||||
function parseFloatOperand() {
|
||||
var str = '';
|
||||
@ -6959,9 +6958,8 @@
|
||||
encodeNumber: function CFFCompiler_encodeNumber(value) {
|
||||
if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
|
||||
return this.encodeInteger(value);
|
||||
} else {
|
||||
return this.encodeFloat(value);
|
||||
}
|
||||
return this.encodeFloat(value);
|
||||
},
|
||||
encodeFloat: function CFFCompiler_encodeFloat(num) {
|
||||
var value = num.toString();
|
||||
@ -14249,12 +14247,11 @@
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
if (!this.adobe && this.colorTransform === 1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (!this.adobe && this.colorTransform === 1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
_convertYccToRgb: function convertYccToRgb(data) {
|
||||
var Y, Cb, Cr;
|
||||
@ -14338,9 +14335,8 @@
|
||||
if (this._isColorConversionNeeded()) {
|
||||
if (forceRGBoutput) {
|
||||
return this._convertYcckToRgb(data);
|
||||
} else {
|
||||
return this._convertYcckToCmyk(data);
|
||||
}
|
||||
return this._convertYcckToCmyk(data);
|
||||
} else if (forceRGBoutput) {
|
||||
return this._convertCmykToRgb(data);
|
||||
}
|
||||
@ -23529,12 +23525,14 @@
|
||||
var inbits = 0, outbits = 0;
|
||||
var pos = bufferLength;
|
||||
var i;
|
||||
if (bits === 1) {
|
||||
if (bits === 1 && colors === 1) {
|
||||
for (i = 0; i < rowBytes; ++i) {
|
||||
var c = rawBytes[i];
|
||||
inbuf = inbuf << 8 | c;
|
||||
buffer[pos++] = (c ^ inbuf >> colors) & 0xFF;
|
||||
inbuf &= 0xFFFF;
|
||||
var c = rawBytes[i] ^ inbuf;
|
||||
c ^= c >> 1;
|
||||
c ^= c >> 2;
|
||||
c ^= c >> 4;
|
||||
inbuf = (c & 1) << 7;
|
||||
buffer[pos++] = c;
|
||||
}
|
||||
} else if (bits === 8) {
|
||||
for (i = 0; i < colors; ++i) {
|
||||
@ -33589,9 +33587,8 @@
|
||||
0
|
||||
];
|
||||
return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
|
||||
} else {
|
||||
return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
|
||||
}
|
||||
return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
|
||||
}
|
||||
};
|
||||
}();
|
||||
@ -38334,7 +38331,7 @@
|
||||
}
|
||||
var isTrueType = !tables['CFF '];
|
||||
if (!isTrueType) {
|
||||
if (header.version === 'OTTO' && properties.type !== 'CIDFontType2' || !tables['head'] || !tables['hhea'] || !tables['maxp'] || !tables['post']) {
|
||||
if (header.version === 'OTTO' && !properties.composite || !tables['head'] || !tables['hhea'] || !tables['maxp'] || !tables['post']) {
|
||||
cffFile = new Stream(tables['CFF '].data);
|
||||
cff = new CFFFont(cffFile, properties);
|
||||
adjustWidths(properties);
|
||||
@ -38436,7 +38433,7 @@
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (properties.type === 'CIDFontType2') {
|
||||
if (properties.composite) {
|
||||
var cidToGidMap = properties.cidToGidMap || [];
|
||||
var isCidToGidMapEmpty = cidToGidMap.length === 0;
|
||||
properties.cMap.forEach(function (charCode, cid) {
|
||||
@ -41338,11 +41335,13 @@
|
||||
}
|
||||
}
|
||||
function fn_g(x) {
|
||||
var result;
|
||||
if (x >= 6 / 29) {
|
||||
return x * x * x;
|
||||
result = x * x * x;
|
||||
} else {
|
||||
return 108 / 841 * (x - 4 / 29);
|
||||
result = 108 / 841 * (x - 4 / 29);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function decode(value, high1, low2, high2) {
|
||||
return low2 + value * (high2 - low2) / high1;
|
||||
@ -41424,9 +41423,8 @@
|
||||
function handleImageData(image, nativeDecoder) {
|
||||
if (nativeDecoder && nativeDecoder.canDecode(image)) {
|
||||
return nativeDecoder.decode(image);
|
||||
} else {
|
||||
return Promise.resolve(image);
|
||||
}
|
||||
return Promise.resolve(image);
|
||||
}
|
||||
function decodeAndClamp(value, addend, coefficient, max) {
|
||||
value = addend + value * coefficient;
|
||||
@ -42498,12 +42496,12 @@
|
||||
return Catalog;
|
||||
}();
|
||||
var XRef = function XRefClosure() {
|
||||
function XRef(stream, password) {
|
||||
function XRef(stream, pdfManager) {
|
||||
this.stream = stream;
|
||||
this.pdfManager = pdfManager;
|
||||
this.entries = [];
|
||||
this.xrefstms = Object.create(null);
|
||||
this.cache = [];
|
||||
this.password = password;
|
||||
this.stats = {
|
||||
streamTypes: [],
|
||||
fontTypes: []
|
||||
@ -42524,11 +42522,11 @@
|
||||
trailerDict.assignXref(this);
|
||||
this.trailer = trailerDict;
|
||||
var encrypt = trailerDict.get('Encrypt');
|
||||
if (encrypt) {
|
||||
if (isDict(encrypt)) {
|
||||
var ids = trailerDict.get('ID');
|
||||
var fileId = ids && ids.length ? ids[0] : '';
|
||||
encrypt.suppressEncryption = true;
|
||||
this.encrypt = new CipherTransformFactory(encrypt, fileId, this.password);
|
||||
this.encrypt = new CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
|
||||
}
|
||||
if (!(this.root = trailerDict.get('Root'))) {
|
||||
error('Invalid root reference');
|
||||
@ -43178,9 +43176,8 @@
|
||||
return dict.get('Mac');
|
||||
} else if (dict.has('DOS')) {
|
||||
return dict.get('DOS');
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
FileSpec.prototype = {
|
||||
get filename() {
|
||||
@ -44283,13 +44280,12 @@
|
||||
var cs = ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res);
|
||||
return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D'));
|
||||
};
|
||||
function PartialEvaluator(pdfManager, xref, handler, pageIndex, uniquePrefix, idCounters, fontCache, options) {
|
||||
function PartialEvaluator(pdfManager, xref, handler, pageIndex, idFactory, fontCache, options) {
|
||||
this.pdfManager = pdfManager;
|
||||
this.xref = xref;
|
||||
this.handler = handler;
|
||||
this.pageIndex = pageIndex;
|
||||
this.uniquePrefix = uniquePrefix;
|
||||
this.idCounters = idCounters;
|
||||
this.idFactory = idFactory;
|
||||
this.fontCache = fontCache;
|
||||
this.options = options || DefaultPartialEvaluatorOptions;
|
||||
}
|
||||
@ -44452,8 +44448,7 @@
|
||||
operatorList.addOp(OPS.paintInlineImageXObject, [imgData]);
|
||||
return;
|
||||
}
|
||||
var uniquePrefix = this.uniquePrefix || '';
|
||||
var objId = 'img_' + uniquePrefix + ++this.idCounters.obj;
|
||||
var objId = 'img_' + this.idFactory.createObjId();
|
||||
operatorList.addDependency(objId);
|
||||
args = [
|
||||
objId,
|
||||
@ -44737,7 +44732,7 @@
|
||||
this.fontCache.put(fontRef, fontCapability.promise);
|
||||
} else {
|
||||
if (!fontID) {
|
||||
fontID = (this.uniquePrefix || 'F_') + ++this.idCounters.obj;
|
||||
fontID = this.idFactory.createObjId();
|
||||
}
|
||||
this.fontCache.put('id_' + fontID, fontCapability.promise);
|
||||
}
|
||||
@ -44803,9 +44798,8 @@
|
||||
pattern = Pattern.parseShading(shading, matrix, xref, resources, this.handler);
|
||||
operatorList.addOp(fn, pattern.getIR());
|
||||
return Promise.resolve();
|
||||
} else {
|
||||
return Promise.reject('Unknown PatternType: ' + typeNum);
|
||||
}
|
||||
return Promise.reject('Unknown PatternType: ' + typeNum);
|
||||
}
|
||||
operatorList.addOp(fn, args);
|
||||
return Promise.resolve();
|
||||
@ -46759,17 +46753,16 @@
|
||||
operation.fn = fn;
|
||||
operation.args = args;
|
||||
return true;
|
||||
} else {
|
||||
if (isEOF(obj)) {
|
||||
return false;
|
||||
}
|
||||
if (obj !== null) {
|
||||
if (args === null) {
|
||||
args = [];
|
||||
}
|
||||
args.push(obj);
|
||||
assert(args.length <= 33, 'Too many arguments');
|
||||
}
|
||||
if (isEOF(obj)) {
|
||||
return false;
|
||||
}
|
||||
if (obj !== null) {
|
||||
if (args === null) {
|
||||
args = [];
|
||||
}
|
||||
args.push(obj);
|
||||
assert(args.length <= 33, 'Too many arguments');
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -47144,12 +47137,12 @@
|
||||
function AnnotationFactory() {
|
||||
}
|
||||
AnnotationFactory.prototype = {
|
||||
create: function AnnotationFactory_create(xref, ref, pdfManager, uniquePrefix, idCounters) {
|
||||
create: function AnnotationFactory_create(xref, ref, pdfManager, idFactory) {
|
||||
var dict = xref.fetchIfRef(ref);
|
||||
if (!isDict(dict)) {
|
||||
return;
|
||||
}
|
||||
var id = isRef(ref) ? ref.toString() : 'annot_' + (uniquePrefix || '') + ++idCounters.obj;
|
||||
var id = isRef(ref) ? ref.toString() : 'annot_' + idFactory.createObjId();
|
||||
var subtype = dict.get('Subtype');
|
||||
subtype = isName(subtype) ? subtype.name : null;
|
||||
var parameters = {
|
||||
@ -47849,10 +47842,15 @@
|
||||
this.xref = xref;
|
||||
this.ref = ref;
|
||||
this.fontCache = fontCache;
|
||||
this.uniquePrefix = 'p' + this.pageIndex + '_';
|
||||
this.idCounters = { obj: 0 };
|
||||
this.evaluatorOptions = pdfManager.evaluatorOptions;
|
||||
this.resourcesPromise = null;
|
||||
var uniquePrefix = 'p' + this.pageIndex + '_';
|
||||
var idCounters = { obj: 0 };
|
||||
this.idFactory = {
|
||||
createObjId: function () {
|
||||
return uniquePrefix + ++idCounters.obj;
|
||||
}
|
||||
};
|
||||
}
|
||||
Page.prototype = {
|
||||
getPageProp: function Page_getPageProp(key) {
|
||||
@ -47969,7 +47967,7 @@
|
||||
'XObject',
|
||||
'Font'
|
||||
]);
|
||||
var partialEvaluator = new PartialEvaluator(pdfManager, this.xref, handler, this.pageIndex, this.uniquePrefix, this.idCounters, this.fontCache, this.evaluatorOptions);
|
||||
var partialEvaluator = new PartialEvaluator(pdfManager, this.xref, handler, this.pageIndex, this.idFactory, this.fontCache, this.evaluatorOptions);
|
||||
var dataPromises = Promise.all([
|
||||
contentStreamPromise,
|
||||
resourcesPromise
|
||||
@ -48025,7 +48023,7 @@
|
||||
]);
|
||||
return dataPromises.then(function (data) {
|
||||
var contentStream = data[0];
|
||||
var partialEvaluator = new PartialEvaluator(pdfManager, self.xref, handler, self.pageIndex, self.uniquePrefix, self.idCounters, self.fontCache, self.evaluatorOptions);
|
||||
var partialEvaluator = new PartialEvaluator(pdfManager, self.xref, handler, self.pageIndex, self.idFactory, self.fontCache, self.evaluatorOptions);
|
||||
return partialEvaluator.getTextContent(contentStream, task, self.resources, null, normalizeWhitespace, combineTextItems);
|
||||
});
|
||||
},
|
||||
@ -48048,7 +48046,7 @@
|
||||
var annotationFactory = new AnnotationFactory();
|
||||
for (var i = 0, n = annotationRefs.length; i < n; ++i) {
|
||||
var annotationRef = annotationRefs[i];
|
||||
var annotation = annotationFactory.create(this.xref, annotationRef, this.pdfManager, this.uniquePrefix, this.idCounters);
|
||||
var annotation = annotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory);
|
||||
if (annotation) {
|
||||
annotations.push(annotation);
|
||||
}
|
||||
@ -48061,21 +48059,19 @@
|
||||
var PDFDocument = function PDFDocumentClosure() {
|
||||
var FINGERPRINT_FIRST_BYTES = 1024;
|
||||
var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00';
|
||||
function PDFDocument(pdfManager, arg, password) {
|
||||
function PDFDocument(pdfManager, arg) {
|
||||
var stream;
|
||||
if (isStream(arg)) {
|
||||
init.call(this, pdfManager, arg, password);
|
||||
stream = arg;
|
||||
} else if (isArrayBuffer(arg)) {
|
||||
init.call(this, pdfManager, new Stream(arg), password);
|
||||
stream = new Stream(arg);
|
||||
} else {
|
||||
error('PDFDocument: Unknown argument type');
|
||||
}
|
||||
}
|
||||
function init(pdfManager, stream, password) {
|
||||
assert(stream.length > 0, 'stream must have data');
|
||||
this.pdfManager = pdfManager;
|
||||
this.stream = stream;
|
||||
var xref = new XRef(this.stream, password, pdfManager);
|
||||
this.xref = xref;
|
||||
this.xref = new XRef(stream, pdfManager);
|
||||
}
|
||||
function find(stream, needle, limit, backwards) {
|
||||
var pos = stream.pos;
|
||||
@ -48308,6 +48304,9 @@
|
||||
get docId() {
|
||||
return this._docId;
|
||||
},
|
||||
get password() {
|
||||
return this._password;
|
||||
},
|
||||
get docBaseUrl() {
|
||||
var docBaseUrl = null;
|
||||
if (this._docBaseUrl) {
|
||||
@ -48351,14 +48350,7 @@
|
||||
return new NotImplementedException();
|
||||
},
|
||||
updatePassword: function BasePdfManager_updatePassword(password) {
|
||||
this.pdfDocument.xref.password = this.password = password;
|
||||
if (this._passwordChangedCapability) {
|
||||
this._passwordChangedCapability.resolve();
|
||||
}
|
||||
},
|
||||
passwordChanged: function BasePdfManager_passwordChanged() {
|
||||
this._passwordChangedCapability = createPromiseCapability();
|
||||
return this._passwordChangedCapability.promise;
|
||||
this._password = password;
|
||||
},
|
||||
terminate: function BasePdfManager_terminate() {
|
||||
return new NotImplementedException();
|
||||
@ -48369,10 +48361,11 @@
|
||||
var LocalPdfManager = function LocalPdfManagerClosure() {
|
||||
function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) {
|
||||
this._docId = docId;
|
||||
this._password = password;
|
||||
this._docBaseUrl = docBaseUrl;
|
||||
this.evaluatorOptions = evaluatorOptions;
|
||||
var stream = new Stream(data);
|
||||
this.pdfDocument = new PDFDocument(this, stream, password);
|
||||
this.pdfDocument = new PDFDocument(this, stream);
|
||||
this._loadedStreamCapability = createPromiseCapability();
|
||||
this._loadedStreamCapability.resolve(stream);
|
||||
}
|
||||
@ -48397,13 +48390,11 @@
|
||||
return Promise.resolve();
|
||||
},
|
||||
requestLoadedStream: function LocalPdfManager_requestLoadedStream() {
|
||||
return;
|
||||
},
|
||||
onLoadedStream: function LocalPdfManager_onLoadedStream() {
|
||||
return this._loadedStreamCapability.promise;
|
||||
},
|
||||
terminate: function LocalPdfManager_terminate() {
|
||||
return;
|
||||
}
|
||||
});
|
||||
return LocalPdfManager;
|
||||
@ -48411,6 +48402,7 @@
|
||||
var NetworkPdfManager = function NetworkPdfManagerClosure() {
|
||||
function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
|
||||
this._docId = docId;
|
||||
this._password = args.password;
|
||||
this._docBaseUrl = docBaseUrl;
|
||||
this.msgHandler = args.msgHandler;
|
||||
this.evaluatorOptions = evaluatorOptions;
|
||||
@ -48422,7 +48414,7 @@
|
||||
rangeChunkSize: args.rangeChunkSize
|
||||
};
|
||||
this.streamManager = new ChunkedStreamManager(pdfNetworkStream, params);
|
||||
this.pdfDocument = new PDFDocument(this, this.streamManager.getStream(), args.password);
|
||||
this.pdfDocument = new PDFDocument(this, this.streamManager.getStream());
|
||||
}
|
||||
Util.inherit(NetworkPdfManager, BasePdfManager, {
|
||||
ensure: function NetworkPdfManager_ensure(obj, prop, args) {
|
||||
@ -48924,18 +48916,23 @@
|
||||
};
|
||||
return pdfManagerCapability.promise;
|
||||
}
|
||||
var setupDoc = function (data) {
|
||||
var onSuccess = function (doc) {
|
||||
function setupDoc(data) {
|
||||
function onSuccess(doc) {
|
||||
ensureNotTerminated();
|
||||
handler.send('GetDoc', { pdfInfo: doc });
|
||||
};
|
||||
var onFailure = function (e) {
|
||||
}
|
||||
function onFailure(e) {
|
||||
if (e instanceof PasswordException) {
|
||||
if (e.code === PasswordResponses.NEED_PASSWORD) {
|
||||
handler.send('NeedPassword', e);
|
||||
} else if (e.code === PasswordResponses.INCORRECT_PASSWORD) {
|
||||
handler.send('IncorrectPassword', e);
|
||||
}
|
||||
var task = new WorkerTask('PasswordException: response ' + e.code);
|
||||
startWorkerTask(task);
|
||||
handler.sendWithPromise('PasswordRequest', e).then(function (data) {
|
||||
finishWorkerTask(task);
|
||||
pdfManager.updatePassword(data.password);
|
||||
pdfManagerReady();
|
||||
}).catch(function (ex) {
|
||||
finishWorkerTask(task);
|
||||
handler.send('PasswordException', ex);
|
||||
}.bind(null, e));
|
||||
} else if (e instanceof InvalidPDFException) {
|
||||
handler.send('InvalidPDF', e);
|
||||
} else if (e instanceof MissingPDFException) {
|
||||
@ -48945,7 +48942,22 @@
|
||||
} else {
|
||||
handler.send('UnknownError', new UnknownErrorException(e.message, e.toString()));
|
||||
}
|
||||
};
|
||||
}
|
||||
function pdfManagerReady() {
|
||||
ensureNotTerminated();
|
||||
loadDocument(false).then(onSuccess, function loadFailure(ex) {
|
||||
ensureNotTerminated();
|
||||
if (!(ex instanceof XRefParseException)) {
|
||||
onFailure(ex);
|
||||
return;
|
||||
}
|
||||
pdfManager.requestLoadedStream();
|
||||
pdfManager.onLoadedStream().then(function () {
|
||||
ensureNotTerminated();
|
||||
loadDocument(true).then(onSuccess, onFailure);
|
||||
});
|
||||
}, onFailure);
|
||||
}
|
||||
ensureNotTerminated();
|
||||
var cMapOptions = {
|
||||
url: data.cMapUrl === undefined ? null : data.cMapUrl,
|
||||
@ -48967,25 +48979,8 @@
|
||||
pdfManager.onLoadedStream().then(function (stream) {
|
||||
handler.send('DataLoaded', { length: stream.bytes.byteLength });
|
||||
});
|
||||
}).then(function pdfManagerReady() {
|
||||
ensureNotTerminated();
|
||||
loadDocument(false).then(onSuccess, function loadFailure(ex) {
|
||||
ensureNotTerminated();
|
||||
if (!(ex instanceof XRefParseException)) {
|
||||
if (ex instanceof PasswordException) {
|
||||
pdfManager.passwordChanged().then(pdfManagerReady);
|
||||
}
|
||||
onFailure(ex);
|
||||
return;
|
||||
}
|
||||
pdfManager.requestLoadedStream();
|
||||
pdfManager.onLoadedStream().then(function () {
|
||||
ensureNotTerminated();
|
||||
loadDocument(true).then(onSuccess, onFailure);
|
||||
});
|
||||
}, onFailure);
|
||||
}, onFailure);
|
||||
};
|
||||
}).then(pdfManagerReady, onFailure);
|
||||
}
|
||||
handler.on('GetPage', function wphSetupGetPage(data) {
|
||||
return pdfManager.getPage(data.pageIndex).then(function (page) {
|
||||
var rotatePromise = pdfManager.ensure(page, 'rotate');
|
||||
@ -49045,9 +49040,6 @@
|
||||
handler.on('GetStats', function wphSetupGetStats(data) {
|
||||
return pdfManager.pdfDocument.xref.stats;
|
||||
});
|
||||
handler.on('UpdatePassword', function wphSetupUpdatePassword(data) {
|
||||
pdfManager.updatePassword(data);
|
||||
});
|
||||
handler.on('GetAnnotations', function wphSetupGetAnnotations(data) {
|
||||
return pdfManager.getPage(data.pageIndex).then(function (page) {
|
||||
return pdfManager.ensure(page, 'getAnnotationsData', [data.intent]);
|
||||
|
@ -38,7 +38,6 @@ See https://github.com/adobe-type-tools/cmap-resources
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="viewer.js"></script>
|
||||
|
||||
</head>
|
||||
|
@ -358,26 +358,31 @@ var pdfjsWebLibs;
|
||||
(function (root, factory) {
|
||||
factory(root.pdfjsWebPreferences = {});
|
||||
}(this, function (exports) {
|
||||
var defaultPreferences;
|
||||
defaultPreferences = Promise.resolve({
|
||||
"showPreviousViewOnLoad": true,
|
||||
"defaultZoomValue": "",
|
||||
"sidebarViewOnLoad": 0,
|
||||
"enableHandToolOnLoad": false,
|
||||
"enableWebGL": false,
|
||||
"pdfBugEnabled": false,
|
||||
"disableRange": false,
|
||||
"disableStream": false,
|
||||
"disableAutoFetch": false,
|
||||
"disableFontFace": false,
|
||||
"disableTextLayer": false,
|
||||
"useOnlyCssZoom": false,
|
||||
"externalLinkTarget": 0,
|
||||
"enhanceTextSelection": false,
|
||||
"renderer": "canvas",
|
||||
"renderInteractiveForms": false,
|
||||
"disablePageLabels": false
|
||||
});
|
||||
var defaultPreferences = null;
|
||||
function getDefaultPreferences() {
|
||||
if (!defaultPreferences) {
|
||||
defaultPreferences = Promise.resolve({
|
||||
"showPreviousViewOnLoad": true,
|
||||
"defaultZoomValue": "",
|
||||
"sidebarViewOnLoad": 0,
|
||||
"enableHandToolOnLoad": false,
|
||||
"enableWebGL": false,
|
||||
"pdfBugEnabled": false,
|
||||
"disableRange": false,
|
||||
"disableStream": false,
|
||||
"disableAutoFetch": false,
|
||||
"disableFontFace": false,
|
||||
"disableTextLayer": false,
|
||||
"useOnlyCssZoom": false,
|
||||
"externalLinkTarget": 0,
|
||||
"enhanceTextSelection": false,
|
||||
"renderer": "canvas",
|
||||
"renderInteractiveForms": false,
|
||||
"disablePageLabels": false
|
||||
});
|
||||
}
|
||||
return defaultPreferences;
|
||||
}
|
||||
function cloneObj(obj) {
|
||||
var result = {};
|
||||
for (var i in obj) {
|
||||
@ -392,7 +397,7 @@ var pdfjsWebLibs;
|
||||
isInitializedPromiseResolved: false,
|
||||
initializedPromise: null,
|
||||
initialize: function preferencesInitialize() {
|
||||
return this.initializedPromise = defaultPreferences.then(function (defaults) {
|
||||
return this.initializedPromise = getDefaultPreferences().then(function (defaults) {
|
||||
Object.defineProperty(this, 'defaults', {
|
||||
value: Object.freeze(defaults),
|
||||
writable: false,
|
||||
@ -1132,8 +1137,9 @@ var pdfjsWebLibs;
|
||||
b = q;
|
||||
}
|
||||
}
|
||||
var result;
|
||||
if (x_ - a / b < c / d - x_) {
|
||||
return x_ === x ? [
|
||||
result = x_ === x ? [
|
||||
a,
|
||||
b
|
||||
] : [
|
||||
@ -1141,7 +1147,7 @@ var pdfjsWebLibs;
|
||||
a
|
||||
];
|
||||
} else {
|
||||
return x_ === x ? [
|
||||
result = x_ === x ? [
|
||||
c,
|
||||
d
|
||||
] : [
|
||||
@ -1149,6 +1155,7 @@ var pdfjsWebLibs;
|
||||
c
|
||||
];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function roundToDivide(x, div) {
|
||||
var r = x % div;
|
||||
@ -1701,12 +1708,11 @@ var pdfjsWebLibs;
|
||||
size_kb: (+kb.toPrecision(3)).toLocaleString(),
|
||||
size_b: fileSize.toLocaleString()
|
||||
}, '{{size_kb}} KB ({{size_b}} bytes)');
|
||||
} else {
|
||||
return mozL10n.get('document_properties_mb', {
|
||||
size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
|
||||
size_b: fileSize.toLocaleString()
|
||||
}, '{{size_mb}} MB ({{size_b}} bytes)');
|
||||
}
|
||||
return mozL10n.get('document_properties_mb', {
|
||||
size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
|
||||
size_b: fileSize.toLocaleString()
|
||||
}, '{{size_mb}} MB ({{size_b}} bytes)');
|
||||
},
|
||||
_parseDate: function PDFDocumentProperties_parseDate(inputDate) {
|
||||
var dateToParse = inputDate;
|
||||
@ -2027,17 +2033,16 @@ var pdfjsWebLibs;
|
||||
offset.matchIdx = previous ? numMatches - 1 : 0;
|
||||
this.updateMatch(true);
|
||||
return true;
|
||||
} else {
|
||||
this.advanceOffsetPage(previous);
|
||||
if (offset.wrapped) {
|
||||
offset.matchIdx = null;
|
||||
if (this.pagesToSearch < 0) {
|
||||
this.updateMatch(false);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
this.advanceOffsetPage(previous);
|
||||
if (offset.wrapped) {
|
||||
offset.matchIdx = null;
|
||||
if (this.pagesToSearch < 0) {
|
||||
this.updateMatch(false);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
updateMatchPosition: function PDFFindController_updateMatchPosition(pageIndex, index, elements, beginIdx) {
|
||||
if (this.selected.matchIdx === index && this.selected.pageIdx === pageIndex) {
|
||||
@ -3374,9 +3379,8 @@ var pdfjsWebLibs;
|
||||
this.nextHashParam = null;
|
||||
this.updatePreviousBookmark = true;
|
||||
return;
|
||||
} else {
|
||||
this.nextHashParam = null;
|
||||
}
|
||||
this.nextHashParam = null;
|
||||
}
|
||||
if (params.hash) {
|
||||
if (this.current.hash) {
|
||||
@ -3576,7 +3580,6 @@ var pdfjsWebLibs;
|
||||
goToDestination(destRef);
|
||||
}).catch(function () {
|
||||
console.error('PDFLinkService_navigateTo: "' + destRef + '" is not a valid page reference.');
|
||||
return;
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -5336,19 +5339,18 @@ var pdfjsWebLibs;
|
||||
_getVisiblePages: function () {
|
||||
if (!this.isInPresentationMode) {
|
||||
return getVisibleElements(this.container, this._pages, true);
|
||||
} else {
|
||||
var visible = [];
|
||||
var currentPage = this._pages[this._currentPageNumber - 1];
|
||||
visible.push({
|
||||
id: currentPage.id,
|
||||
view: currentPage
|
||||
});
|
||||
return {
|
||||
first: currentPage,
|
||||
last: currentPage,
|
||||
views: visible
|
||||
};
|
||||
}
|
||||
var visible = [];
|
||||
var currentPage = this._pages[this._currentPageNumber - 1];
|
||||
visible.push({
|
||||
id: currentPage.id,
|
||||
view: currentPage
|
||||
});
|
||||
return {
|
||||
first: currentPage,
|
||||
last: currentPage,
|
||||
views: visible
|
||||
};
|
||||
},
|
||||
cleanup: function () {
|
||||
for (var i = 0, ii = this._pages.length; i < ii; i++) {
|
||||
@ -7362,4 +7364,8 @@ function webViewerLoad() {
|
||||
window.PDFViewerApplication = pdfjsWebLibs.pdfjsWebApp.PDFViewerApplication;
|
||||
pdfjsWebLibs.pdfjsWebApp.PDFViewerApplication.run(config);
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', webViewerLoad, true);
|
||||
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
||||
webViewerLoad();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', webViewerLoad, true);
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.9 KiB |
@ -223,7 +223,6 @@
|
||||
@RESPATH@/components/dom_presentation.xpt
|
||||
@RESPATH@/components/downloads.xpt
|
||||
@RESPATH@/components/editor.xpt
|
||||
@RESPATH@/components/embed_base.xpt
|
||||
@RESPATH@/components/extensions.xpt
|
||||
@RESPATH@/components/exthandler.xpt
|
||||
@RESPATH@/components/exthelper.xpt
|
||||
@ -232,7 +231,6 @@
|
||||
#ifdef MOZ_GTK
|
||||
@RESPATH@/components/filepicker.xpt
|
||||
#endif
|
||||
@RESPATH@/components/find.xpt
|
||||
@RESPATH@/components/gfx.xpt
|
||||
@RESPATH@/components/html5.xpt
|
||||
@RESPATH@/components/htmlparser.xpt
|
||||
@ -327,6 +325,7 @@
|
||||
#ifdef XP_MACOSX
|
||||
@RESPATH@/components/widget_cocoa.xpt
|
||||
#endif
|
||||
@RESPATH@/components/windowcreator.xpt
|
||||
@RESPATH@/components/windowds.xpt
|
||||
@RESPATH@/components/windowwatcher.xpt
|
||||
@RESPATH@/components/xpcom_base.xpt
|
||||
|
@ -70,7 +70,6 @@
|
||||
* skin/classic/browser/tracking-protection-16.svg (../shared/identity-block/tracking-protection-16.svg)
|
||||
skin/classic/browser/newtab/close.png (../shared/newtab/close.png)
|
||||
skin/classic/browser/newtab/controls.svg (../shared/newtab/controls.svg)
|
||||
skin/classic/browser/newtab/whimsycorn.png (../shared/newtab/whimsycorn.png)
|
||||
skin/classic/browser/panel-icons.svg (../shared/panel-icons.svg)
|
||||
skin/classic/browser/preferences/in-content/favicon.ico (../shared/incontentprefs/favicon.ico)
|
||||
skin/classic/browser/preferences/in-content/icons.svg (../shared/incontentprefs/icons.svg)
|
||||
@ -100,8 +99,6 @@
|
||||
skin/classic/browser/search-indicator-magnifying-glass.svg (../shared/search/search-indicator-magnifying-glass.svg)
|
||||
skin/classic/browser/search-arrow-go.svg (../shared/search/search-arrow-go.svg)
|
||||
skin/classic/browser/gear.svg (../shared/search/gear.svg)
|
||||
skin/classic/browser/social/gear_default.png (../shared/social/gear_default.png)
|
||||
skin/classic/browser/social/gear_clicked.png (../shared/social/gear_clicked.png)
|
||||
skin/classic/browser/tabbrowser/connecting.png (../shared/tabbrowser/connecting.png)
|
||||
skin/classic/browser/tabbrowser/connecting@2x.png (../shared/tabbrowser/connecting@2x.png)
|
||||
skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg)
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
@ -15,7 +15,6 @@ browser.jar:
|
||||
skin/classic/browser/caption-buttons.svg
|
||||
skin/classic/browser/click-to-play-warning-stripes.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/keyhole-forward-mask.svg
|
||||
skin/classic/browser/livemark-folder.png
|
||||
skin/classic/browser/menu-back.png
|
||||
skin/classic/browser/menu-forward.png
|
||||
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask" maskContentUnits="objectBoundingBox">
|
||||
<rect x="0" y="0" width="1" height="1" fill="#fff"/>
|
||||
<circle cx="-0.46" cy="0.5" r="0.63"/>
|
||||
</mask>
|
||||
<mask id="mask-hover" maskContentUnits="objectBoundingBox">
|
||||
<rect x="0" y="0" width="1" height="1" fill="#fff"/>
|
||||
<circle cx="-0.35" cy="0.5" r="0.58"/>
|
||||
</mask>
|
||||
</svg>
|
Before Width: | Height: | Size: 620 B |
@ -273,7 +273,7 @@ skip-if = e10s && debug
|
||||
[browser_dbg_searchbox-help-popup-02.js]
|
||||
skip-if = e10s && debug
|
||||
[browser_dbg_searchbox-parse.js]
|
||||
skip-if = e10s && debug
|
||||
skip-if = (e10s && debug) || (os == 'linux' && asan) # asan, bug 1313861
|
||||
[browser_dbg_source-maps-01.js]
|
||||
skip-if = e10s && debug
|
||||
[browser_dbg_source-maps-02.js]
|
||||
|
@ -8,6 +8,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf-8,Web Console test for " +
|
||||
"persisting history - bug 943306";
|
||||
const INPUT_HISTORY_COUNT = 10;
|
||||
|
@ -8,6 +8,8 @@
|
||||
const TEST_URI = "data:text/html;charset=utf-8,Web Console test for " +
|
||||
"bug 614793: jsterm result scroll";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
||||
add_task(function* () {
|
||||
yield loadTab(TEST_URI);
|
||||
let hud = yield openConsole();
|
||||
|
@ -15,6 +15,8 @@ XPIDL_SOURCES += [
|
||||
'nsIContentViewerContainer.idl',
|
||||
'nsIContentViewerEdit.idl',
|
||||
'nsIContentViewerFile.idl',
|
||||
'nsIContextMenuListener.idl',
|
||||
'nsIContextMenuListener2.idl',
|
||||
'nsIDocCharset.idl',
|
||||
'nsIDocShell.idl',
|
||||
'nsIDocShellLoadInfo.idl',
|
||||
@ -29,6 +31,8 @@ XPIDL_SOURCES += [
|
||||
'nsIRefreshURI.idl',
|
||||
'nsIScrollable.idl',
|
||||
'nsITextScroll.idl',
|
||||
'nsITooltipListener.idl',
|
||||
'nsITooltipTextProvider.idl',
|
||||
'nsIURIFixup.idl',
|
||||
'nsIWebNavigation.idl',
|
||||
'nsIWebNavigationInfo.idl',
|
||||
@ -38,7 +42,9 @@ XPIDL_SOURCES += [
|
||||
XPIDL_MODULE = 'docshell'
|
||||
|
||||
EXPORTS += [
|
||||
'nsCTooltipTextProvider.h',
|
||||
'nsDocShellLoadTypes.h',
|
||||
'nsDocShellTreeOwner.h',
|
||||
'nsILinkHandler.h',
|
||||
'nsIScrollObserver.h',
|
||||
'nsIWebShellServices.h',
|
||||
@ -53,12 +59,14 @@ EXPORTS.mozilla += [
|
||||
UNIFIED_SOURCES += [
|
||||
'LoadContext.cpp',
|
||||
'nsAboutRedirector.cpp',
|
||||
'nsContextMenuInfo.cpp',
|
||||
'nsDefaultURIFixup.cpp',
|
||||
'nsDocShell.cpp',
|
||||
'nsDocShellEditorData.cpp',
|
||||
'nsDocShellEnumerator.cpp',
|
||||
'nsDocShellLoadInfo.cpp',
|
||||
'nsDocShellTransferableHooks.cpp',
|
||||
'nsDocShellTreeOwner.cpp',
|
||||
'nsDownloadHistory.cpp',
|
||||
'nsDSURIContentListener.cpp',
|
||||
'nsWebNavigationInfo.cpp',
|
||||
@ -73,8 +81,10 @@ LOCAL_INCLUDES += [
|
||||
'/dom/base',
|
||||
'/layout/base',
|
||||
'/layout/generic',
|
||||
'/layout/style',
|
||||
'/layout/xul',
|
||||
'/netwerk/protocol/viewsource',
|
||||
'/toolkit/components/browser',
|
||||
'/tools/profiler',
|
||||
]
|
||||
|
||||
|
@ -58,6 +58,11 @@ Element::ShouldTraverseForServo()
|
||||
inline void
|
||||
Element::NoteDirtyDescendantsForServo()
|
||||
{
|
||||
if (!HasServoData()) {
|
||||
// The dirty descendants bit only applies to styled elements.
|
||||
return;
|
||||
}
|
||||
|
||||
Element* curr = this;
|
||||
while (curr && !curr->HasDirtyDescendantsForServo()) {
|
||||
curr->SetHasDirtyDescendantsForServo();
|
||||
|
@ -793,6 +793,13 @@ nsDOMClassInfo::GetClass()
|
||||
return &mData->mClass;
|
||||
}
|
||||
|
||||
// virtual
|
||||
const JSClass*
|
||||
nsDOMClassInfo::GetJSClass()
|
||||
{
|
||||
return Jsvalify(&mData->mClass);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMClassInfo::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||
JSObject *globalObj, JSObject **parentObj)
|
||||
|
@ -17,7 +17,7 @@ load 407053.html
|
||||
load 423371-1.html
|
||||
load 448564.html
|
||||
load 451123-1.html
|
||||
skip-if(stylo) load 453406-1.html # bug 1323654
|
||||
load 453406-1.html
|
||||
load 464197-1.html
|
||||
load 465466-1.xhtml
|
||||
load 468562-1.html
|
||||
|
@ -2447,7 +2447,10 @@ mozilla::ipc::IPCResult
|
||||
ContentChild::RecvInitServiceWorkers(const ServiceWorkerConfiguration& aConfig)
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown began
|
||||
return IPC_OK();
|
||||
}
|
||||
swm->LoadRegistrations(aConfig.serviceWorkerRegistrations());
|
||||
return IPC_OK();
|
||||
}
|
||||
|
@ -126,7 +126,6 @@ LOCAL_INCLUDES += [
|
||||
'/dom/security',
|
||||
'/dom/storage',
|
||||
'/dom/workers',
|
||||
'/embedding/components/printingui/ipc',
|
||||
'/extensions/cookie',
|
||||
'/extensions/spellcheck/src',
|
||||
'/gfx/2d',
|
||||
@ -134,6 +133,7 @@ LOCAL_INCLUDES += [
|
||||
'/layout/base',
|
||||
'/media/webrtc',
|
||||
'/netwerk/base',
|
||||
'/toolkit/components/printingui/ipc',
|
||||
'/toolkit/crashreporter',
|
||||
'/toolkit/xre',
|
||||
'/uriloader/exthandler',
|
||||
|
@ -43,6 +43,7 @@ DIRS += [
|
||||
'browser-element',
|
||||
'cache',
|
||||
'canvas',
|
||||
'commandhandler',
|
||||
'crypto',
|
||||
'devicestorage',
|
||||
'encoding',
|
||||
@ -96,6 +97,7 @@ DIRS += [
|
||||
'u2f',
|
||||
'console',
|
||||
'performance',
|
||||
'webbrowserpersist',
|
||||
'xhr',
|
||||
'worklet',
|
||||
]
|
||||
|
@ -2558,6 +2558,12 @@ public:
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown began
|
||||
mRv = NS_ERROR_FAILURE;
|
||||
return true;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerRegistrationInfo> registration =
|
||||
swm->GetRegistration(principal, mScope);
|
||||
|
||||
|
@ -131,10 +131,16 @@ public:
|
||||
WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate();
|
||||
MOZ_ASSERT(workerPrivate);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
UniquePtr<ServiceWorkerClientInfo> result;
|
||||
ErrorResult rv;
|
||||
UniquePtr<ServiceWorkerClientInfo> result = swm->GetClient(workerPrivate->GetPrincipal(),
|
||||
mClientId, rv);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
rv = NS_ERROR_FAILURE;
|
||||
} else {
|
||||
result = swm->GetClient(workerPrivate->GetPrincipal(), mClientId, rv);
|
||||
}
|
||||
|
||||
RefPtr<ResolvePromiseWorkerRunnable> r =
|
||||
new ResolvePromiseWorkerRunnable(mPromiseProxy->GetWorkerPrivate(),
|
||||
mPromiseProxy, Move(result),
|
||||
@ -210,11 +216,12 @@ public:
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
nsTArray<ServiceWorkerClientInfo> result;
|
||||
|
||||
swm->GetAllClients(mPromiseProxy->GetWorkerPrivate()->GetPrincipal(), mScope,
|
||||
mIncludeUncontrolled, result);
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (swm) {
|
||||
swm->GetAllClients(mPromiseProxy->GetWorkerPrivate()->GetPrincipal(),
|
||||
mScope, mIncludeUncontrolled, result);
|
||||
}
|
||||
RefPtr<ResolvePromiseWorkerRunnable> r =
|
||||
new ResolvePromiseWorkerRunnable(mPromiseProxy->GetWorkerPrivate(),
|
||||
mPromiseProxy, result);
|
||||
@ -288,11 +295,15 @@ public:
|
||||
WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate();
|
||||
MOZ_ASSERT(workerPrivate);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
nsresult rv = swm->ClaimClients(workerPrivate->GetPrincipal(),
|
||||
mScope, mServiceWorkerID);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
rv = NS_ERROR_FAILURE;
|
||||
} else {
|
||||
rv = swm->ClaimClients(workerPrivate->GetPrincipal(), mScope,
|
||||
mServiceWorkerID);
|
||||
}
|
||||
|
||||
RefPtr<ResolveClaimRunnable> r =
|
||||
new ResolveClaimRunnable(workerPrivate, mPromiseProxy, rv);
|
||||
@ -536,7 +547,10 @@ public:
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = workerPrivate->GetPrincipal();
|
||||
MOZ_ASSERT(principal);
|
||||
@ -572,7 +586,10 @@ public:
|
||||
MOZ_ASSERT(workerPrivate);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = workerPrivate->GetPrincipal();
|
||||
MOZ_ASSERT(principal);
|
||||
|
@ -874,6 +874,10 @@ public:
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Make the error message a localized string. (bug 1222720)
|
||||
nsString message;
|
||||
|
@ -101,7 +101,12 @@ ServiceWorkerJob::Start(Callback* aFinalCallback)
|
||||
// before proceeding. We should always be able to get a ServiceWorkerManager,
|
||||
// however, since Start() should not be called during shutdown.
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return;
|
||||
}
|
||||
if (!swm->HasBackgroundActor()) {
|
||||
// waiting to initialize
|
||||
swm->AppendPendingOperation(runnable);
|
||||
return;
|
||||
}
|
||||
|
@ -332,9 +332,10 @@ public:
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->PropagateSoftUpdate(mOriginAttributes, mScope);
|
||||
}
|
||||
|
||||
swm->PropagateSoftUpdate(mOriginAttributes, mScope);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -364,11 +365,8 @@ public:
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
nsresult rv = swm->PropagateUnregister(mPrincipal, mCallback, mScope);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
if (swm) {
|
||||
swm->PropagateUnregister(mPrincipal, mCallback, mScope);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@ -394,9 +392,10 @@ public:
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->Remove(mHost);
|
||||
}
|
||||
|
||||
swm->Remove(mHost);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -418,9 +417,10 @@ public:
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->PropagateRemove(mHost);
|
||||
}
|
||||
|
||||
swm->PropagateRemove(mHost);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -442,9 +442,10 @@ public:
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->PropagateRemoveAll();
|
||||
}
|
||||
|
||||
swm->PropagateRemoveAll();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -659,6 +660,10 @@ public:
|
||||
Run() override
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
mPromise->MaybeReject(NS_ERROR_UNEXPECTED);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIDocument* doc = mWindow->GetExtantDoc();
|
||||
if (!doc) {
|
||||
@ -783,6 +788,10 @@ public:
|
||||
Run() override
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
mPromise->MaybeReject(NS_ERROR_UNEXPECTED);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIDocument* doc = mWindow->GetExtantDoc();
|
||||
if (!doc) {
|
||||
@ -883,6 +892,10 @@ public:
|
||||
Run() override
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
mPromise->MaybeReject(NS_ERROR_UNEXPECTED);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIDocument* doc = mWindow->GetExtantDoc();
|
||||
if (!doc) {
|
||||
@ -1890,7 +1903,10 @@ ServiceWorkerManager::AddScopeAndRegistration(const nsACString& aScope,
|
||||
MOZ_ASSERT(aInfo->mPrincipal);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return;
|
||||
}
|
||||
|
||||
nsAutoCString scopeKey;
|
||||
nsresult rv = swm->PrincipalToScopeKey(aInfo->mPrincipal, scopeKey);
|
||||
@ -1941,9 +1957,8 @@ ServiceWorkerManager::FindScopeForPath(const nsACString& aScopeKey,
|
||||
MOZ_ASSERT(aData);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
if (!swm->mRegistrationInfos.Get(aScopeKey, aData)) {
|
||||
if (!swm || !swm->mRegistrationInfos.Get(aScopeKey, aData)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1963,7 +1978,9 @@ ServiceWorkerManager::HasScope(nsIPrincipal* aPrincipal,
|
||||
const nsACString& aScope)
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsAutoCString scopeKey;
|
||||
nsresult rv = PrincipalToScopeKey(aPrincipal, scopeKey);
|
||||
@ -1983,7 +2000,9 @@ ServiceWorkerManager::HasScope(nsIPrincipal* aPrincipal,
|
||||
ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo* aRegistration)
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsAutoCString scopeKey;
|
||||
nsresult rv = swm->PrincipalToScopeKey(aRegistration->mPrincipal, scopeKey);
|
||||
@ -3276,7 +3295,6 @@ ServiceWorkerManager::Remove(const nsACString& aHost)
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) {
|
||||
ServiceWorkerManager::RegistrationDataPerPrincipal* data = it1.UserData();
|
||||
for (auto it2 = data->mInfos.Iter(); !it2.Done(); it2.Next()) {
|
||||
@ -3286,7 +3304,7 @@ ServiceWorkerManager::Remove(const nsACString& aHost)
|
||||
nullptr, nullptr);
|
||||
// This way subdomains are also cleared.
|
||||
if (NS_SUCCEEDED(rv) && HasRootDomain(scopeURI, aHost)) {
|
||||
swm->ForceUnregister(data, reg);
|
||||
ForceUnregister(data, reg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3311,12 +3329,11 @@ ServiceWorkerManager::RemoveAll()
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) {
|
||||
ServiceWorkerManager::RegistrationDataPerPrincipal* data = it1.UserData();
|
||||
for (auto it2 = data->mInfos.Iter(); !it2.Done(); it2.Next()) {
|
||||
ServiceWorkerRegistrationInfo* reg = it2.UserData();
|
||||
swm->ForceUnregister(data, reg);
|
||||
ForceUnregister(data, reg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3361,8 +3378,7 @@ ServiceWorkerManager::RemoveAllRegistrations(OriginAttributesPattern* aPattern)
|
||||
continue;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
swm->ForceUnregister(data, reg);
|
||||
ForceUnregister(data, reg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3707,7 +3723,9 @@ class ServiceWorkerManager::InterceptionReleaseHandle final : public nsISupports
|
||||
~InterceptionReleaseHandle()
|
||||
{
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
swm->RemoveNavigationInterception(mScope, mChannel);
|
||||
if (swm) {
|
||||
swm->RemoveNavigationInterception(mScope, mChannel);
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -24,9 +24,10 @@ ServiceWorkerManagerChild::RecvNotifyRegister(
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->LoadRegistration(aData);
|
||||
}
|
||||
|
||||
swm->LoadRegistration(aData);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -40,9 +41,10 @@ ServiceWorkerManagerChild::RecvNotifySoftUpdate(
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->SoftUpdate(aOriginAttributes, NS_ConvertUTF16toUTF8(aScope));
|
||||
}
|
||||
|
||||
swm->SoftUpdate(aOriginAttributes, NS_ConvertUTF16toUTF8(aScope));
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -55,7 +57,10 @@ ServiceWorkerManagerChild::RecvNotifyUnregister(const PrincipalInfo& aPrincipalI
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = PrincipalInfoToPrincipal(aPrincipalInfo);
|
||||
if (NS_WARN_IF(!principal)) {
|
||||
@ -75,9 +80,10 @@ ServiceWorkerManagerChild::RecvNotifyRemove(const nsCString& aHost)
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->Remove(aHost);
|
||||
}
|
||||
|
||||
swm->Remove(aHost);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -89,9 +95,10 @@ ServiceWorkerManagerChild::RecvNotifyRemoveAll()
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (swm) {
|
||||
swm->RemoveAll();
|
||||
}
|
||||
|
||||
swm->RemoveAll();
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
@ -1702,13 +1702,11 @@ ServiceWorkerPrivate::SendFetchEvent(nsIInterceptedChannel* aChannel,
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
if (NS_WARN_IF(!mInfo)) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (NS_WARN_IF(!mInfo || !swm)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
RefPtr<ServiceWorkerRegistrationInfo> registration =
|
||||
swm->GetRegistration(mInfo->GetPrincipal(), mInfo->Scope());
|
||||
|
||||
|
@ -27,12 +27,12 @@ ServiceWorkerRegisterJob::AsyncExecute()
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
if (Canceled()) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (Canceled() || !swm) {
|
||||
FailUpdateJob(NS_ERROR_DOM_ABORT_ERR);
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
RefPtr<ServiceWorkerRegistrationInfo> registration =
|
||||
swm->GetRegistration(mPrincipal, mScope);
|
||||
|
||||
|
@ -366,7 +366,10 @@ UpdateInternal(nsIPrincipal* aPrincipal,
|
||||
MOZ_ASSERT(aCallback);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
if (!swm) {
|
||||
// browser shutdown
|
||||
return;
|
||||
}
|
||||
|
||||
swm->Update(aPrincipal, NS_ConvertUTF16toUTF8(aScope), aCallback);
|
||||
}
|
||||
@ -920,19 +923,13 @@ public:
|
||||
GetPushManager(JSContext* aCx, ErrorResult& aRv) override;
|
||||
|
||||
private:
|
||||
enum Reason
|
||||
{
|
||||
RegistrationIsGoingAway = 0,
|
||||
WorkerIsGoingAway,
|
||||
};
|
||||
|
||||
~ServiceWorkerRegistrationWorkerThread();
|
||||
|
||||
void
|
||||
InitListener();
|
||||
|
||||
void
|
||||
ReleaseListener(Reason aReason);
|
||||
ReleaseListener();
|
||||
|
||||
WorkerPrivate* mWorkerPrivate;
|
||||
RefPtr<WorkerListener> mListener;
|
||||
@ -1073,7 +1070,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ServiceWorkerRegistrationWorkerThread,
|
||||
ServiceWorkerRegistration)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mPushManager)
|
||||
tmp->ReleaseListener(RegistrationIsGoingAway);
|
||||
tmp->ReleaseListener();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
ServiceWorkerRegistrationWorkerThread::ServiceWorkerRegistrationWorkerThread(WorkerPrivate* aWorkerPrivate,
|
||||
@ -1086,7 +1083,7 @@ ServiceWorkerRegistrationWorkerThread::ServiceWorkerRegistrationWorkerThread(Wor
|
||||
|
||||
ServiceWorkerRegistrationWorkerThread::~ServiceWorkerRegistrationWorkerThread()
|
||||
{
|
||||
ReleaseListener(RegistrationIsGoingAway);
|
||||
ReleaseListener();
|
||||
MOZ_ASSERT(!mListener);
|
||||
}
|
||||
|
||||
@ -1175,22 +1172,6 @@ ServiceWorkerRegistrationWorkerThread::Unregister(ErrorResult& aRv)
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
class StartListeningRunnable final : public Runnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
explicit StartListeningRunnable(WorkerListener* aListener)
|
||||
: mListener(aListener)
|
||||
{}
|
||||
|
||||
NS_IMETHOD
|
||||
Run() override
|
||||
{
|
||||
mListener->StartListeningForEvents();
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
ServiceWorkerRegistrationWorkerThread::InitListener()
|
||||
{
|
||||
@ -1206,48 +1187,13 @@ ServiceWorkerRegistrationWorkerThread::InitListener()
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<StartListeningRunnable> r =
|
||||
new StartListeningRunnable(mListener);
|
||||
nsCOMPtr<nsIRunnable> r =
|
||||
NewRunnableMethod(mListener, &WorkerListener::StartListeningForEvents);
|
||||
MOZ_ALWAYS_SUCCEEDS(worker->DispatchToMainThread(r.forget()));
|
||||
}
|
||||
|
||||
class AsyncStopListeningRunnable final : public Runnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
explicit AsyncStopListeningRunnable(WorkerListener* aListener)
|
||||
: mListener(aListener)
|
||||
{}
|
||||
|
||||
NS_IMETHOD
|
||||
Run() override
|
||||
{
|
||||
mListener->StopListeningForEvents();
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
class SyncStopListeningRunnable final : public WorkerMainThreadRunnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
SyncStopListeningRunnable(WorkerPrivate* aWorkerPrivate,
|
||||
WorkerListener* aListener)
|
||||
: WorkerMainThreadRunnable(aWorkerPrivate,
|
||||
NS_LITERAL_CSTRING("ServiceWorkerRegistration :: StopListening"))
|
||||
, mListener(aListener)
|
||||
{}
|
||||
|
||||
bool
|
||||
MainThreadRun() override
|
||||
{
|
||||
mListener->StopListeningForEvents();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
||||
ServiceWorkerRegistrationWorkerThread::ReleaseListener()
|
||||
{
|
||||
if (!mListener) {
|
||||
return;
|
||||
@ -1263,23 +1209,10 @@ ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
||||
|
||||
mListener->ClearRegistration();
|
||||
|
||||
if (aReason == RegistrationIsGoingAway) {
|
||||
RefPtr<AsyncStopListeningRunnable> r =
|
||||
new AsyncStopListeningRunnable(mListener);
|
||||
MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget()));
|
||||
} else if (aReason == WorkerIsGoingAway) {
|
||||
RefPtr<SyncStopListeningRunnable> r =
|
||||
new SyncStopListeningRunnable(mWorkerPrivate, mListener);
|
||||
ErrorResult rv;
|
||||
r->Dispatch(Killing, rv);
|
||||
if (rv.Failed()) {
|
||||
NS_ERROR("Failed to dispatch stop listening runnable!");
|
||||
// And now what?
|
||||
rv.SuppressException();
|
||||
}
|
||||
} else {
|
||||
MOZ_CRASH("Bad reason");
|
||||
}
|
||||
nsCOMPtr<nsIRunnable> r =
|
||||
NewRunnableMethod(mListener, &WorkerListener::StopListeningForEvents);
|
||||
MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget()));
|
||||
|
||||
mListener = nullptr;
|
||||
mWorkerPrivate = nullptr;
|
||||
}
|
||||
@ -1287,7 +1220,7 @@ ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
||||
bool
|
||||
ServiceWorkerRegistrationWorkerThread::Notify(Status aStatus)
|
||||
{
|
||||
ReleaseListener(WorkerIsGoingAway);
|
||||
ReleaseListener();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -238,12 +238,17 @@ ServiceWorkerRegistrationInfo::Activate()
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown began during async activation step
|
||||
return;
|
||||
}
|
||||
|
||||
TransitionWaitingToActive();
|
||||
|
||||
// FIXME(nsm): Unlink appcache if there is one.
|
||||
|
||||
// "Queue a task to fire a simple event named controllerchange..."
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
nsCOMPtr<nsIRunnable> controllerChangeRunnable =
|
||||
NewRunnableMethod<RefPtr<ServiceWorkerRegistrationInfo>>(
|
||||
swm, &ServiceWorkerManager::FireControllerChange, this);
|
||||
@ -279,6 +284,10 @@ ServiceWorkerRegistrationInfo::FinishActivate(bool aSuccess)
|
||||
// Activation never fails, so aSuccess is ignored.
|
||||
mActiveWorker->UpdateState(ServiceWorkerState::Activated);
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown started during async activation completion step
|
||||
return;
|
||||
}
|
||||
swm->StoreRegistration(mPrincipal, this);
|
||||
}
|
||||
|
||||
@ -314,6 +323,11 @@ ServiceWorkerRegistrationInfo::AsyncUpdateRegistrationStateProperties(WhichServi
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown started during this async step
|
||||
return;
|
||||
}
|
||||
|
||||
if (aTransition == Invalidate) {
|
||||
swm->InvalidateServiceWorkerRegistrationWorker(this, aWorker);
|
||||
} else {
|
||||
@ -495,6 +509,10 @@ ServiceWorkerRegistrationInfo::TransitionInstallingToWaiting()
|
||||
mWaitingWorker->UpdateState(ServiceWorkerState::Installed);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
// browser shutdown began
|
||||
return;
|
||||
}
|
||||
swm->StoreRegistration(mPrincipal, this);
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,8 @@ ServiceWorkerUnregisterJob::Unregister()
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
if (Canceled()) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (Canceled() || !swm) {
|
||||
Finish(NS_ERROR_DOM_ABORT_ERR);
|
||||
return;
|
||||
}
|
||||
@ -109,8 +110,6 @@ ServiceWorkerUnregisterJob::Unregister()
|
||||
// registration->update() method directly since we don't have that
|
||||
// client information available here.
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
|
||||
// "Let registration be the result of running [[Get Registration]]
|
||||
// algorithm passing scope as the argument."
|
||||
RefPtr<ServiceWorkerRegistrationInfo> registration =
|
||||
|
@ -247,7 +247,8 @@ ServiceWorkerUpdateJob::AsyncExecute()
|
||||
AssertIsOnMainThread();
|
||||
MOZ_ASSERT(GetType() == Type::Update);
|
||||
|
||||
if (Canceled()) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (Canceled() || !swm) {
|
||||
FailUpdateJob(NS_ERROR_DOM_ABORT_ERR);
|
||||
return;
|
||||
}
|
||||
@ -256,7 +257,6 @@ ServiceWorkerUpdateJob::AsyncExecute()
|
||||
//
|
||||
// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#update-algorithm
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
RefPtr<ServiceWorkerRegistrationInfo> registration =
|
||||
swm->GetRegistration(mPrincipal, mScope);
|
||||
|
||||
@ -348,7 +348,8 @@ ServiceWorkerUpdateJob::ComparisonResult(nsresult aStatus,
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
if (NS_WARN_IF(Canceled())) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (NS_WARN_IF(Canceled() || !swm)) {
|
||||
FailUpdateJob(NS_ERROR_DOM_ABORT_ERR);
|
||||
return;
|
||||
}
|
||||
@ -413,7 +414,6 @@ ServiceWorkerUpdateJob::ComparisonResult(nsresult aStatus,
|
||||
"ServiceWorkerScopePathMismatch",
|
||||
params, message);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Failed to format localized string");
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
swm->ReportToAllClients(mScope,
|
||||
message,
|
||||
EmptyString(),
|
||||
@ -462,7 +462,8 @@ ServiceWorkerUpdateJob::ContinueUpdateAfterScriptEval(bool aScriptEvaluationResu
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
|
||||
if (Canceled()) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (Canceled() || !swm) {
|
||||
FailUpdateJob(NS_ERROR_DOM_ABORT_ERR);
|
||||
return;
|
||||
}
|
||||
@ -480,14 +481,15 @@ ServiceWorkerUpdateJob::ContinueUpdateAfterScriptEval(bool aScriptEvaluationResu
|
||||
return;
|
||||
}
|
||||
|
||||
Install();
|
||||
Install(swm);
|
||||
}
|
||||
|
||||
void
|
||||
ServiceWorkerUpdateJob::Install()
|
||||
ServiceWorkerUpdateJob::Install(ServiceWorkerManager* aSWM)
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
MOZ_ASSERT(!Canceled());
|
||||
MOZ_DIAGNOSTIC_ASSERT(!Canceled());
|
||||
MOZ_DIAGNOSTIC_ASSERT(aSWM);
|
||||
|
||||
MOZ_ASSERT(!mRegistration->GetInstalling());
|
||||
|
||||
@ -503,12 +505,10 @@ ServiceWorkerUpdateJob::Install()
|
||||
// The job promise cannot be rejected after this point, but the job can
|
||||
// still fail; e.g. if the install event handler throws, etc.
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
|
||||
// fire the updatefound event
|
||||
nsCOMPtr<nsIRunnable> upr =
|
||||
NewRunnableMethod<RefPtr<ServiceWorkerRegistrationInfo>>(
|
||||
swm,
|
||||
aSWM,
|
||||
&ServiceWorkerManager::FireUpdateFoundOnServiceWorkerRegistrations,
|
||||
mRegistration);
|
||||
NS_DispatchToMainThread(upr);
|
||||
|
@ -13,6 +13,8 @@ namespace mozilla {
|
||||
namespace dom {
|
||||
namespace workers {
|
||||
|
||||
class ServiceWorkerManager;
|
||||
|
||||
// A job class that performs the Update and Install algorithms from the
|
||||
// service worker spec. This class is designed to be inherited and customized
|
||||
// as a different job type. This is necessary because the register job
|
||||
@ -93,7 +95,7 @@ private:
|
||||
|
||||
// Utility method corresponding to the spec Install algorithm.
|
||||
void
|
||||
Install();
|
||||
Install(ServiceWorkerManager* aSWM);
|
||||
|
||||
// Utility method called after the install event is handled.
|
||||
void
|
||||
|
@ -1126,13 +1126,14 @@ private:
|
||||
// the ServiceWorkerManager to report on any controlled documents.
|
||||
if (aWorkerPrivate->IsServiceWorker()) {
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
swm->HandleError(aCx, aWorkerPrivate->GetPrincipal(),
|
||||
aWorkerPrivate->WorkerName(),
|
||||
aWorkerPrivate->ScriptURL(),
|
||||
mMessage,
|
||||
mFilename, mLine, mLineNumber,
|
||||
mColumnNumber, mFlags, mExnType);
|
||||
if (swm) {
|
||||
swm->HandleError(aCx, aWorkerPrivate->GetPrincipal(),
|
||||
aWorkerPrivate->WorkerName(),
|
||||
aWorkerPrivate->ScriptURL(),
|
||||
mMessage,
|
||||
mFilename, mLine, mLineNumber,
|
||||
mColumnNumber, mFlags, mExnType);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -749,8 +749,6 @@ public:
|
||||
Run() override
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
MutexAutoLock lock(mPromiseProxy->Lock());
|
||||
if (mPromiseProxy->CleanedUp()) {
|
||||
@ -758,8 +756,13 @@ public:
|
||||
}
|
||||
|
||||
WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate();
|
||||
swm->SetSkipWaitingFlag(workerPrivate->GetPrincipal(), mScope,
|
||||
workerPrivate->ServiceWorkerID());
|
||||
MOZ_DIAGNOSTIC_ASSERT(workerPrivate);
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (swm) {
|
||||
swm->SetSkipWaitingFlag(workerPrivate->GetPrincipal(), mScope,
|
||||
workerPrivate->ServiceWorkerID());
|
||||
}
|
||||
|
||||
RefPtr<SkipWaitingResultRunnable> runnable =
|
||||
new SkipWaitingResultRunnable(workerPrivate, mPromiseProxy);
|
||||
|
@ -25,7 +25,7 @@ needs-focus load 467647-1.html
|
||||
load 475132-1.xhtml
|
||||
load 499844-1.html
|
||||
load 503709-1.xhtml
|
||||
skip-if(stylo) load 513375-1.xhtml # bug 1323654
|
||||
load 513375-1.xhtml
|
||||
load 535632-1.xhtml
|
||||
load 574558-1.xhtml
|
||||
load 580151-1.xhtml
|
||||
|
@ -1,15 +0,0 @@
|
||||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
EXPORTS += [
|
||||
'nsIAppStartupNotifier.h',
|
||||
]
|
||||
|
||||
SOURCES += [
|
||||
'nsAppStartupNotifier.cpp',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'xul'
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user