gecko-dev/dom/html/test/test_bug583533.html
Masayuki Nakano 0f39d7eda7 Bug 1266437 - Drop "OS" modifier r=smaug,m_kato,karlt,Gijs
On Windows, Windows logo key was mapped to "OS" modifier, and on Linux,
it's same and the key is called "Super" and "Hyper".  That conformed to the
older UI Events spec.

However, UI Events declares that they should be mapped to "Meta" now and Chrome
handles it as the spec in Windows and Linux.  Therefore, we should align the
behavior to them.

Note that we've treated the legacy "Meta" modifier on Linux as DOM "Meta"
modifier state, and we'll keep this as-is because in Sun/Solaris keyboard
layout, they keys are mapped to the legacy "Meta".

Finally, the following check only `IsMeta()` but not `IsOS()`.  I think that
they should've checked `IsOS()` too.  Therefore, they will behave differently
in Windows and Linux.
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/base/Element.cpp#3287-3288
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3762-3764
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLInputElement.cpp#3796-3806
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/dom/html/HTMLLabelElement.cpp#127-128
* https://searchfox.org/mozilla-central/rev/9a4666e63199bd1bcfc9095f6efec3488c358458/widget/gtk/nsGtkKeyUtils.cpp#1461-1462

Note that `KEY_NAME_INDEX_OS` will be removed in the patch for bug 1232918.

Differential Revision: https://phabricator.services.mozilla.com/D183480
2023-08-07 01:03:58 +00:00

82 lines
2.2 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=583533
-->
<head>
<title>Test for Bug 583514</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=583533">Mozilla Bug 583533</a>
<p id="display"></p>
<div id="content">
<div id="e" accesskey="a">
</div>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 583533 **/
var sbs = SpecialPowers.Cc['@mozilla.org/intl/stringbundle;1'].
getService(SpecialPowers.Ci.nsIStringBundleService);
var bundle = sbs.createBundle("chrome://global-platform/locale/platformKeys.properties");
var shiftText = bundle.GetStringFromName("VK_SHIFT");
var altText = bundle.GetStringFromName("VK_ALT");
var controlText = bundle.GetStringFromName("VK_CONTROL");
var metaText = bundle.GetStringFromName("VK_COMMAND_OR_WIN");
var separatorText = bundle.GetStringFromName("MODIFIER_SEPARATOR");
var modifier = SpecialPowers.getIntPref("ui.key.contentAccess");
var isShift;
var isAlt;
var isControl;
var isMeta;
is(modifier < 16 && modifier >= 0, true, "Modifier in range");
// There are no consts for the mask of this prefs.
if (modifier & 8) {
isMeta = true;
}
if (modifier & 1) {
isShift = true;
}
if (modifier & 2) {
isControl = true;
}
if (modifier & 4) {
isAlt = true;
}
var label = "";
if (isControl)
label += controlText + separatorText;
if (isMeta)
label += metaText + separatorText;
if (isAlt)
label += altText + separatorText;
if (isShift)
label += shiftText + separatorText;
label += document.getElementById("e").accessKey;
is(label, document.getElementById("e").accessKeyLabel, "JS and C++ agree on accessKeyLabel");
/** Test for Bug 808964 **/
var div = document.createElement("div");
document.body.appendChild(div);
is(div.accessKeyLabel, "", "accessKeyLabel should be empty string");
</script>
</pre>
</body>
</html>