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
|
add_task(async function test() {
// Disable tab animations
gReduceMotionOverride = true;
let tab1 = await addTab();
let tab2 = await addTab();
let tab3 = await addTab("http://mochi.test:8888/3");
let tab4 = await addTab();
let tab5 = await addTab("http://mochi.test:8888/5");
is(gBrowser.multiSelectedTabsCount, 0, "Zero multiselected tabs");
await BrowserTestUtils.switchTab(gBrowser, tab2);
await triggerClickOn(tab1, { ctrlKey: true });
ok(tab1.multiselected, "Tab1 is multiselected");
ok(tab2.multiselected, "Tab2 is multiselected");
ok(!tab3.multiselected, "Tab3 is not multiselected");
ok(!tab4.multiselected, "Tab4 is not multiselected");
ok(!tab5.multiselected, "Tab5 is not multiselected");
is(gBrowser.multiSelectedTabsCount, 2, "Two multiselected tabs");
let newWindow = gBrowser.replaceTabsWithWindow(tab1);
// waiting for tab2 to close ensure that the newWindow is created,
// thus newWindow.gBrowser used in the second waitForCondition
// will not be undefined.
await TestUtils.waitForCondition(
() => tab2.closing,
"Wait for tab2 to close"
);
await TestUtils.waitForCondition(
() => newWindow.gBrowser.visibleTabs.length == 2,
"Wait for all two tabs to get moved to the new window"
);
let gBrowser2 = newWindow.gBrowser;
tab1 = gBrowser2.visibleTabs[0];
tab2 = gBrowser2.visibleTabs[1];
if (gBrowser.selectedTab != tab3) {
await BrowserTestUtils.switchTab(gBrowser, tab3);
}
await triggerClickOn(tab5, { ctrlKey: true });
ok(tab1.multiselected, "Tab1 is multiselected");
ok(tab2.multiselected, "Tab2 is multiselected");
ok(tab3.multiselected, "Tab3 is multiselected");
ok(!tab4.multiselected, "Tab4 is not multiselected");
ok(tab5.multiselected, "Tab5 is multiselected");
await dragAndDrop(tab3, tab1, false, newWindow);
await TestUtils.waitForCondition(
() => gBrowser2.visibleTabs.length == 4,
"Moved tab3 and tab5 to second window"
);
tab3 = gBrowser2.visibleTabs[1];
tab5 = gBrowser2.visibleTabs[2];
await BrowserTestUtils.waitForCondition(
() => getUrl(tab3) == "http://mochi.test:8888/3"
);
await BrowserTestUtils.waitForCondition(
() => getUrl(tab5) == "http://mochi.test:8888/5"
);
ok(true, "Tab3 and tab5 are duplicated succesfully");
BrowserTestUtils.closeWindow(newWindow);
BrowserTestUtils.removeTab(tab4);
});
add_task(async function test_laziness() {
const params = { createLazyBrowser: true };
const url = "http://mochi.test:8888/?";
const tab1 = BrowserTestUtils.addTab(gBrowser, url + "1", params);
const tab2 = BrowserTestUtils.addTab(gBrowser, url + "2");
const tab3 = BrowserTestUtils.addTab(gBrowser, url + "3", params);
await BrowserTestUtils.switchTab(gBrowser, tab2);
await triggerClickOn(tab1, { ctrlKey: true });
await triggerClickOn(tab3, { ctrlKey: true });
is(gBrowser.selectedTab, tab2, "Tab2 is selected");
is(gBrowser.multiSelectedTabsCount, 3, "Three multiselected tabs");
ok(tab1.multiselected, "Tab1 is multiselected");
ok(tab2.multiselected, "Tab2 is multiselected");
ok(tab3.multiselected, "Tab3 is multiselected");
ok(!tab1.linkedPanel, "Tab1 is lazy");
ok(tab2.linkedPanel, "Tab2 is not lazy");
ok(!tab3.linkedPanel, "Tab3 is lazy");
const win2 = await BrowserTestUtils.openNewBrowserWindow();
const gBrowser2 = win2.gBrowser;
is(gBrowser2.tabs.length, 1, "Second window has 1 tab");
await dragAndDrop(tab2, gBrowser2.tabs[0], false, win2);
await TestUtils.waitForCondition(
() => gBrowser2.tabs.length == 4,
"Moved tabs into second window"
);
is(gBrowser2.tabs[1].linkedBrowser.currentURI.spec, url + "1");
is(gBrowser2.tabs[2].linkedBrowser.currentURI.spec, url + "2");
is(gBrowser2.tabs[3].linkedBrowser.currentURI.spec, url + "3");
is(gBrowser2.selectedTab, gBrowser2.tabs[2], "Tab2 is selected");
is(gBrowser2.multiSelectedTabsCount, 3, "Three multiselected tabs");
ok(gBrowser2.tabs[1].multiselected, "Tab1 is multiselected");
ok(gBrowser2.tabs[2].multiselected, "Tab2 is multiselected");
ok(gBrowser2.tabs[3].multiselected, "Tab3 is multiselected");
ok(!gBrowser2.tabs[1].linkedPanel, "Tab1 is lazy");
ok(gBrowser2.tabs[2].linkedPanel, "Tab2 is not lazy");
ok(!gBrowser2.tabs[3].linkedPanel, "Tab3 is lazy");
await BrowserTestUtils.closeWindow(win2);
});
|