diff options
author | David Zbarsky <dzbarsky@gmail.com> | 2015-08-08 22:05:49 -0400 |
---|---|---|
committer | David Zbarsky <dzbarsky@gmail.com> | 2015-08-09 23:19:56 -0400 |
commit | 7315b50973b3b8bdce1697f93caf7f21d9b2d401 (patch) | |
tree | 5008f02b753a669f6b393e8d59688c769f655987 /components/script/dom | |
parent | 44d93bc37aa8226554fc73bba20421a150b002de (diff) | |
download | servo-7315b50973b3b8bdce1697f93caf7f21d9b2d401.tar.gz servo-7315b50973b3b8bdce1697f93caf7f21d9b2d401.zip |
CanvasGradient#addColorStop should throw for invalid colors and offsets
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/canvasgradient.rs | 20 | ||||
-rw-r--r-- | components/script/dom/webidls/CanvasGradient.webidl | 1 |
2 files changed, 13 insertions, 8 deletions
diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs index 3068b031490..de1d428dad2 100644 --- a/components/script/dom/canvasgradient.rs +++ b/components/script/dom/canvasgradient.rs @@ -2,11 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::RGBA; use canvas_traits::{CanvasGradientStop, FillOrStrokeStyle, LinearGradientStyle, RadialGradientStyle}; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::CanvasGradientBinding; use dom::bindings::codegen::Bindings::CanvasGradientBinding::CanvasGradientMethods; +use dom::bindings::error::Error::{IndexSize, Syntax}; +use dom::bindings::error::ErrorResult; use dom::bindings::global::GlobalRef; use dom::bindings::js::Root; use dom::bindings::num::Finite; @@ -44,18 +45,21 @@ impl CanvasGradient { impl<'a> CanvasGradientMethods for &'a CanvasGradient { // https://html.spec.whatwg.org/multipage/#dom-canvasgradient-addcolorstop - fn AddColorStop(self, offset: Finite<f64>, color: String) { - let default_black = RGBA { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: 1.0, + fn AddColorStop(self, offset: Finite<f64>, color: String) -> ErrorResult { + if *offset < 0f64 || *offset > 1f64 { + return Err(IndexSize); + } + + let color = match parse_color(&color) { + Ok(color) => color, + _ => return Err(Syntax) }; self.stops.borrow_mut().push(CanvasGradientStop { offset: (*offset) as f64, - color: parse_color(&color).unwrap_or(default_black), + color: color, }); + Ok(()) } } diff --git a/components/script/dom/webidls/CanvasGradient.webidl b/components/script/dom/webidls/CanvasGradient.webidl index abe41d853dc..8db2d9a0289 100644 --- a/components/script/dom/webidls/CanvasGradient.webidl +++ b/components/script/dom/webidls/CanvasGradient.webidl @@ -7,6 +7,7 @@ // [Exposed=(Window,Worker)] interface CanvasGradient { // opaque object + [Throws] void addColorStop(double offset, DOMString color); }; |