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:
Xidorn Quan 2016-05-25 09:45:56 +10:00
Родитель de009af3c8
Коммит 310cb4cee4
2 изменённых файлов: 25 добавлений и 5 удалений

Просмотреть файл

@ -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 {