aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/node.rs9
-rw-r--r--components/script/dom/window.rs3
2 files changed, 12 insertions, 0 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 7526c2490d2..a0486e6ee11 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -490,9 +490,18 @@ pub trait NodeHelpers<'a> {
fn get_unique_id(self) -> String;
fn summarize(self) -> NodeInfo;
+
+ fn teardown(self);
}
impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
+ fn teardown(self) {
+ self.layout_data.dispose();
+ for kid in self.children() {
+ kid.teardown();
+ }
+ }
+
/// Dumps the subtree rooted at this node, for debugging.
fn dump(self) {
self.dump_indent(0);
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 28d7ac8b92d..097d8ed4ea0 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -461,6 +461,9 @@ impl<'a, T: Reflectable> ScriptHelpers for JSRef<'a, T> {
impl<'a> WindowHelpers for JSRef<'a, Window> {
fn clear_js_context(self) {
+ let document = self.Document().root();
+ NodeCast::from_ref(document.r()).teardown();
+
*self.js_context.borrow_mut() = None;
*self.browser_context.borrow_mut() = None;
}