Source code
Revision control
Copy as Markdown
Other Tools
const permissions_policies = {
"AmbientLightSensor" : ["ambient-light-sensor"],
"Accelerometer" : ["accelerometer"],
"LinearAccelerationSensor" : ["accelerometer"],
"GravitySensor" : ["accelerometer"],
"Gyroscope" : ["gyroscope"],
"GeolocationSensor" : ["geolocation"],
"Magnetometer" : ["magnetometer"],
"UncalibratedMagnetometer" : ["magnetometer"],
"AbsoluteOrientationSensor" : ["accelerometer", "gyroscope", "magnetometer"],
"RelativeOrientationSensor" : ["accelerometer", "gyroscope"]
};
const same_origin_src =
"/permissions-policy/resources/permissions-policy-generic-sensor.html#";
const cross_origin_src =
"https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src;
const base_src = "/permissions-policy/resources/redirect-on-load.html#";
function get_permissions_policies_for_sensor(sensorType) {
return permissions_policies[sensorType];
}
function run_permissions_policy_tests_disabled(sensorName) {
const sensorType = self[sensorName];
const featureNameList = permissions_policies[sensorName];
const header = "Permissions-Policy header " + featureNameList.join("=();") + "=()";
const desc = "'new " + sensorName + "()'";
test(() => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
assert_throws_dom("SecurityError", () => {new sensorType()});
}, `${sensorName}: ${header} disallows the top-level document.`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows same-origin iframes.`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows cross-origin iframes.`);
}
function run_permissions_policy_tests_enabled(sensorName) {
const featureNameList = permissions_policies[sensorName];
const header = "Permissions-Policy header " + featureNameList.join("=*;") + "=*";
const desc = "'new " + sensorName + "()'";
test(() => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
}, `${sensorName}: ${header} allows the top-level document.`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default
);
}, `${sensorName}: ${header} allows same-origin iframes.`);
// Set allow="feature;feature;..." on iframe element to delegate features
// under test to cross origin subframe.
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_available_default,
permissions_policies[sensorName].join(";")
);
}, `${sensorName}: ${header} allows cross-origin iframes.`);
}
function run_permissions_policy_tests_enabled_by_attribute(sensorName) {
const featureNameList = permissions_policies[sensorName];
const header = "Permissions-Policy allow='" + featureNameList.join(" ") + "' attribute";
const desc = "'new " + sensorName + "()'";
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} allows same-origin iframe`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_available_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} allows cross-origin iframe`);
}
function run_permissions_policy_tests_enabled_by_attribute_redirect_on_load(sensorName) {
const featureNameList = permissions_policies[sensorName];
const header = "Permissions-Policy allow='" + featureNameList.join(" ") + "' attribute";
const desc = "'new " + sensorName + "()'";
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
base_src + same_origin_src + sensorName,
expect_feature_available_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} allows same-origin relocation`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
base_src + cross_origin_src + sensorName,
expect_feature_unavailable_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} disallows cross-origin relocation`);
}
function run_permissions_policy_tests_enabled_on_self_origin(sensorName) {
const featureNameList = permissions_policies[sensorName];
const header = "Permissions-Policy header " + featureNameList.join("=(self);") + "=(self)";
const desc = "'new " + sensorName + "()'";
test(() => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
}, `${sensorName}: ${header} allows the top-level document.`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default
);
}, `${sensorName}: ${header} allows same-origin iframes.`);
async_test(t => {
assert_implements(sensorName in self, `${sensorName} is not supported.`);
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows cross-origin iframes.`);
}
// Backward compatibility aliases for legacy function names
// TODO: Remove these once all test files are updated to use the new names
const feature_policies = permissions_policies;
const get_feature_policies_for_sensor = get_permissions_policies_for_sensor;
const run_fp_tests_disabled = run_permissions_policy_tests_disabled;
const run_fp_tests_enabled = run_permissions_policy_tests_enabled;
const run_fp_tests_enabled_by_attribute = run_permissions_policy_tests_enabled_by_attribute;
const run_fp_tests_enabled_by_attribute_redirect_on_load = run_permissions_policy_tests_enabled_by_attribute_redirect_on_load;
const run_fp_tests_enabled_on_self_origin = run_permissions_policy_tests_enabled_on_self_origin;