File: test_restore_loading_tab.py

package info (click to toggle)
firefox 141.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,588 kB
  • sloc: cpp: 7,426,506; javascript: 6,367,238; ansic: 3,707,351; python: 1,369,002; xml: 623,983; asm: 426,918; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (69 lines) | stat: -rw-r--r-- 2,144 bytes parent folder | download | duplicates (3)
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
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from urllib.parse import quote

from marionette_harness import MarionetteTestCase, WindowManagerMixin


def inline(doc):
    return f"data:text/html;charset=utf-8,{quote(doc)}"


class TestRestoreLoadingPage(WindowManagerMixin, MarionetteTestCase):
    def setUp(self):
        super(TestRestoreLoadingPage, self).setUp()
        self.delayed_page = self.marionette.absolute_url("slow")

    def do_test(self, html, is_restoring_expected):
        self.marionette.navigate(inline(html.format(self.delayed_page)))
        link = self.marionette.find_element("id", "link")
        link.click()

        self.marionette.restart(in_app=True)

        with self.marionette.using_context("chrome"):
            urls = self.marionette.execute_script(
                "return gBrowser.tabs.map(t => t.linkedBrowser.currentURI.spec);"
            )

        if is_restoring_expected:
            self.assertEqual(
                len(urls),
                2,
                msg="The tab opened should be restored",
            )
            self.assertEqual(
                urls[1],
                self.delayed_page,
                msg="The tab restored is correct",
            )
        else:
            self.assertEqual(
                len(urls),
                1,
                msg="The tab opened should not be restored",
            )

        self.close_all_tabs()

    def test_target_blank(self):
        self.do_test("<a id='link' href='{}' target='_blank'>click</a>", True)

    def test_target_other(self):
        self.do_test("<a id='link' href='{}' target='other'>click</a>", False)

    def test_by_script(self):
        self.do_test(
            """
            <a id='link'>click</a>
            <script>
            document.getElementById("link").addEventListener(
                "click",
                () => window.open("{}", "_blank");
            )
            </script>
            """,
            False,
        )