зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1274520 part 1 - Add mozSystemGroup to EventListenerOptions for chrome and XBL to add listener in the system group. r=smaug
MozReview-Commit-ID: 6DdLMEazWIC --HG-- extra : source : 14d0e29812aa13bc308b56f4e6d85454929b8b9d
This commit is contained in:
Родитель
de009af3c8
Коммит
310cb4cee4
|
@ -1337,6 +1337,19 @@ EventListenerManager::Disconnect()
|
|||
RemoveAllListeners();
|
||||
}
|
||||
|
||||
static EventListenerFlags
|
||||
GetEventListenerFlagsFromOptions(const EventListenerOptions& aOptions)
|
||||
{
|
||||
EventListenerFlags flags;
|
||||
flags.mCapture = aOptions.mCapture;
|
||||
if (aOptions.mMozSystemGroup) {
|
||||
JSContext* cx = nsContentUtils::GetCurrentJSContext();
|
||||
MOZ_ASSERT(cx, "Not being called from JS?");
|
||||
flags.mInSystemGroup = IsChromeOrXBL(cx, nullptr);
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
void
|
||||
EventListenerManager::AddEventListener(
|
||||
const nsAString& aType,
|
||||
|
@ -1361,8 +1374,9 @@ EventListenerManager::AddEventListener(
|
|||
if (aOptions.IsBoolean()) {
|
||||
flags.mCapture = aOptions.GetAsBoolean();
|
||||
} else {
|
||||
flags.mCapture = aOptions.GetAsAddEventListenerOptions().mCapture;
|
||||
flags.mPassive = aOptions.GetAsAddEventListenerOptions().mPassive;
|
||||
const auto& options = aOptions.GetAsAddEventListenerOptions();
|
||||
flags = GetEventListenerFlagsFromOptions(options);
|
||||
flags.mPassive = options.mPassive;
|
||||
}
|
||||
flags.mAllowUntrustedEvents = aWantsUntrusted;
|
||||
return AddEventListenerByType(aListenerHolder, aType, flags);
|
||||
|
@ -1386,9 +1400,12 @@ EventListenerManager::RemoveEventListener(
|
|||
const dom::EventListenerOptionsOrBoolean& aOptions)
|
||||
{
|
||||
EventListenerFlags flags;
|
||||
flags.mCapture =
|
||||
aOptions.IsBoolean() ? aOptions.GetAsBoolean()
|
||||
: aOptions.GetAsEventListenerOptions().mCapture;
|
||||
if (aOptions.IsBoolean()) {
|
||||
flags.mCapture = aOptions.GetAsBoolean();
|
||||
} else {
|
||||
const auto& options = aOptions.GetAsEventListenerOptions();
|
||||
flags = GetEventListenerFlagsFromOptions(options);
|
||||
}
|
||||
RemoveEventListenerByType(aListenerHolder, aType, flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
|
||||
dictionary EventListenerOptions {
|
||||
boolean capture = false;
|
||||
/* This is a Mozilla extension only available in Chrome and XBL.
|
||||
Setting to true make the listener be added to the system group. */
|
||||
boolean mozSystemGroup = false;
|
||||
};
|
||||
|
||||
dictionary AddEventListenerOptions : EventListenerOptions {
|
||||
|
|
Загрузка…
Ссылка в новой задаче