<!DOCTYPE html>
<html>
<head>
<title>Shadow DOM Test: A_08_02_03</title>
<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#inertness-of-html-elements-in-a-shadow-tree">
<meta name="assert" content="HTML Elements in shadow trees: form should not submit elements in shadow tree">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../../../html/resources/common.js"></script>
</head>
<body>
<div id="log"></div>
<script>
var A_08_02_03_T01 = async_test('A_08_02_03_T01');

var checkIframeContent = A_08_02_03_T01.step_func(function () {
    // remember value to check before cleaning the context (it'll destroy the iframe)
    var valueToCheck = A_08_02_03_T01.iframe.contentWindow.document.URL;
    cleanContext(A_08_02_03_T01.ctx);

    assert_true(valueToCheck.indexOf('inp1=value1') > 0,
        'html form should submit all of its fields');

    // Form data crossing shadow boundary should not be submitted.
    // https://github.com/w3c/webcomponents/issues/65
    assert_equals(valueToCheck.indexOf('inp2=value2'), -1,
        'html form should not submit fields in the shadow tree');

    A_08_02_03_T01.done();
});


A_08_02_03_T01.step(function () {

    A_08_02_03_T01.ctx = newContext();
    var d = newRenderedHTMLDocument(A_08_02_03_T01.ctx);

    //create iframe
    var iframe = document.createElement('iframe');
    A_08_02_03_T01.iframe = iframe;

    iframe.src = '../../resources/blank.html';
    iframe.setAttribute('name', 'targetIframe');

    // create form
    var form = d.createElement('form');
    form.setAttribute('target', 'targetIframe');
    form.setAttribute('method', 'GET');
    form.setAttribute('action', '../../resources/blank.html');
    d.body.appendChild(form);

    // create shadow root
    var root = d.createElement('div');
    form.appendChild(root);
    var s = root.attachShadow({mode: 'open'});

    var input1 = d.createElement('input');
    input1.setAttribute('type', 'text');
    input1.setAttribute('name', 'inp1');
    input1.setAttribute('value', 'value1');
    form.appendChild(input1);

    var input2 = d.createElement('input');
    input2.setAttribute('type', 'text');
    input2.setAttribute('name', 'inp2');
    input2.setAttribute('value', 'value2');
    s.appendChild(input2);

    // Wait for the first 'load' event for blank.html.
    iframe.onload = A_08_02_03_T01.step_func(() => {
        // Wait for the second 'load' event for the submission.
        iframe.onload = checkIframeContent;
        form.submit();
    });
    d.body.appendChild(iframe);
});
</script>
</body>
</html>
