зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
45a4f56d95
Коммит
4cbe3b8fd3
|
@ -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
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче