Skip to content

Commit

Permalink
Split out IPC EnumTraits and Persistence EnumTraits so we can start p…
Browse files Browse the repository at this point in the history
…orting the IPC usages to the new serialization format

https://bugs.webkit.org/show_bug.cgi?id=248874
<rdar://problem/103120664>

Reviewed by Alex Christensen.

Split out IPC EnumTraits and Persistence EnumTraits so we can start
porting the IPC usages to the new serialization format.

* Source/WTF/wtf/EnumTraits.h:
(WTF::isValidEnumForPersistence):
* Source/WTF/wtf/Forward.h:
* Source/WTF/wtf/persistence/PersistentDecoder.h:
(WTF::Persistence::Decoder::operator>>):
* Source/WebCore/Modules/fetch/FetchHeaders.h:
* Source/WebCore/loader/FetchOptions.h:
* Source/WebCore/platform/ReferrerPolicy.h:
* Source/WebCore/platform/WebCorePersistentCoders.cpp:
* Source/WebCore/platform/generic/KeyedEncoderGeneric.h:
* Source/WebCore/platform/network/ResourceLoadPriority.h:
* Source/WebCore/platform/network/ResourceRequestBase.h:
* Source/WebCore/platform/network/ResourceResponseBase.h:

Canonical link: https://commits.webkit.org/257729@main
  • Loading branch information
gavin-apple authored and achristensen07 committed Dec 12, 2022
1 parent 34ebbe8 commit e865417
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 3 deletions.
14 changes: 14 additions & 0 deletions Source/WTF/wtf/EnumTraits.h
Expand Up @@ -30,6 +30,7 @@
namespace WTF {

template<typename> struct EnumTraits;
template<typename> struct EnumTraitsForPersistence;

template<typename E, E...> struct EnumValues;

Expand Down Expand Up @@ -63,6 +64,19 @@ constexpr bool isValidEnum(bool t)
return !t || t == 1;
}

template<typename E, typename = std::enable_if_t<!std::is_same_v<std::underlying_type_t<E>, bool>>>
bool isValidEnumForPersistence(std::underlying_type_t<E> t)
{
return EnumValueChecker<std::underlying_type_t<E>, typename EnumTraitsForPersistence<E>::values>::isValidEnum(t);
}

template<typename E, typename = std::enable_if_t<std::is_same_v<std::underlying_type_t<E>, bool>>>
constexpr bool isValidEnumForPersistence(bool t)
{
return !t || t == 1;
}


template<typename E>
constexpr auto enumToUnderlyingType(E e)
{
Expand Down
1 change: 1 addition & 0 deletions Source/WTF/wtf/Forward.h
Expand Up @@ -100,6 +100,7 @@ template<typename T, size_t inlineCapacity> struct DefaultHash<Vector<T, inlineC

template<typename> struct RawValueTraits;
template<typename> struct EnumTraits;
template<typename> struct EnumTraitsForPersistence;
template<typename E, E...> struct EnumValues;
template<typename> struct HashTraits;

Expand Down
2 changes: 1 addition & 1 deletion Source/WTF/wtf/persistence/PersistentDecoder.h
Expand Up @@ -75,7 +75,7 @@ class Decoder {
*this >> value;
if (!value)
return *this;
if (!isValidEnum<E>(*value))
if (!isValidEnumForPersistence<E>(*value))
return *this;
result = static_cast<E>(*value);
return *this;
Expand Down
11 changes: 11 additions & 0 deletions Source/WebCore/Modules/fetch/FetchHeaders.h
Expand Up @@ -130,4 +130,15 @@ template<> struct EnumTraits<WebCore::FetchHeaders::Guard> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::FetchHeaders::Guard> {
using values = EnumValues<
WebCore::FetchHeaders::Guard,
WebCore::FetchHeaders::Guard::None,
WebCore::FetchHeaders::Guard::Immutable,
WebCore::FetchHeaders::Guard::Request,
WebCore::FetchHeaders::Guard::RequestNoCors,
WebCore::FetchHeaders::Guard::Response
>;
};

}
68 changes: 68 additions & 0 deletions Source/WebCore/loader/FetchOptions.h
Expand Up @@ -117,6 +117,74 @@ inline bool isScriptLikeDestination(FetchOptions::Destination destination)

namespace WTF {

template<> struct EnumTraitsForPersistence<WebCore::FetchOptions::Destination> {
using values = EnumValues<
WebCore::FetchOptions::Destination,
WebCore::FetchOptions::Destination::EmptyString,
WebCore::FetchOptions::Destination::Audio,
WebCore::FetchOptions::Destination::Audioworklet,
WebCore::FetchOptions::Destination::Document,
WebCore::FetchOptions::Destination::Embed,
WebCore::FetchOptions::Destination::Font,
WebCore::FetchOptions::Destination::Image,
WebCore::FetchOptions::Destination::Iframe,
WebCore::FetchOptions::Destination::Manifest,
WebCore::FetchOptions::Destination::Model,
WebCore::FetchOptions::Destination::Object,
WebCore::FetchOptions::Destination::Paintworklet,
WebCore::FetchOptions::Destination::Report,
WebCore::FetchOptions::Destination::Script,
WebCore::FetchOptions::Destination::Serviceworker,
WebCore::FetchOptions::Destination::Sharedworker,
WebCore::FetchOptions::Destination::Style,
WebCore::FetchOptions::Destination::Track,
WebCore::FetchOptions::Destination::Video,
WebCore::FetchOptions::Destination::Worker,
WebCore::FetchOptions::Destination::Xslt
>;
};

template<> struct EnumTraitsForPersistence<WebCore::FetchOptions::Mode> {
using values = EnumValues<
WebCore::FetchOptions::Mode,
WebCore::FetchOptions::Mode::Navigate,
WebCore::FetchOptions::Mode::SameOrigin,
WebCore::FetchOptions::Mode::NoCors,
WebCore::FetchOptions::Mode::Cors
>;
};


template<> struct EnumTraitsForPersistence<WebCore::FetchOptions::Credentials> {
using values = EnumValues<
WebCore::FetchOptions::Credentials,
WebCore::FetchOptions::Credentials::Omit,
WebCore::FetchOptions::Credentials::SameOrigin,
WebCore::FetchOptions::Credentials::Include
>;
};

template<> struct EnumTraitsForPersistence<WebCore::FetchOptions::Cache> {
using values = EnumValues<
WebCore::FetchOptions::Cache,
WebCore::FetchOptions::Cache::Default,
WebCore::FetchOptions::Cache::NoStore,
WebCore::FetchOptions::Cache::Reload,
WebCore::FetchOptions::Cache::NoCache,
WebCore::FetchOptions::Cache::ForceCache,
WebCore::FetchOptions::Cache::OnlyIfCached
>;
};

template<> struct EnumTraitsForPersistence<WebCore::FetchOptions::Redirect> {
using values = EnumValues<
WebCore::FetchOptions::Redirect,
WebCore::FetchOptions::Redirect::Follow,
WebCore::FetchOptions::Redirect::Error,
WebCore::FetchOptions::Redirect::Manual
>;
};

template<> struct EnumTraits<WebCore::FetchOptions::Destination> {
using values = EnumValues<
WebCore::FetchOptions::Destination,
Expand Down
15 changes: 15 additions & 0 deletions Source/WebCore/platform/ReferrerPolicy.h
Expand Up @@ -73,4 +73,19 @@ template<> struct EnumTraits<WebCore::ReferrerPolicy> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ReferrerPolicy> {
using values = EnumValues<
WebCore::ReferrerPolicy,
WebCore::ReferrerPolicy::EmptyString,
WebCore::ReferrerPolicy::NoReferrer,
WebCore::ReferrerPolicy::NoReferrerWhenDowngrade,
WebCore::ReferrerPolicy::SameOrigin,
WebCore::ReferrerPolicy::Origin,
WebCore::ReferrerPolicy::StrictOrigin,
WebCore::ReferrerPolicy::OriginWhenCrossOrigin,
WebCore::ReferrerPolicy::StrictOriginWhenCrossOrigin,
WebCore::ReferrerPolicy::UnsafeUrl
>;
};

}
2 changes: 1 addition & 1 deletion Source/WebCore/platform/WebCorePersistentCoders.cpp
Expand Up @@ -294,7 +294,7 @@ enum class LegacyCertificateInfoType {
Trust,
};

template<> struct EnumTraits<LegacyCertificateInfoType> {
template<> struct EnumTraitsForPersistence<LegacyCertificateInfoType> {
using values = EnumValues<
LegacyCertificateInfoType,
LegacyCertificateInfoType::None,
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/platform/generic/KeyedEncoderGeneric.h
Expand Up @@ -85,7 +85,7 @@ class KeyedEncoderGeneric final : public KeyedEncoder {
} // namespace WebCore

namespace WTF {
template<> struct EnumTraits<WebCore::KeyedEncoderGeneric::Type> {
template<> struct EnumTraitsForPersistence<WebCore::KeyedEncoderGeneric::Type> {
using values = EnumValues<
WebCore::KeyedEncoderGeneric::Type,
WebCore::KeyedEncoderGeneric::Type::Bytes,
Expand Down
11 changes: 11 additions & 0 deletions Source/WebCore/platform/network/ResourceLoadPriority.h
Expand Up @@ -70,4 +70,15 @@ template<> struct EnumTraits<WebCore::ResourceLoadPriority> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceLoadPriority> {
using values = EnumValues<
WebCore::ResourceLoadPriority,
WebCore::ResourceLoadPriority::VeryLow,
WebCore::ResourceLoadPriority::Low,
WebCore::ResourceLoadPriority::Medium,
WebCore::ResourceLoadPriority::High,
WebCore::ResourceLoadPriority::VeryHigh
>;
};

} // namespace WTF
36 changes: 36 additions & 0 deletions Source/WebCore/platform/network/ResourceRequestBase.h
Expand Up @@ -334,6 +334,18 @@ template<> struct EnumTraits<WebCore::ResourceRequestCachePolicy> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceRequestCachePolicy> {
using values = EnumValues<
WebCore::ResourceRequestCachePolicy,
WebCore::ResourceRequestCachePolicy::UseProtocolCachePolicy,
WebCore::ResourceRequestCachePolicy::ReloadIgnoringCacheData,
WebCore::ResourceRequestCachePolicy::ReturnCacheDataElseLoad,
WebCore::ResourceRequestCachePolicy::ReturnCacheDataDontLoad,
WebCore::ResourceRequestCachePolicy::DoNotUseAnyCache,
WebCore::ResourceRequestCachePolicy::RefreshAnyCacheData
>;
};

template<> struct EnumTraits<WebCore::ResourceRequestBase::SameSiteDisposition> {
using values = EnumValues<
WebCore::ResourceRequestBase::SameSiteDisposition,
Expand All @@ -343,6 +355,15 @@ template<> struct EnumTraits<WebCore::ResourceRequestBase::SameSiteDisposition>
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceRequestBase::SameSiteDisposition> {
using values = EnumValues<
WebCore::ResourceRequestBase::SameSiteDisposition,
WebCore::ResourceRequestBase::SameSiteDisposition::Unspecified,
WebCore::ResourceRequestBase::SameSiteDisposition::SameSite,
WebCore::ResourceRequestBase::SameSiteDisposition::CrossSite
>;
};

template<> struct EnumTraits<WebCore::ResourceRequestRequester> {
using values = EnumValues<
WebCore::ResourceRequestRequester,
Expand All @@ -358,4 +379,19 @@ template<> struct EnumTraits<WebCore::ResourceRequestRequester> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceRequestRequester> {
using values = EnumValues<
WebCore::ResourceRequestRequester,
WebCore::ResourceRequestRequester::Unspecified,
WebCore::ResourceRequestRequester::Main,
WebCore::ResourceRequestRequester::XHR,
WebCore::ResourceRequestRequester::Fetch,
WebCore::ResourceRequestRequester::Media,
WebCore::ResourceRequestRequester::ImportScripts,
WebCore::ResourceRequestRequester::Ping,
WebCore::ResourceRequestRequester::Beacon,
WebCore::ResourceRequestRequester::EventSource
>;
};

} // namespace WTF
37 changes: 37 additions & 0 deletions Source/WebCore/platform/network/ResourceResponseBase.h
Expand Up @@ -466,6 +466,18 @@ template<> struct EnumTraits<WebCore::ResourceResponseBase::Type> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceResponseBase::Type> {
using values = EnumValues<
WebCore::ResourceResponseBase::Type,
WebCore::ResourceResponseBase::Type::Basic,
WebCore::ResourceResponseBase::Type::Cors,
WebCore::ResourceResponseBase::Type::Default,
WebCore::ResourceResponseBase::Type::Error,
WebCore::ResourceResponseBase::Type::Opaque,
WebCore::ResourceResponseBase::Type::Opaqueredirect
>;
};

template<> struct EnumTraits<WebCore::ResourceResponseBase::Tainting> {
using values = EnumValues<
WebCore::ResourceResponseBase::Tainting,
Expand All @@ -476,6 +488,15 @@ template<> struct EnumTraits<WebCore::ResourceResponseBase::Tainting> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceResponseBase::Tainting> {
using values = EnumValues<
WebCore::ResourceResponseBase::Tainting,
WebCore::ResourceResponseBase::Tainting::Basic,
WebCore::ResourceResponseBase::Tainting::Cors,
WebCore::ResourceResponseBase::Tainting::Opaque,
WebCore::ResourceResponseBase::Tainting::Opaqueredirect
>;
};

template<> struct EnumTraits<WebCore::ResourceResponseBase::Source> {
using values = EnumValues<
Expand All @@ -493,4 +514,20 @@ template<> struct EnumTraits<WebCore::ResourceResponseBase::Source> {
>;
};

template<> struct EnumTraitsForPersistence<WebCore::ResourceResponseBase::Source> {
using values = EnumValues<
WebCore::ResourceResponseBase::Source,
WebCore::ResourceResponseBase::Source::Unknown,
WebCore::ResourceResponseBase::Source::Network,
WebCore::ResourceResponseBase::Source::DiskCache,
WebCore::ResourceResponseBase::Source::DiskCacheAfterValidation,
WebCore::ResourceResponseBase::Source::MemoryCache,
WebCore::ResourceResponseBase::Source::MemoryCacheAfterValidation,
WebCore::ResourceResponseBase::Source::ServiceWorker,
WebCore::ResourceResponseBase::Source::ApplicationCache,
WebCore::ResourceResponseBase::Source::DOMCache,
WebCore::ResourceResponseBase::Source::InspectorOverride
>;
};

} // namespace WTF

0 comments on commit e865417

Please sign in to comment.