| <!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> |