Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html

Issue 2832923003: v8binding: Don't allow author script to define indexed accessor prop. (Closed)
Patch Set: Added the test expectation. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object-expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html
new file mode 100644
index 0000000000000000000000000000000000000000..0c5326f9d4dec26451647bffc19b985793dca3de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Legacy platform objects</title>
+<link rel="help" href="https://heycam.github.io/webidl/#es-legacy-platform-objects">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+function assert_prop_desc_equals(object, property_key, expected) {
+ let actual = Object.getOwnPropertyDescriptor(object, property_key);
+ if (expected === undefined) {
+ assert_equals(
+ actual, undefined,
+ "(assert_prop_desc_equals: no property descriptor expected)");
+ return;
+ }
+ for (p in actual) {
+ assert_true(
+ expected.hasOwnProperty(p),
+ "(assert_prop_desc_equals: property '" + p + "' is not expected)");
+ assert_equals(
+ actual[p], expected[p],
+ "(assert_prop_desc_equals: property '" + p + "')");
+ }
+ for (p in expected) {
+ assert_true(
+ actual.hasOwnProperty(p),
+ "(assert_prop_desc_equals: expected property '" + p + "' missing)");
+ }
+}
+
+// https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty
+// 3.9.3. [[DefineOwnProperty]]
+
+test(function() {
+ let span = document.createElement("span");
+ span.className = "foo";
+ // DOMTokenList supports an indexed property getter but not a setter.
+ let domTokenList = span.classList;
+ // Confirm the test settings.
+ assert_equals(domTokenList.length, 1);
+ assert_prop_desc_equals(domTokenList, "0",
+ {value: "foo", writable: false, enumerable: true,
+ configurable: true});
+ assert_prop_desc_equals(domTokenList, "1", undefined);
+ // Actual test
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "0", {value: true, writable: true}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "1", {value: true, writable: true}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "0", {get: () => {}}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "0", {set: () => {}}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "1", {get: () => {}}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(domTokenList, "1", {set: () => {}}));
+ assert_equals(domTokenList[0], "foo");
+ assert_equals(domTokenList[1], undefined);
+ domTokenList[0] = "bar";
+ domTokenList[1] = "bar";
+ assert_equals(domTokenList[0], "foo");
+ assert_equals(domTokenList[1], undefined);
+ assert_throws(new TypeError(), () => {
+ "use strict";
+ domTokenList[0] = "bar";
+ });
+ assert_throws(new TypeError(), () => {
+ "use strict";
+ domTokenList[1] = "bar";
+ });
+ // Nothing must change after all.
+ assert_equals(domTokenList.length, 1);
+ assert_prop_desc_equals(domTokenList, "0",
+ {value: "foo", writable: false, enumerable: true,
+ configurable: true});
+ assert_prop_desc_equals(domTokenList, "1", undefined);
+}, "Test [[DefineOwnProperty]] with no indexed property setter support.");
+
+test(function() {
+ // HTMLSelectElement supports an indexed property setter.
+ let select = document.createElement("select");
+ let option0 = document.createElement("option");
+ let option1 = document.createElement("option");
+ // Confirm the test settings.
+ assert_equals(select.length, 0);
+ assert_prop_desc_equals(select, "0", undefined);
+ // Try to define an accessor property with non supported property index.
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(select, "0", {get: () => {}}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(select, "0", {set: () => {}}));
+ assert_prop_desc_equals(select, "0", undefined);
+ // writable, enumerable, configurable will be ignored.
+ Object.defineProperty(select, "0", {value: option0, writable: false,
+ enumerable: false, configurable: false});
+ assert_prop_desc_equals(select, "0",
+ {value: option0, writable: true, enumerable: true,
+ configurable: true});
+ select[1] = option1;
+ assert_prop_desc_equals(select, "1",
+ {value: option1, writable: true, enumerable: true,
+ configurable: true});
+ // Try to define an accessor property with a supported property index.
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(select, "0", {get: () => {}}));
+ assert_throws(new TypeError(), () =>
+ Object.defineProperty(select, "0", {set: () => {}}));
+ assert_prop_desc_equals(select, "0",
+ {value: option0, writable: true, enumerable: true,
+ configurable: true});
+}, "Test [[DefineOwnProperty]] with indexed property setter support.");
+</script>
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698