blob: a5cdae6b6511514767bc60ae325d33ec6548a27d [file] [log] [blame]
<!DOCTYPE html>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
<script src="../fast/forms/resources/mock-file-chooser.js"></script>
<script src="../fast/forms/resources/common.js"></script>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<div id="container"></div>
<input type=file multiple>
<script>
class MyControl extends HTMLElement {
static get formAssociated() { return true; }
constructor() {
super();
this.internals_ = this.attachInternals();
this.value_ = '';
}
get value() {
return this.value_;
}
set value(fileOrString) {
this.internals_.setFormValue(fileOrString);
this.value_ = fileOrString;
}
setValues(nameValues) {
const formData = new FormData();
for (let p of nameValues) {
formData.append(p[0], p[1]);
}
this.internals_.setFormValue(this.value_, formData);
}
}
customElements.define('my-control', MyControl);
function selectFilePromise(paths) {
return new Promise((resolve, reject) => {
mockFileChooserFactory.setPathsToBeChosen(paths);
const file = document.querySelector('input[type=file]');
file.addEventListener('change', () => { resolve(file) });
clickElement(file);
setTimeout(reject, 3000);
});
}
function submitPromise(t) {
return new Promise((resolve, reject) => {
const iframe = document.querySelector('iframe');
iframe.onload = () => resolve(iframe.contentWindow.location.search);
iframe.onerror = () => reject();
document.querySelector('form').submit();
});
}
promise_test(async t => {
$('container').innerHTML = '<form action="../external/wpt/common/blank.html" target="if1">' +
'<input name=name-pd1 value="value-pd1">' +
'<my-control name=ce1></my-control>' +
'</form>' +
'<iframe name="if1"></iframe>';
const fileInput = await selectFilePromise(['../OWNERS']);
document.querySelector('my-control').value = fileInput.files[0];
return submitPromise(t).then(query => {
assert_equals(query, '?name-pd1=value-pd1&ce1=OWNERS');
});
}, 'Single value - A file value');
promise_test(async t => {
$('container').innerHTML = '<form action="../external/wpt/common/blank.html" target="if1">' +
'<my-control name=ce1></my-control>' +
'</form>' +
'<iframe name="if1"></iframe>';
const fileInput = await selectFilePromise(['../OWNERS', '../PRESUBMIT.py']);
document.querySelector('my-control').setValues(
[['sub1', fileInput.files[0]], ['sub2', fileInput.files[1]]]);
return submitPromise(t).then(query => {
assert_equals(query, '?sub1=OWNERS&sub2=PRESUBMIT.py');
});
}, 'Multiple values - file values');
</script>