Skip to content

Commit

Permalink
Add feature policy tests for generic sensors (web-platform-tests#8491)
Browse files Browse the repository at this point in the history
  • Loading branch information
Honry authored Nov 30, 2017
1 parent fdd00ad commit c187a8f
Show file tree
Hide file tree
Showing 59 changed files with 626 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_disabled(Accelerometer);
run_fp_tests_disabled(LinearAccelerationSensor);
run_fp_tests_disabled(GravitySensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: accelerometer 'none'
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute_redirect_on_load(Accelerometer);
run_fp_tests_enabled_by_attribute_redirect_on_load(LinearAccelerationSensor);
run_fp_tests_enabled_by_attribute_redirect_on_load(GravitySensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute(Accelerometer);
run_fp_tests_enabled_by_attribute(LinearAccelerationSensor);
run_fp_tests_enabled_by_attribute(GravitySensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled(Accelerometer);
run_fp_tests_enabled(LinearAccelerationSensor);
run_fp_tests_enabled(GravitySensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: accelerometer *
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_on_self_origin(Accelerometer);
run_fp_tests_enabled_on_self_origin(LinearAccelerationSensor);
run_fp_tests_enabled_on_self_origin(GravitySensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: accelerometer 'self'
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_disabled(AmbientLightSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: ambient-light-sensor 'none'
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute_redirect_on_load(AmbientLightSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute(AmbientLightSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled(AmbientLightSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: ambient-light-sensor *
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_on_self_origin(AmbientLightSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: ambient-light-sensor 'self'
11 changes: 11 additions & 0 deletions feature-policy/resources/feature-policy-generic-sensor.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<script>
"use strict";

try {
const sensorName = location.hash.substring(1);
const sensor = new window[sensorName]();
window.parent.postMessage({ enabled: true }, "*");
} catch (e) {
window.parent.postMessage({ enabled: false }, "*");
}
</script>
159 changes: 159 additions & 0 deletions generic-sensor/generic-sensor-feature-policy-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
const feature_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 =
"/feature-policy/resources/feature-policy-generic-sensor.html#";
const cross_origin_src =
"https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src;
const base_src = "/feature-policy/resources/redirect-on-load.html#";

function run_fp_tests_disabled(sensorType) {
const sensorName = sensorType.name;
const featureNameList = feature_policies[sensorName];
const header = "Feature-Policy header " + featureNameList.join(" 'none';") + " 'none'";
const desc = "'new " + sensorName + "()'";

test(() => {
assert_throws("SecurityError", () => {new sensorType()});
}, `${sensorName}: ${header} disallows the top-level document.`);

async_test(t => {
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows same-origin iframes.`);

async_test(t => {
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows cross-origin iframes.`);
}

function run_fp_tests_enabled(sensorType) {
const sensorName = sensorType.name;
const featureNameList = feature_policies[sensorName];
const header = "Feature-Policy header " + featureNameList.join(" *;") + " *";
const desc = "'new " + sensorName + "()'";

test(() => {
assert_true(sensorName in window);
}, `${sensorName}: ${header} allows the top-level document.`);

async_test(t => {
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default
);
}, `${sensorName}: ${header} allows same-origin iframes.`);

async_test(t => {
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_available_default
);
}, `${sensorName}: ${header} allows cross-origin iframes.`);
}

function run_fp_tests_enabled_by_attribute(sensorType) {
const sensorName = sensorType.name;
const featureNameList = feature_policies[sensorName];
const header = "Feature-Policy allow='" + featureNameList.join(" ") + "' attribute";
const desc = "'new " + sensorName + "()'";

async_test(t => {
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} allows same-origin iframe`);

async_test(t => {
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_available_default,
featureNameList.join(";")
);
}, `${sensorName}: ${header} allows cross-origin iframe`);
}

function run_fp_tests_enabled_by_attribute_redirect_on_load(sensorType) {
const sensorName = sensorType.name;
const featureNameList = feature_policies[sensorName];
const header = "Feature-Policy allow='" + featureNameList.join(" ") + "' attribute";
const desc = "'new " + sensorName + "()'";

async_test(t => {
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 => {
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_fp_tests_enabled_on_self_origin(sensorType) {
const sensorName = sensorType.name;
const featureNameList = feature_policies[sensorName];
const header = "Feature-Policy header " + featureNameList.join(" 'self';") + " 'self'";
const desc = "'new " + sensorName + "()'";

test(() => {
assert_true(sensorName in window);
}, `${sensorName}: ${header} allows the top-level document.`);

async_test(t => {
test_feature_availability(
desc,
t,
same_origin_src + sensorName,
expect_feature_available_default
);
}, `${sensorName}: ${header} allows same-origin iframes.`);

async_test(t => {
test_feature_availability(
desc,
t,
cross_origin_src + sensorName,
expect_feature_unavailable_default
);
}, `${sensorName}: ${header} disallows cross-origin iframes.`);
}
21 changes: 0 additions & 21 deletions generic-sensor/generic-sensor-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,27 +140,6 @@ function runGenericSensorTests(sensorType) {
assert_false(sensor.activated);
}, `${sensorType.name}: no exception is thrown when calling stop() on already stopped sensor`);

promise_test(async t => {
const iframe = document.createElement('iframe');
iframe.srcdoc = '<script>' +
' window.onmessage = message => {' +
' if (message.data === "LOADED") {' +
' try {' +
' new ' + sensorType.name + '();' +
' parent.postMessage("FAIL", "*");' +
' } catch (e) {' +
' parent.postMessage(e.name, "*");' +
' }' +
' }' +
' };' +
'<\/script>';
iframe.onload = () => iframe.contentWindow.postMessage('LOADED', '*');
document.body.appendChild(iframe);
const sensorWatcher = new EventWatcher(t, window, "message");
const message = await sensorWatcher.wait_for("message");
assert_equals(message.data, 'SecurityError');
}, `${sensorType.name}: throw a 'SecurityError' when constructing sensor object within iframe`);

promise_test(async t => {
const sensor = new sensorType();
const sensorWatcher = new EventWatcher(t, sensor, ["reading", "error"]);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_disabled(GeolocationSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Feature-Policy: geolocation 'none'
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute_redirect_on_load(GeolocationSensor);
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/resources/featurepolicy.js"></script>
<script src="/generic-sensor/generic-sensor-feature-policy-test.js"></script>
<script>
"use strict";

run_fp_tests_enabled_by_attribute(GeolocationSensor);
</script>
</body>
Loading

0 comments on commit c187a8f

Please sign in to comment.