aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorDavid Zbarsky <dzbarsky@gmail.com>2015-08-08 22:05:49 -0400
committerDavid Zbarsky <dzbarsky@gmail.com>2015-08-09 23:19:56 -0400
commit7315b50973b3b8bdce1697f93caf7f21d9b2d401 (patch)
tree5008f02b753a669f6b393e8d59688c769f655987 /components/script/dom
parent44d93bc37aa8226554fc73bba20421a150b002de (diff)
downloadservo-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.rs20
-rw-r--r--components/script/dom/webidls/CanvasGradient.webidl1
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);
};