forked from mirrors/gecko-dev
		
	 794413cfe5
			
		
	
	
		794413cfe5
		
	
	
	
	
		
			
			Automatic update from web-platform-tests Fix typo in customized built-in elements test name (#46305) -- wpt-commits: 7b9e821996f56fe9fc2d2891147af0c0acf74487 wpt-pr: 46305
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html>
 | |
| <head>
 | |
| <title>Custom Elements: HTMLElement must allow subclassing</title>
 | |
| <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
 | |
| <meta name="assert" content="HTMLElement must allow subclassing">
 | |
| <link rel="help" href="https://html.spec.whatwg.org/#html-element-constructors">
 | |
| <script src="/resources/testharness.js"></script>
 | |
| <script src="/resources/testharnessreport.js"></script>
 | |
| </head>
 | |
| <body>
 | |
| <div id="log"></div>
 | |
| <script>
 | |
| 
 | |
| test(function() {
 | |
|     class SomeCustomElement extends HTMLElement {};
 | |
|     var getCount = 0;
 | |
|     var countingProxy = new Proxy(SomeCustomElement, {
 | |
|         get: function(target, prop, receiver) {
 | |
|             if (prop == "prototype") {
 | |
|                 ++getCount;
 | |
|             }
 | |
|             return Reflect.get(target, prop, receiver);
 | |
|         }
 | |
|     });
 | |
|     customElements.define("failure-counting-element-1", countingProxy,
 | |
|                           { extends: "button" });
 | |
|     // define() gets the prototype of the constructor it's passed, so
 | |
|     // reset the counter.
 | |
|     getCount = 0;
 | |
|     assert_throws_js(TypeError,
 | |
|                      function () { new countingProxy() },
 | |
|                      "Should not be able to construct an HTMLElement named 'button'");
 | |
|     assert_equals(getCount, 0, "Should never have gotten .prototype");
 | |
| }, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly');
 | |
| 
 | |
| test(function() {
 | |
|     class SomeCustomElement extends HTMLElement {};
 | |
|     var getCount = 0;
 | |
|     var countingProxy = new Proxy(SomeCustomElement, {
 | |
|         get: function(target, prop, receiver) {
 | |
|             if (prop == "prototype") {
 | |
|                 ++getCount;
 | |
|             }
 | |
|             return Reflect.get(target, prop, receiver);
 | |
|         }
 | |
|     });
 | |
|     customElements.define("failure-counting-element-2", countingProxy,
 | |
|                           { extends: "button" });
 | |
|     // define() gets the prototype of the constructor it's passed, so
 | |
|     // reset the counter.
 | |
|     getCount = 0;
 | |
|     assert_throws_js(TypeError,
 | |
|                      function () { Reflect.construct(HTMLElement, [], countingProxy) },
 | |
|                      "Should not be able to construct an HTMLElement named 'button'");
 | |
|     assert_equals(getCount, 0, "Should never have gotten .prototype");
 | |
| }, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect');
 | |
| 
 | |
| </script>
 | |
| </body>
 | |
| </html>
 | |
| 
 |