From cd7b4d4e610aff6c931ed33ba04f48a68c9406a7 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 5 Oct 2015 17:57:37 +0200 Subject: [PATCH] Define the parsed attribute getters for HTMLTableCellElement on LayoutJS. This documents their intended usage and prevents script callers from using them. --- components/script/dom/element.rs | 7 +++-- components/script/dom/htmltablecellelement.rs | 28 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index dd4bff543e0..bdc7de011b2 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -45,6 +45,7 @@ use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlcollection::HTMLCollection; use dom::htmlelement::HTMLElementTypeId; use dom::htmlinputelement::{HTMLInputElement, RawLayoutHTMLInputElementHelpers}; +use dom::htmltablecellelement::HTMLTableCellElementLayoutHelpers; use dom::htmltableelement::HTMLTableElement; use dom::htmltextareaelement::RawLayoutHTMLTextAreaElementHelpers; use dom::namednodemap::NamedNodeMap; @@ -270,7 +271,7 @@ impl LayoutElementHelpers for LayoutJS { } else if let Some(this) = HTMLTableElementCast::to_layout_js(self) { (*this.unsafe_get()).get_background_color() } else if let Some(this) = HTMLTableCellElementCast::to_layout_js(self) { - (*this.unsafe_get()).get_background_color() + this.get_background_color() } else if let Some(this) = HTMLTableRowElementCast::to_layout_js(self) { (*this.unsafe_get()).get_background_color() } else if let Some(this) = HTMLTableSectionElementCast::to_layout_js(self) { @@ -387,7 +388,7 @@ impl LayoutElementHelpers for LayoutJS { } else if let Some(this) = HTMLTableElementCast::to_layout_js(self) { (*this.unsafe_get()).get_width() } else if let Some(this) = HTMLTableCellElementCast::to_layout_js(self) { - (*this.unsafe_get()).get_width() + this.get_width() } else { LengthOrPercentageOrAuto::Auto }; @@ -504,7 +505,7 @@ impl LayoutElementHelpers for LayoutJS { match attribute { UnsignedIntegerAttribute::ColSpan => { if let Some(this) = HTMLTableCellElementCast::to_layout_js(self) { - (*this.unsafe_get()).get_colspan() + this.get_colspan() } else { // Don't panic since `display` can cause this to be called on arbitrary // elements. diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index 2705240edbb..7be54174eae 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -6,6 +6,7 @@ use cssparser::RGBA; use dom::attr::{Attr, AttrValue}; use dom::bindings::codegen::Bindings::HTMLTableCellElementBinding::HTMLTableCellElementMethods; use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLTableCellElementDerived}; +use dom::bindings::js::LayoutJS; use dom::document::Document; use dom::element::{AttributeMutation, ElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; @@ -80,17 +81,30 @@ impl HTMLTableCellElementMethods for HTMLTableCellElement { } -impl HTMLTableCellElement { - pub fn get_background_color(&self) -> Option { - self.background_color.get() +pub trait HTMLTableCellElementLayoutHelpers { + fn get_background_color(&self) -> Option; + fn get_colspan(&self) -> Option; + fn get_width(&self) -> LengthOrPercentageOrAuto; +} + +#[allow(unsafe_code)] +impl HTMLTableCellElementLayoutHelpers for LayoutJS { + fn get_background_color(&self) -> Option { + unsafe { + (*self.unsafe_get()).background_color.get() + } } - pub fn get_colspan(&self) -> Option { - self.colspan.get() + fn get_colspan(&self) -> Option { + unsafe { + (*self.unsafe_get()).colspan.get() + } } - pub fn get_width(&self) -> LengthOrPercentageOrAuto { - self.width.get() + fn get_width(&self) -> LengthOrPercentageOrAuto { + unsafe { + (*self.unsafe_get()).width.get() + } } }