Bug 1279991 - Use [Func=] for EventTarget.mozSystemGroup. r=peterv

MozReview-Commit-ID: B5pMVCUuss9

--HG--
extra : transplant_source : %F7%8A4%2B%B5d_%D8%3AR%19%C4%21%D7%D6%8C%AE%82%FE%1B
This commit is contained in:
Xidorn Quan 2016-06-20 15:49:11 +10:00
Родитель 45a4f56d95
Коммит 4cbe3b8fd3
4 изменённых файлов: 24 добавлений и 28 удалений

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

@ -55,12 +55,6 @@
namespace mozilla {
namespace dom {
namespace workers {
extern bool IsCurrentThreadRunningChromeWorker();
} // namespace workers
} // namespace dom
using namespace dom;
using namespace hal;
@ -1344,24 +1338,6 @@ EventListenerManager::Disconnect()
RemoveAllListeners();
}
static EventListenerFlags
GetEventListenerFlagsFromOptions(const EventListenerOptions& aOptions,
bool aIsMainThread)
{
EventListenerFlags flags;
flags.mCapture = aOptions.mCapture;
if (aOptions.mMozSystemGroup) {
if (aIsMainThread) {
JSContext* cx = nsContentUtils::GetCurrentJSContext();
MOZ_ASSERT(cx, "Not being called from JS?");
flags.mInSystemGroup = IsChromeOrXBL(cx, nullptr);
} else {
flags.mInSystemGroup = workers::IsCurrentThreadRunningChromeWorker();
}
}
return flags;
}
void
EventListenerManager::AddEventListener(
const nsAString& aType,
@ -1387,7 +1363,8 @@ EventListenerManager::AddEventListener(
flags.mCapture = aOptions.GetAsBoolean();
} else {
const auto& options = aOptions.GetAsAddEventListenerOptions();
flags = GetEventListenerFlagsFromOptions(options, mIsMainThreadELM);
flags.mCapture = options.mCapture;
flags.mInSystemGroup = options.mMozSystemGroup;
flags.mPassive = options.mPassive;
}
flags.mAllowUntrustedEvents = aWantsUntrusted;
@ -1416,7 +1393,8 @@ EventListenerManager::RemoveEventListener(
flags.mCapture = aOptions.GetAsBoolean();
} else {
const auto& options = aOptions.GetAsEventListenerOptions();
flags = GetEventListenerFlagsFromOptions(options, mIsMainThreadELM);
flags.mCapture = options.mCapture;
flags.mInSystemGroup = options.mMozSystemGroup;
}
RemoveEventListenerByType(aListenerHolder, aType, flags);
}

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

@ -13,8 +13,8 @@
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. */
/* Setting to true make the listener be added to the system group. */
[Func="ThreadSafeIsChromeOrXBL"]
boolean mozSystemGroup = false;
};

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

@ -1307,5 +1307,18 @@ IsChromeOrXBL(JSContext* cx, JSObject* /* unused */)
return AccessCheck::isChrome(c) || IsContentXBLScope(c) || !AllowContentXBLScope(c);
}
namespace workers {
extern bool IsCurrentThreadRunningChromeWorker();
} // namespace workers
bool
ThreadSafeIsChromeOrXBL(JSContext* cx, JSObject* obj)
{
if (NS_IsMainThread()) {
return IsChromeOrXBL(cx, obj);
}
return workers::IsCurrentThreadRunningChromeWorker();
}
} // namespace dom
} // namespace mozilla

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

@ -618,6 +618,11 @@ namespace dom {
*/
bool IsChromeOrXBL(JSContext* cx, JSObject* /* unused */);
/**
* Same as IsChromeOrXBL but can be used in worker threads as well.
*/
bool ThreadSafeIsChromeOrXBL(JSContext* cx, JSObject* obj);
} // namespace dom
} // namespace mozilla