diff --git a/accessible/src/base/nsARIAMap.cpp b/accessible/src/base/nsARIAMap.cpp
index d71a9d418d30..a91b9438f12a 100644
--- a/accessible/src/base/nsARIAMap.cpp
+++ b/accessible/src/base/nsARIAMap.cpp
@@ -713,6 +713,7 @@ nsAttributeCharacteristics nsARIAMap::gWAIUnivAttrMap[] = {
{&nsAccessibilityAtoms::aria_grabbed, ATTR_VALTOKEN },
{&nsAccessibilityAtoms::aria_haspopup, ATTR_BYPASSOBJ | ATTR_VALTOKEN },
{&nsAccessibilityAtoms::aria_invalid, ATTR_BYPASSOBJ | ATTR_VALTOKEN },
+ {&nsAccessibilityAtoms::aria_label, ATTR_BYPASSOBJ },
{&nsAccessibilityAtoms::aria_labelledby, ATTR_BYPASSOBJ },
{&nsAccessibilityAtoms::aria_level, ATTR_BYPASSOBJ }, /* handled via groupPosition */
{&nsAccessibilityAtoms::aria_live, ATTR_VALTOKEN },
diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp
index a26e9dec297f..83f4ca44485d 100644
--- a/accessible/src/base/nsAccessible.cpp
+++ b/accessible/src/base/nsAccessible.cpp
@@ -2694,16 +2694,9 @@ nsAccessible::Shutdown()
nsresult
nsAccessible::GetARIAName(nsAString& aName)
{
- // First check for label override via aria-label property
nsAutoString label;
- if (mContent->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label,
- label)) {
- label.CompressWhitespace();
- aName = label;
- return NS_OK;
- }
-
- // Second check for label override via aria-labelledby relationship
+
+ // aria-labelledby now takes precedence over aria-label
nsresult rv = nsTextEquivUtils::
GetTextEquivFromIDRefs(this, nsAccessibilityAtoms::aria_labelledby, label);
if (NS_SUCCEEDED(rv)) {
@@ -2711,7 +2704,14 @@ nsAccessible::GetARIAName(nsAString& aName)
aName = label;
}
- return rv;
+ if (label.IsEmpty() &&
+ mContent->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_label,
+ label)) {
+ label.CompressWhitespace();
+ aName = label;
+ }
+
+ return NS_OK;
}
nsresult
diff --git a/accessible/tests/mochitest/attributes/test_obj.html b/accessible/tests/mochitest/attributes/test_obj.html
index 7e541650b798..6ce6daa1c014 100644
--- a/accessible/tests/mochitest/attributes/test_obj.html
+++ b/accessible/tests/mochitest/attributes/test_obj.html
@@ -2,6 +2,7 @@
Group attributes tests
@@ -69,6 +70,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=391829
testAttrs("statusChild", {"container-live-role" : "status"}, true);
testAttrs("timerChild", {"container-live-role" : "timer"}, true);
+ // absent aria-label and aria-labelledby object attribute
+ testAbsentAttrs("label", {"label" : "foo"});
+ testAbsentAttrs("labelledby", {"labelledby" : "label"});
+
// container that has no default live attribute
testAttrs("liveGroup", {"live" : "polite"}, true);
testAttrs("liveGroupChild", {"container-live" : "polite"}, true);
@@ -93,11 +98,16 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=391829
title="Extend nsARIAMap to capture ARIA attribute characteristics">
Mozilla Bug 475006
-
- Mozilla Bug 391829
-
+
+ Mozilla Bug 391829
+
+
+ Mozilla Bug 475006
+
@@ -129,6 +139,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=391829
+
+
+
+
excuse
me
diff --git a/accessible/tests/mochitest/namerules.xml b/accessible/tests/mochitest/namerules.xml
index a0a11a821e26..b095604ee020 100644
--- a/accessible/tests/mochitest/namerules.xml
+++ b/accessible/tests/mochitest/namerules.xml
@@ -69,8 +69,8 @@
-
+
diff --git a/accessible/tests/mochitest/test_name.html b/accessible/tests/mochitest/test_name.html
index 2c2a81e7100b..222bac65837c 100644
--- a/accessible/tests/mochitest/test_name.html
+++ b/accessible/tests/mochitest/test_name.html
@@ -23,8 +23,8 @@
// Simple label provided via ARIA
testName("btn_simple_aria_label", "I am a button");
- // aria-label and aria-labelledby, expect aria-label
- testName("btn_both_aria_labels", "I am a button, two");
+ // aria-label and aria-labelledby, expect aria-labelledby
+ testName("btn_both_aria_labels", "text I am a button, two");
//////////////////////////////////////////////////////////////////////////
// aria-labelledby
@@ -207,7 +207,7 @@
+ aria-labelledby="labelledby_text btn_both_aria_labels"/>
diff --git a/accessible/tests/mochitest/test_name.xul b/accessible/tests/mochitest/test_name.xul
index a66b9990f44c..6da2d1b4b934 100644
--- a/accessible/tests/mochitest/test_name.xul
+++ b/accessible/tests/mochitest/test_name.xul
@@ -30,8 +30,8 @@
// Simple label provided via ARIA
testName("btn_simple_aria_label", "I am a button");
- // aria-label and aria-labelledby, expect aria-label
- testName("btn_both_aria_labels", "I am a button, two");
+ // aria-label and aria-labelledby, expect aria-labelledby
+ testName("btn_both_aria_labels", "text I am a button, two");
//////////////////////////////////////////////////////////////////////////
// aria-labelledby
@@ -205,9 +205,10 @@
+
+ aria-labelledby="labelledby_text btn_both_aria_labels"/>
text
diff --git a/accessible/tests/mochitest/test_name_button.html b/accessible/tests/mochitest/test_name_button.html
index 93da72746270..1ed868f71560 100644
--- a/accessible/tests/mochitest/test_name_button.html
+++ b/accessible/tests/mochitest/test_name_button.html
@@ -83,10 +83,9 @@
-
+
+ aria-label="button label">1
@@ -109,10 +108,9 @@
-
+
diff --git a/accessible/tests/mochitest/test_name_link.html b/accessible/tests/mochitest/test_name_link.html
index 3aa21a808b7d..32fec0c6c3eb 100644
--- a/accessible/tests/mochitest/test_name_link.html
+++ b/accessible/tests/mochitest/test_name_link.html
@@ -61,10 +61,9 @@
-
+
1
+ aria-label="anchor label">1
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index be5b581abd55..63b06bcd312b 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -343,6 +343,7 @@ pref("browser.tabs.opentabfor.middleclick", true);
pref("browser.tabs.loadDivertedInBackground", false);
pref("browser.tabs.loadBookmarksInBackground", false);
pref("browser.tabs.tabClipWidth", 140);
+pref("browser.tabs.animate", true);
// Where to show tab close buttons:
// 0 on active tab only
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 267e1aaab6f5..98304186bf0a 100644
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -29,6 +29,7 @@ tabbrowser {
max-width: 250px;
min-width: 100px;
width: 0;
+ -moz-transition: min-width .2s ease-out, max-width .25s ease-out;
}
.tabbrowser-tab:not([pinned]):not([fadein]) {
@@ -36,19 +37,15 @@ tabbrowser {
min-width: 1px;
}
-.tabbrowser-tab[fadein]:not([pinned]) {
- -moz-transition: min-width .2s ease-out, max-width .25s ease-out;
-}
-
.tabbrowser-tab:not([fadein]):not([pinned]) > .tab-text,
.tabbrowser-tab:not([fadein]):not([pinned]) > .tab-icon-image,
.tabbrowser-tab:not([fadein]):not([pinned]) > .tab-close-button {
opacity: 0 !important;
}
-.tabbrowser-tab[fadein] > .tab-text,
-.tabbrowser-tab[fadein] > .tab-icon-image,
-.tabbrowser-tab[fadein] > .tab-close-button {
+.tabbrowser-tab > .tab-text,
+.tabbrowser-tab > .tab-icon-image,
+.tabbrowser-tab > .tab-close-button {
-moz-transition: opacity .25s;
}
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index c1dc69935b8b..18394b6973b8 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -2051,7 +2051,7 @@ function BrowserCloseTabOrWindow() {
#endif
// If the current tab is the last one, this will close the window.
- gBrowser.removeCurrentTab();
+ gBrowser.removeCurrentTab({animate: true});
}
function BrowserTryToCloseWindow()
diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul
index 4c969ad5a46c..4c5f57b5aa72 100644
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -457,9 +457,23 @@
label="&brandShortName;"
style="-moz-user-focus: ignore;">