summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/mochitest/multiple_forms_shadow_DOM_all_known_variants.html
blob: 5ba547e6714e17136ffc14846abc98147302bb7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>
<!-- Any copyright is dedicated to the Public Domain.
   - http://creativecommons.org/publicdomain/zero/1.0/ -->

<!-- Page with multiple forms containing the following Shadow DOM variants: -->
<!-- Case 1: Each field (username and password) in its own shadow root -->
<!-- Case 2: Both fields (username and password) together in a shadow root with a form ancestor -->
<!-- Case 3: Form and fields (username and password) together in a shadow root -->
<span id="outer-wrapper">
</span>

<script>
  const outerWrapper = document.getElementById("outer-wrapper");
  const outerShadow = outerWrapper.attachShadow({mode: "closed"});

  function makeFormlessOuterForm(scenario) {
    const fields = ["username", "password"];
    for (let field of fields) {
      const inputEle = document.createElement("input");
      inputEle.id = `${field}-${scenario}`;
      inputEle.name = `${field}-${scenario}`;
      if (field === "password") {
        inputEle.type = field;
      }
      outerShadow.append(inputEle);
    }
    const submitButton = document.createElement("input");
    submitButton.id = `submit-${scenario}`;
    submitButton.type = "submit";
    outerShadow.append(submitButton);
  }

  function makeFormEachFieldInItsOwnShadowRoot(scenario) {
    const form = document.createElement("form");
    form.id = scenario;
    const submitButton = document.createElement("input");
    submitButton.id = `submit-${scenario}`;
    submitButton.type = "submit";
    form.append(submitButton);
    const fields = ["username", "password"];
    for (let field of fields) {
      const inputEle = document.createElement("input");
      inputEle.id = `${field}-${scenario}`;
      inputEle.name = `${field}-${scenario}`;
      if (field === "password") {
        inputEle.type = field;
      }
      const wrapper = document.createElement("span");
      wrapper.id = `wrapper-${field}-${scenario}`;
      const shadow = wrapper.attachShadow({mode: "closed"});
      shadow.append(inputEle);
      submitButton.before(wrapper);
    }
    outerShadow.append(form);
  }

  function makeFormBothFieldsTogetherInAShadowRoot(scenario) {
    const form = document.createElement("form");
    form.id = scenario;
    const submitButton = document.createElement("input");
    submitButton.id = `submit-${scenario}`;
    submitButton.type = "submit";
    form.append(submitButton);
    const wrapper = document.createElement("span");
    wrapper.id = `wrapper-${scenario}`;
    const shadow = wrapper.attachShadow({mode: "closed"});
    const fields = ["username", "password"];
    for (let field of fields) {
      const inputEle = document.createElement("input");
      inputEle.id = `${field}-${scenario}`;
      inputEle.name = `${field}-${scenario}`;
      if (field === "password") {
        inputEle.type = field;
      }
      shadow.append(inputEle);
    }
    submitButton.before(wrapper);
    outerShadow.append(form);
  }

  function makeFormFormAndFieldsTogetherInAShadowRoot(scenario) {
    const wrapper = document.createElement("span");
    wrapper.id = `wrapper-${scenario}`;
    const shadow = wrapper.attachShadow({mode: "closed"});
    const form = document.createElement("form");
    form.id = scenario;
    shadow.append(form);
    const submitButton = document.createElement("input");
    submitButton.id = `submit-${scenario}`;
    submitButton.type = "submit";
    form.append(submitButton);
    const fields = ["username", "password"];
    for (let field of fields) {
      const inputEle = document.createElement("input");
      inputEle.id = field;
      inputEle.name = field;
      if (field === "password") {
        inputEle.type = field;
      }
      submitButton.before(inputEle);
    }
    outerShadow.append(wrapper);
  }

  makeFormlessOuterForm("formless-case-2");
  makeFormEachFieldInItsOwnShadowRoot("form-case-1");
  makeFormBothFieldsTogetherInAShadowRoot("form-case-2");
  makeFormFormAndFieldsTogetherInAShadowRoot("form-case-3");
</script>

</body></html>