aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/cssstyledeclaration.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/cssstyledeclaration.rs')
-rw-r--r--components/script/dom/cssstyledeclaration.rs40
1 files changed, 29 insertions, 11 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 8eab5fcb06e..8b7228dc375 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -4,7 +4,9 @@
use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::{mod, CSSStyleDeclarationMethods};
use dom::bindings::codegen::InheritTypes::{NodeCast, ElementCast};
+use dom::bindings::error::Error;
use dom::bindings::error::ErrorResult;
+use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, OptionalRootedRootable, Temporary};
use dom::bindings::utils::{Reflector, reflect_dom_object};
@@ -24,6 +26,13 @@ use std::ascii::AsciiExt;
pub struct CSSStyleDeclaration {
reflector_: Reflector,
owner: JS<HTMLElement>,
+ readonly: bool,
+}
+
+#[deriving(PartialEq)]
+pub enum CSSModificationAccess {
+ ReadWrite,
+ Readonly
}
macro_rules! css_properties(
@@ -53,15 +62,16 @@ fn serialize_value(declaration: &PropertyDeclaration) -> DOMString {
}
impl CSSStyleDeclaration {
- pub fn new_inherited(owner: JSRef<HTMLElement>) -> CSSStyleDeclaration {
+ pub fn new_inherited(owner: JSRef<HTMLElement>, modification_access: CSSModificationAccess) -> CSSStyleDeclaration {
CSSStyleDeclaration {
reflector_: Reflector::new(),
owner: JS::from_rooted(owner),
+ readonly: modification_access == CSSModificationAccess::Readonly,
}
}
- pub fn new(global: JSRef<Window>, owner: JSRef<HTMLElement>) -> Temporary<CSSStyleDeclaration> {
- reflect_dom_object(box CSSStyleDeclaration::new_inherited(owner),
+ pub fn new(global: JSRef<Window>, owner: JSRef<HTMLElement>, modification_access: CSSModificationAccess) -> Temporary<CSSStyleDeclaration> {
+ reflect_dom_object(box CSSStyleDeclaration::new_inherited(owner, modification_access),
GlobalRef::Window(global),
CSSStyleDeclarationBinding::Wrap)
}
@@ -178,7 +188,10 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
// http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-setproperty
fn SetProperty(self, property: DOMString, value: DOMString,
priority: DOMString) -> ErrorResult {
- //TODO: disallow modifications if readonly flag is set
+ // Step 1
+ if self.readonly {
+ return Err(Error::NoModificationAllowedError);
+ }
// Step 2
let property = property.as_slice().to_ascii_lower();
@@ -190,8 +203,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
// Step 4
if value.is_empty() {
- self.RemoveProperty(property);
- return Ok(());
+ return self.RemoveProperty(property).map(|_| ());
}
// Step 5
@@ -234,7 +246,10 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
// http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-setpropertypriority
fn SetPropertyPriority(self, property: DOMString, priority: DOMString) -> ErrorResult {
- //TODO: disallow modifications if readonly flag is set
+ // Step 1
+ if self.readonly {
+ return Err(Error::NoModificationAllowedError);
+ }
// Step 2
let property = property.as_slice().to_ascii_lower();
@@ -276,8 +291,11 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
}
// http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-removeproperty
- fn RemoveProperty(self, property: DOMString) -> DOMString {
- //TODO: disallow modifications if readonly flag is set
+ fn RemoveProperty(self, property: DOMString) -> Fallible<DOMString> {
+ // Step 1
+ if self.readonly {
+ return Err(Error::NoModificationAllowedError);
+ }
// Step 2
let property = property.as_slice().to_ascii_lower();
@@ -290,7 +308,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
Some(longhands) => {
// Step 4
for longhand in longhands.iter() {
- self.RemoveProperty(longhand.clone());
+ try!(self.RemoveProperty(longhand.clone()));
}
}
@@ -303,7 +321,7 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
}
// Step 6
- value
+ Ok(value)
}
// http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-cssfloat