Auto merge of #10081 - jdm:interfacepref, r=nox

Support controlling interface and member visibility via preferences

This was easier to throw together than per-attribute/method support, and it gets rid of some nonstandard properties from our globals.

Fixes #7626.

r? @Ms2ger

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10081)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-05-02 11:35:38 -07:00
commit 8255e74a61
28 changed files with 352 additions and 53 deletions

View file

@ -6424,6 +6424,12 @@
"url": "/_mozilla/mozilla/innerHTML.html"
}
],
"mozilla/interface_member_exposed.html": [
{
"path": "mozilla/interface_member_exposed.html",
"url": "/_mozilla/mozilla/interface_member_exposed.html"
}
],
"mozilla/interfaces.html": [
{
"path": "mozilla/interfaces.html",

View file

@ -0,0 +1,4 @@
[interface_member_exposed.html]
type: testharness
prefs: [dom.testbinding.enabled:true,
dom.testbinding.prefcontrolled2.enabled:true]

View file

@ -1,3 +1,3 @@
[preferences.html]
type: testharness
prefs: [dom.testbinding.preference_value.falsy:false, dom.testbinding.preference_value.truthy:true, dom.testbinding.preference_value.string_empty:, dom.testbinding.preference_value.string_test:test, dom.testbinding.preference_value.space_string_test:test1 test2, dom.testbinding.preference_value.quote_string_test:"test1 test2"]
prefs: [dom.testbinding.enabled:true, dom.testbinding.preference_value.falsy:false, dom.testbinding.preference_value.truthy:true, dom.testbinding.preference_value.string_empty:, dom.testbinding.preference_value.string_test:test, dom.testbinding.preference_value.space_string_test:test1 test2, dom.testbinding.preference_value.quote_string_test:"test1 test2"]

View file

@ -0,0 +1,3 @@
[sequence-hole.html]
type: testharness
prefs: [dom.testbinding.enabled:true]

View file

@ -0,0 +1,3 @@
[variadic-interface.html]
type: testharness
prefs: [dom.testbinding.enabled:true]

View file

@ -0,0 +1,3 @@
[weakref.html]
type: testharness
prefs: [dom.testbinding.enabled:true]

View file

@ -0,0 +1,41 @@
<!doctype html>
<meta charset="utf-8">
<title></title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function test_member(name, enabled, target) {
var status = enabled ? "Enabled" : "Disabled";
var verb = enabled ? "shows" : "hides";
test(function() {
var interface = target(window.TestBinding);
var descriptor = Object.getOwnPropertyDescriptor(interface, name);
if (enabled) {
assert_not_equals(descriptor, undefined);
} else {
assert_equals(descriptor, undefined);
}
}, status + " preference " + verb + " member controlled by that preference: " + name);
}
var members = [
'prefControlledAttribute',
'prefControlledMethod'
];
var staticMembers = [
'prefControlledStaticAttribute',
'prefControlledStaticMethod',
'prefControlledConst'
];
for (var i = 0; i < members.length; i++) {
var name = members[i];
test_member(name + 'Enabled', true, function(o) { return Object.getPrototypeOf(new o()) });
test_member(name + 'Disabled', false, function(o) { return Object.getPrototypeOf(new o()) });
}
for (var i = 0; i < staticMembers.length; i++) {
var name = staticMembers[i];
test_member(name + 'Enabled', true, function(o) { return o; });
test_member(name + 'Disabled', false, function(o) { return o; });
}
</script>

View file

@ -22,8 +22,6 @@ var ecmaGlobals = [
"EvalError",
"Float32Array",
"Float64Array",
"FocusEvent",
"ForceTouchEvent",
"Function",
"Infinity",
"Int16Array",
@ -74,15 +72,6 @@ var ecmaGlobals = [
var interfaceNamesInGlobalScope = [
"Attr",
"Blob",
"Bluetooth",
"BluetoothAdvertisingData",
"BluetoothCharacteristicProperties",
"BluetoothDevice",
"BluetoothRemoteGATTCharacteristic",
"BluetoothRemoteGATTDescriptor",
"BluetoothRemoteGATTServer",
"BluetoothRemoteGATTService",
"BluetoothUUID",
"CanvasGradient",
"CanvasRenderingContext2D",
"CanvasPattern",
@ -115,6 +104,7 @@ var interfaceNamesInGlobalScope = [
"File",
"FileList",
"FileReader",
"FocusEvent",
"FormData",
"HTMLAnchorElement",
"HTMLAppletElement",
@ -215,8 +205,6 @@ var interfaceNamesInGlobalScope = [
"StorageEvent",
"StyleSheet",
"StyleSheetList",
"TestBinding", // XXX
"TestBindingProxy", // XXX
"Text",
"TextDecoder",
"TextEncoder",