1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

chore: bump deno_core and cargo update (#20480)

Bump deno_core, pulling in new rusty_v8. Requires some op2/deprecation
fixes.
This commit is contained in:
Matt Mastracci 2023-09-13 16:01:31 -06:00 committed by GitHub
parent 12a75e3b43
commit 81d50e1b66
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 257 additions and 411 deletions

435
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -40,7 +40,7 @@ repository = "https://github.com/denoland/deno"
[workspace.dependencies] [workspace.dependencies]
deno_ast = { version = "0.29.1", features = ["transpiling"] } deno_ast = { version = "0.29.1", features = ["transpiling"] }
deno_core = { version = "0.209.0" } deno_core = { version = "0.210.0" }
deno_runtime = { version = "0.126.0", path = "./runtime" } deno_runtime = { version = "0.126.0", path = "./runtime" }
napi_sym = { version = "0.48.0", path = "./cli/napi/sym" } napi_sym = { version = "0.48.0", path = "./cli/napi/sym" }

View file

@ -1156,7 +1156,9 @@ where
let res = fut.or_cancel(cancel_handle).await; let res = fut.or_cancel(cancel_handle).await;
if let Some(cancel_rid) = cancel_rid { if let Some(cancel_rid) = cancel_rid {
state.borrow_mut().resource_table.close(cancel_rid).ok(); if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
res.close();
}
}; };
res?.context_path("writefile", &path)?; res?.context_path("writefile", &path)?;
@ -1213,7 +1215,9 @@ where
let res = fut.or_cancel(cancel_handle).await; let res = fut.or_cancel(cancel_handle).await;
if let Some(cancel_rid) = cancel_rid { if let Some(cancel_rid) = cancel_rid {
state.borrow_mut().resource_table.close(cancel_rid).ok(); if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
res.close();
}
}; };
res?.context_path("readfile", &path)? res?.context_path("readfile", &path)?
@ -1269,7 +1273,9 @@ where
let res = fut.or_cancel(cancel_handle).await; let res = fut.or_cancel(cancel_handle).await;
if let Some(cancel_rid) = cancel_rid { if let Some(cancel_rid) = cancel_rid {
state.borrow_mut().resource_table.close(cancel_rid).ok(); if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
res.close();
}
}; };
res?.context_path("readfile", &path)? res?.context_path("readfile", &path)?

View file

@ -46,7 +46,9 @@ impl HttpRequestBodyAutocloser {
impl Drop for HttpRequestBodyAutocloser { impl Drop for HttpRequestBodyAutocloser {
fn drop(&mut self) { fn drop(&mut self) {
_ = self.1.borrow_mut().resource_table.close(self.0); if let Ok(res) = self.1.borrow_mut().resource_table.take_any(self.0) {
res.close();
}
} }
} }

View file

@ -621,7 +621,9 @@ where
let lookup_rv = lookup_fut.or_cancel(cancel_handle).await; let lookup_rv = lookup_fut.or_cancel(cancel_handle).await;
if let Some(cancel_rid) = cancel_rid { if let Some(cancel_rid) = cancel_rid {
state.borrow_mut().resource_table.close(cancel_rid).ok(); if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
res.close();
}
}; };
lookup_rv? lookup_rv?

View file

@ -408,7 +408,9 @@ pub fn op_zlib_close_if_pending(
}; };
if pending_close { if pending_close {
drop(resource); drop(resource);
state.resource_table.close(handle)?; if let Ok(res) = state.resource_table.take_any(handle) {
res.close();
}
} }
Ok(()) Ok(())

View file

@ -288,7 +288,9 @@ where
}; };
if let Some(cancel_rid) = cancel_handle { if let Some(cancel_rid) = cancel_handle {
state.borrow_mut().resource_table.close(cancel_rid).ok(); if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
res.close();
}
} }
let mut state = state.borrow_mut(); let mut state = state.borrow_mut();

View file

@ -5,7 +5,6 @@ use crate::permissions::PermissionsContainer;
use deno_core::anyhow::Context; use deno_core::anyhow::Context;
use deno_core::error::type_error; use deno_core::error::type_error;
use deno_core::error::AnyError; use deno_core::error::AnyError;
use deno_core::op;
use deno_core::op2; use deno_core::op2;
use deno_core::serde_json; use deno_core::serde_json;
use deno_core::AsyncMutFuture; use deno_core::AsyncMutFuture;
@ -334,23 +333,21 @@ fn op_spawn_child(
spawn_child(state, command) spawn_child(state, command)
} }
// TODO(bartlomieju): op2 doesn't support clippy allows #[op2(async)]
#[op]
#[allow(clippy::await_holding_refcell_ref)] #[allow(clippy::await_holding_refcell_ref)]
#[serde]
async fn op_spawn_wait( async fn op_spawn_wait(
state: Rc<RefCell<OpState>>, state: Rc<RefCell<OpState>>,
rid: ResourceId, #[smi] rid: ResourceId,
) -> Result<ChildStatus, AnyError> { ) -> Result<ChildStatus, AnyError> {
let resource = state let resource = state
.borrow_mut() .borrow_mut()
.resource_table .resource_table
.get::<ChildResource>(rid)?; .get::<ChildResource>(rid)?;
let result = resource.0.try_borrow_mut()?.wait().await?.try_into(); let result = resource.0.try_borrow_mut()?.wait().await?.try_into();
state if let Ok(resource) = state.borrow_mut().resource_table.take_any(rid) {
.borrow_mut() resource.close();
.resource_table }
.close(rid)
.expect("shouldn't have closed until now");
result result
} }

View file

@ -1,7 +1,6 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use deno_core::error::type_error; use deno_core::error::type_error;
use deno_core::error::AnyError; use deno_core::error::AnyError;
use deno_core::op;
use deno_core::op2; use deno_core::op2;
use deno_core::AsyncRefCell; use deno_core::AsyncRefCell;
use deno_core::CancelFuture; use deno_core::CancelFuture;
@ -537,10 +536,11 @@ pub fn signal_int_to_str(s: libc::c_int) -> Result<&'static str, AnyError> {
} }
#[cfg(unix)] #[cfg(unix)]
#[op] #[op2(fast)]
#[smi]
fn op_signal_bind( fn op_signal_bind(
state: &mut OpState, state: &mut OpState,
sig: &str, #[string] sig: &str,
) -> Result<ResourceId, AnyError> { ) -> Result<ResourceId, AnyError> {
let signo = signal_str_to_int(sig)?; let signo = signal_str_to_int(sig)?;
if signal_hook_registry::FORBIDDEN.contains(&signo) { if signal_hook_registry::FORBIDDEN.contains(&signo) {
@ -557,10 +557,11 @@ fn op_signal_bind(
} }
#[cfg(windows)] #[cfg(windows)]
#[op] #[op2(fast)]
#[smi]
fn op_signal_bind( fn op_signal_bind(
state: &mut OpState, state: &mut OpState,
sig: &str, #[string] sig: &str,
) -> Result<ResourceId, AnyError> { ) -> Result<ResourceId, AnyError> {
let signo = signal_str_to_int(sig)?; let signo = signal_str_to_int(sig)?;
let resource = SignalStreamResource { let resource = SignalStreamResource {
@ -605,6 +606,6 @@ pub fn op_signal_unbind(
state: &mut OpState, state: &mut OpState,
#[smi] rid: ResourceId, #[smi] rid: ResourceId,
) -> Result<(), AnyError> { ) -> Result<(), AnyError> {
state.resource_table.close(rid)?; state.resource_table.take_any(rid)?.close();
Ok(()) Ok(())
} }

View file

@ -3052,106 +3052,6 @@
"≯ (using <area>.host)", "≯ (using <area>.host)",
"≯ (using <area>.hostname)" "≯ (using <area>.hostname)"
], ],
"url-constructor.any.html": [
"Parsing: </> against <file://h/C:/a/b>",
"Parsing: <file:\\\\//> against <about:blank>",
"Parsing: <file:\\\\\\\\> against <about:blank>",
"Parsing: <file:\\\\\\\\?fox> against <about:blank>",
"Parsing: <file:\\\\\\\\#guppy> against <about:blank>",
"Parsing: <file://spider///> against <about:blank>",
"Parsing: <file:\\\\localhost//> against <about:blank>",
"Parsing: <file://\\/localhost//cat> against <about:blank>",
"Parsing: <file://localhost//a//../..//> against <about:blank>",
"Parsing: </////mouse> against <file:///elephant>",
"Parsing: <\\/localhost//pig> against <file://lion/>",
"Parsing: <//localhost//pig> against <file://lion/>",
"Parsing: </..//localhost//pig> against <file://lion/>",
"Parsing: <C|> against <file://host/dir/file>",
"Parsing: <C|> against <file://host/D:/dir1/dir2/file>",
"Parsing: <C|#> against <file://host/dir/file>",
"Parsing: <C|?> against <file://host/dir/file>",
"Parsing: <C|/> against <file://host/dir/file>",
"Parsing: <C|\n/> against <file://host/dir/file>",
"Parsing: <C|\\> against <file://host/dir/file>",
"Parsing: </c:/foo/bar> against <file://host/path>",
"Parsing: <file://example.net/C:/> against <about:blank>",
"Parsing: <file://1.2.3.4/C:/> against <about:blank>",
"Parsing: <file://[1::8]/C:/> against <about:blank>",
"Parsing: <C|/> against <file://host/>",
"Parsing: </C:/> against <file://host/>",
"Parsing: <file:C:/> against <file://host/>",
"Parsing: <file:/C:/> against <file://host/>",
"Parsing: <file://localhost//a//../..//foo> against <about:blank>",
"Parsing: <file://localhost////foo> against <about:blank>",
"Parsing: <file:////foo> against <about:blank>",
"Parsing: <file:////one/two> against <file:///>",
"Parsing: <////one/two> against <file:///>",
"Parsing: <file:///.//> against <file:////>",
"Parsing: <file:.//p> against <about:blank>",
"Parsing: <file:/.//p> against <about:blank>",
"Parsing: <non-spec:/.//> against <about:blank>",
"Parsing: <non-spec:/..//> against <about:blank>",
"Parsing: <non-spec:/a/..//> against <about:blank>",
"Parsing: <non-spec:/.//path> against <about:blank>",
"Parsing: <non-spec:/..//path> against <about:blank>",
"Parsing: <non-spec:/a/..//path> against <about:blank>",
"Parsing: </.//path> against <non-spec:/p>",
"Parsing: </..//path> against <non-spec:/p>",
"Parsing: <..//path> against <non-spec:/p>",
"Parsing: <a/..//path> against <non-spec:/p>",
"Parsing: <> against <non-spec:/..//p>",
"Parsing: <path> against <non-spec:/..//p>"
],
"url-constructor.any.worker.html": [
"Parsing: </> against <file://h/C:/a/b>",
"Parsing: <file:\\\\//> against <about:blank>",
"Parsing: <file:\\\\\\\\> against <about:blank>",
"Parsing: <file:\\\\\\\\?fox> against <about:blank>",
"Parsing: <file:\\\\\\\\#guppy> against <about:blank>",
"Parsing: <file://spider///> against <about:blank>",
"Parsing: <file:\\\\localhost//> against <about:blank>",
"Parsing: <file://\\/localhost//cat> against <about:blank>",
"Parsing: <file://localhost//a//../..//> against <about:blank>",
"Parsing: </////mouse> against <file:///elephant>",
"Parsing: <\\/localhost//pig> against <file://lion/>",
"Parsing: <//localhost//pig> against <file://lion/>",
"Parsing: </..//localhost//pig> against <file://lion/>",
"Parsing: <C|> against <file://host/dir/file>",
"Parsing: <C|> against <file://host/D:/dir1/dir2/file>",
"Parsing: <C|#> against <file://host/dir/file>",
"Parsing: <C|?> against <file://host/dir/file>",
"Parsing: <C|/> against <file://host/dir/file>",
"Parsing: <C|\n/> against <file://host/dir/file>",
"Parsing: <C|\\> against <file://host/dir/file>",
"Parsing: </c:/foo/bar> against <file://host/path>",
"Parsing: <file://example.net/C:/> against <about:blank>",
"Parsing: <file://1.2.3.4/C:/> against <about:blank>",
"Parsing: <file://[1::8]/C:/> against <about:blank>",
"Parsing: <C|/> against <file://host/>",
"Parsing: </C:/> against <file://host/>",
"Parsing: <file:C:/> against <file://host/>",
"Parsing: <file:/C:/> against <file://host/>",
"Parsing: <file://localhost//a//../..//foo> against <about:blank>",
"Parsing: <file://localhost////foo> against <about:blank>",
"Parsing: <file:////foo> against <about:blank>",
"Parsing: <file:////one/two> against <file:///>",
"Parsing: <////one/two> against <file:///>",
"Parsing: <file:///.//> against <file:////>",
"Parsing: <file:.//p> against <about:blank>",
"Parsing: <file:/.//p> against <about:blank>",
"Parsing: <non-spec:/.//> against <about:blank>",
"Parsing: <non-spec:/..//> against <about:blank>",
"Parsing: <non-spec:/a/..//> against <about:blank>",
"Parsing: <non-spec:/.//path> against <about:blank>",
"Parsing: <non-spec:/..//path> against <about:blank>",
"Parsing: <non-spec:/a/..//path> against <about:blank>",
"Parsing: </.//path> against <non-spec:/p>",
"Parsing: </..//path> against <non-spec:/p>",
"Parsing: <..//path> against <non-spec:/p>",
"Parsing: <a/..//path> against <non-spec:/p>",
"Parsing: <> against <non-spec:/..//p>",
"Parsing: <path> against <non-spec:/..//p>"
],
"url-origin.any.html": [ "url-origin.any.html": [
"Origin parsing: <blob:blob:https://example.org/> without base", "Origin parsing: <blob:blob:https://example.org/> without base",
"Origin parsing: <blob:ftp://host/path> without base", "Origin parsing: <blob:ftp://host/path> without base",
@ -3167,40 +3067,16 @@
"url-searchparams.any.html": true, "url-searchparams.any.html": true,
"url-searchparams.any.worker.html": true, "url-searchparams.any.worker.html": true,
"url-setters-stripping.any.html": [ "url-setters-stripping.any.html": [
"Setting protocol with leading U+0000 (https:)",
"Setting protocol with U+0000 before inserted colon (https:)",
"Setting port with leading U+0000 (https:)", "Setting port with leading U+0000 (https:)",
"Setting pathname with trailing U+0000 (https:)",
"Setting protocol with leading U+001F (https:)",
"Setting protocol with U+001F before inserted colon (https:)",
"Setting port with leading U+001F (https:)", "Setting port with leading U+001F (https:)",
"Setting pathname with trailing U+001F (https:)",
"Setting protocol with leading U+0000 (wpt++:)",
"Setting protocol with U+0000 before inserted colon (wpt++:)",
"Setting port with leading U+0000 (wpt++:)", "Setting port with leading U+0000 (wpt++:)",
"Setting pathname with trailing U+0000 (wpt++:)", "Setting port with leading U+001F (wpt++:)"
"Setting protocol with leading U+001F (wpt++:)",
"Setting protocol with U+001F before inserted colon (wpt++:)",
"Setting port with leading U+001F (wpt++:)",
"Setting pathname with trailing U+001F (wpt++:)"
], ],
"url-setters-stripping.any.worker.html": [ "url-setters-stripping.any.worker.html": [
"Setting protocol with leading U+0000 (https:)",
"Setting protocol with U+0000 before inserted colon (https:)",
"Setting port with leading U+0000 (https:)", "Setting port with leading U+0000 (https:)",
"Setting pathname with trailing U+0000 (https:)",
"Setting protocol with leading U+001F (https:)",
"Setting protocol with U+001F before inserted colon (https:)",
"Setting port with leading U+001F (https:)", "Setting port with leading U+001F (https:)",
"Setting pathname with trailing U+001F (https:)",
"Setting protocol with leading U+0000 (wpt++:)",
"Setting protocol with U+0000 before inserted colon (wpt++:)",
"Setting port with leading U+0000 (wpt++:)", "Setting port with leading U+0000 (wpt++:)",
"Setting pathname with trailing U+0000 (wpt++:)", "Setting port with leading U+001F (wpt++:)"
"Setting protocol with leading U+001F (wpt++:)",
"Setting protocol with U+001F before inserted colon (wpt++:)",
"Setting port with leading U+001F (wpt++:)",
"Setting pathname with trailing U+001F (wpt++:)"
], ],
"url-tojson.any.html": true, "url-tojson.any.html": true,
"url-tojson.any.worker.html": true, "url-tojson.any.worker.html": true,
@ -3231,36 +3107,6 @@
"urlsearchparams-sort.any.worker.html": true, "urlsearchparams-sort.any.worker.html": true,
"urlsearchparams-stringifier.any.html": true, "urlsearchparams-stringifier.any.html": true,
"urlsearchparams-stringifier.any.worker.html": true, "urlsearchparams-stringifier.any.worker.html": true,
"url-setters.any.html": [
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
"URL: Setting <non-spec:/.//p>.hostname = ''",
"URL: Setting <foo://somehost/some/path>.pathname = '' Non-special URLs can have their paths erased",
"URL: Setting <foo:///some/path>.pathname = '' Non-special URLs with an empty host can have their paths erased",
"URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
"URL: Setting <file:///unicorn>.pathname = '//\\/' File URLs and (back)slashes",
"URL: Setting <file:///unicorn>.pathname = '//monkey/..//' File URLs and (back)slashes",
"URL: Setting <non-spec:/>.pathname = '/.//p' Serialize /. in path",
"URL: Setting <non-spec:/>.pathname = '/..//p'",
"URL: Setting <non-spec:/>.pathname = '//p'",
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path"
],
"url-setters.any.worker.html": [
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
"URL: Setting <non-spec:/.//p>.hostname = ''",
"URL: Setting <foo://somehost/some/path>.pathname = '' Non-special URLs can have their paths erased",
"URL: Setting <foo:///some/path>.pathname = '' Non-special URLs with an empty host can have their paths erased",
"URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
"URL: Setting <file:///unicorn>.pathname = '//\\/' File URLs and (back)slashes",
"URL: Setting <file:///unicorn>.pathname = '//monkey/..//' File URLs and (back)slashes",
"URL: Setting <non-spec:/>.pathname = '/.//p' Serialize /. in path",
"URL: Setting <non-spec:/>.pathname = '/..//p'",
"URL: Setting <non-spec:/>.pathname = '//p'",
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path"
],
"idlharness-shadowrealm.window.html": false, "idlharness-shadowrealm.window.html": false,
"percent-encoding.window.html": [ "percent-encoding.window.html": [
"Input † with encoding big5", "Input † with encoding big5",
@ -3278,9 +3124,6 @@
"Input with encoding utf-8", "Input with encoding utf-8",
"Input á| with encoding utf-8" "Input á| with encoding utf-8"
], ],
"url-setters-a-area.window.html": {
"ignore": true
},
"IdnaTestV2.window.html": [ "IdnaTestV2.window.html": [
"ToASCII(\"ab\") C1", "ToASCII(\"ab\") C1",
"ToASCII(\"AB\") C1", "ToASCII(\"AB\") C1",
@ -4071,10 +3914,6 @@
"<area>: Setting <mailto:me@example.net>.pathname = '/foo' Opaque paths cannot be set" "<area>: Setting <mailto:me@example.net>.pathname = '/foo' Opaque paths cannot be set"
], ],
"url-setters.any.html?exclude=(file|javascript|mailto)": [ "url-setters.any.html?exclude=(file|javascript|mailto)": [
"URL: Setting <http://test/>.protocol = 'https\u0000' Non-tab/newline C0 controls result in no-op",
"URL: Setting <http://test/>.protocol = 'https\f'",
"URL: Setting <http://test/>.protocol = 'https\u000e'",
"URL: Setting <http://test/>.protocol = 'https '",
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value", "URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value", "URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path", "URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
@ -4086,8 +3925,6 @@
"URL: Setting <non-spec:/>.pathname = '/..//p'", "URL: Setting <non-spec:/>.pathname = '/..//p'",
"URL: Setting <non-spec:/>.pathname = '//p'", "URL: Setting <non-spec:/>.pathname = '//p'",
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path", "URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
"URL: Setting <data:/nospace>.pathname = 'space ' Non-special URLs with non-opaque paths percent-encode U+0020",
"URL: Setting <sc:/nospace>.pathname = 'space '",
"URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths", "URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
"URL: Setting <sc:space ?query#fragment>.search = ''" "URL: Setting <sc:space ?query#fragment>.search = ''"
], ],
@ -4099,10 +3936,6 @@
"url-setters.any.html?include=javascript": true, "url-setters.any.html?include=javascript": true,
"url-setters.any.html?include=mailto": true, "url-setters.any.html?include=mailto": true,
"url-setters.any.worker.html?exclude=(file|javascript|mailto)": [ "url-setters.any.worker.html?exclude=(file|javascript|mailto)": [
"URL: Setting <http://test/>.protocol = 'https\u0000' Non-tab/newline C0 controls result in no-op",
"URL: Setting <http://test/>.protocol = 'https\f'",
"URL: Setting <http://test/>.protocol = 'https\u000e'",
"URL: Setting <http://test/>.protocol = 'https '",
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value", "URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value", "URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path", "URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
@ -4114,8 +3947,6 @@
"URL: Setting <non-spec:/>.pathname = '/..//p'", "URL: Setting <non-spec:/>.pathname = '/..//p'",
"URL: Setting <non-spec:/>.pathname = '//p'", "URL: Setting <non-spec:/>.pathname = '//p'",
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path", "URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
"URL: Setting <data:/nospace>.pathname = 'space ' Non-special URLs with non-opaque paths percent-encode U+0020",
"URL: Setting <sc:/nospace>.pathname = 'space '",
"URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths", "URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
"URL: Setting <sc:space ?query#fragment>.search = ''" "URL: Setting <sc:space ?query#fragment>.search = ''"
], ],