mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Auto merge of #18059 - sendilkumarn:mito, r=nox
Using OnceCell<T> from Mitochondria <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #13402 (github issue number if applicable). <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- 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/18059) <!-- Reviewable:end -->
This commit is contained in:
commit
5c797d1943
5 changed files with 66 additions and 11 deletions
|
@ -13,7 +13,7 @@ use dom::bindings::codegen::Bindings::HTMLFormElementBinding::HTMLFormElementMet
|
|||
use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding::HTMLTextAreaElementMethods;
|
||||
use dom::bindings::inheritance::{Castable, ElementTypeId, HTMLElementTypeId, NodeTypeId};
|
||||
use dom::bindings::js::{JS, MutNullableJS, Root, RootedReference};
|
||||
use dom::bindings::js::{JS, OnceCellJS, Root, RootedReference};
|
||||
use dom::bindings::refcounted::Trusted;
|
||||
use dom::bindings::reflector::DomObject;
|
||||
use dom::bindings::str::DOMString;
|
||||
|
@ -64,7 +64,7 @@ pub struct GenerationId(u32);
|
|||
pub struct HTMLFormElement {
|
||||
htmlelement: HTMLElement,
|
||||
marked_for_reset: Cell<bool>,
|
||||
elements: MutNullableJS<HTMLFormControlsCollection>,
|
||||
elements: OnceCellJS<HTMLFormControlsCollection>,
|
||||
generation_id: Cell<GenerationId>,
|
||||
controls: DOMRefCell<Vec<JS<Element>>>,
|
||||
}
|
||||
|
@ -166,10 +166,6 @@ impl HTMLFormElementMethods for HTMLFormElement {
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-form-elements
|
||||
fn Elements(&self) -> Root<HTMLFormControlsCollection> {
|
||||
if let Some(elements) = self.elements.get() {
|
||||
return elements;
|
||||
}
|
||||
|
||||
#[derive(HeapSizeOf, JSTraceable)]
|
||||
struct ElementsFilter {
|
||||
form: Root<HTMLFormElement>
|
||||
|
@ -220,11 +216,11 @@ impl HTMLFormElementMethods for HTMLFormElement {
|
|||
}
|
||||
}
|
||||
}
|
||||
let filter = box ElementsFilter { form: Root::from_ref(self) };
|
||||
let window = window_from_node(self);
|
||||
let elements = HTMLFormControlsCollection::new(&window, self.upcast(), filter);
|
||||
self.elements.set(Some(&elements));
|
||||
elements
|
||||
Root::from_ref(self.elements.init_once(|| {
|
||||
let filter = box ElementsFilter { form: Root::from_ref(self) };
|
||||
let window = window_from_node(self);
|
||||
HTMLFormControlsCollection::new(&window, self.upcast(), filter)
|
||||
}))
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-form-length
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue