diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-01-09 14:27:45 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-01-09 14:27:45 -0700 |
commit | ebb702ab943a6baa971d316bf0e7a773d84b3710 (patch) | |
tree | e211c52b29010e400be2b5c4182d376796f1ace2 /components/script | |
parent | 21fd1120c3c18a8ccc3d95f8d53b5f2875c77c97 (diff) | |
parent | e8036accd6b4c2d5c3e94ca7e304492cc2ec23af (diff) | |
download | servo-ebb702ab943a6baa971d316bf0e7a773d84b3710.tar.gz servo-ebb702ab943a6baa971d316bf0e7a773d84b3710.zip |
auto merge of #4596 : jimrhoskins/servo/sandbox-tokenlist, r=jdm
Fixes #3758
Store the sandbox attribute of HTMLIFrameElement as a TokenList
internally. Use .tokens() to iterate over the tokens instead of
splitting on the string value.
The external interface for sandbox remains a DOMString, which will need
to be fixed when DOMSettableTokenList is implemented (#1717).
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index aeb480bdfbf..683c18c678a 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -167,7 +167,7 @@ impl<'a> HTMLIFrameElementMethods for JSRef<'a, HTMLIFrameElement> { fn SetSandbox(self, sandbox: DOMString) { let element: JSRef<Element> = ElementCast::from_ref(self); - element.set_string_attribute(&atom!("sandbox"), sandbox); + element.set_tokenlist_attribute(&atom!("sandbox"), sandbox); } fn GetContentWindow(self) -> Option<Temporary<Window>> { @@ -217,16 +217,18 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLIFrameElement> { match attr.local_name() { &atom!("sandbox") => { let mut modes = SandboxAllowance::AllowNothing as u8; - for word in attr.value().as_slice().split(' ') { - modes |= match word.to_ascii_lower().as_slice() { - "allow-same-origin" => SandboxAllowance::AllowSameOrigin, - "allow-forms" => SandboxAllowance::AllowForms, - "allow-pointer-lock" => SandboxAllowance::AllowPointerLock, - "allow-popups" => SandboxAllowance::AllowPopups, - "allow-scripts" => SandboxAllowance::AllowScripts, - "allow-top-navigation" => SandboxAllowance::AllowTopNavigation, - _ => SandboxAllowance::AllowNothing - } as u8; + if let Some(ref tokens) = attr.value().tokens() { + for token in tokens.iter() { + modes |= match token.as_slice().to_ascii_lower().as_slice() { + "allow-same-origin" => SandboxAllowance::AllowSameOrigin, + "allow-forms" => SandboxAllowance::AllowForms, + "allow-pointer-lock" => SandboxAllowance::AllowPointerLock, + "allow-popups" => SandboxAllowance::AllowPopups, + "allow-scripts" => SandboxAllowance::AllowScripts, + "allow-top-navigation" => SandboxAllowance::AllowTopNavigation, + _ => SandboxAllowance::AllowNothing + } as u8; + } } self.sandbox.set(Some(modes)); }, |