adding macro to return string or url,

using that macro with the form action,
making the form submit process use base url,
adding tests.
This commit is contained in:
Jake Goldsborough 2016-09-20 21:16:51 -07:00
parent 1ed3521dcf
commit ce249d9384
6 changed files with 52 additions and 2 deletions

View file

@ -98,7 +98,7 @@ impl HTMLFormElementMethods for HTMLFormElement {
make_setter!(SetAcceptCharset, "accept-charset");
// https://html.spec.whatwg.org/multipage/#dom-fs-action
make_url_or_base_getter!(Action, "action");
make_string_or_document_url_getter!(Action, "action");
// https://html.spec.whatwg.org/multipage/#dom-fs-action
make_setter!(SetAction, "action");
@ -295,7 +295,7 @@ impl HTMLFormElement {
pub fn submit(&self, submit_method_flag: SubmittedFrom, submitter: FormSubmitter) {
// Step 1
let doc = document_from_node(self);
let base = doc.url();
let base = doc.base_url();
// TODO: Handle browsing contexts (Step 2, 3)
// Step 4
if submit_method_flag == SubmittedFrom::NotFromForm &&

View file

@ -123,6 +123,26 @@ macro_rules! make_url_or_base_getter(
);
);
#[macro_export]
macro_rules! make_string_or_document_url_getter(
( $attr:ident, $htmlname:tt ) => (
fn $attr(&self) -> DOMString {
use dom::bindings::inheritance::Castable;
use dom::element::Element;
use dom::node::document_from_node;
let element = self.upcast::<Element>();
let val = element.get_string_attribute(&atom!($htmlname));
if val.is_empty() {
let doc = document_from_node(self);
DOMString::from(doc.url().clone().into_string())
} else {
val
}
}
);
);
#[macro_export]
macro_rules! make_enumerated_getter(
( $attr:ident, $htmlname:tt, $default:expr, $(($choices: pat))|+) => (

View file

@ -37715,6 +37715,12 @@
"deleted_reftests": {},
"items": {
"testharness": {
"html/semantics/forms/the-form-element/form-action-url.html": [
{
"path": "html/semantics/forms/the-form-element/form-action-url.html",
"url": "/html/semantics/forms/the-form-element/form-action-url.html"
}
],
"html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html": [
{
"path": "html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html",

View file

@ -0,0 +1,9 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test("Submit a form from an iframe with a base url");
var success = function() { t.done(); };
</script>
<iframe src="resources/form-action-url-iframe.html">

View file

@ -0,0 +1,11 @@
<!doctype html>
<base href="target/"></base>
<form action="form-action-url-target.html">
<input type="submit" value="Submit" />
</form>
<script>
var form = document.getElementsByTagName("form")[0];
form.submit();
</script>

View file

@ -0,0 +1,4 @@
<!doctype html>
<script>
window.parent.success();
</script>