aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs18
-rw-r--r--components/script/dom/element.rs4
-rw-r--r--components/script/script_thread.rs3
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json2
-rw-r--r--tests/wpt/mozilla/tests/mozilla/transitionend_safety.html2
5 files changed, 10 insertions, 19 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index 93d4981d2bb..1e2278e81ca 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -9,7 +9,6 @@ use canvas_traits::canvas::{RadialGradientStyle, RepetitionStyle, byte_swap_and_
use cssparser::{Parser, ParserInput, RGBA};
use cssparser::Color as CSSColor;
use dom::bindings::cell::DomRefCell;
-use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::CSSStyleDeclarationMethods;
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding;
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasFillRule;
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasImageSource;
@@ -17,7 +16,6 @@ use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLin
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLineJoin;
use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasRenderingContext2DMethods;
use dom::bindings::codegen::Bindings::ImageDataBinding::ImageDataMethods;
-use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::codegen::UnionTypes::StringOrCanvasGradientOrCanvasPattern;
use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::inheritance::Castable;
@@ -27,6 +25,7 @@ use dom::bindings::root::{Dom, DomRoot, LayoutDom};
use dom::bindings::str::DOMString;
use dom::canvasgradient::{CanvasGradient, CanvasGradientStyle, ToFillOrStrokeStyle};
use dom::canvaspattern::CanvasPattern;
+use dom::element::Element;
use dom::globalscope::GlobalScope;
use dom::htmlcanvaselement::HTMLCanvasElement;
use dom::imagedata::ImageData;
@@ -543,18 +542,11 @@ impl CanvasRenderingContext2D {
Some(ref canvas) => &**canvas,
};
- let window = window_from_node(canvas);
+ let canvas_element = canvas.upcast::<Element>();
- let style = window.GetComputedStyle(canvas.upcast(), None);
-
- let element_not_rendered =
- !canvas.upcast::<Node>().is_in_doc() ||
- style.GetPropertyValue(DOMString::from("display")) == "none";
-
- if element_not_rendered {
- Ok(RGBA::new(0, 0, 0, 255))
- } else {
- self.parse_color(&style.GetPropertyValue(DOMString::from("color")))
+ match canvas_element.style() {
+ Some(ref s) if canvas_element.has_css_layout_box() => Ok(s.get_color().color),
+ _ => Ok(RGBA::new(0, 0, 0, 255))
}
},
_ => Err(())
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index ad050be3dda..761cf79641a 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -350,14 +350,14 @@ impl Element {
/// style will be `None` for elements in a `display: none` subtree. otherwise, the element has a
/// layout box iff it doesn't have `display: none`.
- fn style(&self) -> Option<Arc<ComputedValues>> {
+ pub fn style(&self) -> Option<Arc<ComputedValues>> {
window_from_node(self).style_query(
self.upcast::<Node>().to_trusted_node_address()
)
}
// https://drafts.csswg.org/cssom-view/#css-layout-box
- fn has_css_layout_box(&self) -> bool {
+ pub fn has_css_layout_box(&self) -> bool {
self.style()
.map_or(false, |s| !s.get_box().clone_display().is_none())
}
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index fd5fe44962f..5565f7e3fc9 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -25,7 +25,6 @@ use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId};
use devtools_traits::CSSError;
use document_loader::DocumentLoader;
use dom::bindings::cell::DomRefCell;
-use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::CSSStyleDeclarationMethods;
use dom::bindings::codegen::Bindings::DocumentBinding::{DocumentMethods, DocumentReadyState};
use dom::bindings::codegen::Bindings::EventBinding::EventInit;
use dom::bindings::codegen::Bindings::TransitionEventBinding::TransitionEventInit;
@@ -1955,7 +1954,7 @@ impl ScriptThread {
node.dirty(NodeDamage::NodeStyleDamaged);
if let Some(el) = node.downcast::<Element>() {
- if &*window.GetComputedStyle(el, None).Display() == "none" {
+ if !el.has_css_layout_box() {
return;
}
}
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 2fbfc9f584e..5d1feb1d289 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -72327,7 +72327,7 @@
"testharness"
],
"mozilla/transitionend_safety.html": [
- "778e43b049aa421bad7f86eb03d0955576a84ce0",
+ "16d238e94b2cc2843c9aee4210db43d496bb3114",
"testharness"
],
"mozilla/union.html": [
diff --git a/tests/wpt/mozilla/tests/mozilla/transitionend_safety.html b/tests/wpt/mozilla/tests/mozilla/transitionend_safety.html
index 1b38fca741d..b72766c357a 100644
--- a/tests/wpt/mozilla/tests/mozilla/transitionend_safety.html
+++ b/tests/wpt/mozilla/tests/mozilla/transitionend_safety.html
@@ -11,7 +11,6 @@
elem.textContent = 'hi there';
elem.style.transition = 'color 10ms';
elem.style.color = 'black';
- elem.ontransitionend = t.step_func_done();
t.step_timeout(function() {
elem.style.color = 'red';
@@ -20,6 +19,7 @@
document.body.removeChild(elem);
elem = null;
window.gc();
+ t.step_timeout(t.step_func_done(), 100);
}, 0);
}, 0);
}, 'Nodes cannot be GCed while a CSS transition is in effect.');