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