diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-10-19 06:32:05 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-10-19 06:32:05 -0600 |
commit | 1a376aa75d5de8781b17a673850860f8afd2c28f (patch) | |
tree | 01650fefa8cb00280835382dfb60c15b57b0dce0 /components/script/dom/browsercontext.rs | |
parent | 50ad1b064d6e85e84707d83ca8f4b5b541b6b8da (diff) | |
parent | 6dc42dd1d6979cea7059b055de7f0d6f93c14338 (diff) | |
download | servo-1a376aa75d5de8781b17a673850860f8afd2c28f.tar.gz servo-1a376aa75d5de8781b17a673850860f8afd2c28f.zip |
Auto merge of #8060 - nox:deref-js, r=Ms2ger
Implement Deref<Target=T> for JS<T> where T: Reflectable
We can only borrow `JS<T>` from rooted things, so it's safe to deref it.
The only types that provide mutable `JS<T>` things are `MutHeap<JS<T>>` and
`MutNullableHeap<JS<T>>`, which don't actually expose that they contain
`JS<T>` values.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8060)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/browsercontext.rs')
-rw-r--r-- | components/script/dom/browsercontext.rs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/components/script/dom/browsercontext.rs b/components/script/dom/browsercontext.rs index af2bfbdc81e..60dbdc5523e 100644 --- a/components/script/dom/browsercontext.rs +++ b/components/script/dom/browsercontext.rs @@ -44,17 +44,16 @@ impl BrowsingContext { } } - pub fn active_document(&self) -> Root<Document> { - self.history[self.active_index].document.root() + pub fn active_document(&self) -> &Document { + &*self.history[self.active_index].document } - pub fn active_window(&self) -> Root<Window> { - let doc = self.active_document(); - doc.r().window() + pub fn active_window(&self) -> &Window { + self.active_document().window() } - pub fn frame_element(&self) -> Option<Root<Element>> { - self.frame_element.as_ref().map(JS::root) + pub fn frame_element(&self) -> Option<&Element> { + self.frame_element.as_ref().map(|element| &**element) } pub fn window_proxy(&self) -> *mut JSObject { @@ -64,8 +63,8 @@ impl BrowsingContext { #[allow(unsafe_code)] pub fn create_window_proxy(&mut self) { - let win = self.active_window(); - let win = win.r(); + // We inline self.active_window() because we can't borrow *self here. + let win = self.history[self.active_index].document.window(); let WindowProxyHandler(handler) = win.windowproxy_handler(); assert!(!handler.is_null()); |