summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_formdata_max_size.js
blob: 00b49985e32e5dedd8b25269334ab47f089839cd (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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const URL =
  "http://mochi.test:8888/browser/browser/components/" +
  "sessionstore/test/browser_formdata_sample.html";

const SHORT_VALUE = "abc";
const LONG_VALUE = "abcdef";

add_task(async function test_form_limit() {
  await SpecialPowers.pushPrefEnv({
    set: [
      // "browser.sessionstore.dom_form_limit" limits the length of values in
      // forms to 5. Here we have that SHORT_VALUE is less than 5 and
      // LONG_VALUE is greater than 5.
      ["browser.sessionstore.dom_form_limit", 5],
      ["browser.sessionstore.debug.no_auto_updates", true],
    ],
  });

  await BrowserTestUtils.withNewTab({ gBrowser, url: URL }, async browser => {
    await setPropertyOfFormField(browser, "#txt", "value", SHORT_VALUE);
    await TabStateFlusher.flush(browser);

    let tab = gBrowser.getTabForBrowser(browser);
    let state = JSON.parse(ss.getTabState(tab));
    is(
      state.formdata.id.txt,
      SHORT_VALUE,
      "values shorter than browser.sessionstore.dom_form_limit is ok."
    );

    await setPropertyOfFormField(browser, "#txt", "value", LONG_VALUE);
    await TabStateFlusher.flush(browser);

    state = JSON.parse(ss.getTabState(tab));
    ok(
      !state?.formdata?.id?.txt,
      "values shorter than browser.sessionstore.dom_form_limit isn't ok."
    );
  });

  await SpecialPowers.popPrefEnv();
});

add_task(async function test_form_max_limit() {
  await SpecialPowers.pushPrefEnv({
    set: [
      // "browser.sessionstore.dom_form_max_limit" limits the total length
      // of values AND length id/xpath collected from a form. Here we have
      // that SHORT_VALUE + 'txt' is less than 7 and LONG_VALUE + 'txt' is
      // greater than 7.
      ["browser.sessionstore.dom_form_max_limit", 7],
      ["browser.sessionstore.debug.no_auto_updates", true],
    ],
  });

  await BrowserTestUtils.withNewTab({ gBrowser, url: URL }, async browser => {
    await setPropertyOfFormField(browser, "#txt", "value", SHORT_VALUE);
    await TabStateFlusher.flush(browser);

    let tab = gBrowser.getTabForBrowser(browser);
    let state = JSON.parse(ss.getTabState(tab));
    is(
      state.formdata.id.txt,
      SHORT_VALUE,
      "total length shorter than browser.sessionstore.dom_form_max_limit is ok."
    );

    await setPropertyOfFormField(browser, "#txt", "value", LONG_VALUE);
    await TabStateFlusher.flush(browser);

    state = JSON.parse(ss.getTabState(tab));
    is(
      state.formdata.id.txt,
      SHORT_VALUE,
      "total length shorter than browser.sessionstore.dom_form_max_limit isn't ok."
    );
  });

  await SpecialPowers.popPrefEnv();
});

add_task(async function test_form_max_limit_many_fields() {
  await SpecialPowers.pushPrefEnv({
    set: [
      // "browser.sessionstore.dom_form_max_limit" limits the total length
      // of values AND length id/xpath collected from a form. Here we have
      // that SHORT_VALUE * 2 + 'text' + 'txt' is less than 15 and LONG_VALUE
      // + SHORT_VALUE + 'text' + 'txt' is greater than 15.
      ["browser.sessionstore.dom_form_max_limit", 15],
      ["browser.sessionstore.debug.no_auto_updates", true],
    ],
  });

  await BrowserTestUtils.withNewTab({ gBrowser, url: URL }, async browser => {
    await SpecialPowers.spawn(browser, [], () => {
      let element = content.document.createElement("input");
      element.id = "text";
      element.type = "text";
      content.document.body.appendChild(element);
    });

    await setPropertyOfFormField(browser, "#txt", "value", SHORT_VALUE);
    await setPropertyOfFormField(browser, "#text", "value", SHORT_VALUE);
    await TabStateFlusher.flush(browser);

    let tab = gBrowser.getTabForBrowser(browser);
    let state = JSON.parse(ss.getTabState(tab));
    is(
      state.formdata.id.txt,
      SHORT_VALUE,
      "total length shorter than browser.sessionstore.dom_form_max_limit is ok."
    );

    await setPropertyOfFormField(browser, "#txt", "value", LONG_VALUE);
    await TabStateFlusher.flush(browser);

    state = JSON.parse(ss.getTabState(tab));
    is(
      state.formdata.id.txt,
      SHORT_VALUE,
      "total length shorter than browser.sessionstore.dom_form_max_limit isn't ok."
    );
  });

  await SpecialPowers.popPrefEnv();
});