merge mozilla-inbound to mozilla-central a=merge

This commit is contained in:
Carsten "Tomcat" Book 2017-01-13 10:20:25 +01:00
commit d69139ac79
277 changed files with 766 additions and 853 deletions

View File

@ -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

View File

@ -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);

View File

@ -28,3 +28,4 @@ tags = openwindow
[browser_middleClick.js]
[browser_imageCache.js]
[browser_count_and_remove.js]
[browser_relatedTab.js]

View File

@ -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);
});

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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]);

View File

@ -38,7 +38,6 @@ See https://github.com/adobe-type-tools/cmap-resources
<script src="viewer.js"></script>
</head>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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;

View File

@ -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();

View File

@ -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',
]

View File

@ -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();

View File

@ -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)

View File

@ -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

View File

@ -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();
}

View File

@ -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',

View File

@ -43,6 +43,7 @@ DIRS += [
'browser-element',
'cache',
'canvas',
'commandhandler',
'crypto',
'devicestorage',
'encoding',
@ -96,6 +97,7 @@ DIRS += [
'u2f',
'console',
'performance',
'webbrowserpersist',
'xhr',
'worklet',
]

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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:

View File

@ -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();
}

View File

@ -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());

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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 =

View File

@ -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);

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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