зеркало из https://github.com/mozilla/gecko-dev.git
88 строки
2.6 KiB
JavaScript
88 строки
2.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Enable web manifest processing.
|
|
Services.prefs.setBoolPref("dom.manifest.enabled", true);
|
|
|
|
add_task(async function() {
|
|
info("Testing fetching a valid manifest");
|
|
const response = await fetchManifest("application-manifest-basic.html");
|
|
|
|
ok(
|
|
response.manifest && response.manifest.name == "FooApp",
|
|
"Returns an object populated with the manifest data"
|
|
);
|
|
});
|
|
|
|
add_task(async function() {
|
|
info("Testing fetching an existing manifest with invalid values");
|
|
const response = await fetchManifest("application-manifest-warnings.html");
|
|
|
|
ok(
|
|
response.manifest && response.manifest.moz_validation,
|
|
"Returns an object populated with the manifest data"
|
|
);
|
|
|
|
const warnings = response.manifest.moz_validation;
|
|
ok(
|
|
warnings.length === 1 &&
|
|
warnings[0].warn &&
|
|
warnings[0].warn.includes("name member to be a string"),
|
|
"The returned object contains the expected warning info"
|
|
);
|
|
});
|
|
|
|
add_task(async function() {
|
|
info("Testing fetching a manifest in a page that does not have one");
|
|
const response = await fetchManifest("application-manifest-no-manifest.html");
|
|
|
|
is(response.manifest, null, "Returns an object with a `null` manifest");
|
|
ok(!response.errorMessage, "Does not return an error message");
|
|
});
|
|
|
|
add_task(async function() {
|
|
info("Testing an error happening fetching a manifest");
|
|
// the page that we are testing contains an invalid URL for the manifest
|
|
const response = await fetchManifest(
|
|
"application-manifest-404-manifest.html"
|
|
);
|
|
|
|
is(response.manifest, null, "Returns an object with a `null` manifest");
|
|
ok(
|
|
response.errorMessage &&
|
|
response.errorMessage.toLowerCase().includes("404 - not found"),
|
|
"Returns the expected error message"
|
|
);
|
|
});
|
|
|
|
add_task(async function() {
|
|
info("Testing a validation error when fetching a manifest with invalid JSON");
|
|
const response = await fetchManifest(
|
|
"application-manifest-invalid-json.html"
|
|
);
|
|
ok(
|
|
response.manifest && response.manifest.moz_validation,
|
|
"Returns an object with validation data"
|
|
);
|
|
const validation = response.manifest.moz_validation;
|
|
ok(
|
|
validation.find(x => x.error && x.type === "json"),
|
|
"Has the expected error in the validation field"
|
|
);
|
|
});
|
|
|
|
async function fetchManifest(filename) {
|
|
const url = MAIN_DOMAIN + filename;
|
|
const target = await addTabTarget(url);
|
|
|
|
info("Initializing manifest front for tab");
|
|
const manifestFront = await target.getFront("manifest");
|
|
|
|
info("Fetching manifest");
|
|
const response = await manifestFront.fetchCanonicalManifest();
|
|
|
|
return response;
|
|
}
|