Bug 1451576 - Set dir=auto on [Browse...] button of <input type=file>
The label of the button comes from the UI; it's direction should be independent
of the web content directionality. As there is no access to :-moz-locale-dir()
selectors in HTML, we'll have to rely on auto-direction here.
The alternative (or, addition to the fix here) would be adding the value of
the dir attribute to HtmlForm.properties, allowing the localizers to set
the directionality explicitly. I however don't know if that's necessary.
MozReview-Commit-ID: 5NXeLtxLXVH
--- a/layout/forms/nsFileControlFrame.cpp
+++ b/layout/forms/nsFileControlFrame.cpp
@@ -81,16 +81,18 @@ MakeAnonButton(nsIDocument* aDoc, const
const nsAString& aAccessKey)
{
RefPtr<Element> button = aDoc->CreateHTMLElement(nsGkAtoms::button);
// NOTE: SetIsNativeAnonymousRoot() has to be called before setting any
// attribute.
button->SetIsNativeAnonymousRoot();
button->SetAttr(kNameSpaceID_None, nsGkAtoms::type,
NS_LITERAL_STRING("button"), false);
+ button->SetAttr(kNameSpaceID_None, nsGkAtoms::dir,
+ NS_LITERAL_STRING("auto"), false);
// Set the file picking button text depending on the current locale.
nsAutoString buttonTxt;
nsContentUtils::GetLocalizedString(nsContentUtils::eFORMS_PROPERTIES,
labelKey, buttonTxt);
// Set the browse button text. It's a bit of a pain to do because we want to
// make sure we are not notifying.
--- a/layout/reftests/forms/input/file/rtl-ref.xul
+++ b/layout/reftests/forms/input/file/rtl-ref.xul
@@ -5,13 +5,13 @@
<vbox>
<html:style>
vbox {
margin-right: 8px;
}
</html:style>
<html:div dir='rtl'>
<html:div class='file' dir='rtl'>
- <html:button>Browse…</html:button><label value="No file selected."/>
+ <html:button dir='ltr'>Browse…</html:button><label value="No file selected."/>
</html:div>
</html:div>
</vbox>
</window>