diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-08-24 12:47:53 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-24 12:47:53 -0500 |
commit | 1370fa5e3b38f3000c0b1439177cc7b7b81d380e (patch) | |
tree | 6237566538677cdcf5e07e8a6b0c9a72c298867c /components/script/dom/testbindingiterable.rs | |
parent | 77af4e26cee2f9c02c1da9085d243aad32c667c6 (diff) | |
parent | 86a0c45f87f28ef44f996e943aaab1e6c0206443 (diff) | |
download | servo-1370fa5e3b38f3000c0b1439177cc7b7b81d380e.tar.gz servo-1370fa5e3b38f3000c0b1439177cc7b7b81d380e.zip |
Auto merge of #12819 - jdm:iterable2, r=nox
Support pair and value iterable WebIDL bindings
The actual iterator implementation and JSAPI calls related to setting up the interface are ported directly from Gecko's Codegen.py, IterableIterator.h, and IterableIterator.webidl. The changes to support multiple interfaces in one file are required because the internal iterator interface the parser generates gets associated with the original interface's WebIDL file. It seemed like a good time to address #571 in that case.
---
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #12628 and fix #571.
- [X] There are tests for these changes
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12819)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/testbindingiterable.rs')
-rw-r--r-- | components/script/dom/testbindingiterable.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/components/script/dom/testbindingiterable.rs b/components/script/dom/testbindingiterable.rs new file mode 100644 index 00000000000..1e462a98531 --- /dev/null +++ b/components/script/dom/testbindingiterable.rs @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +// check-tidy: no specs after this line + +use dom::bindings::cell::DOMRefCell; +use dom::bindings::codegen::Bindings::TestBindingIterableBinding::{self, TestBindingIterableMethods}; +use dom::bindings::error::Fallible; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::Root; +use dom::bindings::reflector::{Reflector, reflect_dom_object}; +use dom::bindings::str::DOMString; + +#[dom_struct] +pub struct TestBindingIterable { + reflector: Reflector, + vals: DOMRefCell<Vec<DOMString>>, +} + +impl TestBindingIterable { + fn new(global: GlobalRef) -> Root<TestBindingIterable> { + reflect_dom_object(box TestBindingIterable { + reflector: Reflector::new(), + vals: DOMRefCell::new(vec![]), + }, global, TestBindingIterableBinding::Wrap) + } + + pub fn Constructor(global: GlobalRef) -> Fallible<Root<TestBindingIterable>> { + Ok(TestBindingIterable::new(global)) + } +} + +impl TestBindingIterableMethods for TestBindingIterable { + fn Add(&self, v: DOMString) { self.vals.borrow_mut().push(v); } + fn Length(&self) -> u32 { self.vals.borrow().len() as u32 } + fn GetItem(&self, n: u32) -> DOMString { self.vals.borrow().get(n as usize).unwrap().clone() } + fn IndexedGetter(&self, n: u32, found: &mut bool) -> DOMString { + let s = self.GetItem(n); + *found = true; + s + } +} |