Bug 1640839 - Add MakeEnumeratedRange helper for WebIDL enums. r=mccr8,media-playback-reviewers,padenot

Differential Revision: https://phabricator.services.mozilla.com/D201343
This commit is contained in:
Peter Van der Beken 2024-03-02 07:50:24 +00:00
Родитель 394646db56
Коммит 4fed5f1271
6 изменённых файлов: 21 добавлений и 9 удалений

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

@ -2075,8 +2075,8 @@ unsigned ChromeUtils::AliveUtilityProcesses(const GlobalObject&) {
void ChromeUtils::GetAllPossibleUtilityActorNames(GlobalObject& aGlobal,
nsTArray<nsCString>& aNames) {
aNames.Clear();
for (size_t i = 0; i < WebIDLUtilityActorNameValues::Count; ++i) {
auto idlName = static_cast<UtilityActorName>(i);
for (UtilityActorName idlName :
MakeWebIDLEnumeratedRange<WebIDLUtilityActorName>()) {
aNames.AppendElement(GetEnumString(idlName));
}
}

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

@ -24,6 +24,8 @@
#include "mozilla/Array.h"
#include "mozilla/Assertions.h"
#include "mozilla/DeferredFinalize.h"
#include "mozilla/EnumTypeTraits.h"
#include "mozilla/EnumeratedRange.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/dom/BindingCallContext.h"
#include "mozilla/dom/BindingDeclarations.h"
@ -1429,6 +1431,12 @@ inline const nsCString& GetEnumString(Enum stringId) {
stringId)];
}
template <typename Enum>
constexpr mozilla::detail::EnumeratedRange<Enum> MakeWebIDLEnumeratedRange() {
return MakeInclusiveEnumeratedRange(ContiguousEnumValues<Enum>::min,
ContiguousEnumValues<Enum>::max);
}
inline nsWrapperCache* GetWrapperCache(const ParentObject& aParentObject) {
return aParentObject.mWrapperCache;
}
@ -3279,6 +3287,7 @@ already_AddRefed<Promise> CreateRejectedPromiseFromThrownException(
} // namespace binding_detail
} // namespace dom
} // namespace mozilla
#endif /* mozilla_dom_BindingUtils_h__ */

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

@ -945,6 +945,11 @@ the right validation for WebIDL enums. It uses a
`mozilla::MaxContinuousEnumValue` that is generated for every WebIDL enum to
implement the validation.
`mozilla::dom::MakeWebIDLEnumeratedRange` is a templated helper function in
[`BindingUtils.h`](https://searchfox.org/mozilla-central/source/dom/bindings/BindingUtils.h)
and exported to `mozilla/dom/BindingUtils.h` that can be used to create a
`mozilla::EnumeratedRange` for a WebIDL enum.
#### Callback function types
Callback functions are represented as an object, inheriting from

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

@ -401,9 +401,8 @@ CopyableTArray<MediaSessionAction> MediaStatusManager::GetSupportedActions()
MediaSessionInfo info =
mMediaSessionInfoMap.Get(*mActiveMediaSessionContextId);
const uint8_t actionNums = uint8_t(MediaSessionAction::EndGuard_);
for (uint8_t actionValue = 0; actionValue < actionNums; actionValue++) {
MediaSessionAction action = ConvertToMediaSessionAction(actionValue);
for (MediaSessionAction action :
MakeWebIDLEnumeratedRange<MediaSessionAction>()) {
if (info.IsActionSupported(action)) {
supportedActions.AppendElement(action);
}

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

@ -169,7 +169,7 @@ Adapter::Adapter(Instance* const aParent, WebGPUChild* const aBridge,
auto ret = std::unordered_map<ffi::WGPUFeatures, dom::GPUFeatureName>{};
for (const auto feature :
MakeEnumeratedRange(dom::GPUFeatureName::EndGuard_)) {
dom::MakeWebIDLEnumeratedRange<dom::GPUFeatureName>()) {
const auto bitForFeature = ToWGPUFeatures(feature);
if (!bitForFeature) {
// There are some features that don't have bits.

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

@ -291,9 +291,8 @@ WebTask* WebTaskScheduler::GetNextTask() const {
return nullptr;
}
for (uint32_t priority = static_cast<uint32_t>(TaskPriority::User_blocking);
priority < static_cast<uint32_t>(TaskPriority::EndGuard_); ++priority) {
if (auto queues = allQueues.Lookup(priority)) {
for (TaskPriority priority : MakeWebIDLEnumeratedRange<TaskPriority>()) {
if (auto queues = allQueues.Lookup(UnderlyingValue(priority))) {
WebTaskQueue* oldestQueue = nullptr;
MOZ_ASSERT(!queues.Data().IsEmpty());
for (auto& webTaskQueue : queues.Data()) {