Commit 0cc25f26 authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

FormDataEvent: Make the feature "experimental".

also, add test cases.

Bug: 825684
Change-Id: I0ce0bbbd5b4c218042f934264ab4de288eba9dae
Reviewed-on: https://chromium-review.googlesource.com/997316Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548692}
parent 5cb9113e
...@@ -100,6 +100,7 @@ PASS oldChildWindow.onemptied is newChildWindow.onemptied ...@@ -100,6 +100,7 @@ PASS oldChildWindow.onemptied is newChildWindow.onemptied
PASS oldChildWindow.onended is newChildWindow.onended PASS oldChildWindow.onended is newChildWindow.onended
PASS oldChildWindow.onerror is newChildWindow.onerror PASS oldChildWindow.onerror is newChildWindow.onerror
PASS oldChildWindow.onfocus is newChildWindow.onfocus PASS oldChildWindow.onfocus is newChildWindow.onfocus
PASS oldChildWindow.onformdata is newChildWindow.onformdata
PASS oldChildWindow.onfreeze is newChildWindow.onfreeze PASS oldChildWindow.onfreeze is newChildWindow.onfreeze
PASS oldChildWindow.ongotpointercapture is newChildWindow.ongotpointercapture PASS oldChildWindow.ongotpointercapture is newChildWindow.ongotpointercapture
PASS oldChildWindow.onhashchange is newChildWindow.onhashchange PASS oldChildWindow.onhashchange is newChildWindow.onhashchange
......
...@@ -68,6 +68,7 @@ PASS childWindow.onemptied is null ...@@ -68,6 +68,7 @@ PASS childWindow.onemptied is null
PASS childWindow.onended is null PASS childWindow.onended is null
PASS childWindow.onerror is null PASS childWindow.onerror is null
PASS childWindow.onfocus is null PASS childWindow.onfocus is null
PASS childWindow.onformdata is null
PASS childWindow.onfreeze is null PASS childWindow.onfreeze is null
PASS childWindow.ongotpointercapture is null PASS childWindow.ongotpointercapture is null
PASS childWindow.onhashchange is null PASS childWindow.onhashchange is null
......
...@@ -68,6 +68,7 @@ PASS childWindow.onemptied is null ...@@ -68,6 +68,7 @@ PASS childWindow.onemptied is null
PASS childWindow.onended is null PASS childWindow.onended is null
PASS childWindow.onerror is null PASS childWindow.onerror is null
PASS childWindow.onfocus is null PASS childWindow.onfocus is null
PASS childWindow.onformdata is null
PASS childWindow.onfreeze is null PASS childWindow.onfreeze is null
PASS childWindow.ongotpointercapture is null PASS childWindow.ongotpointercapture is null
PASS childWindow.onhashchange is null PASS childWindow.onhashchange is null
......
<!DOCTYPE html>
<body>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<div id="container"></div>
<iframe name="t"></iframe>
<script>
let container = document.querySelector('#container');
function populateForm(opt_contentHtml) {
if (!opt_contentHtml)
opt_contentHtml = '';
container.innerHTML = `<form action="about:blank" target="t">${opt_contentHtml}</form>`;
return container.firstChild;
}
test(() => {
let didCallHandler = false;
let form = populateForm('<input type=submit>');
form.addEventListener('formdata', (e) => {
didCallHandler = true;
});
document.querySelector('input[type=submit]').click();
assert_true(didCallHandler);
}, 'Register a "formdata" event handler via addEventListener().');
test(() => {
let didCallHandler = false;
let form = populateForm();
form.onformdata = (e) => {
didCallHandler = true;
};
form.submit();
assert_true(didCallHandler);
}, 'Register a "formdata" event handler via onformdata IDL attribute.');
let didCallAttributeHandler = false;
test(() => {
let form = populateForm();
form.setAttribute('onformdata', 'didCallAttributeHandler = true;');
new FormData(form);
assert_true(didCallAttributeHandler);
}, 'Register a "formdata" event handler via onformdata content attribute.');
test(() => {
let didCallHandler = false;
let wasCancelable = true;
let form = populateForm();
document.addEventListener('formdata', (e) => {
didCallHandler = true;
wasCancelable = e.cancelable;
});
new FormData(form);
assert_true(didCallHandler);
assert_false(wasCancelable);
}, '"formdata" event bubbles, and is not cancelable.');
test(() => {
let didCallHandler = false;
let form = populateForm();
container.innerHTML = '<div></div>';
let orphanRoot = container.firstChild;
orphanRoot.appendChild(form);
orphanRoot.remove();
orphanRoot.addEventListener('formdata', (e) => {
didCallHandler = true;
});
new FormData(form);
assert_true(didCallHandler);
}, '"formdata" event bubbles in an orphan tree.');
test(() => {
let wasFormDataEmpty1 = false;
let wasFormDataEmpty2 = true;
let form = populateForm('<input name=n1 value=v1>');
form.addEventListener('formdata', (e) => {
wasFormDataEmpty1 = e.formData.entries().next().done;
e.formData.append('h1', 'vh1');
e.formData.append('h2', 'vh2');
});
form.addEventListener('formdata', (e) => {
if (e.formData.get('h1') == 'vh1' && e.formData.get('h2') == 'vh2')
wasFormDataEmpty2 = false;
});
form.submit();
assert_true(wasFormDataEmpty1);
assert_false(wasFormDataEmpty2);
}, '"formData" IDL attribute should be empty in the first event handler, ' +
'and the second handler can read entries set by the first handler.');
test(() => {
let form = populateForm('<input name=n1 value=v1>');
form.addEventListener('formdata', (e) => {
e.formData.append('h1', 'vh1');
});
let formData = new FormData(form);
assert_equals(formData.get('h1'), 'vh1');
assert_equals(formData.get('n1'), 'v1');
}, 'Newly created FormData contains entries added to "formData" IDL attribute of FormDataEvent.');
let t1 = async_test('Entries added to "formData" IDL attribute should be submitted.');
t1.step(() => {
let form = populateForm('<input name=n1 value=v1>');
form.addEventListener('formdata', (e) => {
e.formData.append('h1', 'vh1');
});
let iframe = document.querySelector('iframe');
iframe.onload = t1.step_func_done(() => {
assert_true(iframe.contentWindow.location.search.indexOf('h1=vh1&n1=v1') != -1);
});
container.firstChild.submit();
});
let t2 = async_test('Form submission is aborted if "formData" event handler disconnects the form.');
t2.step(() => {
let form = document.createElement('form');
document.body.appendChild(form);
form.action = 'about:blank';
form.target = 'iframe2';
form.onformdata = (e) => { e.target.remove(); };
form.innerHTML = '<input name=n1 value=v1>';
let iframe = document.createElement('iframe');
iframe.setAttribute('name', 'iframe2');
let wasLoaded = false;
document.body.appendChild(iframe);
// Request to load "about:blank", and immediately submit the form to
// the same frame. If the form submission is aborted, the first request
// will be completed.
iframe.onload = t2.step_func_done(() => {
wasLoaded = true;
assert_true(iframe.contentWindow.location.search.indexOf('n1=v1') == -1);
});
iframe.src = 'about:blank';
assert_false(wasLoaded, 'Make sure the first loading is ongoing.');
form.submit();
});
</script>
</body>
...@@ -147,6 +147,7 @@ namespace http://www.w3.org/1999/xhtml ...@@ -147,6 +147,7 @@ namespace http://www.w3.org/1999/xhtml
property onended property onended
property onerror property onerror
property onfocus property onfocus
property onformdata
property onfullscreenchange property onfullscreenchange
property onfullscreenerror property onfullscreenerror
property ongotpointercapture property ongotpointercapture
...@@ -1250,6 +1251,7 @@ namespace http://www.w3.org/2000/svg ...@@ -1250,6 +1251,7 @@ namespace http://www.w3.org/2000/svg
property onended property onended
property onerror property onerror
property onfocus property onfocus
property onformdata
property onfullscreenchange property onfullscreenchange
property onfullscreenerror property onfullscreenerror
property ongotpointercapture property ongotpointercapture
......
...@@ -1516,6 +1516,7 @@ interface Document : Node ...@@ -1516,6 +1516,7 @@ interface Document : Node
getter onended getter onended
getter onerror getter onerror
getter onfocus getter onfocus
getter onformdata
getter onfullscreenchange getter onfullscreenchange
getter onfullscreenerror getter onfullscreenerror
getter ongotpointercapture getter ongotpointercapture
...@@ -1702,6 +1703,7 @@ interface Document : Node ...@@ -1702,6 +1703,7 @@ interface Document : Node
setter onended setter onended
setter onerror setter onerror
setter onfocus setter onfocus
setter onformdata
setter onfullscreenchange setter onfullscreenchange
setter onfullscreenerror setter onfullscreenerror
setter ongotpointercapture setter ongotpointercapture
...@@ -2081,6 +2083,10 @@ interface FormData ...@@ -2081,6 +2083,10 @@ interface FormData
method keys method keys
method set method set
method values method values
interface FormDataEvent : Event
attribute @@toStringTag
getter formData
method constructor
interface GainNode : AudioNode interface GainNode : AudioNode
attribute @@toStringTag attribute @@toStringTag
getter gain getter gain
...@@ -2457,6 +2463,7 @@ interface HTMLElement : Element ...@@ -2457,6 +2463,7 @@ interface HTMLElement : Element
getter onended getter onended
getter onerror getter onerror
getter onfocus getter onfocus
getter onformdata
getter ongotpointercapture getter ongotpointercapture
getter oninput getter oninput
getter oninvalid getter oninvalid
...@@ -2552,6 +2559,7 @@ interface HTMLElement : Element ...@@ -2552,6 +2559,7 @@ interface HTMLElement : Element
setter onended setter onended
setter onerror setter onerror
setter onfocus setter onfocus
setter onformdata
setter ongotpointercapture setter ongotpointercapture
setter oninput setter oninput
setter oninvalid setter oninvalid
...@@ -5684,6 +5692,7 @@ interface SVGElement : Element ...@@ -5684,6 +5692,7 @@ interface SVGElement : Element
getter onended getter onended
getter onerror getter onerror
getter onfocus getter onfocus
getter onformdata
getter ongotpointercapture getter ongotpointercapture
getter oninput getter oninput
getter oninvalid getter oninvalid
...@@ -5766,6 +5775,7 @@ interface SVGElement : Element ...@@ -5766,6 +5775,7 @@ interface SVGElement : Element
setter onended setter onended
setter onerror setter onerror
setter onfocus setter onfocus
setter onformdata
setter ongotpointercapture setter ongotpointercapture
setter oninput setter oninput
setter oninvalid setter oninvalid
...@@ -9325,6 +9335,7 @@ interface webkitURL ...@@ -9325,6 +9335,7 @@ interface webkitURL
getter onended getter onended
getter onerror getter onerror
getter onfocus getter onfocus
getter onformdata
getter onfreeze getter onfreeze
getter ongotpointercapture getter ongotpointercapture
getter onhashchange getter onhashchange
...@@ -9510,6 +9521,7 @@ interface webkitURL ...@@ -9510,6 +9521,7 @@ interface webkitURL
setter onended setter onended
setter onerror setter onerror
setter onfocus setter onfocus
setter onformdata
setter onfreeze setter onfreeze
setter ongotpointercapture setter ongotpointercapture
setter onhashchange setter onhashchange
......
...@@ -493,6 +493,7 @@ ...@@ -493,6 +493,7 @@
}, },
{ {
name: "FormDataEvent", name: "FormDataEvent",
status: "experimental",
}, },
{ {
name: "FractionalMouseEvent", name: "FractionalMouseEvent",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment