aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/wrapper.rs4
-rw-r--r--components/script/dom/characterdata.rs7
2 files changed, 9 insertions, 2 deletions
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs
index e7ace898d01..c39482c1de6 100644
--- a/components/layout/wrapper.rs
+++ b/components/layout/wrapper.rs
@@ -189,7 +189,7 @@ impl<'ln> TLayoutNode for LayoutNode<'ln> {
unsafe {
if self.get().is_text() {
let text: JS<Text> = self.get_jsmanaged().transmute_copy();
- (*text.unsafe_get()).characterdata().data().clone()
+ (*text.unsafe_get()).characterdata().data_for_layout().to_string()
} else if self.get().is_htmlinputelement() {
let input: JS<HTMLInputElement> = self.get_jsmanaged().transmute_copy();
input.get_value_for_layout()
@@ -765,7 +765,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
Some(TextNodeTypeId) => {
unsafe {
let text: JS<Text> = self.get_jsmanaged().transmute_copy();
- if !is_whitespace((*text.unsafe_get()).characterdata().data().as_slice()) {
+ if !is_whitespace((*text.unsafe_get()).characterdata().data_for_layout()) {
return false
}
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs
index 8201965bdb3..753a4336849 100644
--- a/components/script/dom/characterdata.rs
+++ b/components/script/dom/characterdata.rs
@@ -15,6 +15,7 @@ use dom::node::{CommentNodeTypeId, Node, NodeTypeId, TextNodeTypeId, ProcessingI
use servo_util::str::DOMString;
use std::cell::{Ref, RefCell};
+use std::mem;
#[jstraceable]
#[must_root]
@@ -57,6 +58,12 @@ impl CharacterData {
pub fn set_data(&self, data: DOMString) {
*self.data.borrow_mut() = data;
}
+
+ #[inline]
+ pub unsafe fn data_for_layout<'a>(&'a self) -> &'a str {
+ mem::transmute::<&RefCell<DOMString>, &DOMString>(&self.data).as_slice()
+ }
+
}
impl<'a> CharacterDataMethods for JSRef<'a, CharacterData> {