зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1153958 - Make manifest processor e10s friendly. r=ehsan
--HG-- extra : rebase_source : 6adae4a21054173a709573fae11248d0526960a0
This commit is contained in:
Родитель
13d9def98b
Коммит
6833b3bd48
|
@ -101,14 +101,18 @@ ManifestProcessor.prototype = {
|
||||||
// * manifestURL: the URL of the manifest, to resolve URLs.
|
// * manifestURL: the URL of the manifest, to resolve URLs.
|
||||||
// * docURL: the URL of the owner doc, for security checks.
|
// * docURL: the URL of the owner doc, for security checks.
|
||||||
process({
|
process({
|
||||||
jsonText, manifestURL, docURL
|
jsonText: aJsonText,
|
||||||
|
manifestURL: aManifestURL,
|
||||||
|
docURL: aDocURL
|
||||||
}) {
|
}) {
|
||||||
|
const manifestURL = new URL(aManifestURL);
|
||||||
|
const docURL = new URL(aDocURL);
|
||||||
const console = new ConsoleAPI({
|
const console = new ConsoleAPI({
|
||||||
prefix: 'Web Manifest: '
|
prefix: 'Web Manifest: '
|
||||||
});
|
});
|
||||||
let rawManifest = {};
|
let rawManifest = {};
|
||||||
try {
|
try {
|
||||||
rawManifest = JSON.parse(jsonText);
|
rawManifest = JSON.parse(aJsonText);
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
if (typeof rawManifest !== 'object' || rawManifest === null) {
|
if (typeof rawManifest !== 'object' || rawManifest === null) {
|
||||||
let msg = 'Manifest needs to be an object.';
|
let msg = 'Manifest needs to be an object.';
|
||||||
|
@ -124,7 +128,8 @@ ManifestProcessor.prototype = {
|
||||||
short_name: processShortNameMember(rawManifest),
|
short_name: processShortNameMember(rawManifest),
|
||||||
};
|
};
|
||||||
processedManifest.scope = processScopeMember(rawManifest, manifestURL,
|
processedManifest.scope = processScopeMember(rawManifest, manifestURL,
|
||||||
docURL, processedManifest.start_url);
|
docURL, new URL(processedManifest.start_url));
|
||||||
|
|
||||||
return processedManifest;
|
return processedManifest;
|
||||||
|
|
||||||
function processNameMember(aManifest) {
|
function processNameMember(aManifest) {
|
||||||
|
@ -188,8 +193,11 @@ ManifestProcessor.prototype = {
|
||||||
expectedType: 'string',
|
expectedType: 'string',
|
||||||
trim: false
|
trim: false
|
||||||
};
|
};
|
||||||
const value = extractValue(spec, console);
|
|
||||||
let scopeURL;
|
let scopeURL;
|
||||||
|
const value = extractValue(spec, console);
|
||||||
|
if (value === undefined || value === '') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
scopeURL = new URL(value, aManifestURL);
|
scopeURL = new URL(value, aManifestURL);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -210,7 +218,7 @@ ManifestProcessor.prototype = {
|
||||||
console.warn(msg);
|
console.warn(msg);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return scopeURL;
|
return scopeURL.href;
|
||||||
}
|
}
|
||||||
|
|
||||||
function processStartURLMember(aManifest, aManifestURL, aDocURL) {
|
function processStartURLMember(aManifest, aManifestURL, aDocURL) {
|
||||||
|
@ -221,7 +229,7 @@ ManifestProcessor.prototype = {
|
||||||
expectedType: 'string',
|
expectedType: 'string',
|
||||||
trim: false
|
trim: false
|
||||||
};
|
};
|
||||||
let result = new URL(aDocURL);
|
let result = new URL(aDocURL).href;
|
||||||
const value = extractValue(spec, console);
|
const value = extractValue(spec, console);
|
||||||
if (value === undefined || value === '') {
|
if (value === undefined || value === '') {
|
||||||
return result;
|
return result;
|
||||||
|
@ -237,7 +245,7 @@ ManifestProcessor.prototype = {
|
||||||
let msg = 'start_url must be same origin as document.';
|
let msg = 'start_url must be same origin as document.';
|
||||||
console.warn(msg);
|
console.warn(msg);
|
||||||
} else {
|
} else {
|
||||||
result = potentialResult;
|
result = potentialResult.href;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -248,7 +256,7 @@ this.ManifestProcessor = ManifestProcessor;
|
||||||
function IconsProcessor() {}
|
function IconsProcessor() {}
|
||||||
|
|
||||||
// Static getters
|
// Static getters
|
||||||
Object.defineProperties(IconsProcessor,{
|
Object.defineProperties(IconsProcessor, {
|
||||||
'onlyDecimals': {
|
'onlyDecimals': {
|
||||||
get: function() {
|
get: function() {
|
||||||
return /^\d+$/;
|
return /^\d+$/;
|
||||||
|
@ -324,7 +332,7 @@ IconsProcessor.process = function(aManifest, aBaseURL, console) {
|
||||||
let url;
|
let url;
|
||||||
if (value && value.length) {
|
if (value && value.length) {
|
||||||
try {
|
try {
|
||||||
url = new URL(value, aBaseURL);
|
url = new URL(value, aBaseURL).href;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
return url;
|
return url;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
skip-if = e10s
|
|
||||||
|
|
||||||
support-files =
|
support-files =
|
||||||
common.js
|
common.js
|
||||||
|
|
|
@ -61,7 +61,7 @@ data.jsonText = JSON.stringify(noSrc);
|
||||||
var result = processor.process(data);
|
var result = processor.process(data);
|
||||||
ise(result.icons.length, 0, expected);
|
ise(result.icons.length, 0, expected);
|
||||||
|
|
||||||
var expected = `Expect icon's src to be an instance of URL.`;
|
var expected = `Expect icon's src to be a string.`;
|
||||||
var withSrc = {
|
var withSrc = {
|
||||||
icons: [{
|
icons: [{
|
||||||
src: 'pass'
|
src: 'pass'
|
||||||
|
@ -69,7 +69,7 @@ var withSrc = {
|
||||||
};
|
};
|
||||||
data.jsonText = JSON.stringify(withSrc);
|
data.jsonText = JSON.stringify(withSrc);
|
||||||
var result = processor.process(data);
|
var result = processor.process(data);
|
||||||
ise(SpecialPowers.unwrap(result.icons[0].src) instanceof URL, true, expected);
|
ise(typeof result.icons[0].src, "string", expected);
|
||||||
|
|
||||||
var expected = `Expect only icons with a src prop to be kept.`;
|
var expected = `Expect only icons with a src prop to be kept.`;
|
||||||
var withSrc = {
|
var withSrc = {
|
||||||
|
|
|
@ -20,7 +20,7 @@ invalidJson.forEach((testString) => {
|
||||||
var expected = `Expect to recover from invalid JSON: ${testString}`;
|
var expected = `Expect to recover from invalid JSON: ${testString}`;
|
||||||
data.jsonText = testString;
|
data.jsonText = testString;
|
||||||
var result = processor.process(data);
|
var result = processor.process(data);
|
||||||
SimpleTest.ok(result.start_url.href === docURL.href, true, expected);
|
SimpleTest.ise(result.start_url, docURL.href, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
var validButUnhelpful = ["1", 1, "", "[{}]", "null"];
|
var validButUnhelpful = ["1", 1, "", "[{}]", "null"];
|
||||||
|
@ -28,7 +28,7 @@ validButUnhelpful.forEach((testString) => {
|
||||||
var expected = `Expect to recover from invalid JSON: ${testString}`;
|
var expected = `Expect to recover from invalid JSON: ${testString}`;
|
||||||
data.jsonText = testString;
|
data.jsonText = testString;
|
||||||
var result = processor.process(data);
|
var result = processor.process(data);
|
||||||
SimpleTest.ok(result.start_url.href === docURL.href, true, expected);
|
SimpleTest.ise(result.start_url, docURL.href, expected);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -47,8 +47,7 @@ URLs.forEach((url) => {
|
||||||
});
|
});
|
||||||
var absURL = new URL(url, manifestURL).toString();
|
var absURL = new URL(url, manifestURL).toString();
|
||||||
var result = processor.process(data);
|
var result = processor.process(data);
|
||||||
console.log(result);
|
ise(result.scope, absURL, expected);
|
||||||
ise(String(result.scope), absURL, expected);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var expected = 'If start URL is not in scope, return undefined.';
|
var expected = 'If start URL is not in scope, return undefined.';
|
||||||
|
|
Загрузка…
Ссылка в новой задаче