зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1819769 - don't dispatch a11y related events when there are no listeners, r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D175016
This commit is contained in:
Родитель
25a47ac627
Коммит
dfe44b58d5
|
@ -466,6 +466,9 @@ nsParser* nsContentUtils::sXMLFragmentParser = nullptr;
|
|||
nsIFragmentContentSink* nsContentUtils::sXMLFragmentSink = nullptr;
|
||||
bool nsContentUtils::sFragmentParsingActive = false;
|
||||
|
||||
bool nsContentUtils::sMayHaveFormCheckboxStateChangeListeners = false;
|
||||
bool nsContentUtils::sMayHaveFormRadioStateChangeListeners = false;
|
||||
|
||||
mozilla::LazyLogModule nsContentUtils::gResistFingerprintingLog(
|
||||
"nsResistFingerprinting");
|
||||
mozilla::LazyLogModule nsContentUtils::sDOMDumpLog("Dump");
|
||||
|
|
|
@ -3373,6 +3373,22 @@ class nsContentUtils {
|
|||
*/
|
||||
static void RequestGeckoTaskBurst();
|
||||
|
||||
static void SetMayHaveFormCheckboxStateChangeListeners() {
|
||||
sMayHaveFormCheckboxStateChangeListeners = true;
|
||||
}
|
||||
|
||||
static bool MayHaveFormCheckboxStateChangeListeners() {
|
||||
return sMayHaveFormCheckboxStateChangeListeners;
|
||||
}
|
||||
|
||||
static void SetMayHaveFormRadioStateChangeListeners() {
|
||||
sMayHaveFormRadioStateChangeListeners = true;
|
||||
}
|
||||
|
||||
static bool MayHaveFormRadioStateChangeListeners() {
|
||||
return sMayHaveFormRadioStateChangeListeners;
|
||||
}
|
||||
|
||||
private:
|
||||
static bool InitializeEventTable();
|
||||
|
||||
|
@ -3493,6 +3509,9 @@ class nsContentUtils {
|
|||
|
||||
static int32_t sInnerOrOuterWindowCount;
|
||||
static uint32_t sInnerOrOuterWindowSerialCounter;
|
||||
|
||||
static bool sMayHaveFormCheckboxStateChangeListeners;
|
||||
static bool sMayHaveFormRadioStateChangeListeners;
|
||||
};
|
||||
|
||||
/* static */ inline ExtContentPolicyType
|
||||
|
|
|
@ -472,6 +472,12 @@ void EventListenerManager::AddEventListenerInternal(
|
|||
window->SetHasTransitionEventListeners();
|
||||
}
|
||||
break;
|
||||
case eFormCheckboxStateChange:
|
||||
nsContentUtils::SetMayHaveFormCheckboxStateChangeListeners();
|
||||
break;
|
||||
case eFormRadioStateChange:
|
||||
nsContentUtils::SetMayHaveFormRadioStateChangeListeners();
|
||||
break;
|
||||
default:
|
||||
// XXX Use NS_ASSERTION here to print resolvedEventMessage since
|
||||
// MOZ_ASSERT can take only string literal, not pointer to
|
||||
|
|
|
@ -3728,8 +3728,10 @@ nsresult HTMLInputElement::PostHandleEvent(EventChainPostVisitor& aVisitor) {
|
|||
#ifdef ACCESSIBILITY
|
||||
// Fire an event to notify accessibility
|
||||
if (mType == FormControlType::InputCheckbox) {
|
||||
FireEventForAccessibility(this, eFormCheckboxStateChange);
|
||||
} else {
|
||||
if (nsContentUtils::MayHaveFormCheckboxStateChangeListeners()) {
|
||||
FireEventForAccessibility(this, eFormCheckboxStateChange);
|
||||
}
|
||||
} else if (nsContentUtils::MayHaveFormRadioStateChangeListeners()) {
|
||||
FireEventForAccessibility(this, eFormRadioStateChange);
|
||||
// Fire event for the previous selected radio.
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(aVisitor.mItemData);
|
||||
|
|
Загрузка…
Ссылка в новой задаче