From af78173243a621e1da74ae0553222614c2338b91 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Sun, 8 Nov 2015 00:30:34 -0800 Subject: [PATCH] Move more unsafe layout calls onto LayoutJS. --- components/script/dom/element.rs | 10 +++--- components/script/dom/htmltableelement.rs | 42 +++++++++++++++++------ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 4377ca82026e..9c625dde32ed 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -47,7 +47,7 @@ use dom::htmllabelelement::HTMLLabelElement; use dom::htmllegendelement::HTMLLegendElement; use dom::htmloptgroupelement::HTMLOptGroupElement; use dom::htmltablecellelement::{HTMLTableCellElement, HTMLTableCellElementLayoutHelpers}; -use dom::htmltableelement::HTMLTableElement; +use dom::htmltableelement::{HTMLTableElement, HTMLTableElementLayoutHelpers}; use dom::htmltablerowelement::HTMLTableRowElement; use dom::htmltablesectionelement::HTMLTableSectionElement; use dom::htmltemplateelement::HTMLTemplateElement; @@ -276,7 +276,7 @@ impl LayoutElementHelpers for LayoutJS { let bgcolor = if let Some(this) = self.downcast::() { this.get_background_color() } else if let Some(this) = self.downcast::() { - (*this.unsafe_get()).get_background_color() + this.get_background_color() } else if let Some(this) = self.downcast::() { this.get_background_color() } else if let Some(this) = self.downcast::() { @@ -355,7 +355,7 @@ impl LayoutElementHelpers for LayoutJS { } let cellspacing = if let Some(this) = self.downcast::() { - (*this.unsafe_get()).get_cellspacing() + this.get_cellspacing() } else { None }; @@ -400,7 +400,7 @@ impl LayoutElementHelpers for LayoutJS { let width = if let Some(this) = self.downcast::() { this.get_width() } else if let Some(this) = self.downcast::() { - (*this.unsafe_get()).get_width() + this.get_width() } else if let Some(this) = self.downcast::() { this.get_width() } else { @@ -490,7 +490,7 @@ impl LayoutElementHelpers for LayoutJS { let border = if let Some(this) = self.downcast::() { - (*this.unsafe_get()).get_border() + this.get_border() } else { None }; diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index 259104ae09c2..548cf240b9b3 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -8,7 +8,7 @@ use dom::bindings::codegen::Bindings::HTMLTableElementBinding; use dom::bindings::codegen::Bindings::HTMLTableElementBinding::HTMLTableElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::inheritance::Castable; -use dom::bindings::js::{Root, RootedReference}; +use dom::bindings::js::{LayoutJS, Root, RootedReference}; use dom::document::Document; use dom::element::{AttributeMutation, Element}; use dom::htmlelement::HTMLElement; @@ -47,6 +47,10 @@ impl HTMLTableElement { let element = HTMLTableElement::new_inherited(localName, prefix, document); Node::reflect_node(box element, document, HTMLTableElementBinding::Wrap) } + + pub fn get_border(&self) -> Option { + self.border.get() + } } impl HTMLTableElementMethods for HTMLTableElement { @@ -115,22 +119,40 @@ impl HTMLTableElementMethods for HTMLTableElement { make_setter!(SetBgColor, "bgcolor"); } +pub trait HTMLTableElementLayoutHelpers { + fn get_background_color(&self) -> Option; + fn get_border(&self) -> Option; + fn get_cellspacing(&self) -> Option; + fn get_width(&self) -> LengthOrPercentageOrAuto; +} -impl HTMLTableElement { - pub fn get_background_color(&self) -> Option { - self.background_color.get() +impl HTMLTableElementLayoutHelpers for LayoutJS { + #[allow(unsafe_code)] + fn get_background_color(&self) -> Option { + unsafe { + (*self.unsafe_get()).background_color.get() + } } - pub fn get_border(&self) -> Option { - self.border.get() + #[allow(unsafe_code)] + fn get_border(&self) -> Option { + unsafe { + (*self.unsafe_get()).border.get() + } } - pub fn get_cellspacing(&self) -> Option { - self.cellspacing.get() + #[allow(unsafe_code)] + fn get_cellspacing(&self) -> Option { + unsafe { + (*self.unsafe_get()).cellspacing.get() + } } - pub fn get_width(&self) -> LengthOrPercentageOrAuto { - self.width.get() + #[allow(unsafe_code)] + fn get_width(&self) -> LengthOrPercentageOrAuto { + unsafe { + (*self.unsafe_get()).width.get() + } } }