michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /* Tests: michael@0: * verify that the visibleLabel attribute works michael@0: * verify the TabLabelModified event works for both existing and new tabs michael@0: */ michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: registerCleanupFunction(function() { michael@0: gBrowser.removeCurrentTab({animate: false}); michael@0: }); michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank", michael@0: {skipAnimation: true}); michael@0: tab.linkedBrowser.addEventListener("load", function onLoad(event) { michael@0: event.currentTarget.removeEventListener("load", onLoad, true); michael@0: executeSoon(afterLoad); michael@0: }, true); michael@0: } michael@0: michael@0: function afterLoad() { michael@0: let tab = gBrowser.selectedTab; michael@0: let xulLabel = document.getAnonymousElementByAttribute(tab, "anonid", michael@0: "tab-label"); michael@0: // Verify we're starting out on the right foot michael@0: is(tab.label, "New Tab", "Initial tab label is default"); michael@0: is(xulLabel.value, "New Tab", "Label element is default"); michael@0: is(tab.visibleLabel, "New Tab", "visibleLabel is default"); michael@0: michael@0: // Check that a normal label setting works correctly michael@0: tab.label = "Hello, world!"; michael@0: is(tab.label, "Hello, world!", "tab label attribute set via tab.label"); michael@0: is(xulLabel.value, "Hello, world!", "xul:label set via tab.label"); michael@0: is(tab.visibleLabel, "Hello, world!", "visibleLabel set via tab.label"); michael@0: michael@0: // Check that setting visibleLabel only affects the label element michael@0: tab.visibleLabel = "Goodnight, Irene"; michael@0: is(tab.label, "Hello, world!", "Tab.label unaffected by visibleLabel setter"); michael@0: is(xulLabel.value, "Goodnight, Irene", michael@0: "xul:label set by visibleLabel setter"); michael@0: is(tab.visibleLabel, "Goodnight, Irene", michael@0: "visibleLabel attribute set by visibleLabel setter"); michael@0: michael@0: // Check that setting the label property hits everything michael@0: tab.label = "One more label"; michael@0: is(tab.label, "One more label", michael@0: "Tab label set via label property after diverging from visibleLabel"); michael@0: is(xulLabel.value, "One more label", michael@0: "xul:label set via label property after diverging from visibleLabel"); michael@0: is(tab.visibleLabel, "One more label", michael@0: "visibleLabel set from label property after diverging from visibleLabel"); michael@0: michael@0: tab.addEventListener("TabLabelModified", overrideTabLabel, true); michael@0: tab.label = "This won't be the visibleLabel"; michael@0: } michael@0: michael@0: function overrideTabLabel(aEvent) { michael@0: aEvent.target.removeEventListener("TabLabelModified", overrideTabLabel, true); michael@0: aEvent.preventDefault(); michael@0: aEvent.stopPropagation(); michael@0: aEvent.target.visibleLabel = "Handler set this as the visible label"; michael@0: executeSoon(checkTabLabelModified); michael@0: } michael@0: michael@0: function checkTabLabelModified() { michael@0: let tab = gBrowser.selectedTab; michael@0: let xulLabel = document.getAnonymousElementByAttribute(tab, "anonid", michael@0: "tab-label"); michael@0: michael@0: is(tab.label, "This won't be the visibleLabel", michael@0: "Tab label set via label property that triggered event"); michael@0: is(xulLabel.value, "Handler set this as the visible label", michael@0: "xul:label set by TabLabelModified handler"); michael@0: is(tab.visibleLabel, "Handler set this as the visible label", michael@0: "visibleLabel set by TabLabelModified handler"); michael@0: michael@0: gBrowser.removeCurrentTab({animate: false}); michael@0: executeSoon(checkTabLabelModifiedOnNewTab); michael@0: } michael@0: michael@0: function checkTabLabelModifiedOnNewTab() { michael@0: gBrowser.tabContainer.addEventListener("TabLabelModified", michael@0: handleTabLabelModifiedOnNewTab, true); michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank", michael@0: {skipAnimation: true}); michael@0: } michael@0: michael@0: function handleTabLabelModifiedOnNewTab(aEvent) { michael@0: gBrowser.tabContainer.removeEventListener("TabLabelModified", michael@0: handleTabLabelModifiedOnNewTab, true); michael@0: ok(true, "Event received from new tab default being set"); michael@0: executeSoon(finish); michael@0: }