|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 /* Tests: |
|
5 * verify that the visibleLabel attribute works |
|
6 * verify the TabLabelModified event works for both existing and new tabs |
|
7 */ |
|
8 |
|
9 function test() { |
|
10 waitForExplicitFinish(); |
|
11 registerCleanupFunction(function() { |
|
12 gBrowser.removeCurrentTab({animate: false}); |
|
13 }); |
|
14 let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank", |
|
15 {skipAnimation: true}); |
|
16 tab.linkedBrowser.addEventListener("load", function onLoad(event) { |
|
17 event.currentTarget.removeEventListener("load", onLoad, true); |
|
18 executeSoon(afterLoad); |
|
19 }, true); |
|
20 } |
|
21 |
|
22 function afterLoad() { |
|
23 let tab = gBrowser.selectedTab; |
|
24 let xulLabel = document.getAnonymousElementByAttribute(tab, "anonid", |
|
25 "tab-label"); |
|
26 // Verify we're starting out on the right foot |
|
27 is(tab.label, "New Tab", "Initial tab label is default"); |
|
28 is(xulLabel.value, "New Tab", "Label element is default"); |
|
29 is(tab.visibleLabel, "New Tab", "visibleLabel is default"); |
|
30 |
|
31 // Check that a normal label setting works correctly |
|
32 tab.label = "Hello, world!"; |
|
33 is(tab.label, "Hello, world!", "tab label attribute set via tab.label"); |
|
34 is(xulLabel.value, "Hello, world!", "xul:label set via tab.label"); |
|
35 is(tab.visibleLabel, "Hello, world!", "visibleLabel set via tab.label"); |
|
36 |
|
37 // Check that setting visibleLabel only affects the label element |
|
38 tab.visibleLabel = "Goodnight, Irene"; |
|
39 is(tab.label, "Hello, world!", "Tab.label unaffected by visibleLabel setter"); |
|
40 is(xulLabel.value, "Goodnight, Irene", |
|
41 "xul:label set by visibleLabel setter"); |
|
42 is(tab.visibleLabel, "Goodnight, Irene", |
|
43 "visibleLabel attribute set by visibleLabel setter"); |
|
44 |
|
45 // Check that setting the label property hits everything |
|
46 tab.label = "One more label"; |
|
47 is(tab.label, "One more label", |
|
48 "Tab label set via label property after diverging from visibleLabel"); |
|
49 is(xulLabel.value, "One more label", |
|
50 "xul:label set via label property after diverging from visibleLabel"); |
|
51 is(tab.visibleLabel, "One more label", |
|
52 "visibleLabel set from label property after diverging from visibleLabel"); |
|
53 |
|
54 tab.addEventListener("TabLabelModified", overrideTabLabel, true); |
|
55 tab.label = "This won't be the visibleLabel"; |
|
56 } |
|
57 |
|
58 function overrideTabLabel(aEvent) { |
|
59 aEvent.target.removeEventListener("TabLabelModified", overrideTabLabel, true); |
|
60 aEvent.preventDefault(); |
|
61 aEvent.stopPropagation(); |
|
62 aEvent.target.visibleLabel = "Handler set this as the visible label"; |
|
63 executeSoon(checkTabLabelModified); |
|
64 } |
|
65 |
|
66 function checkTabLabelModified() { |
|
67 let tab = gBrowser.selectedTab; |
|
68 let xulLabel = document.getAnonymousElementByAttribute(tab, "anonid", |
|
69 "tab-label"); |
|
70 |
|
71 is(tab.label, "This won't be the visibleLabel", |
|
72 "Tab label set via label property that triggered event"); |
|
73 is(xulLabel.value, "Handler set this as the visible label", |
|
74 "xul:label set by TabLabelModified handler"); |
|
75 is(tab.visibleLabel, "Handler set this as the visible label", |
|
76 "visibleLabel set by TabLabelModified handler"); |
|
77 |
|
78 gBrowser.removeCurrentTab({animate: false}); |
|
79 executeSoon(checkTabLabelModifiedOnNewTab); |
|
80 } |
|
81 |
|
82 function checkTabLabelModifiedOnNewTab() { |
|
83 gBrowser.tabContainer.addEventListener("TabLabelModified", |
|
84 handleTabLabelModifiedOnNewTab, true); |
|
85 let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank", |
|
86 {skipAnimation: true}); |
|
87 } |
|
88 |
|
89 function handleTabLabelModifiedOnNewTab(aEvent) { |
|
90 gBrowser.tabContainer.removeEventListener("TabLabelModified", |
|
91 handleTabLabelModifiedOnNewTab, true); |
|
92 ok(true, "Event received from new tab default being set"); |
|
93 executeSoon(finish); |
|
94 } |