diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-01-07 17:25:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-07 17:25:34 +0100 |
commit | fac64478157ee563b185edb5734688e4523df3a1 (patch) | |
tree | 888d562982e1fc37dfb9a4459928bcec84d55dfc /runtime/ops/worker_host.rs | |
parent | 82e930726ee5dbac8e6eae0962c07c72daf9843c (diff) |
refactor(permissions): add PermissionsContainer struct for internal mutability (#17134)
Turns out we were cloning permissions which after prompting were discarded,
so the state of permissions was never preserved. To handle that we need to store
all permissions behind "Arc<Mutex<>>" (because there are situations where we
need to send them to other thread).
Testing and benching code still uses "Permissions" in most places - it's undesirable
to share the same permission set between various test/bench files - otherwise
granting or revoking permissions in one file would influence behavior of other test
files.
Diffstat (limited to 'runtime/ops/worker_host.rs')
-rw-r--r-- | runtime/ops/worker_host.rs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs index 54aa0d916..041d3ee6f 100644 --- a/runtime/ops/worker_host.rs +++ b/runtime/ops/worker_host.rs @@ -3,7 +3,7 @@ use crate::ops::TestingFeaturesEnabled; use crate::permissions::create_child_permissions; use crate::permissions::ChildPermissionsArg; -use crate::permissions::Permissions; +use crate::permissions::PermissionsContainer; use crate::web_worker::run_web_worker; use crate::web_worker::SendableWebWorkerHandle; use crate::web_worker::WebWorker; @@ -15,7 +15,6 @@ use crate::worker::FormatJsErrorFn; use deno_core::error::AnyError; use deno_core::futures::future::LocalFutureObj; use deno_core::op; - use deno_core::serde::Deserialize; use deno_core::CancelFuture; use deno_core::CancelHandle; @@ -32,8 +31,8 @@ use std::sync::Arc; pub struct CreateWebWorkerArgs { pub name: String, pub worker_id: WorkerId, - pub parent_permissions: Permissions, - pub permissions: Permissions, + pub parent_permissions: PermissionsContainer, + pub permissions: PermissionsContainer, pub main_module: ModuleSpecifier, pub worker_type: WebWorkerType, } @@ -164,10 +163,13 @@ fn op_create_worker( if args.permissions.is_some() { super::check_unstable(state, "Worker.deno.permissions"); } - let parent_permissions = state.borrow_mut::<Permissions>(); + let parent_permissions = state.borrow_mut::<PermissionsContainer>(); let worker_permissions = if let Some(child_permissions_arg) = args.permissions { - create_child_permissions(parent_permissions, child_permissions_arg)? + let mut parent_permissions = parent_permissions.0.lock(); + let perms = + create_child_permissions(&mut parent_permissions, child_permissions_arg)?; + PermissionsContainer::new(perms) } else { parent_permissions.clone() }; |