summaryrefslogtreecommitdiff
path: root/runtime/ops/worker_host.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-01-07 17:25:34 +0100
committerGitHub <noreply@github.com>2023-01-07 17:25:34 +0100
commitfac64478157ee563b185edb5734688e4523df3a1 (patch)
tree888d562982e1fc37dfb9a4459928bcec84d55dfc /runtime/ops/worker_host.rs
parent82e930726ee5dbac8e6eae0962c07c72daf9843c (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.rs14
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()
};