mirror of
https://github.com/servo/servo.git
synced 2025-07-17 20:33:40 +01:00
parent
c1cb9403a7
commit
7693b03468
9 changed files with 56 additions and 42 deletions
|
@ -36,6 +36,7 @@ use dom::domtokenlist::DOMTokenList;
|
||||||
use dom::event::Event;
|
use dom::event::Event;
|
||||||
use dom::htmlanchorelement::HTMLAnchorElement;
|
use dom::htmlanchorelement::HTMLAnchorElement;
|
||||||
use dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementLayoutHelpers};
|
use dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementLayoutHelpers};
|
||||||
|
use dom::htmlbuttonelement::HTMLButtonElement;
|
||||||
use dom::htmlcollection::HTMLCollection;
|
use dom::htmlcollection::HTMLCollection;
|
||||||
use dom::htmlfieldsetelement::HTMLFieldSetElement;
|
use dom::htmlfieldsetelement::HTMLFieldSetElement;
|
||||||
use dom::htmlfontelement::{HTMLFontElement, HTMLFontElementLayoutHelpers};
|
use dom::htmlfontelement::{HTMLFontElement, HTMLFontElementLayoutHelpers};
|
||||||
|
@ -1775,6 +1776,10 @@ impl Element {
|
||||||
let element = self.downcast::<HTMLInputElement>().unwrap();
|
let element = self.downcast::<HTMLInputElement>().unwrap();
|
||||||
Some(element as &Activatable)
|
Some(element as &Activatable)
|
||||||
},
|
},
|
||||||
|
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) => {
|
||||||
|
let element = self.downcast::<HTMLButtonElement>().unwrap();
|
||||||
|
Some(element as &Activatable)
|
||||||
|
},
|
||||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) => {
|
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) => {
|
||||||
let element = self.downcast::<HTMLAnchorElement>().unwrap();
|
let element = self.downcast::<HTMLAnchorElement>().unwrap();
|
||||||
Some(element as &Activatable)
|
Some(element as &Activatable)
|
||||||
|
|
|
@ -14,7 +14,7 @@ use dom::event::Event;
|
||||||
use dom::eventtarget::EventTarget;
|
use dom::eventtarget::EventTarget;
|
||||||
use dom::htmlelement::HTMLElement;
|
use dom::htmlelement::HTMLElement;
|
||||||
use dom::htmlfieldsetelement::HTMLFieldSetElement;
|
use dom::htmlfieldsetelement::HTMLFieldSetElement;
|
||||||
use dom::htmlformelement::{FormControl, FormSubmitter};
|
use dom::htmlformelement::{FormControl, FormSubmitter, ResetFrom};
|
||||||
use dom::htmlformelement::{SubmittedFrom, HTMLFormElement};
|
use dom::htmlformelement::{SubmittedFrom, HTMLFormElement};
|
||||||
use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
|
use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
|
||||||
use dom::nodelist::NodeList;
|
use dom::nodelist::NodeList;
|
||||||
|
@ -189,7 +189,7 @@ impl VirtualMethods for HTMLButtonElement {
|
||||||
|
|
||||||
impl FormControl for HTMLButtonElement {}
|
impl FormControl for HTMLButtonElement {}
|
||||||
|
|
||||||
impl<'a> Activatable for &'a HTMLButtonElement {
|
impl Activatable for HTMLButtonElement {
|
||||||
fn as_element(&self) -> &Element {
|
fn as_element(&self) -> &Element {
|
||||||
self.upcast()
|
self.upcast()
|
||||||
}
|
}
|
||||||
|
@ -214,19 +214,26 @@ impl<'a> Activatable for &'a HTMLButtonElement {
|
||||||
match ty {
|
match ty {
|
||||||
//https://html.spec.whatwg.org/multipage/#attr-button-type-submit-state
|
//https://html.spec.whatwg.org/multipage/#attr-button-type-submit-state
|
||||||
ButtonType::Submit => {
|
ButtonType::Submit => {
|
||||||
self.form_owner().map(|o| {
|
// TODO: is document owner fully active?
|
||||||
o.submit(SubmittedFrom::NotFromFormSubmitMethod,
|
if let Some(owner) = self.form_owner() {
|
||||||
FormSubmitter::ButtonElement(self.clone()))
|
owner.submit(SubmittedFrom::NotFromFormSubmitMethod,
|
||||||
});
|
FormSubmitter::ButtonElement(self.clone()));
|
||||||
},
|
}
|
||||||
_ => ()
|
}
|
||||||
|
ButtonType::Reset => {
|
||||||
|
// TODO: is document owner fully active?
|
||||||
|
if let Some(owner) = self.form_owner() {
|
||||||
|
owner.reset(ResetFrom::NotFromFormResetMethod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#implicit-submission
|
// https://html.spec.whatwg.org/multipage/#implicit-submission
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn implicit_submission(&self, ctrlKey: bool, shiftKey: bool, altKey: bool, metaKey: bool) {
|
fn implicit_submission(&self, ctrlKey: bool, shiftKey: bool, altKey: bool, metaKey: bool) {
|
||||||
let doc = document_from_node(*self);
|
let doc = document_from_node(self);
|
||||||
let node = doc.upcast::<Node>();
|
let node = doc.upcast::<Node>();
|
||||||
let owner = self.form_owner();
|
let owner = self.form_owner();
|
||||||
if owner.is_none() || self.upcast::<Element>().click_in_progress() {
|
if owner.is_none() || self.upcast::<Element>().click_in_progress() {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
[dispatchEvent.click.checkbox.html]
|
[dispatchEvent.click.checkbox.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
[Test Description: MouseEvent: Default action is performed when a synthetic click event is dispatched on a checkbox element]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
[dispatchEvent.click.checkbox.html]
|
[dispatchEvent.click.checkbox.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
[Test Description: MouseEvent: Default action is performed when a synthetic click event is dispatched on a checkbox element]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -30152,7 +30152,16 @@
|
||||||
},
|
},
|
||||||
"local_changes": {
|
"local_changes": {
|
||||||
"deleted": [],
|
"deleted": [],
|
||||||
"items": {},
|
"items": {
|
||||||
|
"testharness": {
|
||||||
|
"html/semantics/forms/the-button-element/button-activate.html": [
|
||||||
|
{
|
||||||
|
"path": "html/semantics/forms/the-button-element/button-activate.html",
|
||||||
|
"url": "/html/semantics/forms/the-button-element/button-activate.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"reftest_nodes": {}
|
"reftest_nodes": {}
|
||||||
},
|
},
|
||||||
"reftest_nodes": {
|
"reftest_nodes": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[button-events.html]
|
[button-events.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[The submit event must be fired when click a button in submit status]
|
[The submit event must be fired when click a button in submit status]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
[event-handler-spec-example.html]
|
|
||||||
type: testharness
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (object "[object Object\]").]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (function "function () {}").]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (object "42").]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (object "").]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (42).]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (null).]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value (undefined).]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value ("").]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Event handler listeners should be registered when they are first set to an object value.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<form action="about:blank">
|
||||||
|
<button id="submit">Submit</button>
|
||||||
|
</form>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title></title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<iframe src="button-activate-frame.html" onload="runTest()"></iframe>
|
||||||
|
<script>
|
||||||
|
var t = async_test("button activation behaviour submits form");
|
||||||
|
function runTest() {
|
||||||
|
var iframe = document.querySelector('iframe');
|
||||||
|
iframe.onload = t.step_func(function() {
|
||||||
|
t.done();
|
||||||
|
});
|
||||||
|
var doc = iframe.contentDocument;
|
||||||
|
doc.querySelector('button').click();
|
||||||
|
}
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue