File: browser_491577.js

package info (click to toggle)
icedove 1%3A45.8.0-3~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 1,488,584 kB
  • ctags: 1,068,813
  • sloc: cpp: 4,801,496; ansic: 1,929,291; python: 379,296; java: 252,018; xml: 173,182; asm: 146,741; sh: 89,229; makefile: 23,462; perl: 16,380; objc: 4,088; yacc: 1,841; lex: 1,222; exp: 499; php: 437; lisp: 228; awk: 152; pascal: 116; sed: 51; ruby: 47; csh: 31; ada: 16
file content (120 lines) | stat: -rw-r--r-- 3,972 bytes parent folder | download | duplicates (5)
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
/* 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/. */

function test() {
  /** Test for Bug 491577 **/

  // test setup
  waitForExplicitFinish();

  const REMEMBER = Date.now(), FORGET = Math.random();
  let test_state = {
    windows: [ { tabs: [{ entries: [{ url: "http://example.com/" }] }], selected: 1 } ],
    _closedWindows : [
      // _closedWindows[0]
      {
        tabs: [
          { entries: [{ url: "http://example.com/", title: "title" }] },
          { entries: [{ url: "http://mozilla.org/", title: "title" }] }
        ],
        selected: 2,
        title: FORGET,
        _closedTabs: []
      },
      // _closedWindows[1]
      {
        tabs: [
         { entries: [{ url: "http://mozilla.org/", title: "title" }] },
         { entries: [{ url: "http://example.com/", title: "title" }] },
         { entries: [{ url: "http://mozilla.org/", title: "title" }] },
        ],
        selected: 3,
        title: REMEMBER,
        _closedTabs: []
      },
      // _closedWindows[2]
      {
        tabs: [
          { entries: [{ url: "http://example.com/", title: "title" }] }
        ],
        selected: 1,
        title: FORGET,
        _closedTabs: [
          {
            state: {
              entries: [
                { url: "http://mozilla.org/", title: "title" },
                { url: "http://mozilla.org/again", title: "title" }
              ]
            },
            pos: 1,
            title: "title"
          },
          {
            state: {
              entries: [
                { url: "http://example.com", title: "title" }
              ]
            },
            title: "title"
          }
        ]
      }
    ]
  };
  let remember_count = 1;

  function countByTitle(aClosedWindowList, aTitle) {
    return aClosedWindowList.filter(aData => aData.title == aTitle).length;
  }

  function testForError(aFunction) {
    try {
      aFunction();
      return false;
    }
    catch (ex) {
      return ex.name == "NS_ERROR_ILLEGAL_VALUE";
    }
  }

  // open a window and add the above closed window list
  let newWin = openDialog(location, "_blank", "chrome,all,dialog=no");
  promiseWindowLoaded(newWin).then(() => {
    gPrefService.setIntPref("browser.sessionstore.max_windows_undo",
                            test_state._closedWindows.length);
    ss.setWindowState(newWin, JSON.stringify(test_state), true);

    let closedWindows = JSON.parse(ss.getClosedWindowData());
    is(closedWindows.length, test_state._closedWindows.length,
       "Closed window list has the expected length");
    is(countByTitle(closedWindows, FORGET),
       test_state._closedWindows.length - remember_count,
       "The correct amount of windows are to be forgotten");
    is(countByTitle(closedWindows, REMEMBER), remember_count,
       "Everything is set up.");

    // all of the following calls with illegal arguments should throw NS_ERROR_ILLEGAL_VALUE
    ok(testForError(() => ss.forgetClosedWindow(-1)),
       "Invalid window for forgetClosedWindow throws");
    ok(testForError(() => ss.forgetClosedWindow(test_state._closedWindows.length + 1)),
       "Invalid window for forgetClosedWindow throws");

    // Remove third window, then first window
    ss.forgetClosedWindow(2);
    ss.forgetClosedWindow(null);

    closedWindows = JSON.parse(ss.getClosedWindowData());
    is(closedWindows.length, remember_count,
       "The correct amount of windows were removed");
    is(countByTitle(closedWindows, FORGET), 0,
       "All windows specifically forgotten were indeed removed");
    is(countByTitle(closedWindows, REMEMBER), remember_count,
       "... and windows not specifically forgetten weren't.");

    // clean up
    gPrefService.clearUserPref("browser.sessionstore.max_windows_undo");
    BrowserTestUtils.closeWindow(newWin).then(finish);
  });
}