diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2020-01-24 17:10:21 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-24 17:10:21 -0500 |
commit | 12693b51f510761d5dd58a9103596a192edb803c (patch) | |
tree | 9e2e750f620ae592f35705f3b4cc959f22525628 /components/script/realms.rs | |
parent | 60238afa6ce1aa9078908b5fefd5426f48a9911b (diff) | |
parent | 5a3e1b8e6903c825e50597a218532d417f1dfef9 (diff) | |
download | servo-12693b51f510761d5dd58a9103596a192edb803c.tar.gz servo-12693b51f510761d5dd58a9103596a192edb803c.zip |
Auto merge of #25597 - kunalmohan:25581-Compartment, r=jdm
Rename compartment to realm
<!-- Please describe your changes on the following line: -->
Rename compartment-related terminology to use realms instead.
r?@jdm
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #25581 (GitHub issue number if applicable)
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
Diffstat (limited to 'components/script/realms.rs')
-rw-r--r-- | components/script/realms.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/components/script/realms.rs b/components/script/realms.rs new file mode 100644 index 00000000000..280e615e412 --- /dev/null +++ b/components/script/realms.rs @@ -0,0 +1,50 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::reflector::DomObject; +use crate::dom::globalscope::GlobalScope; +use crate::script_runtime::JSContext; +use js::jsapi::{GetCurrentRealmOrNull, JSAutoRealm}; + +pub struct AlreadyInRealm(()); + +impl AlreadyInRealm { + #![allow(unsafe_code)] + pub fn assert(global: &GlobalScope) -> AlreadyInRealm { + unsafe { + assert!(!GetCurrentRealmOrNull(*global.get_cx()).is_null()); + } + AlreadyInRealm(()) + } + + pub fn assert_for_cx(cx: JSContext) -> AlreadyInRealm { + unsafe { + assert!(!GetCurrentRealmOrNull(*cx).is_null()); + } + AlreadyInRealm(()) + } +} + +#[derive(Clone, Copy)] +pub enum InRealm<'a> { + Already(&'a AlreadyInRealm), + Entered(&'a JSAutoRealm), +} + +impl<'a> InRealm<'a> { + pub fn in_realm(token: &AlreadyInRealm) -> InRealm { + InRealm::Already(token) + } + + pub fn entered(token: &JSAutoRealm) -> InRealm { + InRealm::Entered(token) + } +} + +pub fn enter_realm(object: &impl DomObject) -> JSAutoRealm { + JSAutoRealm::new( + *object.global().get_cx(), + object.reflector().get_jsobject().get(), + ) +} |