forked from mirrors/gecko-dev
		
	 d79e8ec3f8
			
		
	
	
		d79e8ec3f8
		
	
	
	
	
		
			
			This removes `tentative` from Web Locks tests which all three engines are passing. A couple of exceptions from https://wpt.fyi/results/web-locks?label=experimental&label=master&aligned * clientids: The test follows the spec, I think this is a Chrome bug. (https://w3c.github.io/web-locks/#dom-lockmanager-request, the use of environment's id) * signal: A couple of WebKit failures because of lack of AbortSignal custom reason support. Differential Revision: https://phabricator.services.mozilla.com/D200477
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // META: title=Web Locks API: Resources DOMString edge cases
 | |
| // META: global=window,dedicatedworker,sharedworker,serviceworker
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| function code_points(s) {
 | |
|   return [...s]
 | |
|     .map(c => '0x' + c.charCodeAt(0).toString(16).toUpperCase())
 | |
|     .join(' ');
 | |
| }
 | |
| 
 | |
| [
 | |
|   '', // Empty strings
 | |
|   'abc\x00def', // Embedded NUL
 | |
|   '\uD800', // Unpaired low surrogage
 | |
|   '\uDC00', // Unpaired high surrogage
 | |
|   '\uDC00\uD800', // Swapped surrogate pair
 | |
|   '\uFFFF' // Non-character
 | |
| ].forEach(string => {
 | |
|   promise_test(async t => {
 | |
|     await navigator.locks.request(string, lock => {
 | |
|       assert_equals(lock.name, string,
 | |
|                           'Requested name matches granted name');
 | |
|     });
 | |
|   }, 'DOMString: ' + code_points(string));
 | |
| });
 | |
| 
 | |
| promise_test(async t => {
 | |
|   // '\uD800' treated as a USVString would become '\uFFFD'.
 | |
|   await navigator.locks.request('\uD800', async lock => {
 | |
|     assert_equals(lock.name, '\uD800');
 | |
| 
 | |
|     // |lock| is held for the duration of this name. It
 | |
|     // Should not block acquiring |lock2| with a distinct
 | |
|     // DOMString.
 | |
|     await navigator.locks.request('\uFFFD', lock2 => {
 | |
|       assert_equals(lock2.name, '\uFFFD');
 | |
|     });
 | |
| 
 | |
|     // If we did not time out, this passed.
 | |
|   });
 | |
| }, 'Resource names that are not valid UTF-16 are not mangled');
 | |
| 
 | |
| promise_test(async t => {
 | |
|   for (const name of ['-', '-foo']) {
 | |
|     await promise_rejects_dom(
 | |
|       t, 'NotSupportedError',
 | |
|       navigator.locks.request(name, lock => {}),
 | |
|       'Names starting with "-" should be rejected');
 | |
|   }
 | |
|   let got_lock = false;
 | |
|   await navigator.locks.request('x-anything', lock => {
 | |
|     got_lock = true;
 | |
|   });
 | |
|   assert_true(got_lock, 'Names with embedded "-" should be accepted');
 | |
| }, 'Names cannot start with "-"');
 |