2022-01-26  Michael Catanzaro  <mcatanzaro@gnome.org>

        Build failure with GCC 12: MediaTime.h:167:71: error: call to non-'constexpr' function 'WTF::MediaTime& WTF::MediaTime::operator=(const WTF::MediaTime&)'
        https://bugs.webkit.org/show_bug.cgi?id=235610

        Reviewed by Darin Adler.

        The problem is the constexpr constructor calls the non-constexpr copy assignment operator.
        This is easy to fix, at the expense of readability, by open-coding the desired values here.

        * wtf/MediaTime.h:
        (WTF::MediaTime::MediaTime):

2022-01-25  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029
        rdar://problem/86347726

        Reviewed by Jer Noble and Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Add UseScreenCaptureKit.
        * wtf/PlatformEnableCocoa.h: Define ENABLE_SCREEN_CAPTURE_KIT.
        * wtf/PlatformHave.h: Define HAVE_SCREEN_CAPTURE_KIT.
        * wtf/cocoa/SoftLinking.h: Add softlink macros that take an API_AVAILABLE check.

2022-01-25  Aditya Keerthi  <akeerthi@apple.com>

        Disable input-security CSS property
        https://bugs.webkit.org/show_bug.cgi?id=235557
        rdar://87984277

        Reviewed by Dean Jackson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

        Make input-security a disabled-by-default experimental feature.

2022-01-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WTF] Make CRASH_WITH_INFO more useful when using GCC
        https://bugs.webkit.org/show_bug.cgi?id=235573

        Make CRASH_WITH_INFO() print out the additional information instead of silently crash
        when WebKit is compiled with GCC.

        Reviewed by Yusuke Suzuki.

        * wtf/Assertions.h: Add a variant of CRASH_WITH_INFO() which uses __VA_OPT__ for
        GCC and Clang; MSVC is left with the existing version as the version currently in
        use is not happy about __VA_OPT__.
        (CRASH_WITH_INFO): Deleted inline function for GCC.
        (CRASH_WITH_SECURITY_IMPLICATION_AND_INFO): Ditto.

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Rename Vector and FixedVector::findMatching to findIf to match stl naming.
        https://bugs.webkit.org/show_bug.cgi?id=234864
        rdar://87424746

        Reviewed by Yusuke Suzuki.

        Also rename reverseFindMatching to reverseFindIf.

        See https://bugs.webkit.org/show_bug.cgi?id=234855#c3 and
        https://en.cppreference.com/w/cpp/algorithm/find.

        * wtf/FixedVector.h:
        (WTF::FixedVector<T>::findIf const):
        (WTF::FixedVector<T>::find const):
        (WTF::FixedVector<T>::findMatching const): Deleted.
        * wtf/Vector.h:
        (WTF::Malloc>::findIf const):
        (WTF::Malloc>::find const):
        (WTF::Malloc>::reverseFindIf const):
        (WTF::Malloc>::findMatching const): Deleted.
        (WTF::Malloc>::reverseFindMatching const): Deleted.

2022-01-24  Michael Catanzaro  <mcatanzaro@gnome.org>

        Build failure with GCC 12: no matching function for call to 'end(LChar [7])'
        https://bugs.webkit.org/show_bug.cgi?id=235458

        Unreviewed. Just need to #include <string> here.

        * wtf/text/IntegerToStringConversion.h:

2022-01-24  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESION(r288200): [GTK][WPE] Build broken on Ubuntu 18.04
        https://bugs.webkit.org/show_bug.cgi?id=235401

        Reviewed by Adrian Perez de Castro.

        This implements WTF_CRASH_UNDER_CONSTEXPR_CONTEXT() properly for compatibility with older
        compilers.

        * wtf/Assertions.h:

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Add FixedVector::clear(), contains(), find(), and findMatching().
        https://bugs.webkit.org/show_bug.cgi?id=234855

        Reviewed by Yusuke Suzuki.

        * wtf/FixedVector.h:
        (WTF::FixedVector::clear):
        (WTF::FixedVector<T>::contains const):
        (WTF::FixedVector<T>::findMatching const):
        (WTF::FixedVector<T>::find const):

2022-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Relax Date.parse requirement
        https://bugs.webkit.org/show_bug.cgi?id=235468

        Reviewed by Darin Adler.

        While the spec does not require accepting 't' / ' ' separator, ISO 8601 accepts it.
        This is because ECMA262's Date format is *not* ISO 8601 (it is called simplification
        of ISO 8601[1]).
        This patch relaxes this strictness to accept more formats, which can be accepted in
        the other engines too.

        [1]: https://tc39.es/ecma262/#sec-date-time-string-format

        * wtf/DateMath.cpp:
        (WTF::parseES5DateFromNullTerminatedCharacters):

2022-01-21  Sihui Liu  <sihui_liu@apple.com>

        Disable CFURLCache in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=234988
        <rdar://problem/87619196>

        Reviewed by Geoffrey Garen.

        * wtf/PlatformHave.h:

2022-01-21  Mike Gorse  <mgorse@suse.com>

        Build failure with g++ 12: std::exchange undefined
        https://bugs.webkit.org/show_bug.cgi?id=235445

        Reviewed by Michael Catanzaro.

        * wtf/CompletionHandler.h: Include <utility>
        * wtf/MallocPtr.h: Ditto

2022-01-20  Said Abou-Hallawa  <said@apple.com>

        [Cocoa] Accelerated filters are enabled by the wrong setting
        https://bugs.webkit.org/show_bug.cgi?id=235376

        Reviewed by Simon Fraser.

        Delete ENABLE_CORE_IMAGE_ACCELERATED_FILTER_RENDER and use USE_CORE_IMAGE
        instead since CoreImage is only used for filters right now. Besides 
        CoreImage filters will be enabled by the internal feature control flag
        AcceleratedFiltersEnabled.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:
        * wtf/PlatformEnableCocoa.h:

2022-01-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.Now.instant()
        https://bugs.webkit.org/show_bug.cgi?id=234836

        Reviewed by Ross Kirsling.

        Add currentTimeInNanoseconds implementation. Use clock_gettime for non Windows environment
        since it is POSIX & it is supported in macOS after Sierra.

        We also remove non-QueryPerformanceCounter path on Windows build since (1) it is supported in
        all supported Windows versions now and (2) no ports are using that path.

        * wtf/CurrentTime.cpp:
        (WTF::currentTimeInNanoseconds):
        (WTF::currentTime):
        * wtf/PlatformUse.h:
        * wtf/WallTime.h:

2022-01-19  Saam Barati  <sbarati@apple.com>

        Update ARM64EHash
        https://bugs.webkit.org/show_bug.cgi?id=235192

        Reviewed by Mark Lam.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Bitmap.h:
        (WTF::WordType>::set):
        (WTF::WordType>::forEachSetBit const):
        * wtf/CMakeLists.txt:
        * wtf/IterationStatus.h: Added.

2022-01-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Do not use pas utils outside of libpas
        https://bugs.webkit.org/show_bug.cgi?id=235275

        Reviewed by Darin Adler.

        * wtf/MathExtras.h:
        (WTF::reverseBits32):
        (WTF::reverseBits64):

2022-01-19  Alex Christensen  <achristensen@webkit.org>

        Allow experimental feature names to be hidden in WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=235163

        Reviewed by Chris Dumez.

        * Scripts/GeneratePreferences.rb:
        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ExperimentalFeatureNames.h: Copied from Source/WebKitLegacy/mac/Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.mm.erb.

2022-01-18  Chris Dumez  <cdumez@apple.com>

        Enable form.requestSubmit()
        https://bugs.webkit.org/show_bug.cgi?id=235342

        Reviewed by Darin Adler.

        Enable form.requestSubmit(). This was fully implemented via Bug 197958 and it passes the WPT tests but
        we never actually enabled it.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2022-01-18  Don Olmstead  <don.olmstead@sony.com>

        Replace all uses of HAVE_ACCESSIBILITY with ENABLE_ACCESSIBILITY
        https://bugs.webkit.org/show_bug.cgi?id=235335

        Reviewed by Ross Kirsling.

        Remove the setting of HAVE_ACCESSIBILITY. All code is now using ENABLE_ACCESSIBILITY
        instead.

        * wtf/PlatformHave.h:

2022-01-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, disable jit-heap on non Darwin

        On Linux etc., they have completely different steps to allocate executable memory.
        Thus, the current jit-heap implementation does not work well. Temporarily disable it
        on non Darwin OSes.

        * wtf/PlatformUse.h:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Use c++2a instead of gnu++2a for Cocoa builds
        https://bugs.webkit.org/show_bug.cgi?id=234936

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:

2022-01-18  Youenn Fablet  <youenn@apple.com>

        UUID decode routine should check for deleted value
        https://bugs.webkit.org/show_bug.cgi?id=235315

        Reviewed by Chris Dumez.

        * wtf/UUID.h:
        (WTF::UUID::decode):

2022-01-18  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070
        <rdar://problem/87673540>

        Reviewed by Darin Adler and Chris Dumez.

        * wtf/UUID.cpp:
        * wtf/UUID.h:
        Use uint64_t logic to generate UUIDs and remove some reinterpret_cast.
        Remove the Hasher add since we directly use UUID hash in WebCore.
        Simplify parsing logic by using more parseIntegers and bit logic.
        Also make sure we are not able to create empty/deleted UUID value from strings.

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070

        Reviewed by Chris Dumez.

        * wtf/UUID.cpp:
        * wtf/UUID.h:
         Add routine to stringify a UUID.
         Add routine to parse a stringified UUID.
         We restrict UUID::create to values for which the version 4 UUID stringification is bijective.

2022-01-16  Youenn Fablet  <youenn@apple.com>

        Enforce focus check for getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=235026

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2022-01-16  Lauro Moura  <lmoura@igalia.com>

        Fix C++20 build warnings with GCC
        https://bugs.webkit.org/show_bug.cgi?id=235023

        Reviewed by Alex Christensen.

        Mostly related to deprecating operations between enums of different
        types and not capturing this by default in lambdas.

        * wtf/AutomaticThread.cpp: Capture this in lambda.
        (WTF::AutomaticThread::start):

2022-01-16  David Kilzer  <ddkilzer@apple.com>

        [WTF] Add TollFreeBridging.h to Xcode project

        Unreviewed follow-up for r284038:

           Switch WTF::bridge_cast to use type traits
           <https://webkit.org/b/231467>
           <rdar://problem/84050614>

        * WTF.xcodeproj/project.pbxproj:
        - Add TollFreeBridging.h to the project.

2022-01-15  Chris Dumez  <cdumez@apple.com>

        Introduce dynamicDowncast<>() for convenience
        https://bugs.webkit.org/show_bug.cgi?id=235259

        Reviewed by Darin Adler.

        Introduce dynamicDowncast<>() for convenience. It can result in more concise code for the common pattern
        where we call `is<T>(x)` and then `downcast<T>(x)`.

        * wtf/TypeCasts.h:
        (WTF::dynamicDowncast):

2022-01-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix WTF::UUID's potential collision with empty and deleted values
        https://bugs.webkit.org/show_bug.cgi?id=235177

        Reviewed by Chris Dumez.

        Since cryptographicallyRandomValues generates random values, it is possible that it produces 0 or 1.
        In that case, it conflicts with empty and deleted values of UUID for hash table. When it is generated
        and used, it can break hash tables. This patch avoids that by picking 2 when we generate 0 or 1.

        We also avoid using UInt128Impl and instead using UInt128. UInt128Impl is implementation, so we should
        always use UInt128. UInt128 can be native __uint128_t when it is supported by the compiler: clang and
        GCC on 64bit support it.

        In this patch, we do not use strict UUID v4. This patch focuses on fixing the existing hash table corruption
        bug, and we defer discussion about UUID v4 since it reduces usable bits from 128 to 122, which we need to
        investigate the existing usage of UUID (and UUID string) in our tree.

        * wtf/UUID.cpp:
        (WTF::UUID::UUID):
        * wtf/UUID.h:
        (WTF::UUID::UUID):
        (WTF::UUID::isHashTableDeletedValue const):
        (WTF::UUID::encode const):
        (WTF::UUID::decode):

2022-01-13  Elliott Williams  <emw@apple.com>

        [XCBuild] Add "product dependencies" which influence workspace build order
        https://bugs.webkit.org/show_bug.cgi?id=235094

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig: Add EXCLUDED_SOURCE_FILE_NAMES
        * Configurations/WTF.xcconfig: Inherit EXCLUDED_SOURCE_FILE_NAMES
        * WTF.xcodeproj/project.pbxproj: Add Product Dependencies

2022-01-12  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Update hashThreadState() to exclude __opaque_flags.
        https://bugs.webkit.org/show_bug.cgi?id=235081
        rdar://86282584

        Reviewed by Keith Miller.

        The __opaque_flags may be used by the OS, and may be altered without our knowledge.
        Hence, our hash should not include the __opaque_flags field.

        Also remove some unused code.

        * wtf/PlatformRegisters.h:
        * wtf/threads/Signals.cpp:
        (WTF::hashThreadState):

2022-01-12  Elliott Williams  <emw@apple.com>

        [Xcode] Configure each project for the legacy build system
        https://bugs.webkit.org/show_bug.cgi?id=235091
        
        Beta versions of Xcode do not recognize the `-UseNewBuildSystem=NO` flag, so we need to
        manually declare use of PBXBuild in our projects.

        Reviewed by Darin Adler.

        * WTF.xcodeproj/project.pbxproj:

2022-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287908.
        https://bugs.webkit.org/show_bug.cgi?id=235156

        Broke M1 Monterey JSC

        Reverted changeset:

        "Update hashThreadState() to exclude __opaque_flags."
        https://bugs.webkit.org/show_bug.cgi?id=235081
        https://commits.webkit.org/r287908

2022-01-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable libpas jit-heap when libpas is enabled
        https://bugs.webkit.org/show_bug.cgi?id=235042

        Reviewed by Filip Pizlo.

        Previously, we enabled jit-heap only in ARM64 macOS.
        We should enable it when libpas is enabled.

        * wtf/PlatformUse.h:

2022-01-12  Zan Dobersek  <zdobersek@igalia.com>

        [WTF] Exclude any Linux-based platform in DisallowCType.h
        https://bugs.webkit.org/show_bug.cgi?id=235104

        Reviewed by Adrian Perez de Castro.

        * wtf/DisallowCType.h: Exclude any Linux target from deploying macros
        that prevent use of locale-dependent ctype functions in combination with
        the glibc C library and a non-libc++ C++ library. This should thus also
        cover the JSCOnly port when built on Linux.

2021-11-29 Simon Fraser  <simon.fraser@apple.com>

        Serialize CSS <number> values with rounding, limited decimal precision, and no exponents per-spec
        https://bugs.webkit.org/show_bug.cgi?id=218880 

        Reviewed by Darin Adler.

        Add new numberToCSSString and FormattedCSSNumber that handle converting a double into the format required by
        CSS (unlimited number of digits before the decimal place, up to 6 decimal places, no trailing zeros.

        * wtf/dtoa.cpp:
        (WTF::truncateTrailingZeros):
        (WTF::numberToFixedPrecisionString):
        (WTF::numberToCSSString):
        * wtf/dtoa.h:
        * wtf/dtoa/double-conversion.cc:
        * wtf/dtoa/double-conversion.h:
        * wtf/text/StringConcatenateNumbers.h:
        (WTF::FormattedCSSNumber::create):
        (WTF::FormattedCSSNumber::length const):
        (WTF::FormattedCSSNumber::buffer const):
        (WTF::StringTypeAdapter<FormattedCSSNumber>::StringTypeAdapter):
        (WTF::StringTypeAdapter<FormattedCSSNumber>::length const):
        (WTF::StringTypeAdapter<FormattedCSSNumber>::is8Bit const):
        (WTF::StringTypeAdapter<FormattedCSSNumber>::writeTo const):

2022-01-11  Mark Lam  <mark.lam@apple.com>

        Update hashThreadState() to exclude __opaque_flags.
        https://bugs.webkit.org/show_bug.cgi?id=235081
        rdar://86282584

        Reviewed by Keith Miller.

        The __opaque_flags may be used by the OS, and may be altered without our knowledge.
        Hence, our hash should not include the __opaque_flags field.

        Also remove some unused code.

        * wtf/PlatformRegisters.h:
        * wtf/threads/Signals.cpp:
        (WTF::hashThreadState):

2022-01-11  Sam Weinig  <weinig@apple.com>

        Remove AppleTV specific disabling of conic gradients, its not necessary
        https://bugs.webkit.org/show_bug.cgi?id=235041

        Reviewed by Darin Adler.

        Add HAVE_CORE_GRAPHICS_CONIC_GRADIENTS macro and use it to control ENABLE_CSS_CONIC_GRADIENTS.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2022-01-10  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * wtf/DisallowCType.h:
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::toStdFileSystemPath):
        (WTF::FileSystemImpl::fromStdFileSystemPath):
        * wtf/PlatformHave.h:
        * wtf/VectorTraits.h:
        * wtf/text/StringOperators.h:

2022-01-10  Youenn Fablet  <youenn@apple.com>

        Compile out ENABLE_MEDIA_CAPTURE on WATCHOS and APPLETV
        https://bugs.webkit.org/show_bug.cgi?id=234946
        <rdar://87126228>

        Reviewed by Sam Weinig.

        * wtf/PlatformEnableCocoa.h:

2022-01-09  Sam Weinig  <weinig@apple.com>

        Remove support for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=234999

        Reviewed by Darin Adler.

        * wtf/PlatformFTW.cmake: Removed.

2022-01-09  Sam Weinig  <weinig@apple.com>

        Add helpers to access CoreGraphics color spaces more easily in generic contexts
        https://bugs.webkit.org/show_bug.cgi?id=235004

        Reviewed by Darin Adler.

        * wtf/PlatformHave.h:
        Update have macro, HAVE_CORE_GRAPHICS_XYZ_COLOR_SPACE, to have a more specific name,
        HAVE_CORE_GRAPHICS_XYZ_D50_COLOR_SPACE, which is really what it is.

2022-01-07  Tim Horton  <timothy_horton@apple.com>

        Adopt linkedOnOrAfter() in more places
        https://bugs.webkit.org/show_bug.cgi?id=234951

        Reviewed by Wenson Hsieh.

        * wtf/cocoa/LanguageCocoa.mm:
        (WTF::canMinimizeLanguages):
        Adopt linkedOnOrAfter and simplify.

        * wtf/cocoa/RuntimeApplicationChecksCocoa.h:
        The weird mismatch between the iOS and macOS values for FirstVersionThatSupportsInitConstructors
        is correct; the iOS version was bumped in r202670.

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287698.

        Broke an internal build

        Reverted changeset:

        "Start using C++20"
        https://bugs.webkit.org/show_bug.cgi?id=233963
        https://commits.webkit.org/r287698

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287718.

        Broke an internal build

        Reverted changeset:

        "[PlayStation] Fix build break after r287698"
        https://bugs.webkit.org/show_bug.cgi?id=234931
        https://commits.webkit.org/r287718

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Move linkedOnOrAfter() to WTF
        https://bugs.webkit.org/show_bug.cgi?id=234942

        Reviewed by Darin Adler.

        Move linkedOnOrAfter() and the associated SDKVersion enum to WTF from WebCore.
        This precedes a series of patches that will adopt it in WTF and JavaScriptCore,
        and then replace the underlying mechanism with a slightly more flexible one.

        * wtf/cocoa/RuntimeApplicationChecksCocoa.cpp:
        (WTF::linkedOnOrAfter):
        * wtf/cocoa/RuntimeApplicationChecksCocoa.h:

2022-01-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper function that returns the value of a std::optional<T> or constructs T if needed
        https://bugs.webkit.org/show_bug.cgi?id=234865

        Reviewed by Darin Adler.

        Add a new helper function that returns the value of a given `std::optional<Type>` if it exists, and otherwise
        constructs and returns `Type { }`. Currently, the alternative to this is writing out the `Type { }` in full when
        passing in an argument to `value_or`; using this avoids some redundancy and makes the expression a bit easier to
        read.

        * wtf/StdLibExtras.h:
        (WTF::valueOrDefault):

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Separate "linked-on-or-{before, after}-everything" override from the SDK version
        https://bugs.webkit.org/show_bug.cgi?id=234930

        Reviewed by Wenson Hsieh.

        * wtf/cocoa/RuntimeApplicationChecksCocoa.cpp:
        (WTF::linkedOnOrAfterOverrideValue):
        (WTF::setLinkedOnOrAfterOverride):
        (WTF::linkedOnOrAfterOverride):
        * wtf/cocoa/RuntimeApplicationChecksCocoa.h:
        Add an explicit optional bit for "this application should pretend to be
        linked on or {after, before} everything" instead of just overriding the
        SDK version. This is a prerequisite for getting rid of applicationSDKVersion(),
        which will happen in a future patch.

        This is in WTF because linkedOnOrAfter() is going to move here in a
        future patch as well.

2022-01-06  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Fix build break after r287698
        https://bugs.webkit.org/show_bug.cgi?id=234931

        Unreviewed build fix

        * wtf/PlatformHave.h: Use MISSING_STD_FILESYSTEM_PATH_CONSTRUCTOR on PlayStation

2022-01-06  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * wtf/DisallowCType.h:
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::toStdFileSystemPath):
        (WTF::FileSystemImpl::fromStdFileSystemPath):
        * wtf/PlatformHave.h:
        * wtf/VectorTraits.h:
        * wtf/text/StringOperators.h:

2022-01-05  John Wilander  <wilander@apple.com>

        Change version number for HAVE_RSA_PSS_OID
        https://bugs.webkit.org/show_bug.cgi?id=234904
        <rdar://86646280>

        Reviewed by Alex Christensen.

        * wtf/PlatformHave.h:

2022-01-05  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Momentum tails may get truncated if the duration runs longer than the system's
        https://bugs.webkit.org/show_bug.cgi?id=234535
        <rdar://problem/86338105>

        Reviewed by Simon Fraser.

        * wtf/PlatformHave.h:
        Add a HAVE for kIOHIDEventScrollMomentumInterrupted.

2021-12-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Replace UDIS86 with Zydis
        https://bugs.webkit.org/show_bug.cgi?id=234765

        Reviewed by Michael Saboff.

        * wtf/PlatformEnable.h:

2021-12-29  Sam Weinig  <weinig@apple.com>

        Add additional named color spaces for extended rgb color types and HSL/HWB in preparation for out of gamut and missing component support
        https://bugs.webkit.org/show_bug.cgi?id=234741

        Reviewed by Dean Jackson.

        * wtf/PlatformHave.h:
        Add new HAVE macros for additional CoreGraphics named color spaces and the CGColorSpaceCreateExtended function.

2021-12-28  Sam Weinig  <weinig@apple.com>

        Support color interpolation methods for CSS Gradients
        https://bugs.webkit.org/show_bug.cgi?id=234711

        Reviewed by Simon Fraser.

        Add new experimental feature flag, CSSGradientInterpolationColorSpacesEnabled, to gate
        support for interpolation methods in CSS gradients. Off by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-28  Sam Weinig  <weinig@apple.com>

        Enhance Vector::map to allow specifying what kind of Vector to return (e.g. inline capacity, overflow, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=234683

        Reviewed by Darin Adler.

        * wtf/Vector.h:
        (WTF::Vector::map const):
        Add an overload of Vector::map() that allows specifying the type of the result Vector. To make this
        work without giving up the argument deduction in the common case, SFINAE is used to determine which
        overload to use.

2021-12-28  Zan Dobersek  <zdobersek@igalia.com>

        [RISCV64] Enable signal-based VM traps for CPU(RISCV64)
        https://bugs.webkit.org/show_bug.cgi?id=234719

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformEnable.h: Define ENABLE_SIGNAL_BASED_VM_TRAPS for CPU(RISCV64).

2021-12-28  Zan Dobersek  <zdobersek@igalia.com>

        [RISCV64] Define HAVE_MACHINE_CONTEXT, provide mcontext_t accessors for CPU(RISCV64)
        https://bugs.webkit.org/show_bug.cgi?id=234718

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformHave.h: Define HAVE_MACHINE_CONTEXT for CPU(RISCV64).

2021-12-23  Sam Weinig  <weinig@apple.com>

        Gradient color interpolation incorrect for colors with alpha (need to interpolate premultiplied colors)
        https://bugs.webkit.org/show_bug.cgi?id=150940
        <rdar://problem/25499232>

        Reviewed by Simon Fraser.

        Enable CSSGradientPremultipliedAlphaInterpolationEnabled by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-23  Brady Eidson  <beidson@apple.com>

        Add WTF::UUID class which is natively a 128-bit integer
        https://bugs.webkit.org/show_bug.cgi?id=234571

        Reviewed by Alex Christensen.

        This patch adds a new WTF::UUID class.
        
        For now, it is simply a wrapper around a 128-bit integer, and creating a new one primes that integer with
        cryptographically random data.
        
        It can be encoded/decoded as well as used as a HashKey.
        
        And it will be a great utility to use as a unique object identifier for objects that logically exist
        in multiple processes.
        
        On that note, it also changes "UUIDIdentifier" to use this new UUID class instead of a v4 UUID string.
        
        * wtf/Identified.h:
        (WTF::UUIDIdentified::UUIDIdentified):

        * wtf/UUID.cpp:
        (WTF::UUID::UUID):
        (WTF::UUID::toVector const):
        (WTF::UUID::hash const):

        * wtf/UUID.h:
        (WTF::UUID::create):
        (WTF::UUID::UUID):
        (WTF::UUID::operator== const):
        (WTF::UUID::data const):
        (WTF::UUID::isHashTableDeletedValue const):
        (WTF::UUIDHash::hash):
        (WTF::UUIDHash::equal):
        (WTF::HashTraits<UUID>::emptyValue):
        (WTF::HashTraits<UUID>::constructDeletedValue):
        (WTF::HashTraits<UUID>::isDeletedValue):
        (WTF::UUID::encode const):
        (WTF::UUID::decode):

2021-12-23  Sihui Liu  <sihui_liu@apple.com>

        Ensure file handles used in FileSystemAccess API are closed
        https://bugs.webkit.org/show_bug.cgi?id=234520

        Reviewed by Darin Adler.

        * wtf/CrossThreadCopier.h:

2021-12-22  Sihui Liu  <sihui_liu@apple.com>

        WebsiteDataStore::excludeDirectoryFromBackup should set attribute for existing directories
        https://bugs.webkit.org/show_bug.cgi?id=234404

        Reviewed by Youenn Fablet.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::excludeFromBackup):
        (WTF::FileSystemImpl::canExcludeFromBackup): Deleted.
        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::excludeFromBackup):
        * wtf/mac/FileSystemMac.mm:
        (WTF::FileSystem::canExcludeFromBackup): Deleted.
        (WTF::FileSystem::excludeFromBackup): Deleted.

2021-12-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287364.
        https://bugs.webkit.org/show_bug.cgi?id=234620

        broke 3 API tests

        Reverted changeset:

        "Preferences that read from NSUserDefaults need to be
        initialied from platformInitializeStore()"
        https://bugs.webkit.org/show_bug.cgi?id=234488
        https://commits.webkit.org/r287364

2021-12-22  Zan Dobersek  <zdobersek@igalia.com>

        [RISCV64] Add RISCV64 support in YARR
        https://bugs.webkit.org/show_bug.cgi?id=234547

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformEnable.h: Also enable different YARR-related flags for RISCV64.

2021-12-22  Simon Fraser  <simon.fraser@apple.com>

        Preferences that read from NSUserDefaults need to be initialied from platformInitializeStore()
        https://bugs.webkit.org/show_bug.cgi?id=234488

        Reviewed by Sam Weinig.

        Having the default value for a preference read from NSUserDefaults can cause issues
        if the UIProcess and WebProcess values don't match. Instead, have platformInitializeStore()
        explicitly add values for these keys; this is done for scrollAnimatorEnabledKey.

        * Scripts/Preferences/WebPreferences.yaml:

2021-12-22  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Set Web Authentication experimental feature flag as default true
        https://bugs.webkit.org/show_bug.cgi?id=234533
        <rdar://problem/86743595>

        Reviewed by Brent Fulgham.

        The Web Authentication feature has been shipping for a while. Default value
        for experimental feature flag should be true.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-21  Brady Eidson  <beidson@apple.com>

        Make Notification identifiers be a UUID string instead of a uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=234534

        Reviewed by Alex Christensen.

        Add a new form of Identified that uses a UUID String as the identifier.
        
        * wtf/Identified.h:
        (WTF::UUIDIdentified::UUIDIdentified):

2021-12-21  Sam Weinig  <weinig@apple.com>

        Add support for premultiplied alpha interpolated gradients and defaulted off option to use them for CSS Gradients
        https://bugs.webkit.org/show_bug.cgi?id=234492

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        Add a new experimental setting to enable premultiplied alpha CSS gradients. 

2021-12-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Remove RefCountedArray and use RefCountedFixedVector
        https://bugs.webkit.org/show_bug.cgi?id=234484

        Reviewed by Dean Jackson.

        Use RefCountedFixedVector<T> instead of RefCountedArray<T> and remove RefCountedArray<T>.
        RefCountedFixedVector<T> is much simpler interface: it is just using Ref<> / RefPtr<>
        instead of integrating ref-counting holder semantics into the class itself.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FixedVector.h:
        * wtf/RefCountedArray.cpp: Removed.
        * wtf/RefCountedArray.h: Removed.
        * wtf/WTFAssertions.cpp:

2021-12-20  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] convertVariadicArguments() should return a FixedVector
        https://bugs.webkit.org/show_bug.cgi?id=232639

        Reviewed by Yusuke Suzuki.

        Introduce std::initializer_list constructor for FixedVector and a WTF::map() overload.

        * wtf/FixedVector.h:
        (WTF::FixedVector::FixedVector):
        (WTF::map):
        * wtf/VectorTraits.h:

2021-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        MSVC reports "wtf/RetainPtr.h(196): error C3861: 'CFAutorelease': identifier not found " with /permissive- on Windows
        https://bugs.webkit.org/show_bug.cgi?id=202842

        Reviewed by Darin Adler.

        r287200 fixed the problem, but not a right fix.

        * wtf/PlatformHave.h: Defined a new macro HAVE_CFAUTORELEASE for PLATFORM(COCOA).
        * wtf/RetainPtr.h: Use HAVE(CFAUTORELEASE) instead of PLATFORM(COCOA).

2021-12-19  Brady Eidson  <beidson@apple.com>

        Stub out NotificationEvent and related
        https://bugs.webkit.org/show_bug.cgi?id=234420

        Reviewed by Alex Christensen.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

        * wtf/PlatformEnable.h:

2021-12-18  Darin Adler  <darin@apple.com>

        Hash tables, read/write, and heap memory are used unnecessarily, which may hurt performance
        https://bugs.webkit.org/show_bug.cgi?id=234438

        Reviewed by Anders Carlsson.

        * wtf/SortedArrayMap.h:
        (WTF::SortedArrayMap<ArrayType>::contains const): Added. More elegant than calling tryGet and
        treating the pointer as a boolean.
        (WTF::makeOptionalFromPointer): Moved here so it can be reused. Might rename later, since it's
        only used in a few places.

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Read the default value of the ScrollAnimatorEnabled setting from NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=234456

        Reviewed by Tim Horton.

        It's impossible for a test to run with an animated keyboard scroll because platformAllowsScrollAnimation(),
        which reads from NSUserDefaults, always trumps the Setting.

        Fix by initializing the setting from NSUserDefaults and removing the platformAllowsScrollAnimation()
        check. This allows for a WebKitTestRunner test override the setting. Remove the WTR code 
        that sets @"NSScrollAnimationEnabled" to @NO.

        Unfortunately in WebKitLegacy AppKit code consults the @"NSScrollAnimationEnabled" key, so
        DumpRenderTree has to continue to initialize this NSUserDefault to @NO and tests that
        try to change the Setting will fail.

        * Scripts/Preferences/WebPreferences.yaml:

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename MockScrollAnimatorEnabled to MockScrollbarsControllerEnabled
        https://bugs.webkit.org/show_bug.cgi?id=234452

        Reviewed by Anders Carlsson.

        The class formerly known as MockScrollAnimatorEnabled is used for logging when scrollbars
        get events, so fix the name. It's a subclass of ScrollbarsController.

        * Scripts/Preferences/WebPreferences.yaml:

2021-12-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce TrailingArray
        https://bugs.webkit.org/show_bug.cgi?id=234201

        Reviewed by Darin Adler.

        This patch implements TrailingArray<Derived, T>, which allows us to implement class
        with trailing array easily. By using this, we implement EmbeddedFixedVector and RefCountedFixedVector.
        Plus, we replace underlying implementation of FixedVector from RefCountedArray to EmbeddedFixedVector
        since ref-counting is not necessary. This is great for swapping: while RefCountedArray will decrease ref
        and touching memory when destryoing, EmbeddedFixedVector does not, so we can keep memory untouched if
        EmbeddedFixedVector's T is POD when destroying.

        In a subsequent patch, we will remove RefCountedArray and use RefCountedFixedVector since RefCountedFixedVector
        is following normal Ref / RefPtr protocol, so easy to understand the semantics.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/EmbeddedFixedVector.h: Added.
        * wtf/FixedVector.h:
        (WTF::FixedVector::FixedVector):
        (WTF::FixedVector::operator=):
        (WTF::FixedVector::size const):
        (WTF::FixedVector::isEmpty const):
        (WTF::FixedVector::byteSize const):
        (WTF::FixedVector::data):
        (WTF::FixedVector::begin):
        (WTF::FixedVector::end):
        (WTF::FixedVector::rbegin):
        (WTF::FixedVector::rend):
        (WTF::FixedVector::rbegin const):
        (WTF::FixedVector::rend const):
        (WTF::FixedVector::at):
        (WTF::FixedVector::at const):
        (WTF::FixedVector::operator[]):
        (WTF::FixedVector::operator[] const):
        (WTF::FixedVector::fill):
        (WTF::FixedVector::operator!= const):
        (WTF::FixedVector::operator== const):
        (WTF::FixedVector::swap):
        (WTF::FixedVector::getStorage):
        * wtf/RefCountedFixedVector.h: Added.
        * wtf/TrailingArray.h: Added.
        (WTF::TrailingArray::TrailingArray):
        (WTF::TrailingArray::~TrailingArray):
        (WTF::TrailingArray::allocationSize):
        (WTF::TrailingArray::size const):
        (WTF::TrailingArray::isEmpty const):
        (WTF::TrailingArray::byteSize const):
        (WTF::TrailingArray::data):
        (WTF::TrailingArray::data const):
        (WTF::TrailingArray::begin):
        (WTF::TrailingArray::end):
        (WTF::TrailingArray::begin const):
        (WTF::TrailingArray::end const):
        (WTF::TrailingArray::cbegin const):
        (WTF::TrailingArray::cend const):
        (WTF::TrailingArray::rbegin):
        (WTF::TrailingArray::rend):
        (WTF::TrailingArray::rbegin const):
        (WTF::TrailingArray::rend const):
        (WTF::TrailingArray::crbegin const):
        (WTF::TrailingArray::crend const):
        (WTF::TrailingArray::at):
        (WTF::TrailingArray::at const):
        (WTF::TrailingArray::operator[]):
        (WTF::TrailingArray::operator[] const):
        (WTF::TrailingArray::first):
        (WTF::TrailingArray::first const):
        (WTF::TrailingArray::last):
        (WTF::TrailingArray::last const):
        (WTF::TrailingArray::fill):
        (WTF::TrailingArray::offsetOfSize):
        (WTF::TrailingArray::offsetOfData):

2021-12-17  Sihui Liu  <sihui_liu@apple.com>

        Add custom copy() method for Ref<T> to CrossThreadCopier
        https://bugs.webkit.org/show_bug.cgi?id=234411

        Reviewed by Youenn Fablet.

        * wtf/CrossThreadCopier.cpp:
        * wtf/CrossThreadCopier.h:

2021-12-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        MSVC reports "wtf/RetainPtr.h(196): error C3861: 'CFAutorelease': identifier not found " with /permissive- on Windows
        https://bugs.webkit.org/show_bug.cgi?id=202842

        Reviewed by Alex Christensen and Darin Adler.

        MSVC /std:c++20 option implicitly enables /permissive- option.
        However, RetainPtr.h can't compile because 'CFAutorelease' is not
        defined.

        CFAutorelease isn't available in AppleWin's CoreFoundation and
        WinCairo's OpenCFLite as of now.

        * wtf/RetainPtr.h: Enclosed RetainPtr<T>::autorelease with #if !OS(WINDOWS).

2021-12-16  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287056.
        <rdar://86519800>

        Caused performance regression...again

        Reverted changeset:

        "Remove properties set by NSURLProtocol on NSURLRequest before
        serializing"
        https://bugs.webkit.org/show_bug.cgi?id=232332
        https://commits.webkit.org/r287056

2021-12-15  Darin Adler  <darin@apple.com>

        Many call sites use makeNeverDestroyed, but could instead take advantage of the NeverDestroyed deduction guide
        https://bugs.webkit.org/show_bug.cgi?id=234350

        Reviewed by Sam Weinig.

        * wtf/NeverDestroyed.h:
        (WTF::makeNeverDestroyed): Deleted.

        * wtf/text/cf/StringImplCF.cpp:
        (WTF::StringWrapperCFAllocator::allocator): Use deduction guide.

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove unreachable code in Plugin and PluginController
        https://bugs.webkit.org/show_bug.cgi?id=234365

        Reviewed by Geoff Garen and Anders Carlsson.

        * Scripts/Preferences/WebPreferences.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-12-15  Chris Dumez  <cdumez@apple.com>

        Support passing an old-style enum to add(Hasher&, ...)
        https://bugs.webkit.org/show_bug.cgi?id=234368

        Reviewed by Darin Adler.

        Support passing an old-style enum to add(Hasher&, ...). Previously, it would work for enum classes
        but lead to ambiguity errors with some compiler when passing a plain enum.

        * wtf/Hasher.h:
        (WTF::Hasher::add):
        (WTF::add):

2021-12-15  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt -[NSScreen safeAreaInsets]
        https://bugs.webkit.org/show_bug.cgi?id=234291
        <rdar://85805895>

        Reviewed by Eric Carlson.

        * wtf/PlatformHave.h:

2021-12-15  Chris Dumez  <cdumez@apple.com>

        Move SWServers from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=234179

        Reviewed by Darin Adler.

        * wtf/MemoryPressureHandler.h:
        Using a bool as underlying type for those enum classes is sufficient.

2021-12-15  Tomoki Imai  <tomoki.imai@sony.com>

        [PlayStation] Use FileSystem instead of FileSystemPlayStation except several unsupported APIs
        https://bugs.webkit.org/show_bug.cgi?id=234337

        Reviewed by Don Olmstead.

        PlayStation should use FileSystem as its current SDK supports std::filesystem.
        We have to maintain FileSystemPlayStation for now to supply some of FileSystem APIs
        because the following functions are not supported yet.
        - std::filesystem::space
        - std::filesystem::rename
        - std::filesystem::canonical
        - std::filesystem::directory_iterator
        - std::filesystem::remove_all

        The plan is to remove FileSystemPlayStation entirely after the SDK supports these functions.

        This patch also fixes the incompatible issue of FileSystem::listDirectory of FileSystemPlayStation.
        FileSystem::listDirectory is expected to return only the names, but it actually returns full paths.

        Confirmed that there is no regression in FileSystem related testcases in TestWTF.

        * wtf/FileSystem.cpp: Add PLATFORM(PLAYSTATION) guards not to use unsupported std::filesystem APIs.
        * wtf/playstation/FileSystemPlayStation.cpp: Remove the functions duplicated with FileSystem.
        Make FileSystem::listDirectory returns only names.
        Add listDirectorySub which can return a full path because deleteNonEmptyDirectory depends on it.

2021-12-15  Youenn Fablet  <youenn@apple.com>

        Make use of PLATFORM(COCOA) in MediaRecorder WebPreference
        https://bugs.webkit.org/show_bug.cgi?id=234339

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        HAVE(AVASSETWRITERDELEGATE) has been removed from PlatformHave.h given it was true on all supported platforms.
        But it was still used to guard MediaRecorder preference, thus MediaRecorder got disabled inadvertently.
        Let's guard MediaRecorder with PLATFORM(COCOA).

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Remove properties set by NSURLProtocol on NSURLRequest before serializing
        https://bugs.webkit.org/show_bug.cgi?id=232332
        <rdar://79227845>

        Reviewed by Geoff Garen.

        * wtf/PlatformHave.h:

2021-12-14  Darin Adler  <darin@apple.com>

        Automatically generate event handler content attribute maps so they are easier to maintain
        https://bugs.webkit.org/show_bug.cgi?id=234254

        Reviewed by Alexey Shvayka.

        * wtf/NeverDestroyed.h: Add a deduction guide for NeverDestroyed.
        In the future we can use this instead of makeNeverDestroyed or writing
        out the entire template class type including template arguments.

2021-12-13  Saam Barati  <sbarati@apple.com>

        Roll back r286345, r286387, r286471, r286667, r286849
        https://bugs.webkit.org/show_bug.cgi?id=234268

        Reviewed by Mark Lam.

        * wtf/OSAllocator.h:
        * wtf/posix/OSAllocatorPOSIX.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned): Deleted.

2021-12-13  Antoine Quint  <graouts@webkit.org>

        CustomEffect and animation frame rate should be disabled by default in STP
        https://bugs.webkit.org/show_bug.cgi?id=234251

        Reviewed by Dean Jackson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r286971.

        * wtf/spi/darwin/dyldSPI.h:

2021-12-13  Chris Dumez  <cdumez@apple.com>

        Regression(r283565) Unable to report private messages as Spam in Twitter app
        https://bugs.webkit.org/show_bug.cgi?id=234253
        <rdar://86043227>

        Reviewed by Alex Christensen.

        Add some new iOS / macOS versions.

        * wtf/spi/darwin/dyldSPI.h:

2021-12-13  Elliott Williams  <emw@apple.com>

        Deployment target for macOS 11+ does not follow minor version bumps
        https://bugs.webkit.org/show_bug.cgi?id=233906

        Reviewed by Alexey Proskuryakov.

        * Configurations/DebugRelease.xcconfig:
        * wtf/PlatformHave.h: Add feature define which has been public since macOS 11.0

2021-12-11  Don Olmstead  <don.olmstead@sony.com>

        Add a std::nullptr_t constructor for RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=234192

        Reviewed by Yusuke Suzuki.

        Add the constexpr constructor RefPtr(std::nullptr_t) with the same behavior as the default
        constructor. Both std::unique_ptr and std::shared_ptr have this same overload to optimize
        for the nullptr case. As an added bonus this also makes it so `0` can't fill in as a
        nullptr since the ambiguity will cause a compilation error.

        * wtf/RefPtr.h:
        (WTF::RefPtr::RefPtr):

2021-12-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286893.
        https://bugs.webkit.org/show_bug.cgi?id=234197

        Breaks the build

        Reverted changeset:

        "[macOS] Add new screen and window capture backend"
        https://bugs.webkit.org/show_bug.cgi?id=234029
        https://commits.webkit.org/r286893

2021-12-11  Jer Noble  <jer.noble@apple.com>

        Add an experimental VideoTrackConfiguration class and accessor on VideoTrack
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        Drive-by change: add a Vector::reverseFindMatching convenience method.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/Vector.h:
        (WTF::Malloc>::reverseFindMatching const):

2021-12-10  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029

        Reviewed by Jer Noble and Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Add UseScreenCaptureKit.
        * wtf/PlatformHave.h: Define HAVE_SCREEN_CAPTURE_KIT.
        * wtf/cocoa/SoftLinking.h: Add softlink macros that take an API_AVAILABLE check.

2021-12-10  Don Olmstead  <don.olmstead@sony.com>

        Add FileSystem function to read a file at a path
        https://bugs.webkit.org/show_bug.cgi?id=234103

        Reviewed by Alex Christensen.

        Add FileSystem::readEntireFile which takes a path and attempts to read the whole contents
        of the file into a Vector<uint8_t>. If the file is not found or is empty then it returns
        nullopt. Internally it manages the opening and closing of the file to prevent file handles
        from leaking.

        Modify FileSystem::readEntireFile which takes a handle to continue reading until the entire
        file has been read. Previously it could've just done a partial read as
        FileSystem::readFromFile does not guarantee it will read all the bytes requested.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::readEntireFile):
        * wtf/FileSystem.h:

2021-12-10  Antoine Quint  <graouts@webkit.org>

        Expose the maximum device frame rate to the Web Animations model
        https://bugs.webkit.org/show_bug.cgi?id=234161
        rdar://85983792

        Reviewed by Simon Fraser.

        Add a new experimental feature controlling the availability of per-animation frame rate.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-10  Sam Sneddon  <gsnedders@apple.com>

        Enable the 'resolution' media query by default
        https://bugs.webkit.org/show_bug.cgi?id=78087

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-09  Darin Adler  <darin@apple.com>

        Use simpler idioms for std::less and std::greater possible in modern C++
        https://bugs.webkit.org/show_bug.cgi?id=234117

        Reviewed by Anders Carlsson.

        * wtf/ListDump.h:
        (WTF::sortedListDump): Removed unnecessary template arguments to std::less.

2021-12-10  Keith Miller  <keith_miller@apple.com>

        Reduce maximum mmap size for Structure regions to help placate ios
        https://bugs.webkit.org/show_bug.cgi?id=234091

        Reviewed by Saam Barati.

        Use mach_vm_map since that supports memory alignement so we don't have to map 2x desired address space then free then trim.

        * wtf/PlatformHave.h:
        * wtf/posix/OSAllocatorPOSIX.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned):

2021-12-10  Antti Koivisto  <antti@apple.com>

        [CSS Container Queries] Basic @container at-rule parsing support
        https://bugs.webkit.org/show_bug.cgi?id=234135

        Reviewed by Antoine Quint.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

        Add preference for container queries, disabled by default.

2021-12-09  Alan Bujtas  <zalan@apple.com>

        Enable the CSS Contain property by default
        https://bugs.webkit.org/show_bug.cgi?id=234020
        <rdar://problem/86218835>

        Reviewed by Brent Fulgham.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r286804.

        Breaks internal builds.

        Reverted changeset:

        "Reduce maximum mmap size for Structure regions to help
        placate ios"
        https://bugs.webkit.org/show_bug.cgi?id=234091
        https://commits.webkit.org/r286804

2021-12-09  Alex Christensen  <achristensen@webkit.org>

        Prepare for transition to C++20
        https://bugs.webkit.org/show_bug.cgi?id=234022

        Reviewed by Yusuke Suzuki.

        In C++20, volitile is deprecated, operator== is stricter (related to the introduction of operator <=>),
        and operations on enums of different types are stricter too.  This does the changes we can do before
        the transition, which will be done in bug 233963.

        * wtf/DateMath.h:
        (WTF::LocalTimeOffset::operator== const):
        (WTF::LocalTimeOffset::operator!= const):
        (WTF::LocalTimeOffset::operator==): Deleted.
        (WTF::LocalTimeOffset::operator!=): Deleted.
        * wtf/FastBitVector.h:
        (WTF::FastBitVectorImpl::operator== const):
        (WTF::FastBitVectorImpl::operator!= const):
        * wtf/GenericTimeMixin.h:
        (WTF::GenericTimeMixin::operator== const):
        (WTF::GenericTimeMixin::operator!= const):
        (WTF::GenericTimeMixin::operator< const):
        (WTF::GenericTimeMixin::operator> const):
        (WTF::GenericTimeMixin::operator<= const):
        (WTF::GenericTimeMixin::operator>= const):
        * wtf/IteratorAdaptors.h:
        (WTF::FilterIterator::operator== const):
        (WTF::FilterIterator::operator!= const):
        (WTF::TransformIterator::operator== const):
        (WTF::TransformIterator::operator!= const):
        * wtf/Liveness.h:
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator== const):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator!= const):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator==): Deleted.
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator!=): Deleted.

2021-12-09  Alex Christensen  <achristensen@webkit.org>

        Use Span for IPC::ArrayReference and DataReference
        https://bugs.webkit.org/show_bug.cgi?id=233931

        Reviewed by Wenson Hsieh.

        * wtf/Vector.h:
        (WTF::Vector::Vector):
        (WTF::Vector::span const):

2021-12-09  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r286754.

        Broke 2 tests on all mac an iOS

        Reverted changeset:

        "Add an experimental trackConfiguration accessor on AudioTrack
        & VideoTrack."
        https://bugs.webkit.org/show_bug.cgi?id=230841
        https://commits.webkit.org/r286754

2021-12-09  Keith Miller  <keith_miller@apple.com>

        Reduce maximum mmap size for Structure regions to help placate ios
        https://bugs.webkit.org/show_bug.cgi?id=234091

        Reviewed by Saam Barati.

        Use mach_vm_map since that supports memory alignement so we don't have to map 2x desired address space then free then trim.

        * wtf/PlatformHave.h:
        * wtf/posix/OSAllocatorPOSIX.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned):

2021-12-09  Antti Koivisto  <antti@apple.com>

        Enable :focus-visible pseudo-class by default
        https://bugs.webkit.org/show_bug.cgi?id=234019
        <rdar://problem/86218583>

        Reviewed by Brent Fulgham.

        This enables :focus-visible pseudo-class for authors.

        It also changes :focus-visible behavior in the user agent stylesheet so that

        - <div tabindex> (or any element with 'tabindex' attribute that is not focusable otherwise) will not show focus
          indicator when focused via click/tap/script.
        - <details> element will not show focus indicator when focused via click/tap/script.

        Both still show focus indicator when focused via keyboard (tab) navigation.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com> and Don Olmstead  <don.olmstead@sony.com>

        Move TextCodec files from WebCore/platform/text to WebCore/PAL/text
        https://bugs.webkit.org/show_bug.cgi?id=233683

        Reviewed by Yusuke Suzuki.

        Update to use the new PAL files.

        * Scripts/Preferences/WebPreferences.yaml:

2021-12-08  Jer Noble  <jer.noble@apple.com>

        Add an experimental VideoTrackConfiguration class and accessor on VideoTrack
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        Drive-by change: add a Vector::reverseFindMatching convenience method.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/Vector.h:
        (WTF::Malloc>::reverseFindMatching const):

2021-12-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Enable mediaSourceInlinePainting
        https://bugs.webkit.org/show_bug.cgi?id=233813

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: GStreamer ports can already run tests
        requiring this setting, without change in the platform layer, until we migrate to the
        GPUProcess.

2021-12-07  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add initial support for find-in-page SPI
        https://bugs.webkit.org/show_bug.cgi?id=233915
        rdar://86140501

        Reviewed by Wenson Hsieh.

        * wtf/PlatformHave.h:

2021-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for `navigator.requestCookieConsent()` behind a disabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=233890
        rdar://86117718

        Reviewed by Darin Adler.

        Add the new feature flag (off by default). Note that this is also only an internal feature flag for the time
        being (rather than an experimental feature flag), such that it cannot (yet) be turned on by non-Apple internal
        users.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-12-07  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567
        <rdar://problem/86029185>

        Reviewed by Youenn Fablet.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::readEntireFile): Read whole file content into a Vector.
        (WTF::FileSystemImpl::deleteAllFilesModifiedSince): Recursively delete files and folders modified after 
        specified time in a directory.
        * wtf/FileSystem.h:

2021-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r286507): [macOS] Many file system access layout tests became flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=233892

        Unreviewed, revert r286507.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::readEntireFile): Deleted.
        (WTF::FileSystemImpl::deleteAllFilesModifiedSince): Deleted.
        * wtf/FileSystem.h:

2021-12-06  Simon Fraser  <simon.fraser@apple.com>

        Add a call to os_signpost to tag a momentum scroll animation
        https://bugs.webkit.org/show_bug.cgi?id=233885

        Reviewed by Tim Horton.

        * wtf/SystemTracing.h:

2021-12-06  Antoine Quint  <graouts@webkit.org>

        [Web Animations] Add a way to run scripted animations
        https://bugs.webkit.org/show_bug.cgi?id=233869
        rdar://85983542

        Reviewed by Dean Jackson.

        Add a new experimental feature for the CustomEffect interface.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-06  Jon Lee  <jonlee@apple.com>

        Update GPU Process feature flags
        https://bugs.webkit.org/show_bug.cgi?id=232547
        rdar://83905400

        Reviewed by Wenson Hsieh.

        Move features enabled by default to internal. DOM and WebGL are experimental.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-12-06  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Toggling the Settings -> Enabled LBSE flag has no immediate effect
        https://bugs.webkit.org/show_bug.cgi?id=233871

        Reviewed by Rob Buis.

        Toggling "Enable layer-based SVG engine" in e.g. MiniBrowser or from JS has no immediate effect.
        A relayout is not enough: a full style / render tree rebuild is needed.

        * Scripts/Preferences/WebPreferencesInternal.yaml: When "LayerBasedSVGEngineEnabled" changes call
        WebCore::SettingsBase::layerBasedSVGEngineEnabledChanged() to assure the switch from legacy to
        LBSE engine and vice-versa is live and doesn't need reloads to take effect.

2021-12-06  Youenn Fablet  <youenn@apple.com>

        Enable NavigationPreloadManager by default
        https://bugs.webkit.org/show_bug.cgi?id=233755

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-05  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for generated momentum events
        https://bugs.webkit.org/show_bug.cgi?id=233857

        Reviewed by Tim Horton.

        * wtf/SystemTracing.h:

2021-12-03  Chris Dumez  <cdumez@apple.com>

        [WK2] Turn on Web Locks API support
        https://bugs.webkit.org/show_bug.cgi?id=233816

        Reviewed by Darin Adler.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-03  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567

        Reviewed by Youenn Fablet.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::readEntireFile): Read whole file content into a Vector.
        (WTF::FileSystemImpl::deleteAllFilesModifiedSince): Recursively delete files and folders modified after 
        specified time in a directory.
        * wtf/FileSystem.h:

2021-12-03  Tim Horton  <timothy_horton@apple.com>

        Enable Momentum Event Generator by default
        https://bugs.webkit.org/show_bug.cgi?id=233807
        <rdar://problem/85262515>

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Turn it on for modern WebKit. Adjust the description slightly.

2021-12-03  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=233809

        Reviewed by Simon Fraser.

        Flip the switch.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [WP] Strengthen sandbox when AppCache is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233746
        <rdar://problem/85953893>

        Reviewed by Brent Fulgham.

        Add HAVE macro for sandbox state flags support.

        * wtf/PlatformHave.h:

2021-12-02  Megan Gardner  <megan_gardner@apple.com>

        Re-add support of image control menus.
        https://bugs.webkit.org/show_bug.cgi?id=233305

        Reviewed by Tim Horton.

        * Scripts/Preferences/WebPreferences.yaml:

2021-12-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Hook up navigator.gpu.requestAdapter()
        https://bugs.webkit.org/show_bug.cgi?id=233619

        Reviewed by Dean Jackson.

        * wtf/PlatformHave.h: Create a HAVE() macro, by default off. As we bring
        more infrastructure online, this will eventually flip to on.

2021-12-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [ Monterey ] fast/images/text-recognition/mac/image-overlay-text-disables-app-highlight-menu-items.html (layout-test) is a constant text failure
        https://bugs.webkit.org/show_bug.cgi?id=233658
        rdar://problem/85886424

        Reviewed by Tim Horton.

        Define ENABLE_APP_HIGHLIGHTS for iOS 15+ and macOS Monterey+. This ensures that
        `internals.appHighlightContextMenuItemTitles` is defined in layout tests on Monterey.

        * wtf/PlatformEnableCocoa.h:

2021-12-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286437.
        https://bugs.webkit.org/show_bug.cgi?id=233776

        Introduced test failure

        Reverted changeset:

        "[WP] Strengthen sandbox when AppCache is disabled"
        https://bugs.webkit.org/show_bug.cgi?id=233746
        https://commits.webkit.org/r286437

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [WP] Strengthen sandbox when AppCache is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233746
        <rdar://problem/85953893>

        Reviewed by Brent Fulgham.

        Add HAVE macro for sandbox state flags support.

        * wtf/PlatformHave.h:

2021-12-02  Aditya Keerthi  <akeerthi@apple.com>

        [macCatalyst] Enable support for date/time inputs
        https://bugs.webkit.org/show_bug.cgi?id=233710
        rdar://80108114

        Reviewed by Tim Horton.

        Date/time inputs were unsupported due to the lack of support for custom
        views inside UIContextMenuInteractions on macCatalyst.

        However, after date/time pickers transitioned to use
        _UIDatePickerOverlayPresentation in iOS 15, there is nothing preventing
        them from functioning on macCatalyst.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-12-02  Alexey Proskuryakov  <ap@apple.com>

        macOS Monterey build fix after r286420 (suggested by Brady).

        * wtf/PlatformHave.h:

2021-12-02  Brady Eidson  <beidson@apple.com>

        AVDelegatingPlaybackCoordinator error compiling on macOS 11
        https://bugs.webkit.org/show_bug.cgi?id=232454

        Reviewed by Tim Horton.

        * wtf/PlatformHave.h:

2021-12-02  Youenn Fablet  <youenn@apple.com>

        Add support for NavigationPreloadManager
        https://bugs.webkit.org/show_bug.cgi?id=233523

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-12-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] OSAllocator::reserveUncommittedAligned should use aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=233674

        Reviewed by Keith Miller.

        OSAllocator::reserveUncommittedAligned reserved 2GiB for 1GiB
        aligned allocation request.

        Windows 10 (Desktop) has VirtualAlloc2 API to aligned allocation.

        * wtf/win/OSAllocatorWin.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned): Use VirtualAlloc2
        API if available. Use SOFT_LINK_OPTIONAL for VirtualAlloc2.

2021-12-01  Lauro Moura  <lmoura@igalia.com>

        Unreviewed. Fix -Wformat warning after in ThreadingPosix logging

        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::establishHandle):

2021-12-01  J Pascoe  <j_pascoe@apple.com>

        Fix NEAR_FIELD macro to support iOS devices again
        https://bugs.webkit.org/show_bug.cgi?id=233671
        rdar://85318070

        In a previous change, https://bugs.webkit.org/show_bug.cgi?id=231085, the definition for
        the NEAR_FIELD macro removed support for iOS. This change adds it back, fixing
        NFC webauthn support.

        Reviewed by Brent Fulgham.

        Tested manually on an iPhone.

        * wtf/PlatformHave.h:

2021-12-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] requestVideoFrameCallback support
        https://bugs.webkit.org/show_bug.cgi?id=233541

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Enable rvfc support in GStreamer ports.

2021-12-01  Martin Robinson  <mrobinson@webkit.org>

        Add a runtime flag to enable CSS Transforms Level 2 spec compliant behavior
        https://bugs.webkit.org/show_bug.cgi?id=232618

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-30  Tim Horton  <timothy_horton@apple.com>

        Add a momentum event synthesizer
        https://bugs.webkit.org/show_bug.cgi?id=233653
        <rdar://problem/85571258>

        Reviewed by Simon Fraser.

        * wtf/PlatformEnable.h:
        Add an ENABLE().

2021-11-30  Keith Miller  <keith_miller@apple.com>

        Structures should be allocated out of an aligned pool of memory so StructureID->Structure* is fast.
        https://bugs.webkit.org/show_bug.cgi?id=233379

        Reviewed by Yusuke Suzuki.

        Add an aligned flavor of reserveUncommited, reserveUncommittedAligned.

        * wtf/OSAllocator.h:
        * wtf/posix/OSAllocatorPOSIX.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned):
        * wtf/win/OSAllocatorWin.cpp:
        (WTF::OSAllocator::reserveUncommittedAligned):

2021-11-30  Antoine Quint  <graouts@apple.com>

        [Model] Update required macOS version for camera, animation and audio APIs
        https://bugs.webkit.org/show_bug.cgi?id=233656

        Reviewed by Tim Horton.

        * wtf/PlatformEnableCocoa.h:

2021-11-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286227.
        https://bugs.webkit.org/show_bug.cgi?id=233652

        Broke some Apple-internal builds

        Reverted changeset:

        "[Model] clean up compile-time flags and condition IDL methods
        behind them"
        https://bugs.webkit.org/show_bug.cgi?id=233407
        https://commits.webkit.org/r286227

2021-11-30  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Enable HTMLVideoElement.requestVideoFrameCallback by default
        https://bugs.webkit.org/show_bug.cgi?id=233306

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286272.
        https://bugs.webkit.org/show_bug.cgi?id=233641

        Wrong approach to disabling experimental features.

        Reverted changeset:

        "Disable experimental web features on platforms without UI to
        enable them"
        https://bugs.webkit.org/show_bug.cgi?id=233152
        https://commits.webkit.org/r286272

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Move TransformStreamAPIEnabled flag to Settings
        https://bugs.webkit.org/show_bug.cgi?id=233524

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-29  Chris Dumez  <cdumez@apple.com>

        Add initial implementation for the Web Lock API
        https://bugs.webkit.org/show_bug.cgi?id=233289

        Reviewed by Geoff Garen.

        Update Deque::removeAllMatching() to return the number of items removed, similarly
        to the corresponding API on Vector.

        * wtf/Deque.h:
        (WTF::inlineCapacity>::removeAllMatching):

2021-11-29  David Kilzer  <ddkilzer@apple.com>

        Disable experimental web features on platforms without UI to enable them
        <https://webkit.org/b/233152>
        <rdar://problem/85430643>

        Reviewed by Brent Fulgham.

        * wtf/PlatformEnableCocoa.h:
        (ENABLE_CORE_IMAGE_ACCELERATED_FILTER_RENDER):
        (ENABLE_CSS_PAINTING_API):
        (ENABLE_CSS_TYPED_OM):
        (ENABLE_MODEL_ELEMENT):
        (ENABLE_SEPARATED_MODEL):
        - Disable if HAVE(EXPERIMENTAL_WEB_FEATURES_UI) is defined.
        * wtf/PlatformHave.h:
        (HAVE_EXPERIMENTAL_WEB_FEATURES_UI): Add.
        - Define for tvOS and watchOS, which don't have UI to enable
          experimental web features.
        (HAVE_CELESTIAL):
        (HAVE_CFNETWORK_ALTERNATIVE_SERVICE):
        (HAVE_NETWORK_LOADER):
        (HAVE_AVSAMPLEBUFFERVIDEOOUTPUT):
        - Disable if HAVE(EXPERIMENTAL_WEB_FEATURES_UI) is defined.

2021-11-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Unify speech synthesizer platform usage for Mac/iOS
        https://bugs.webkit.org/show_bug.cgi?id=231895
        <rdar://problem/84372479>

        Reviewed by Andres Gonzalez.

        * wtf/PlatformHave.h:

2021-11-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Public Class Field initialization is slow
        https://bugs.webkit.org/show_bug.cgi?id=232479

        Reviewed by Alexey Shvayka.

        * wtf/text/ASCIILiteral.h:

2021-11-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Move m_incomingPolymorphicCalls out of CodeBlock::JITData
        https://bugs.webkit.org/show_bug.cgi?id=233415

        Reviewed by Mark Lam and Darin Adler.

        Make sizeof(SentinelLinkedList) small. We do not need to have two sentinel for the list.

        * wtf/SentinelLinkedList.h:
        (WTF::SentinelLinkedList::SentinelLinkedList):
        (WTF::RawNode>::begin):
        (WTF::RawNode>::end):
        (WTF::RawNode>::push):
        (WTF::RawNode>::append):
        (WTF::RawNode>::takeFrom):
        (WTF::RawNode>::SentinelLinkedList): Deleted.

2021-11-24  Antoine Quint  <graouts@webkit.org>

        [Model] clean up compile-time flags and condition IDL methods behind them
        https://bugs.webkit.org/show_bug.cgi?id=233407

        Reviewed by Tim Horton.

        We refactor and augment the flags related to the <model> element. First, we change the
        following existing flags from ENABLE to HAVE since they are about the availability of
        specific APIs in ARKit, and more specific ASVInlinePreview. The changes are as follows:

            ENABLE_ARKIT_INLINE_PREVIEW_IOS => HAVE_ASV_INLINE_PREVIEW_IOS
            ENABLE_ARKIT_INLINE_PREVIEW_MAC => HAVE_ASV_INLINE_PREVIEW_MAC
            ENABLE_ARKIT_INLINE_PREVIEW_CAMERA_TRANSFORM => HAVE_ASV_INLINE_PREVIEW_CAMERA_CONTROL
            ENABLE_ARKIT_INLINE_PREVIEW_ANIMATIONS_CONTROL => HAVE_ASV_INLINE_PREVIEW_ANIMATION_CONTROL
            ENABLE_ARKIT_INLINE_PREVIEW_AUDIO_CONTROL => HAVE_ASV_INLINE_PREVIEW_AUDIO_CONTROL

        We retain the ENABLE_ARKIT_INLINE_PREVIEW flag however as, even when the ASVInlinePreview API is
        available, we may elect to not use this API.

        Then, we add three new flags to specify whether some <model> features exposed to the Web are enabled,
        all currently conditioned by the matching HAVE_ASV_INLINE_PREVIEW_ flags, but those could be subject
        to more complex rules when other <model> backends expose supporting APIs for these features.

            ENABLE_MODEL_ELEMENT_CAMERA_CONTROL
            ENABLE_MODEL_ELEMENT_ANIMATION_CONTROL
            ENABLE_MODEL_ELEMENT_AUDIO_CONTROL

        Finally, we modify the macOS version used to define the HAVE_ASV_INLINE_PREVIEW_XXX_CONTROL flags.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-11-29  Youenn Fablet  <youenn@apple.com>

        Apply WebPreferences on ServiceWorker settings
        https://bugs.webkit.org/show_bug.cgi?id=233466

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-29  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Add runtime flag for Layer-based SVG engine (LBSE)
        https://bugs.webkit.org/show_bug.cgi?id=233211
        <rdar://problem/85711597>

        Reviewed by Sam Weinig.

        Add build option ('build-webkit --(no-)layer-based-svg-engine') and
        runtime flag ('LayerBasedSVGEngineEnabled' in LBSE enabled builds) to
        switch between the SVG engines.

        The actual SVG code changes will follow in subsequent patches,
        this just adds the infrastructure for LBSE.

        * Scripts/Preferences/WebPreferencesInternal.yaml: Add 'LayerBasedSVGEngineEnabled' option.
        * wtf/PlatformEnable.h: Disable LBSE by default. (Toggable with build settings in CMake-based builds)
        * wtf/PlatformEnableCocoa.h: Enable for PLATFORM(MAC).

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add audio support
        https://bugs.webkit.org/show_bug.cgi?id=233365
        <rdar://problem/85428982>

        Reviewed by Wenson Hsieh.

        Add a new compile-time flag for the new autio-related ARQL SPIs we are using.

        * wtf/PlatformEnableCocoa.h:

2021-11-19  Alex Christensen  <achristensen@webkit.org>

        Remove allocation in JSON::Value::parseJSON
        https://bugs.webkit.org/show_bug.cgi?id=233346

        Reviewed by Yusuke Suzuki.

        Parse the characters as Latin1 characters if we have an 8 bit string rather than converting them to UTF-16 just to be parsed.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::parseJSON):

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for pausing and resuming animations
        https://bugs.webkit.org/show_bug.cgi?id=233319
        <rdar://problem/85428464>

        Reviewed by Wenson Hsieh.

        Add a new compile-time flag for the new ARQL SPIs we are using.

        * wtf/PlatformEnableCocoa.h:

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for getting and setting the camera
        https://bugs.webkit.org/show_bug.cgi?id=233265
        <rdar://problem/85426290>

        Reviewed by Darin Adler.

        Add a new compile-time flag for the new ARQL SPIs we are using.

        * wtf/PlatformEnableCocoa.h:

2021-11-17  John Wilander  <wilander@apple.com>

        PCM: Add capability for click destination to fire triggering event without cross-site requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=233173
        <rdar://79426605>

        Reviewed by Alex Christensen.

        * wtf/URL.cpp:
        (WTF::queryParameters):
            New convenience getter.
        * wtf/URL.h:

2021-11-17  Chris Dumez  <cdumez@apple.com>

        Web Locks API does get enabled in Service Workers when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=233273

        Reviewed by Geoffrey Garen.

        Use RuntimeEnabledFeatures to back the Web Lock API since regular settings do not get
        properly propagated to service workers at the moment.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-17  Dean Jackson  <dino@apple.com>

        Add ModelDocument for directly showing content that can be handled by <model>
        https://bugs.webkit.org/show_bug.cgi?id=233057
        rdar://85265880

        Reviewed by Darin Adler.

        Add a experimental feature: ModelDocumentEnabled
        for loading content that can be handled by <model>.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-16  Devin Rousso  <drousso@apple.com>

        [iOS] use PhotosUIPrivate instead of PhotosUI
        https://bugs.webkit.org/show_bug.cgi?id=233213
        <rdar://problem/85300427>

        Reviewed by Aditya Keerthi.

        * wtf/PlatformHave.h:

2021-11-15  Sam Weinig  <weinig@apple.com>

        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
        https://bugs.webkit.org/show_bug.cgi?id=233112

        Reviewed by Dean Jackson.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Add some internal settings to enable/disable the ARKit and SceneKit based
        <model> backends.

        * wtf/PlatformHave.h:
        Add HAVE macro for SceneKit. Only enabled for macOS at the moment, but could
        probably be enabled for iOS if it is useful.

2021-11-15  Eric Liang  <ericliang@apple.com>

        _AXSCopyPathForAccessibilityBundle is going to be deprecated.
        https://bugs.webkit.org/show_bug.cgi?id=233081

        Reviewed by Andres Gonzalez.

        To support macOS Accessibility v2 runtime, on macOS there are two places where bundles can live. By doing so, `_AXSCopyPathForAccessibilityBundle` will going to be deprecated because it won’t always return the correct path you would expect.

        * wtf/PlatformHave.h:

2021-11-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal iOS 15 build

        Add a new compile-time flag.

        * wtf/PlatformHave.h:

2021-11-13  Simon Fraser  <simon.fraser@apple.com>

        Run a ScrollAnimationMomentum for the momentum phase of a scroll
        https://bugs.webkit.org/show_bug.cgi?id=232897

        Reviewed by Tim Horton.

        Set the MomentumScrollingAnimatorEnabled internal setting to off by default
        while we bring up tests.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Disable MathML when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233013
        <rdar://84567129>

        Reviewed by Brent Fulgham.

        Add runtime feature flag for MathML.

        * Scripts/Preferences/WebPreferences.yaml:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, partial revert of r285565 to resolve a PLT5 regression.
        <rdar://85269156>

        * wtf/PlatformHave.h:

2021-11-11  Michael Saboff  <msaboff@apple.com>

        Inline RegExp.test JIT code in DFG and FTL
        https://bugs.webkit.org/show_bug.cgi?id=230469

        Reviewed by Saam Barati.

        Added a new enablement: ENABLE_YARR_JIT_ALL_PARENS_EXPRESSIONS.

        * wtf/PlatformEnable.h:

2021-11-11  Ben Nham  <nham@apple.com>

        Log memory usage metadata when WebContent crosses critical or warning level memory thresholds
        https://bugs.webkit.org/show_bug.cgi?id=232976

        Reviewed by Darin Adler.

        Fixed several issues with memory usage tracking:

         - pagesPerVMTag now properly accounts for swapped-out pages in its footprint calculation,
           as footprint(1) already does.
         - displayNamePerVMTag now includes all of the most common VM tags associated with WebKit.
         - MemoryPressureHandler now knows the specific type of pressure event that occurred. This
           allows it to differentiate between the entire system being at a warning pressure level
           vs. just this process hitting its warning memory level limit.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setMemoryPressureStatus):
        (WTF::MemoryPressureHandler::memoryPressureStatusChanged):
        (WTF::MemoryPressureHandler::setUnderMemoryPressure): Deleted.
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setMemoryPressureStatusChangedCallback):
        (WTF::MemoryPressureHandler::isUnderMemoryPressure const):
        * wtf/ResourceUsage.h:
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):
        * wtf/cocoa/ResourceUsageCocoa.cpp:
        (WTF::displayNameForVMTag):
        (WTF::pagesPerVMTag):
        * wtf/unix/MemoryPressureHandlerUnix.cpp:
        (WTF::MemoryPressureHandler::triggerMemoryPressureEvent):
        * wtf/win/MemoryPressureHandlerWin.cpp:
        (WTF::MemoryPressureHandler::windowsMeasurementTimerFired):

2021-11-11  Jer Noble  <jer.noble@apple.com>

        [iOS] Adopt -[AVAudioSession setAuditTokensForProcessAssertion:]
        https://bugs.webkit.org/show_bug.cgi?id=232909
        <rdar://68184444>

        Reviewed by Chris Dumez.

        * wtf/PlatformHave.h:

2021-11-10  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * wtf/URL.h: Removed unneeded includes. Use default instead of { }
        for empty destructor. Added emptyCFURL function.

        * wtf/cf/CFURLExtras.cpp:
        (WTF::bytesAsCFData): Added. Replaces originalURLData from NSURLExtras.mm,
        but with a simpler implementation and more error checking. Here it's also
        alongside the other nearly identical functions.
        (WTF::bytesAsString): Added. Replaces getURLBytes for callers that are
        going to turn the bytes into a WTF::String. Before this patch, the callers
        were converting from CFURLRef to WTF::CString and then to WTF::String, so
        this eliminates the malloc/free pair for CString.
        (WTF::bytesAsVector): Added. Replaces getURLBytes using a return value
        instead of an out argument. Adds the optimization of filling the buffer if
        the inline capacity is sufficient, which was in originalURLData, but not
        here in getURLBytes before.
        (WTF::isSameOrigin): Renamed from isCFURLSameOrigin and rewrote this to
        have fewer type casts and more parallel structure so it's easier to read,
        while adapting it to use bytesAsVector.

        * wtf/cf/CFURLExtras.h: Replaced URLCharBuffer, getURLBytes, and
        isCFURLSameOrigin with URLBytesVectorInlineCapacity, bytesAsCFData,
        bytesAsString, bytesAsVector, and isSameOrigin. Got rid of unneeded
        includes.

        * wtf/cf/URLCF.cpp:
        (WTF::URL::URL): Use bytesAsString to streamline implementation and
        remove allocation/deallcation of a CString.
        (WTF::URL::emptyCFURL): Added. Used to refactor createCFURL so we can
        share it across Foundation and non-Foundation versions.
        (WTF::URL::createCFURL const): Added the logic that was in the version
        in URLCocoa.mm so we can share this single version, and removed the #if
        surrounding this.
        (WTF::URL::fileSystemPath const): Use auto.

        * wtf/cocoa/NSURLExtras.h: Changed URLWithUserTypedString to ignore
        the baseURL argument. It's not used, but the function is exported and
        currently used in Safari source code, which, like all callers passes
        a nil for baseURL. so, for now left the argument. Removed the baseURL
        argument from URLWithUserTypedStringDeprecated. Removed unused functions
        rangeOfURLScheme and looksLikeAbsoluteURL.

        * wtf/cocoa/NSURLExtras.mm: Removed "using namespace URLHelpers".
        (WTF::readIDNAllowedScriptListFile): Use URLHelpers explicitly.
        (WTF::decodeHostName): Ditto.
        (WTF::encodeHostName): Ditto.
        (WTF::URLByTruncatingOneCharacterBeforeComponent): Simplified by using
        the bytesAsVector function.
        (WTF::URLByRemovingResourceSpecifier): Deleted.
        (WTF::URLWithData): Call URLByTruncatingOneCharacterBeforeComponent
        directly.
        (WTF::URLWithUserTypedString): Removed the unneeded support for a
        base URL. Use URLHelpers explicitly.
        (WTF::URLWithUserTypedStringDeprecated): Ditto.
        (WTF::hasQuestionMarkOnlyQueryString): Use bridge_cast.
        (WTF::dataForURLComponentType): Rearranged to simplify a bit, remove support
        for special value for CFURLComponentType that means the complete URL, since
        no callers were using that, and use bytesAsVector.
        (WTF::URLByRemovingComponentAndSubsequentCharacter): Use bridge_cast and
        bytesAsVector.
        (WTF::originalURLData): Use bridge_cast and bytesAsCFData.
        (WTF::userVisibleString): Use URLHelpers explicitly.
        (WTF::isUserVisibleURL): Rewrote for simplicity and coding style; since
        the local characters are a null-terminated C string, we don't need
        length checks as long as we validate characters first, since a '\0'
        character can be read and will not be valid.
        (WTF::rangeOfURLScheme): Deleted.
        (WTF::looksLikeAbsoluteURL): Deleted.

        * wtf/cocoa/URLCocoa.mm:
        (WTF::URL::URL): Changed to just call the CFURLRef constructor so we
        don't need to repeat things twice.
        (WTF::URL::emptyCFURL): Added. This is the one part of the createCFURL
        function that depends on Objective-C.
        (WTF::URL::createCFURL const): Merged into the function in URLCF.cpp.
        (WTF::makeNSArrayElement): Use bridge_cast instead of the trickier
        idiom with explicit calls to leakRef and __bridge_transfer.

        * wtf/mac/FileSystemMac.mm:
        (WTF::FileSystem::setMetadataURL): Updated since URLWithUserTypedString
        no longer requires a baseURL of nil to be passed. Also removed explicit
        WTF namespace since this code itself is in the WTF namespace.

        * wtf/text/cocoa/StringCocoa.mm:
        (WTF::String::String): Use bridge_cast.
        (WTF::makeNSArrayElement): Use bridge_cast.

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Migrate DialogElementEnabled from RuntimeFlags to Settings
        https://bugs.webkit.org/show_bug.cgi?id=232926

        Reviewed by Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-10  Antti Koivisto  <antti@apple.com>

        Hasher should be able to hash pointers
        https://bugs.webkit.org/show_bug.cgi?id=232927

        Reviewed by Kimmo Kinnunen.

        * wtf/Hasher.h:
        (WTF::add):

2021-11-09  Chris Dumez  <cdumez@apple.com>

        [macOS] Enable NSURLSession partitioning based on first-party domain at CFNetwork level
        https://bugs.webkit.org/show_bug.cgi?id=230750
        <rdar://problem/83159358>

        Reviewed by Alex Christensen.

        Add HAVE(CFNETWORK_SESSION_PARTITIONING_BASED_ON_FIRST_PARTY_DOMAIN) build time flag that is true
        on newer Apple OSes where CFNetwork does NSURLSession partitioning based on first-party domain for
        us.

        * wtf/PlatformHave.h:

2021-11-09  Megan Gardner  <megan_gardner@apple.com>

        Turn on selection flipping by default.
        https://bugs.webkit.org/show_bug.cgi?id=232853

        Reviewed by Wenson Hsieh.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285536.
        https://bugs.webkit.org/show_bug.cgi?id=232915

        causes API test crashes

        Reverted changeset:

        "[CF] Reduce duplication and unneeded buffer allocations and
        copying in URL code, also remove unused methods and functions"
        https://bugs.webkit.org/show_bug.cgi?id=232220
        https://commits.webkit.org/r285536

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285246.
        https://bugs.webkit.org/show_bug.cgi?id=232907

        Broke FixedVector

        Reverted changeset:

        "[JSC] Clean up StructureStubInfo initialization"
        https://bugs.webkit.org/show_bug.cgi?id=232652
        https://commits.webkit.org/r285246

2021-10-28  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * wtf/URL.h: Removed unneeded includes. Use default instead of { }
        for empty destructor. Added emptyCFURL function.

        * wtf/cf/CFURLExtras.cpp:
        (WTF::bytesAsCFData): Added. Replaces originalURLData from NSURLExtras.mm,
        but with a simpler implementation and more error checking. Here it's also
        alongside the other nearly identical functions.
        (WTF::bytesAsString): Added. Replaces getURLBytes for callers that are
        going to turn the bytes into a WTF::String. Before this patch, the callers
        were converting from CFURLRef to WTF::CString and then to WTF::String, so
        this eliminates the malloc/free pair for CString.
        (WTF::bytesAsVector): Added. Replaces getURLBytes using a return value
        instead of an out argument. Adds the optimization of filling the buffer if
        the inline capacity is sufficient, which was in originalURLData, but not
        here in getURLBytes before.
        (WTF::isSameOrigin): Renamed from isCFURLSameOrigin and rewrote this to
        have fewer type casts and more parallel structure so it's easier to read,
        while adapting it to use bytesAsVector.

        * wtf/cf/CFURLExtras.h: Replaced URLCharBuffer, getURLBytes, and
        isCFURLSameOrigin with URLBytesVectorInlineCapacity, bytesAsCFData,
        bytesAsString, bytesAsVector, and isSameOrigin. Got rid of unneeded
        includes.

        * wtf/cf/URLCF.cpp:
        (WTF::URL::URL): Use bytesAsString to streamline implementation and
        remove allocation/deallcation of a CString.
        (WTF::URL::emptyCFURL): Added. Used to refactor createCFURL so we can
        share it across Foundation and non-Foundation versions.
        (WTF::URL::createCFURL const): Added the logic that was in the version
        in URLCocoa.mm so we can share this single version, and removed the #if
        surrounding this.
        (WTF::URL::fileSystemPath const): Use auto.

        * wtf/cocoa/NSURLExtras.h: Changed URLWithUserTypedString to ignore
        the baseURL argument. It's not used, but the function is exported and
        currently used in Safari source code, which, like all callers passes
        a nil for baseURL. so, for now left the argument. Removed the baseURL
        argument from URLWithUserTypedStringDeprecated. Removed unused functions
        rangeOfURLScheme and looksLikeAbsoluteURL.

        * wtf/cocoa/NSURLExtras.mm: Removed "using namespace URLHelpers".
        (WTF::readIDNAllowedScriptListFile): Use URLHelpers explicitly.
        (WTF::decodeHostName): Ditto.
        (WTF::encodeHostName): Ditto.
        (WTF::URLByTruncatingOneCharacterBeforeComponent): Simplified by using
        the bytesAsVector function.
        (WTF::URLByRemovingResourceSpecifier): Deleted.
        (WTF::URLWithData): Call URLByTruncatingOneCharacterBeforeComponent
        directly.
        (WTF::URLWithUserTypedString): Removed the unneeded support for a
        base URL. Use URLHelpers explicitly.
        (WTF::URLWithUserTypedStringDeprecated): Ditto.
        (WTF::hasQuestionMarkOnlyQueryString): Use bridge_cast.
        (WTF::dataForURLComponentType): Rearranged to simplify a bit, remove support
        for special value for CFURLComponentType that means the complete URL, since
        no callers were using that, and use bytesAsVector.
        (WTF::URLByRemovingComponentAndSubsequentCharacter): Use bridge_cast and
        bytesAsVector.
        (WTF::originalURLData): Use bridge_cast and bytesAsCFData.
        (WTF::userVisibleString): Use URLHelpers explicitly.
        (WTF::isUserVisibleURL): Rewrote for simplicity and coding style; since
        the local characters are a null-terminated C string, we don't need
        length checks as long as we validate characters first, since a '\0'
        character can be read and will not be valid.
        (WTF::rangeOfURLScheme): Deleted.
        (WTF::looksLikeAbsoluteURL): Deleted.

        * wtf/cocoa/URLCocoa.mm:
        (WTF::URL::URL): Changed to just call the CFURLRef constructor so we
        don't need to repeat things twice.
        (WTF::URL::emptyCFURL): Added. This is the one part of the createCFURL
        function that depends on Objective-C.
        (WTF::URL::createCFURL const): Merged into the function in URLCF.cpp.
        (WTF::makeNSArrayElement): Use bridge_cast instead of the trickier
        idiom with explicit calls to leakRef and __bridge_transfer.

        * wtf/mac/FileSystemMac.mm:
        (WTF::FileSystem::setMetadataURL): Updated since URLWithUserTypedString
        no longer requires a baseURL of nil to be passed. Also removed explicit
        WTF namespace since this code itself is in the WTF namespace.

        * wtf/text/cocoa/StringCocoa.mm:
        (WTF::String::String): Use bridge_cast.
        (WTF::makeNSArrayElement): Use bridge_cast.

2021-11-09  Chris Dumez  <cdumez@apple.com>

        BroadcastChannel is still disabled in service workers
        https://bugs.webkit.org/show_bug.cgi?id=232855

        Reviewed by Darin Adler.

        Turn on BroadcastChannel experimental feature in WebCore since this is the value that Service Workers
        end up using. We only need to disable it in WebKitLegacy.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-09  Zan Dobersek  <zdobersek@igalia.com>

        [RISCV64] Add assembly, disassembly infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=232870

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformEnable.h: Enable RISCV64_DISASSEMBLER when necessary.

2021-11-09  Megan Gardner  <megan_gardner@apple.com>

        Scroll To Text Fragment directive parsing
        https://bugs.webkit.org/show_bug.cgi?id=231410

        Reviewed by Chris Dumez.

        Text directive parsing for 
        https://wicg.github.io/scroll-to-text-fragment/

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-09  Tim Horton  <timothy_horton@apple.com>

        Add runtime flag for momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232898
        <rdar://problem/85211338>

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Add the preference.

2021-11-09  Devin Rousso  <drousso@apple.com>

        REGRESSION(r271735): PaymentShippingOption.selected ignored
        https://bugs.webkit.org/show_bug.cgi?id=221960
        <rdar://problem/73464404>

        Reviewed by Tim Horton.

        Leverage new `PKShippingMethods` SPI to provide both the general list of `PKShippingMethod`
        and the default selected `PKShippingMethods` when creating/updating a payment request.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-11-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Make WebGPU.xcodeproj and WebGPU.framework
        https://bugs.webkit.org/show_bug.cgi?id=231661

        Reviewed by Dean Jackson and Robin Morisset.

        * wtf/DisallowCType.h:

2021-11-08  Alex Christensen  <achristensen@webkit.org>

        Parse redirect and modify-headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232838

        Reviewed by Tim Hatcher.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::asObject const):
        (WTF::JSONImpl::ObjectBase::asObject const):
        * wtf/JSONValues.h:

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enabling "media source inline painting" by default should work when using GPU Process for media
        https://bugs.webkit.org/show_bug.cgi?id=232802

        Reviewed by Eric Carlson.

        Clean up this experimental feature -- since it's backed by a global RuntimeEnabledFeature, we should:
        1. Add `webcoreBinding: RuntimeEnabledFeatures`, and also:
        2. Not be adding the corresponding page-scoped WebCore setting as well.

        This adjustment makes it possible to enable this experimental feature when the GPU process is disabled, since
        we now actually call into RuntimeEnabledFeatures to set the value (instead of just setting the WebCore setting
        which wasn't consulted by anything).

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [libpas] Enable libpas on macOS
        https://bugs.webkit.org/show_bug.cgi?id=231815

        Reviewed by Filip Pizlo.

        * WTF.xcodeproj/project.pbxproj:

2021-11-08  Kate Cheney  <katherine_cheney@apple.com>

        trustd network connections occasionally omitted from App Privacy report
        https://bugs.webkit.org/show_bug.cgi?id=232770
        <rdar://problem/83840427>

        Reviewed by Alex Christensen.

        * wtf/spi/cocoa/SecuritySPI.h:

2021-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Bindings part 1: Bring back Adapter/Device bindings code
        https://bugs.webkit.org/show_bug.cgi?id=232550

        Reviewed by Alex Christensen.

        * Scripts/Preferences/WebPreferences.yaml:

2021-11-05  Alex Christensen  <achristensen@webkit.org>

        Restructure WKContentRuleList Action storage during compilation and interpretation
        https://bugs.webkit.org/show_bug.cgi?id=232692

        Reviewed by Brady Eidson.

        * wtf/CrossThreadCopier.h:
        * wtf/StdLibExtras.h:

2021-11-04  Diego Pino Garcia  <dpino@igalia.com>

        Require MediaSession enabled to enable MediaSession PlayList API
        https://bugs.webkit.org/show_bug.cgi?id=232694

        Reviewed by Žan Doberšek.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-04  Antoine Quint  <graouts@webkit.org>

        Make PreferPageRenderingUpdatesNear60FPSEnabled experimental rather than internal
        https://bugs.webkit.org/show_bug.cgi?id=232702

        Reviewed by Tim Horton.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up StructureStubInfo initialization
        https://bugs.webkit.org/show_bug.cgi?id=232652

        Reviewed by Saam Barati.

        * wtf/FixedVector.h:
        (WTF::FixedVector::FixedVector):
        (WTF::FixedVector::operator=):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::operator=):
        * wtf/SegmentedVector.h:
        * wtf/Vector.h:
        (WTF::VectorTypeOperations::uninitializedCopy):

2021-11-03  David Kilzer  <ddkilzer@apple.com>

        Disable WebXR on tvOS and watchOS
        <https://webkit.org/b/232672>
        <rdar://problem/84982378>

        Reviewed by Brent Fulgham.

        * wtf/PlatformEnableCocoa.h:
        (ENABLE_WEBXR):
        (ENABLE_WEBXR_HANDS):
        - Disable features on tvOS and watchOS.

2021-11-03  Jer Noble  <jer.noble@apple.com>

        [macOS] MediaSession coordinator enabled in UIProcess, disabled in WebContent
        https://bugs.webkit.org/show_bug.cgi?id=232687
        <rdar://84990898>

        Reviewed by Eric Carlson.

        Have the MediaSessionPlaylistEnabled preference use the same defaults as MediaSessionCoordinatorEnabled.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-11-03  Chris Dumez  <cdumez@apple.com>

        _pasteboardWithName should be thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=232670

        Reviewed by Tim Horton.

        wtf/Atomics.h uses WTF_MAKE_STRUCT_FAST_ALLOCATED which is declared in
        wtf/FastMalloc.h but was failing to include it. This was leading to a
        build error when I tried including wtf/Lock.h in WKTR.

        * wtf/Atomics.h:

2021-11-02  Brady Eidson  <beidson@apple.com>

        Notifications on iOS enabled at compile-time, disabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=232649

        Reviewed by Tim Horton.

        * wtf/PlatformEnableCocoa.h:

2021-11-02  David Kilzer  <ddkilzer@apple.com>

        [WTF] Minor clean-up for format-related functions
        <https://webkit.org/b/232514>

        Reviewed by Yusuke Suzuki.

        * wtf/Assertions.cpp:
        (WTF::createWithFormatAndArguments):
        - Put WTF_ATTRIBUTE_PRINTF() on its own line to match other
          functions.
        (WTF::vprintf_stderr_with_prefix):
        (WTF::vprintf_stderr_with_trailing_newline):
        - Move ALLOW_NONLITERAL_FORMAT_{BEGIN,END} around specific
          function calls that need them.

2021-11-02  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fails to execute JavaScript when soft stack limit is unlimited
        https://bugs.webkit.org/show_bug.cgi?id=232328

        Reviewed by Yusuke Suzuki.

        Fall back to assuming an 8 MB stack limit when the real limit is unlimited. JSC needs to
        have some maximum stack size to work with, and this is as good as any.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::currentThreadStackBoundsInternal):

2021-11-02  Philip Chimento  <pchimento@igalia.com>

        [JSC] Implement Temporal.Instant
        https://bugs.webkit.org/show_bug.cgi?id=229826

        Reviewed by Yusuke Suzuki.

        * wtf/CheckedArithmetic.h: Don't use builtin operations if __int128 is
          being emulated using WTF::Int128. Also work around Clang/Linux bug
          where __builtin_mul_overflow() doesn't work on __int128.
          See https://bugs.llvm.org/show_bug.cgi?id=16404
        * wtf/DateMath.h:
        (WTF::timeToMS): Moved from JSDateMath.h.

2021-11-02  Chris Dumez  <cdumez@apple.com>

        Use higher QoS for WheelEvent and DisplayWasRefreshed IPCs
        https://bugs.webkit.org/show_bug.cgi?id=232458
        <rdar://82657744>

        Reviewed by Simon Fraser.

        Add dispatchWithQOS() function to WorkQueue to dispatch a task with a given QoS.

        * wtf/WorkQueue.cpp:
        (WTF::WorkQueueBase::dispatchWithQOS):
        * wtf/WorkQueue.h:
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueueBase::dispatchWithQOS):

2021-11-01  Per Arne  <pvollan@apple.com>

        [macOS] Opening local html files is failing
        https://bugs.webkit.org/show_bug.cgi?id=232572
        <rdar://81330442>

        Reviewed by Brent Fulgham.

        Declare sandbox flag.

        * wtf/spi/darwin/SandboxSPI.h:

2021-11-01  Tim Horton  <timothy_horton@apple.com>

        Add a testing preference to replay CG display lists manually
        https://bugs.webkit.org/show_bug.cgi?id=232566

        Reviewed by Wenson Hsieh.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-10-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up Baseline StructureStubInfo management
        https://bugs.webkit.org/show_bug.cgi?id=232513

        Reviewed by Saam Barati.

        * wtf/SegmentedVector.h:

2021-10-29  Darin Adler  <darin@apple.com>

        Create constants for all special frame names used in anchor target attribute values and elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=232488

        Reviewed by Anders Carlsson.

        * wtf/Forward.h: Declare ASCIILiteral.
        * wtf/text/ASCIILiteral.h: Update for above.

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Remove code inside ENABLE(NETSCAPE_PLUGIN_API)
        https://bugs.webkit.org/show_bug.cgi?id=232462

        Reviewed by Anders Carlsson.

        It is not used anywhere since https://trac.webkit.org/changeset/285003/webkit

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-10-29  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285038.

        Reverting the commit because it broke the open source test
        runs and also caused an impanct on EWS queues

        Reverted changeset:

        "Create constants for all special frame names used in anchor
        target attribute values and elsewhere"
        https://bugs.webkit.org/show_bug.cgi?id=232488
        https://commits.webkit.org/r285038

2021-10-29  Darin Adler  <darin@apple.com>

        Create constants for all special frame names used in anchor target attribute values and elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=232488

        Reviewed by Anders Carlsson.

        * wtf/Forward.h: Declare ASCIILiteral.
        * wtf/text/ASCIILiteral.h: Update for above.

2021-10-29  Saam Barati  <sbarati@apple.com>

        Disable ENABLE_JIT on arm64_32
        https://bugs.webkit.org/show_bug.cgi?id=232468

        Reviewed by Yusuke Suzuki.

        We were disabling JIT via a runtime configuration before since we haven't
        yet implemented the JIT on arm64_32. However, not compiling ENABLE(JIT)
        code on arm64_32 saves 11MB in the binary size of JavaScriptCore.
        
        In my local compiles, I'm going from 24M to 13M.

        * wtf/PlatformEnable.h:

2021-10-28  Adrian Perez de Castro  <aperez@igalia.com>

        [WTF] Use mcontext_t on OpenBSD
        https://bugs.webkit.org/show_bug.cgi?id=232451

        In OpenBSD there is no mcontext_t, but the needed information
        is contained directly in ucontext_t, so use the latter instead.

        This is essentially these two patches from the OpenBSD packaging
        of WebKitGTK:

        https://github.com/openbsd/ports/blob/865bd13/www/webkitgtk4/patches/patch-Source_WTF_wtf_PlatformRegisters_h
        https://github.com/openbsd/ports/blob/865bd13/www/webkitgtk4/patches/patch-Source_WTF_wtf_PlatformHave_h

        Reviewed by Carlos Garcia Campos.

        * wtf/PlatformHave.h:
        * wtf/PlatformRegisters.h:
        (WTF::registersFromUContext):

2021-10-28  Chris Dumez  <cdumez@apple.com>

        Add stubs for the Web Locks API
        https://bugs.webkit.org/show_bug.cgi?id=232438

        Reviewed by Geoffrey Garen.

        Add experimental feature flag, off by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-28  Alex Christensen  <achristensen@webkit.org>

        Disable NETSCAPE_PLUGIN_API at build time on macOS and Windows
        https://bugs.webkit.org/show_bug.cgi?id=232396

        Reviewed by Geoff Garen.

        It has been disabled at run time since https://trac.webkit.org/changeset/276720/webkit
        and https://trac.webkit.org/changeset/275910/webkit but is still able to be reached by tests.
        This begins the removal of the code and tests with what is close to the smallest change possible.

        * wtf/PlatformEnable.h:

2021-10-28  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Enable lazy image loading by default
        https://bugs.webkit.org/show_bug.cgi?id=208094

        Reviewed by Simon Fraser.

        Fix merge error of commit queue.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-28  Youenn Fablet  <youenn@apple.com>

        [ Mac wk1 ] 2 media-capabilities/webrtc tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=232283
        <rdar://problem/84637007>

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-26  Alex Christensen  <achristensen@webkit.org>

        Update PCM test public key to one with RSA-PSS OID
        https://bugs.webkit.org/show_bug.cgi?id=231048

        Reviewed by John Wilander.

        * wtf/PlatformHave.h:

2021-10-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebCore] Remove unneeded WTF:: namespace prefix
        https://bugs.webkit.org/show_bug.cgi?id=232226

        Reviewed by Myles C. Maxfield.

        * wtf/Forward.h:

2021-10-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Make Int128 operator* constexpr
        https://bugs.webkit.org/show_bug.cgi?id=232270

        Reviewed by Mark Lam.

        We remove MSVC X64 (so, Windows only) switching in Int128 operator* since
        it breaks constexpr-ness of operator*, which makes writing code difficult.
        We can bring this kind of optimization back when C++20 std::is_constant_evaluated()
        becomes available.

        * wtf/Int128.h:
        (WTF::operator*):

2021-10-25  Alex Christensen  <achristensen@webkit.org>

        Use xpc_connection_copy_invalidation_reason where available for debugging daemon connection failures
        https://bugs.webkit.org/show_bug.cgi?id=232152

        Reviewed by Brady Eidson.

        * wtf/PlatformHave.h:
        * wtf/spi/darwin/XPCSPI.h:

2021-10-25  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r284742.

        Reverting because this commit may have casued a regression on
        imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-
        speak-events.html

        Reverted changeset:

        "AX: Unify speech synthesizer platform usage for Mac/iOS"
        https://bugs.webkit.org/show_bug.cgi?id=231895
        https://commits.webkit.org/r284742

2021-10-24  Darin Adler  <darin@apple.com>

        [Cocoa] Adopt bridge_cast and makeVector in a few more places, including cases where adoptCF/NS was used incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=232200

        Reviewed by Anders Carlsson.

        * wtf/cocoa/URLCocoa.mm:
        (WTF::URL::URL): Use bridge_cast.
        (WTF::URL::createCFURL const): Ditto, using the RetainPtr version to avoid
        retain count churn.

2021-10-23  Alan Bujtas  <zalan@apple.com>

        Addressing post-commit review (r284744).

        * wtf/unicode/CharacterNames.h:

2021-10-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Replace current LLVM flang's Int128 with abseil-cpp's Int128
        https://bugs.webkit.org/show_bug.cgi?id=232129

        Reviewed by Darin Adler.

        We found that flang's signed Int128 implementation is not tested,
        and it has several issues about sign extension and division.

        Instead, we import abseil-cpp[1]'s int128 implementation.
        abseil-cpp is more battle-tested, and abseil is already used
        in WebKit too (ANGLE and libwebrtc use abseil-cpp as their utility
        library).

        For Apple readers, abseil-cpp for WebKit is approved in OSS-351.

        [1]: https://github.com/abseil/abseil-cpp

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Int128.cpp: Added.
        (WTF::UInt128Impl::UInt128Impl):
        (WTF::operator/):
        (WTF::operator%):
        (WTF::operator<<):
        (WTF::Int128Impl::Int128Impl):
        * wtf/Int128.h:
        (WTF::UInt128Max):
        (std::numeric_limits<WTF::UInt128Impl>::min):
        (std::numeric_limits<WTF::UInt128Impl>::lowest):
        (std::numeric_limits<WTF::UInt128Impl>::max):
        (std::numeric_limits<WTF::UInt128Impl>::epsilon):
        (std::numeric_limits<WTF::UInt128Impl>::round_error):
        (std::numeric_limits<WTF::UInt128Impl>::infinity):
        (std::numeric_limits<WTF::UInt128Impl>::quiet_NaN):
        (std::numeric_limits<WTF::UInt128Impl>::signaling_NaN):
        (std::numeric_limits<WTF::UInt128Impl>::denorm_min):
        (WTF::Int128Max):
        (WTF::Int128Min):
        (std::numeric_limits<WTF::Int128Impl>::min):
        (std::numeric_limits<WTF::Int128Impl>::lowest):
        (std::numeric_limits<WTF::Int128Impl>::max):
        (std::numeric_limits<WTF::Int128Impl>::epsilon):
        (std::numeric_limits<WTF::Int128Impl>::round_error):
        (std::numeric_limits<WTF::Int128Impl>::infinity):
        (std::numeric_limits<WTF::Int128Impl>::quiet_NaN):
        (std::numeric_limits<WTF::Int128Impl>::signaling_NaN):
        (std::numeric_limits<WTF::Int128Impl>::denorm_min):
        (WTF::MakeUInt128):
        (WTF::UInt128Impl::operator=):
        (WTF::UInt128Impl::operator<<=):
        (WTF::UInt128Impl::operator>>=):
        (WTF::UInt128Impl::operator+=):
        (WTF::UInt128Impl::operator-=):
        (WTF::UInt128Impl::operator*=):
        (WTF::UInt128Impl::operator/=):
        (WTF::UInt128Impl::operator%=):
        (WTF::UInt128Low64):
        (WTF::UInt128High64):
        (WTF::UInt128Impl::UInt128Impl):
        (WTF::UInt128Impl::operator bool const):
        (WTF::UInt128Impl::operator char const):
        (WTF::UInt128Impl::operator signed char const):
        (WTF::UInt128Impl::operator unsigned char const):
        (WTF::UInt128Impl::operator char16_t const):
        (WTF::UInt128Impl::operator char32_t const):
        (WTF::UInt128Impl::operator ABSL_INTERNAL_WCHAR_T const):
        (WTF::UInt128Impl::operator short const):
        (WTF::UInt128Impl::operator unsigned short const):
        (WTF::UInt128Impl::operator int const):
        (WTF::UInt128Impl::operator unsigned int const):
        (WTF::UInt128Impl::operator long const):
        (WTF::UInt128Impl::operator unsigned long const):
        (WTF::UInt128Impl::operator long long const):
        (WTF::UInt128Impl::operator unsigned long long const):
        (WTF::UInt128Impl::operator float const):
        (WTF::UInt128Impl::operator double const):
        (WTF::UInt128Impl::operator long double const):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::operator<):
        (WTF::operator>):
        (WTF::operator<=):
        (WTF::operator>=):
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator!):
        (WTF::operator~):
        (WTF::operator|):
        (WTF::operator&):
        (WTF::operator^):
        (WTF::UInt128Impl::operator|=):
        (WTF::UInt128Impl::operator&=):
        (WTF::UInt128Impl::operator^=):
        (WTF::operator<<):
        (WTF::operator>>):
        (WTF::int128_internal::AddResult):
        (WTF::int128_internal::SubstructResult):
        (WTF::operator*):
        (WTF::UInt128Impl::operator++):
        (WTF::UInt128Impl::operator--):
        (WTF::MakeInt128):
        (WTF::Int128Impl::operator=):
        (WTF::Int128Impl::operator+=):
        (WTF::Int128Impl::operator-=):
        (WTF::Int128Impl::operator*=):
        (WTF::Int128Impl::operator/=):
        (WTF::Int128Impl::operator%=):
        (WTF::Int128Impl::operator|=):
        (WTF::Int128Impl::operator&=):
        (WTF::Int128Impl::operator^=):
        (WTF::Int128Impl::operator<<=):
        (WTF::Int128Impl::operator>>=):
        (WTF::int128_internal::BitCastToSigned):
        (WTF::Int128Low64):
        (WTF::Int128High64):
        (WTF::Int128Impl::Int128Impl):
        (WTF::Int128Impl::operator bool const):
        (WTF::Int128Impl::operator char const):
        (WTF::Int128Impl::operator signed char const):
        (WTF::Int128Impl::operator unsigned char const):
        (WTF::Int128Impl::operator char16_t const):
        (WTF::Int128Impl::operator char32_t const):
        (WTF::Int128Impl::operator ABSL_INTERNAL_WCHAR_T const):
        (WTF::Int128Impl::operator short const):
        (WTF::Int128Impl::operator unsigned short const):
        (WTF::Int128Impl::operator int const):
        (WTF::Int128Impl::operator unsigned int const):
        (WTF::Int128Impl::operator long const):
        (WTF::Int128Impl::operator unsigned long const):
        (WTF::Int128Impl::operator long long const):
        (WTF::Int128Impl::operator unsigned long long const):
        (WTF::Int128Impl::operator float const):
        (WTF::Int128Impl::operator double const):
        (WTF::Int128Impl::operator long double const):
        (WTF::int128_internal::SignedAddResult):
        (WTF::int128_internal::SignedSubstructResult):
        (WTF::Int128Impl::operator++):
        (WTF::Int128Impl::operator--):
        (WTF::Int128Impl::operator+ const): Deleted.
        (WTF::Int128Impl::operator~ const): Deleted.
        (WTF::Int128Impl::operator- const): Deleted.
        (WTF::Int128Impl::operator! const): Deleted.
        (WTF::Int128Impl::operator std::uint64_t const): Deleted.
        (WTF::Int128Impl::operator std::int64_t const): Deleted.
        (WTF::Int128Impl::high const): Deleted.
        (WTF::Int128Impl::low const): Deleted.
        (WTF::Int128Impl::operator& const): Deleted.
        (WTF::Int128Impl::operator |  const): Deleted.
        (WTF::Int128Impl::operator^ const): Deleted.
        (WTF::Int128Impl::operator<< const): Deleted.
        (WTF::Int128Impl::operator>> const): Deleted.
        (WTF::Int128Impl::operator* const): Deleted.
        (WTF::Int128Impl::operator/ const): Deleted.
        (WTF::Int128Impl::operator% const): Deleted.
        (WTF::Int128Impl::operator< const): Deleted.
        (WTF::Int128Impl::operator<= const): Deleted.
        (WTF::Int128Impl::operator== const): Deleted.
        (WTF::Int128Impl::operator!= const): Deleted.
        (WTF::Int128Impl::operator>= const): Deleted.
        (WTF::Int128Impl::operator> const): Deleted.
        (WTF::Int128Impl::leadingZeroes const): Deleted.
        * wtf/LeadingZeroBitCount.cpp: Removed.
        * wtf/LeadingZeroBitCount.h: Removed.

2021-10-23  Alan Bujtas  <zalan@apple.com>

        [LFC][IFC] Breaking before hyphen is only allowed when line-break is loose
        https://bugs.webkit.org/show_bug.cgi?id=232191

        Reviewed by Antti Koivisto.

        * wtf/unicode/CharacterNames.h:

2021-10-23  Chris Fleizach  <cfleizach@apple.com>

        AX: Unify speech synthesizer platform usage for Mac/iOS
        https://bugs.webkit.org/show_bug.cgi?id=231895
        <rdar://problem/84372479>

        Reviewed by Andres Gonzalez.

        * wtf/PlatformHave.h:

2021-10-22  Joonghun Park  <pjh0718@gmail.com>

        Integer interpolation in animations should be rounded towards positive infinity, not away from zero.
        https://bugs.webkit.org/show_bug.cgi?id=232013

        Currently, interpolation of <integer> is rounding away from 0.
        The interpolation's result should be rounded according to the spec,
        https://drafts.csswg.org/css-values-4/#combine-integers, which is

        "the result is converted to an <integer> by rounding
        to the nearest integer, with values halfway between
        adjacent integers rounded towards positive infinity."

        Reviewed by Darin Adler.

        * wtf/MathExtras.h:
        (roundTowardsPositiveInfinity):

2021-10-22  Pablo Correa Gómez  <ablocorrea@hotmail.com>

        Enable logging in under non-systemd linux distros
        https://bugs.webkit.org/show_bug.cgi?id=232080

        Reviewed by Michael Catanzaro.

        * wtf/Assertions.h: Rename USE(JOURNALD) to ENABLE(JOURNALD_LOG)
        * wtf/Logger.h:
        (WTF::Logger::willLog const): Rename USE(JOURNALD) to
        ENABLE(JOURNALD_LOG)
        * wtf/PlatformGTK.cmake: Use renamed Journald library
        * wtf/PlatformWPE.cmake: Use renamed Journald library

2021-10-21  Aditya Keerthi  <akeerthi@apple.com>

        [Cocoa] Enable accent-color by default
        https://bugs.webkit.org/show_bug.cgi?id=232032
        rdar://84474404

        Reviewed by Wenson Hsieh.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

        Enable only on Cocoa platforms, as other platforms do not support
        painting accent colors yet.

2021-10-21  Aditya Keerthi  <akeerthi@apple.com>

        [Cocoa] Enable 'accent-color' by default
        https://bugs.webkit.org/show_bug.cgi?id=232032
        rdar://84474404

        Reviewed by Wenson Hsieh.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-21  Chris Lord  <clord@igalia.com>

        [WPE][GTK] Enable smooth scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=220512

        Reviewed by Carlos Garcia Campos.

        Enable smooth scrolling by default on GTK and WPE platforms.

        * Scripts/Preferences/WebPreferences.yaml:

2021-10-20  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider
        https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnableCocoa.h:

2021-10-20  Alex Christensen  <achristensen@webkit.org>

        URLParser should reject hosts with C0 control characters or U+007F
        https://bugs.webkit.org/show_bug.cgi?id=232034

        Reviewed by Tim Horton.

        This matches Chrome and Firefox and was proposed to the standard at
        https://github.com/whatwg/url/issues/627

        * wtf/URLParser.cpp:
        (WTF::isC0Control):
        (WTF::isForbiddenHostCodePoint):

2021-10-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Do not use strerror()
        https://bugs.webkit.org/show_bug.cgi?id=231913

        Reviewed by Chris Dumez.

        Add a new safeStrerror function that we can use without worrying about thread safety.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/SafeStrerror.cpp: Added.
        (WTF::safeStrerror):
        * wtf/SafeStrerror.h: Added.
        * wtf/linux/RealTimeThreads.cpp:
        (WTF::RealTimeThreads::promoteThreadToRealTime):
        * wtf/playstation/FileSystemPlayStation.cpp:
        (WTF::FileSystemImpl::deleteFile):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::deleteFile):
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::establishHandle):
        * wtf/threads/Signals.cpp:
        (WTF::jscSignalHandler):

2021-10-20  Youenn Fablet  <youenn@apple.com>

        Add support for requestVideoFrameCallback API and MediaStreamTrack-based backend support
        https://bugs.webkit.org/show_bug.cgi?id=231803

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] UserInteractive threads are not Real-time in Linux
        https://bugs.webkit.org/show_bug.cgi?id=220115

        Reviewed by Michael Catanzaro.

        Add RealTimeThreads singleton to register real time threads.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/Threading.cpp:
        (WTF::Thread::setCurrentThreadIsUserInteractive):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WTF::WorkQueueBase::platformInitialize):
        * wtf/linux/RealTimeThreads.cpp: Added.
        (WTF::RealTimeThreads::singleton):
        (WTF::RealTimeThreads::RealTimeThreads):
        (WTF::RealTimeThreads::registerThread):
        (WTF::RealTimeThreads::setEnabled):
        (WTF::RealTimeThreads::promoteThreadToRealTime):
        (WTF::RealTimeThreads::demoteThreadFromRealTime):
        (WTF::RealTimeThreads::demoteAllThreadsFromRealTime):
        (WTF::isRunningInSandbox):
        (WTF::realTimeKitGetProperty):
        (WTF::RealTimeThreads::realTimeKitMakeThreadRealTime):
        (WTF::RealTimeThreads::scheduleDiscardRealTimeKitProxy):
        (WTF::RealTimeThreads::discardRealTimeKitProxyTimerFired):
        * wtf/linux/RealTimeThreads.h: Added.
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::schedPolicy):
        (WTF::Thread::establishHandle):

2021-10-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove old GCC workaround for Allocator
        https://bugs.webkit.org/show_bug.cgi?id=231978

        Reviewed by Darin Adler.

        This is for old GCC. Since our GCC baseline is 8.3.0, this is no longer necessary.

        * wtf/FastMalloc.h:
        (WTF::FastAllocator::deallocate):
        (WTF::FastAllocator::construct): Deleted.
        (WTF::FastAllocator::destroy): Deleted.
        (WTF::FastAllocator::max_size const): Deleted.
        (WTF::FastAllocator::select_on_container_copy_construction const): Deleted.

2021-10-18  Filip Pizlo  <fpizlo@apple.com>

        StringBuffer should really know that strings might be 8-bit
        https://bugs.webkit.org/show_bug.cgi?id=231937

        Reviewed by Yusuke Suzuki.

        We somehow forgot to change this to use CharType instead of UChar.

        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::resize):

2021-10-19  Cameron McCormack  <heycam@apple.com>

        Ensure CanvasRenderingContext2D.drawImage(video) uses the right color space
        https://bugs.webkit.org/show_bug.cgi?id=229025
        <rdar://problem/81828490>

        Reviewed by Sam Weinig.

        * wtf/PlatformHave.h: Add HAVE_CVBUFFERCOPYATTACHMENTS.

2021-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284240.
        https://bugs.webkit.org/show_bug.cgi?id=231931

        NeedDifferentArchitectureToWorkWithWebpushd

        Reverted changeset:

        "WebKit Managed Notifications: Skeleton NotificationProvider."
        https://bugs.webkit.org/show_bug.cgi?id=231786
        https://commits.webkit.org/r284240

2021-10-18  Alex Christensen  <achristensen@webkit.org>

        Remove TCPServer
        https://bugs.webkit.org/show_bug.cgi?id=231912

        Reviewed by Chris Dumez.

        * wtf/PlatformHave.h:

2021-10-18  Alex Christensen  <achristensen@webkit.org>

        [ iOS15 Monterey ] TestWTF.WTF_URLExtras.URLExtras is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=231454

        Reviewed by Chris Dumez.

        * wtf/PlatformHave.h:

2021-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Simplify SleepDisabler by checking if we are under sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231670

        Reviewed by Adrian Perez de Castro.

        Move function to check if running inside a sandbox and add shouldUsePortal() to check whether portal sandbox
        should be used. WEBKIT_USE_PORTAL environment variable can be used to force the use of portals when not running
        under the sandbox.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/glib/Sandbox.cpp: Added.
        (WTF::isInsideFlatpak):
        (WTF::isInsideDocker):
        (WTF::isInsideSnap):
        (WTF::shouldUsePortal):
        * wtf/glib/Sandbox.h: Added.

2021-10-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove AVOID_NATIVE_INT128_T
        https://bugs.webkit.org/show_bug.cgi?id=231888

        Reviewed by Mark Lam.

        * wtf/Int128.h:

2021-10-18  Kiet Ho  <tho22@apple.com>

        Implement parsing and animation support for offset-distance, offset-position, offset-anchor
        https://bugs.webkit.org/show_bug.cgi?id=231491

        Reviewed by Antoine Quint.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Add new preference for CSS Motion Path support.

2021-10-17  Dean Jackson  <dino@apple.com>

        [WebXR] Stubs for WebXR Hand Input Module
        https://bugs.webkit.org/show_bug.cgi?id=231123
        <rdar://problem/83802135>

        Reviewed by Sam Weinig.

        Add an ENABLE_WEBXR_HANDS compile time flag and a WebXRHandsEnabled preference.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-10-17  David Kilzer  <ddkilzer@apple.com>

        Build fix #3: Adopt attribution AVCaptureSession SPI for GPU process
        https://bugs.webkit.org/show_bug.cgi?id=231621
        <rdar://problem/80748535>

        Unreviewed build fix.

        * wtf/PlatformHave.h:
        (HAVE_TCC_IOS_14_BIG_SUR_SPI): Add.
        - Used for TCC.framework SPI available in iOS 14 and macOS 11
          Big Sur and later.

2021-10-17  David Kilzer  <ddkilzer@apple.com>

        Add tests for WTF::OSObjectPtr/adoptOSObject in Cocoa with and without ARC
        <https://webkit.org/b/231819>
        <rdar://problem/84312692>

        Reviewed by Darin Adler.

        * wtf/OSObjectPtr.h:
        (WTF::adoptOSObject):
        - Rename when building with ARC enabled to prevent leaks or
          over-releases when linking ARC and non-ARC code.
        - Add WARN_UNUSED_RETURN attribute to match WTF::adoptNS().

2021-10-16  Robin Morisset  <rmorisset@apple.com>

        Allow WASM to use up to 4GB
        https://bugs.webkit.org/show_bug.cgi?id=229353
        rdar://81603447

        Reviewed by Yusuke Suzuki.

        Made some of CheckedArithmetic constexpr, and added isSumSmallerThanOrEqual since it is a commonly used test in ArrayBuffer and easy to get wrong in terms of overflow.

        * wtf/CheckedArithmetic.h:
        (WTF::isInBounds):
        (WTF::convertSafely):
        (WTF::isSumSmallerThanOrEqual):

2021-10-16  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, reverting r284143.

        Caused a series of assertions in layout tests in EWS

        Reverted changeset:

        "Scroll To Text Fragment directive parsing"
        https://bugs.webkit.org/show_bug.cgi?id=231410
        https://commits.webkit.org/r284143

2021-10-15  Basuke Suzuki  <basuke.suzuki@sony.com>

        Add flag to turn off Iso heap
        https://bugs.webkit.org/show_bug.cgi?id=231823

        Reviewed by Yusuke Suzuki.

        If this flag is off, then all allocations are replaced with FastMalloc.

        * wtf/IsoMalloc.h:
        * wtf/IsoMallocInlines.h:
        * wtf/PlatformUse.h:

2021-10-15  Ross Kirsling  <ross.kirsling@sony.com>

        Realize Mac CMake build of WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=231749

        Reviewed by Alex Christensen.

        * wtf/PlatformMac.cmake:

2021-10-15  Sihui Liu  <sihui_liu@apple.com>

        Enable Storage API by default
        https://bugs.webkit.org/show_bug.cgi?id=231826

        Reviewed by Alexey Shvayka.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up font-related USE(...) macros
        https://bugs.webkit.org/show_bug.cgi?id=231793

        Reviewed by Wenson Hsieh.

        IOS_FAMILY is true for tvOS and watchOS, so we should be using
        (PLATFORM(IOS) || PLATFORM(MACCATALYST) instead. Also, the simulator
        is not special here - it should get the same policy as the system it's
        simulating.

        * wtf/PlatformUse.h:

2021-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Design System UI fonts exist on MacCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=231792
        <rdar://problem/84273929>

        Reviewed by Wenson Hsieh.

        They shouldn't be disabled there.

        * wtf/PlatformHave.h:

2021-10-15  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider.
        <rdar://84275562> and https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        * Scripts/Preferences/WebPreferencesDebug.yaml:
        * wtf/PlatformEnableCocoa.h:

2021-10-15  Robin Morisset  <rmorisset@apple.com>

        Revert r284230, my last fixes to the watch build make it break tests
        https://bugs.webkit.org/show_bug.cgi?id=231797

        Unreviewed.

        Revert "Allow WASM to use up to 4GB"

        * wtf/CheckedArithmetic.h:
        (WTF::isInBounds):
        (WTF::convertSafely):
        (WTF::isSumSmallerThanOrEqual): Deleted.
        * wtf/PlatformUse.h:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Add AdAttributionDaemon plist on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231309

        Reviewed by John Wilander.

        * wtf/spi/darwin/XPCSPI.h:

2021-10-14  Robin Morisset  <rmorisset@apple.com>

        Allow WASM to use up to 4GB
        https://bugs.webkit.org/show_bug.cgi?id=229353
        rdar://81603447

        Reviewed by Yusuke Suzuki.

        Made some of CheckedArithmetic constexpr, and added isSumSmallerThanOrEqual since it is a commonly used test in ArrayBuffer and easy to get wrong in terms of overflow.

        * wtf/CheckedArithmetic.h:
        (WTF::isInBounds):
        (WTF::convertSafely):
        (WTF::isSumSmallerThanOrEqual):

2021-10-14  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Enable lazy image loading by default
        https://bugs.webkit.org/show_bug.cgi?id=208094

        Reviewed by Simon Fraser.

        Turn on lazy image load by default in WebKit.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix build failures with newer clang
        https://bugs.webkit.org/show_bug.cgi?id=231783

        Reviewed by Chris Dumez.

        In Identified case, we make copy constructor and assignment operator protected in IdentifiedBase to hide
        the ability to copy Identified / ThreadSafeIdentified to be copied to IdentifiedBase. So, in the derived
        classes, we should define both copy constructor and assignment operator.

        * wtf/Identified.h:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Remove Variant.h
        https://bugs.webkit.org/show_bug.cgi?id=231744

        Reviewed by Darin Adler.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/LikelyDenseUnsignedIntegerSet.h:
        * wtf/StdLibExtras.h:
        (WTF::switchOn):
        * wtf/Variant.h: Removed.
        * wtf/text/TextBreakIterator.h:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Share IPC communication code between webpushd and adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231718

        Reviewed by Brady Eidson.

        * wtf/spi/darwin/XPCSPI.h:

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        * Configurations/SDKVariant.xcconfig:

2021-10-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix with recent SDKs.

        Use std::invoke_result<> instead of std::result_of<>, as it was deprecated in C++17.

        * wtf/IndexedContainerIterator.h:
        (WTF::IndexedContainerIterator::operator* const):
        (WTF::IndexedContainerIterator::operator*): Deleted.
        * wtf/Vector.h:
        * wtf/WeakHashSet.h:

2021-10-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove std::iterator usage
        https://bugs.webkit.org/show_bug.cgi?id=231728

        Reviewed by Keith Miller.

        std::iterator<> is deprecated and defining 5 type aliases is encouraged[1].
        With new clang, using std::iterator<> causes compile error because of deprecation warnings.
        This patch removes std::iterator usage.

        [1]: https://www.fluentcpp.com/2018/05/08/std-iterator-deprecated/

        * wtf/HashIterators.h:
        (WTF:: const const): Deleted.
        * wtf/HashTable.h:
        * wtf/WeakHashMap.h:
        * wtf/WeakHashSet.h:

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Move getCurrentExecutablePath() and getCurrentExecutableName() to FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=231732

        Reviewed by Michael Catanzaro.

        * wtf/FileSystem.h:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::currentExecutablePath):
        (WTF::FileSystemImpl::currentExecutableName):
        * wtf/glib/GLibUtilities.cpp: Removed.
        (getCurrentExecutablePath): Deleted.
        (getCurrentExecutableName): Deleted.
        * wtf/glib/GLibUtilities.h: Removed.

2021-10-14  Tim Nguyen  <ntim@apple.com>

        Enable <dialog> element by default
        https://bugs.webkit.org/show_bug.cgi?id=231307

        Reviewed by Brent Fulgham.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump GLib version to 2.58.3
        https://bugs.webkit.org/show_bug.cgi?id=231726

        Reviewed by Philippe Normand.

        Remove enumToString() since we can use g_enum_to_string().

        * wtf/glib/GLibUtilities.cpp:
        (enumToString): Deleted.
        * wtf/glib/GLibUtilities.h:

2021-10-13  Megan Gardner  <megan_gardner@apple.com>

        Scroll To Text Fragment directive parsing
        https://bugs.webkit.org/show_bug.cgi?id=231410

        Reviewed by Chris Dumez.

        Text directive parsing for 
        https://wicg.github.io/scroll-to-text-fragment/

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-13  Chris Dumez  <cdumez@apple.com>

        Drop makeWeakPtr() and use WeakPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=231679

        Reviewed by Darin Adler.

        * wtf/WeakHashMap.h:
        * wtf/WeakHashSet.h:
        (WTF::copyToVector):
        * wtf/WeakPtr.h:
        (WTF::makeWeakPtr): Deleted.

2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Clearly distinguish serial from concurrent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=231418
        rdar://problem/84021977

        Reviewed by Chris Dumez.

        We split the WorkQueue code so that it becomes either a serial or concurrent one.
        A concurrent WorkQueue doesn't guarantee the order in which the queued tasks will run.
        That makes for a footgun if a consumer took a WorkQueue and was expecting
        it to be a serial one.

        WorkQueue (serial) and ConcurrentWorkQueue are made to both inherit from WorkQueueBase.
        A class should inherit from either the WorkQueue or the ConcurrentWorkQueue class.

        The Storage class present in NetworkCacheStore is the only code that was
        using a WorkQueue that could be either. For this class we will pass a
        WorkQueueBase; use of the base class directly is discouraged.

        No change in observable behaviour.

        * wtf/SuspendableWorkQueue.cpp:
        (WTF::SuspendableWorkQueue::SuspendableWorkQueue):
        * wtf/WorkQueue.cpp:
        (WTF::WorkQueueBase::create): removed
        (WTF::WorkQueueBase::WorkQueueBase):
        (WTF::WorkQueueBase::~WorkQueueBase):
        (WTF::WorkQueue::create):
        (WTF::ConcurrentWorkQueue::create):
        (WTF::WorkQueueBase::dispatchSync):
        (WTF::ConcurrentWorkQueue:apply):
        * wtf/WorkQueue.h:
        (WTF::WorkQueueBase::dispatchQueue const):
        (WTF::executeFunction): remove unused method declaration.
        (WTF::WorkQueue::runLoop const):
        (WTF::WorkQueue::WorkQueue):
        (WTF::ConcurrentWorkQueue::ConcurrentWorkQueue):
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueueBase::dispatch):
        (WTF::WorkQueueBase::dispatchAfter):
        (WTF::WorkQueueBase::dispatchSync):
        (WTF::WorkQueueBase::WorkQueueBase):
        (WTF::WorkQueueBase::platformInitialize):
        (WTF::WorkQueueBase::platformInvalidate):
        (WTF::WorkQueue::WorkQueue):
        (WTF::WorkQueue::constructMainWorkQueue):
        (WTF::ConcurrentWorkQueue::apply):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::WorkQueue):
        (WorkQueueBase::WorkQueueBase):
        (WorkQueueBase::platformInitialize):
        (WorkQueueBase::platformInvalidate):
        (WorkQueueBase::dispatch):
        (WorkQueueBase::dispatchAfter):

2021-10-13  Sihui Liu  <sihui_liu@apple.com>

        Enable FileSystemAccess and AccessHandle by default
        https://bugs.webkit.org/show_bug.cgi?id=231677

        Reviewed by Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::Variant and WTF::get
        https://bugs.webkit.org/show_bug.cgi?id=231675

        Reviewed by Chris Dumez.

        * wtf/Variant.h:
        (WTF::get): Deleted.

2021-10-13  Chris Dumez  <cdumez@apple.com>

        Stop using makeWeakPtr() in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=231651

        Reviewed by Alex Christensen.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtr::implForObject):

2021-10-13  Philippe Normand  <pnormand@igalia.com>

        CLang build warning in CheckedPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=231672

        Reviewed by Alex Christensen.

        Assert on the wrapped pointer. Asserting on `this` always results to true, defeating the
        purpose of the ASSERT.

        * wtf/CheckedPtr.h:
        (WTF::CheckedPtr::operator* const):
        (WTF::CheckedPtr::operator*):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use std::variant instead of WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=231629

        Reviewed by Chris Dumez.

        * wtf/LikelyDenseUnsignedIntegerSet.h:
        * wtf/SmallSet.h:
        * wtf/text/TextBreakIterator.cpp:
        (WTF::mapModeToBackingIterator):
        * wtf/text/TextBreakIterator.h:
        * wtf/text/cocoa/TextBreakIteratorInternalICUCocoa.cpp:
        (WTF::mapModeToBackingIterator):

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Remove some unused UIKit SPI declarations
        https://bugs.webkit.org/show_bug.cgi?id=231646

        Reviewed by Wenson Hsieh.

        * wtf/PlatformHave.h:

2021-10-12  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemSyncAccessHandle read() and write()
        https://bugs.webkit.org/show_bug.cgi?id=231466
        <rdar://problem/84050394>

        Reviewed by Youenn Fablet.

        * wtf/PlatformHave.h:

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Decrease use of makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231615

        Reviewed by Alex Christensen.

        Decrease use of makeWeakPtr() and use WeakPtr { } directly instead.

        * wtf/CancellableTask.h:
        (WTF::TaskCancellationGroup::Handle::Handle):
        * wtf/ListHashSet.h:
        (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
        (WTF::ListHashSetConstIterator::operator++):
        (WTF::ListHashSetConstIterator::operator--):
        * wtf/WeakHashSet.h:

2021-10-12  David Kilzer  <ddkilzer@apple.com>

        Switch WTF::bridge_cast to use type traits
        <https://webkit.org/b/231467>
        <rdar://problem/84050614>

        Reviewed by Darin Adler.

        * wtf/cocoa/TollFreeBridging.h: Add.
        (WTF::CFTollFreeBridgingTraits): Add.
        (WTF::NSTollFreeBridgingTraits): Add.
        - Define type traits for CF and NS classes with toll-free
          bridging.
        * wtf/cocoa/TypeCastsCocoa.h:
        (WTF::bridge_cast):
        - Make use of type traits in TollFreeBridging.h.

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Add support for ScrollOptions' ScrollBehavior and CSS scroll-behavior properties
        https://bugs.webkit.org/show_bug.cgi?id=188043
        <rdar://48436802>

        Reviewed by Myles C. Maxfield.

        Enable CSS smooth scrolling by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use STL instead of WTF::get_if, WTF::Monostate, WTF::visit, and WTF::holds_alternative
        https://bugs.webkit.org/show_bug.cgi?id=231582

        Reviewed by Darin Adler.

        * wtf/Variant.h:
        (WTF::switchOn):
        (): Deleted.
        (WTF::visit): Deleted.
        (WTF::get_if): Deleted.

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Allow direct construction of WeakPtr without makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231580

        Reviewed by Darin Adler.

        Allow direct construction of WeakPtr without makeWeakPtr(), and deprecate makeWeakPtr().

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtr::implForObject):
        (WTF::makeWeakPtr):

2021-10-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix for r283943.

        * wtf/JSONValues.h:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Remove non-HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE) code
        https://bugs.webkit.org/show_bug.cgi?id=231579

        Reviewed by Chris Dumez.

        * wtf/PlatformHave.h:
        This was incorrectly marked as not being available on watchOS and tvOS.  It is.

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Begin migration from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231086

        Reviewed by Chris Dumez.

        This is reasonably close to just changing the header and all the code stays the same until later.
        Templates that were only used once like std::variant_size I just changed inline instead of adding a wrapper to Variant.h.
        WTF::get still means something else, so I just changed the few that take a Variant parameter to std::get in the code.
        WTF::in_place maps to std::in_place_type and std::in_place_index_t, so I just changed those in the code too.
        There was also another visitor added since r283906 with different return types among the lambdas, so I just fixed it with the switch.

        * wtf/Forward.h:
        * wtf/Hasher.h:
        (WTF::add):
        * wtf/Variant.h:
        (WTF::get):
        (WTF::visit):
        (WTF::get_if):
        (WTF::in_place): Deleted.
        (WTF::__throw_bad_variant_access): Deleted.
        (WTF::=): Deleted.
        (WTF::__variant_storage::__get): Deleted.
        (WTF::__variant_storage::__get_rref): Deleted.
        (WTF::__variant_storage::__destroy): Deleted.
        (WTF::__storage_wrapper::__construct): Deleted.
        (WTF::__storage_wrapper::__storage_wrapper): Deleted.
        (WTF::__storage_wrapper::__get): Deleted.
        (WTF::__storage_wrapper::__get const): Deleted.
        (WTF::__storage_wrapper::__destroy): Deleted.
        (WTF::__storage_wrapper<_Type::__storage_wrapper): Deleted.
        (WTF::__storage_wrapper<_Type::__get): Deleted.
        (WTF::__storage_wrapper<_Type::__get const): Deleted.
        (WTF::__variant_base::~__variant_base): Deleted.
        (WTF::__backup_storage_ops::__move_construct_func): Deleted.
        (WTF::__backup_storage_ops::__destroy_func): Deleted.
        (WTF::__backup_storage::__backup_storage): Deleted.
        (WTF::__backup_storage::__destroy): Deleted.
        (WTF::__backup_storage::~__backup_storage): Deleted.
        (WTF::Variant<>::swap): Deleted.
        (WTF::__NOEXCEPT_): Deleted.
        (WTF::__variant_accessor::get): Deleted.
        (WTF::__visitor_table::__trampoline_func): Deleted.
        (WTF::__arg_selector): Deleted.
        (WTF::__visit_helper2::__visit): Deleted.
        (WTF::operator==): Deleted.
        (WTF::operator!=): Deleted.
        (WTF::operator<): Deleted.
        (WTF::operator>): Deleted.
        (WTF::operator>=): Deleted.
        (WTF::operator<=): Deleted.
        (WTF::__hash_visitor::operator()): Deleted.

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Only mark needed JSONImpl::ObjectBase functions with WTF_EXPORT_PRIVATE
        https://bugs.webkit.org/show_bug.cgi?id=231521

        Reviewed by Chris Dumez.

        I'm trying some wild experiments with the linker, and when I do the weak symbol checker fails because
        it is trying to export some of the inline functions at the bottom of JSONValues.h.
        Moving WTF_EXPORT_PRIVATE from exporting the whole class to only exporting the non-inline functions fixes it.

        * wtf/JSONValues.h:

2021-10-11  Dean Jackson  <dino@apple.com>

        Disable SystemPreview in WKContentProviderRegistry
        https://bugs.webkit.org/show_bug.cgi?id=231538
        rdar://84110761

        Reviewed by Tim Horton.

        Revert the change in r283811.

        * wtf/PlatformUse.h:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Prepare to switch from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231239

        Reviewed by Chris Dumez.

        This is the pieces of bug 231086 that can be done without changing behavior.

        1. It makes WTF::get_if look more like std::get_if by taking a pointer to a variant instead of a reference.
        2. std::visit is pickier than WTF::visit.  The former allows taking lambdas with different return types as long
        as the return types can be converted to the overall desired return type.  std::visit has a static_assert that the
        return types of all the lambdas are all exactly the same type, so I explicitly declare the return type of many lambdas.
        3. It also resolves some types that will become ambiguous by using WTF::in_place,
        which will become wrapped by std::in_place_type then removed.
        4. It adds a few explicit WTF:: and #include <wtf/Variant.h> that will be needed after removing Variant from Forward.h.
        5. It removes the fast malloc check in the one place a Variant is dynamically allocated in KeyedDecoderGeneric.cpp
        (which is for non-cocoa platforms) because std::variant isn't fast allocated.

        * wtf/LikelyDenseUnsignedIntegerSet.h:
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::operator* const):
        * wtf/Variant.h:
        (WTF::get_if):

2021-10-08  Tim Horton  <timothy_horton@apple.com>

        defaultAlternateFormControlDesignEnabled() can't read UIUserInterfaceIdiom in the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=231416
        <rdar://problem/84009054>

        Reviewed by Anders Carlsson.

        * Scripts/Preferences/WebPreferences.yaml:
        Remove the autogenerated default.

2021-10-08  Dean Jackson  <dino@apple.com>

        Disable SYSTEM_PREVIEW when UIKit internals is enabled
        https://bugs.webkit.org/show_bug.cgi?id=231438
        rdar://84019482

        Reviewed by Tim Horton.

        We're going to replace SystemPreview with the <model>
        element, so disable it when UIKit internals are enabled.

        * wtf/PlatformUse.h:

2021-10-08  Antti Koivisto  <antti@apple.com>

        Make WTF::IteratorRange reversible
        https://bugs.webkit.org/show_bug.cgi?id=231415

        Reviewed by Darin Adler.

        Also export some names out of the WTF namespace.

        * wtf/IteratorRange.h:
        (WTF::IteratorRange::rbegin const):
        (WTF::IteratorRange::rend const):

2021-10-07  Aditya Keerthi  <akeerthi@apple.com>

        [css-ui] Parsing support for accent-color
        https://bugs.webkit.org/show_bug.cgi?id=231334
        rdar://83955508

        Reviewed by Antti Koivisto.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-07  Chris Dumez  <cdumez@apple.com>

        Add feature flag for COOP / COEP violation reporting and turn off by default
        https://bugs.webkit.org/show_bug.cgi?id=231371

        Reviewed by Youenn Fablet.

        Add feature flag for COOP / COEP violation reporting and turn off by default since our
        implementation doesn't match the latest specification.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-06  Sihui Liu  <sihui_liu@apple.com>

        Add support for FileSystemSyncAccessHandle
        https://bugs.webkit.org/show_bug.cgi?id=231185
        <rdar://problem/83847859>

        Reviewed by Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::flushFile):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::flushFile):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::flushFile):

2021-10-06  Aditya Keerthi  <akeerthi@apple.com>

        Fix watchOS, tvOS, and macCatalyst builds after r283592
        https://bugs.webkit.org/show_bug.cgi?id=231300
        rdar://83936867

        Reviewed by Wenson Hsieh.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-10-06  Megan Gardner  <megan_gardner@apple.com>

        Allow text selection to flip.
        https://bugs.webkit.org/show_bug.cgi?id=231234
        rdar://83889188

        Reviewed by Wenson Hsieh.

        Add an internal flag to guard text selection flipping while
        we test to make sure this is reasonable to turn on everywhere.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-10-05  Tim Horton  <timothy_horton@apple.com>

        Add an alternate style for form controls, and implement it for checkboxes and radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=231160

        Reviewed by Sam Weinig.

        * Scripts/Preferences/WebPreferences.yaml:

2021-10-05  David Kilzer  <ddkilzer@apple.com>

        Follow-up #2: WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Unreviewed attempt to fix API tests.

        * wtf/cocoa/TypeCastsCocoa.h:
        (WTF::checked_objc_cast):
        - Rename checked_objc_cast<> to checked_objc_castARC<> when
          compiling with ARC enabled.
        - Also mark as `inline` function to allow for optimization.

2021-10-05  Cameron McCormack  <heycam@apple.com>

        Enable 2D canvas color space support on Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=231145
        <rdar://82948394>

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-04  Chris Dumez  <cdumez@apple.com>

        Add SPI to launch a service service worker in a WKWebView and expose service worker to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=231045
        <rdar://problem/83744069>

        Reviewed by Geoff Garen.

        * wtf/URL.cpp:
        (WTF::protocolHostAndPortAreEqual):
        Fix issue where protocolHostAndPortAreEqual() was doing a case-sensitive check. My new service worker
        API test was initially failing because of this since it is using an upper-case domain name.

2021-10-04  Sam Weinig  <weinig@apple.com>

        Split WebXR extension module IDLs into their own files and settings
        https://bugs.webkit.org/show_bug.cgi?id=231149

        Reviewed by Dean Jackson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        Adds WebXRAugmentedRealityModuleEnabled and WebXRGamepadsModuleEnabled
        to gate enabling the WebXR AR Module and the WebXR Gamepads Module on.

2021-10-03  David Kilzer  <ddkilzer@apple.com>

        WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Reviewed by Darin Adler.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::RetainPtr):
        (WTF::RetainPtr::checkType): Add.
        - Add type check for move constructor.

        * wtf/cocoa/TypeCastsCocoa.h:
        - Change #include to #import.
        (WTF_CF_TO_NS_BRIDGE_TRANSFER): Add.
        (WTF_CF_TO_NS_BRIDGE_TRANSFER): Add.
        - Helper macros for bridge_cast() and bridge_id_cast().
        (WTF_DECLARE_CF_NS_BRIDGE_CAST): Add.
        - Macro used to define bridge_cast() functions for all known
          toll-free-bridged types.
        (WTF::bridge_cast): Add.
        - Helper macro for toll-free-bridge casting from a known CF type
          to and from their Objective-C NS type.  Prevents ref churn for
          rvale RetainPtr<> objects.
        (WTF::bridge_id_cast): Add.
        - Helper macro for casting from any CFTypeRef to id.  Prevents
          ref churn for rvalue RetainPtr<> objects.
        (WTF::checked_objc_cast):
        - Simplified to match dynamic_objc_cast<> implementation in
          RetainPtr.h.

        * wtf/cocoa/VectorCocoa.h:
        (WTF::createNSArray):
        - Change return type to match object.

2021-10-03  Basuke Suzuki  <basuke.suzuki@sony.com>

        Enable release log to stderr
        https://bugs.webkit.org/show_bug.cgi?id=230725
        <rdar://problem/83740529>

        Reviewed by Michael Catanzaro.

        Define new compiler definitions, USE_LOG_STDERR for release logging. We don't have
        modern logging backend so that dumping out to stdout/stderr is still very valuable. 

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Logger.h:
        (WTF::Logger::log):
        (WTF::Logger::logVerbose):

2021-10-02  Philippe Normand  <pnormand@igalia.com>

        [GLib] Media session manager unable to handle more than one session
        https://bugs.webkit.org/show_bug.cgi?id=230250

        Reviewed by Adrian Perez de Castro.

        * wtf/glib/GRefPtr.h: Forward-declare GDBusConnection.

2021-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Upgrade in-tree OSS ICU header to 64.2 because macOS Mojave build will be dropped
        https://bugs.webkit.org/show_bug.cgi?id=231104

        Reviewed by Myles C. Maxfield.

        WebKit no longer supports macOS Mojave build. This means that we can upgrade in-tree ICU header,
        which is only used when OSS WebKit is built. ICU 64.2 is ICU shipped in macOS Catalina.

        * icu/LICENSE:
        * icu/README:
        * icu/unicode/alphaindex.h:
        * icu/unicode/brkiter.h:
        * icu/unicode/bytestream.h:
        (StringByteSink::StringByteSink):
        * icu/unicode/calendar.h:
        * icu/unicode/caniter.h:
        * icu/unicode/casemap.h:
        * icu/unicode/char16ptr.h:
        (Char16Ptr::Char16Ptr):
        (Char16Ptr::~Char16Ptr):
        (Char16Ptr::get const):
        (ConstChar16Ptr::ConstChar16Ptr):
        (ConstChar16Ptr::~ConstChar16Ptr):
        (ConstChar16Ptr::get const):
        (toUCharPtr):
        (toOldUCharPtr):
        * icu/unicode/coll.h:
        * icu/unicode/compactdecimalformat.h:
        * icu/unicode/currpinf.h:
        (CurrencyPluralInfo::operator!= const):
        * icu/unicode/currunit.h:
        * icu/unicode/datefmt.h:
        * icu/unicode/dcfmtsym.h:
        * icu/unicode/decimfmt.h:
        * icu/unicode/docmain.h:
        * icu/unicode/dtintrv.h:
        * icu/unicode/dtitvfmt.h:
        * icu/unicode/dtitvinf.h:
        * icu/unicode/dtptngen.h:
        * icu/unicode/edits.h:
        * icu/unicode/enumset.h:
        * icu/unicode/filteredbrk.h:
        * icu/unicode/fmtable.h:
        * icu/unicode/formattedvalue.h: Added.
        * icu/unicode/gender.h:
        * icu/unicode/icuplug.h:
        * icu/unicode/listformatter.h:
        * icu/unicode/localebuilder.h: Added.
        * icu/unicode/localpointer.h:
        (LocalPointer::LocalPointer):
        (LocalPointer::operator std::unique_ptr<T> ):
        (LocalArray::LocalArray):
        (LocalArray::operator std::unique_ptr<T[]> ):
        * icu/unicode/locdspnm.h:
        * icu/unicode/locid.h:
        (Locale::toLanguageTag const):
        (Locale::getKeywords const):
        (Locale::getUnicodeKeywords const):
        (Locale::getKeywordValue const):
        (Locale::getUnicodeKeywordValue const):
        * icu/unicode/measfmt.h:
        * icu/unicode/measunit.h:
        * icu/unicode/messagepattern.h:
        * icu/unicode/msgfmt.h:
        * icu/unicode/normalizer2.h:
        * icu/unicode/nounit.h:
        * icu/unicode/numberformatter.h:
        * icu/unicode/numberrangeformatter.h: Added.
        * icu/unicode/numfmt.h:
        * icu/unicode/numsys.h:
        * icu/unicode/parsepos.h:
        * icu/unicode/platform.h:
        * icu/unicode/plurfmt.h:
        * icu/unicode/plurrule.h:
        * icu/unicode/ptypes.h:
        * icu/unicode/rbbi.h:
        * icu/unicode/rbnf.h:
        * icu/unicode/regex.h:
        * icu/unicode/region.h:
        * icu/unicode/reldatefmt.h:
        * icu/unicode/simpleformatter.h:
        * icu/unicode/smpdtfmt.h:
        * icu/unicode/stringoptions.h:
        * icu/unicode/stringtriebuilder.h:
        * icu/unicode/timezone.h:
        * icu/unicode/translit.h:
        * icu/unicode/tzfmt.h:
        * icu/unicode/ubidi.h:
        * icu/unicode/ubiditransform.h:
        * icu/unicode/ucal.h:
        * icu/unicode/uchar.h:
        * icu/unicode/ucnv.h:
        * icu/unicode/ucol.h:
        * icu/unicode/uconfig.h:
        * icu/unicode/ucpmap.h: Added.
        * icu/unicode/ucptrie.h: Added.
        * icu/unicode/ucurr.h:
        * icu/unicode/udat.h:
        * icu/unicode/udateintervalformat.h:
        * icu/unicode/udatpg.h:
        * icu/unicode/uenum.h:
        * icu/unicode/uformattedvalue.h: Added.
        * icu/unicode/ugender.h:
        * icu/unicode/ulistformatter.h:
        * icu/unicode/umachine.h:
        * icu/unicode/umutablecptrie.h: Added.
        * icu/unicode/uniset.h:
        * icu/unicode/unistr.h:
        * icu/unicode/unum.h:
        * icu/unicode/unumberformatter.h:
        * icu/unicode/unumsys.h:
        * icu/unicode/uobject.h:
        * icu/unicode/upluralrules.h:
        * icu/unicode/uregex.h:
        * icu/unicode/ureldatefmt.h:
        * icu/unicode/urename.h:
        * icu/unicode/ures.h:
        * icu/unicode/uscript.h:
        * icu/unicode/usearch.h:
        * icu/unicode/uset.h:
        * icu/unicode/uspoof.h:
        * icu/unicode/ustring.h:
        * icu/unicode/utext.h:
        * icu/unicode/utf16.h:
        * icu/unicode/utf8.h:
        * icu/unicode/utypes.h:
        * icu/unicode/uvernum.h:

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Drop support for macOS < 10.15
        https://bugs.webkit.org/show_bug.cgi?id=231085

        Reviewed by Darin Adler.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:
        * wtf/PlatformUse.h:

2021-10-01  Youenn Fablet  <youenn@apple.com>

        Add support for PushEvent
        https://bugs.webkit.org/show_bug.cgi?id=231007
        <rdar://problem/83707470>

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths
        https://bugs.webkit.org/show_bug.cgi?id=231081

        Reviewed by Alex Christensen.

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths, as we no longer support Mac OS 14 Mojave.

        * wtf/PlatformUse.h:

2021-09-30  Sihui Liu  <sihui_liu@apple.com>

        Make File System Access API available in Worker
        https://bugs.webkit.org/show_bug.cgi?id=230805
        <rdar://problem/83552511>

        Reviewed by Youenn Fablet.

        * wtf/CrossThreadCopier.h:

2021-09-30  Eddy Wong  <eddy_wong@apple.com>

        Adopt presentationSceneIdentifierForPaymentAuthorizationController delegate call from PassKit
        https://bugs.webkit.org/show_bug.cgi?id=230874

        Reviewed by Devin Rousso.

        * wtf/PlatformEnableCocoa.h: Defines new flag ENABLE_APPLE_PAY_REMOTE_UI_USES_SCENE

2021-09-30  Darin Adler  <darin@apple.com>

        Add StdLibExtras.h include to a file that uses bitwise_cast without including it
        https://bugs.webkit.org/show_bug.cgi?id=231027

        Reviewed by Yusuke Suzuki.

        * wtf/RawPtrTraits.h: Include StdLibExtras.h.

2021-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] REGRESSION(r280726): registry keys enabling GPU process mode don't work
        https://bugs.webkit.org/show_bug.cgi?id=230871

        Reviewed by Don Olmstead.

        * wtf/PlatformHave.h: r270175 defined HAVE_SYSTEM_FEATURE_FLAGS
        for Windows to use WebKit::isFeatureFlagEnabled. But, it is no
        longer needed.

2021-09-29  Kiet Ho  <tho22@apple.com>

        Implement the 'ic' unit from CSS Values 4
        https://bugs.webkit.org/show_bug.cgi?id=204276
        <rdar://problem/57256127>

        Reviewed by Myles C. Maxfield.

        * wtf/unicode/CharacterNames.h: add CJK water glyph (U+6C34) constant.

2021-09-29  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=230948

        Reviewed by Simon Fraser.

        Flip the switch.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-28  Yusuke Suzuki  <ysuzuki@apple.com>

        iOS simulator build should use PTHREAD_JIT_PERMISSIONS_API
        https://bugs.webkit.org/show_bug.cgi?id=230920
        rdar://77494871

        Reviewed by Filip Pizlo.

        In AppleSilicon macOS, we should use PTHREAD_JIT_PERMISSIONS_API for OSS build.
        However, we are not enabling that for iOS simulator build. This patch enables that.
        This API exists after iOS 14.0 SDK.

        * wtf/PlatformUse.h:

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * wtf/PlatformMac.cmake:

2021-09-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix Windows build
        https://bugs.webkit.org/show_bug.cgi?id=230876

        * wtf/GenericTimeMixin.h:
        (WTF::GenericTimeMixin::operator+=):
        (WTF::GenericTimeMixin::operator-=):

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add ApproximateTime
        https://bugs.webkit.org/show_bug.cgi?id=230876

        Reviewed by Filip Pizlo.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ApproximateTime.cpp: Copied from Source/WTF/wtf/ClockType.cpp.
        (WTF::ApproximateTime::approximateWallTime const):
        (WTF::ApproximateTime::approximateMonotonicTime const):
        (WTF::ApproximateTime::dump const):
        * wtf/ApproximateTime.h: Copied from Source/WTF/wtf/MonotonicTime.h.
        (WTF::ApproximateTime::MarkableTraits::isEmptyValue):
        (WTF::ApproximateTime::MarkableTraits::emptyValue):
        (std::isnan):
        (std::isinf):
        (std::isfinite):
        * wtf/CMakeLists.txt:
        * wtf/ClockType.cpp:
        (WTF::printInternal):
        * wtf/ClockType.h:
        * wtf/CurrentTime.cpp:
        (WTF::MonotonicTime::fromMachAbsoluteTime):
        (WTF::MonotonicTime::toMachAbsoluteTime const):
        (WTF::ApproximateTime::fromMachApproximateTime):
        (WTF::ApproximateTime::toMachApproximateTime const):
        (WTF::ApproximateTime::now):
        * wtf/MonotonicTime.h:
        * wtf/Seconds.cpp:
        (WTF::Seconds::operator+ const):
        (WTF::Seconds::operator- const):
        * wtf/Seconds.h:
        * wtf/TimeWithDynamicClockType.cpp:
        (WTF::TimeWithDynamicClockType::now):
        (WTF::TimeWithDynamicClockType::approximateTime const):
        (WTF::TimeWithDynamicClockType::approximateWallTime const):
        (WTF::TimeWithDynamicClockType::approximateMonotonicTime const):
        * wtf/TimeWithDynamicClockType.h:
        * wtf/WallTime.h:

2021-09-27  Antti Koivisto  <antti@apple.com>

        [LFC] Use CheckedRef/Ptr instead of WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=230821

        Reviewed by Alan Bujtas.

        * wtf/CheckedRef.h:
        (WTF::CanMakeCheckedPtrBase::incrementPtrCount const):
        (WTF::CanMakeCheckedPtrBase::decrementPtrCount const):
        (WTF::CanMakeCheckedPtrBase::incrementPtrCount): Deleted.
        (WTF::CanMakeCheckedPtrBase::decrementPtrCount): Deleted.

        Make const so CheckedPtr<const Foo> works.

2021-09-27  Jean-Yves Avenard  <jya@apple.com>

        Vorbis decoder can't be instantiated - Remove workaround added in bug 228139
        https://bugs.webkit.org/show_bug.cgi?id=230742
        rdar://83484414

        Reviewed by Eric Carlson.

        * wtf/PlatformUse.h: Add USE_VORBIS_AUDIOCOMPONENT_WORKAROUND

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        * wtf/Bag.h:
        * wtf/Packed.h:
        (WTF::PackedAlignedPtr::operator* const):

2021-09-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283102, r283103 and r283104.
        https://bugs.webkit.org/show_bug.cgi?id=230854

        It regresses JetStream2 on iOS devices

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283102

        "Unreviewed, fix CLoop build"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283103

        "Unreviewed, fix CLoop build part 2"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283104

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        * wtf/Bag.h:
        * wtf/Packed.h:
        (WTF::PackedAlignedPtr::operator* const):

2021-09-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283083 and r283088.
        https://bugs.webkit.org/show_bug.cgi?id=230806

        Windows pors are crashing

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283083

        "Make byte codes with arithmetic profiles switch to using an
        index instead of a pointer in metadata"
        https://bugs.webkit.org/show_bug.cgi?id=230798
        https://commits.webkit.org/r283088

2021-09-25  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        * wtf/Bag.h:
        * wtf/Packed.h:
        (WTF::PackedAlignedPtr::operator* const):

2021-09-24  Devin Rousso  <drousso@apple.com>

        Add typechecking `is` overloads for `std::unique_ptr`, `WTF::UniqueRef`, and `WTF::WeakPtr`
        https://bugs.webkit.org/show_bug.cgi?id=230734

        Reviewed by Chris Dumez.

        * wtf/StdLibExtras.h:
        * wtf/TypeCasts.h:
        (WTF::is):
        * wtf/UniqueRef.h:
        (WTF::GetPtrHelper<UniqueRef<T>>::getPtr): Added.
        (WTF::is): Added.
        * wtf/WeakPtr.h:
        (WTF::is): Added.

2021-09-24  Jonathan Bedard  <jbedard@apple.com>

        [iOS 15] Support building WebKit (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=227002
        <rdar://problem/79316598>

        Reviewed by Ryan Haddad.

        * wtf/spi/darwin/XPCSPI.h: Import NSError header.

2021-09-23  Tim Horton  <timothy_horton@apple.com>

        Move more linked-on-or-after checks to WebCore::linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=230694

        Reviewed by Wenson Hsieh.

        * wtf/spi/darwin/dyldSPI.h:

2021-09-23  Jean-Yves Avenard  <jya@apple.com>

        Opus and Vorbis codecs aren't available on iPad.
        https://bugs.webkit.org/show_bug.cgi?id=230595
        rdar://problem/83382734

        Vorbis and Opus are usable on platforms other than macOS and are being checked
        at runtime already.
        Reviewed by Eric Carlson.

        * wtf/PlatformEnableCocoa.h:

2021-09-22  Chris Dumez  <cdumez@apple.com>

        Drop makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230626

        Reviewed by Alex Christensen.

        * wtf/Ref.h:

2021-09-22  Brady Eidson  <beidson@apple.com>

        Disable FTP.
        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477

        Reviewed by Geoff Garen.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

        * wtf/URL.cpp:
        (WTF::URL::protocolIsInFTPFamily const):
        (WTF::protocolIsInFTPFamily):
        * wtf/URL.h:

2021-09-22  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE(SMOOTH_SCROLLING)
        https://bugs.webkit.org/show_bug.cgi?id=230587

        Reviewed by Tim Horton.

        ENABLE(SMOOTH_SCROLLING) was always enabled on macOS, so remove it. The pref defaults
        to true on macOS, and false elsewhere.

        * Scripts/Preferences/WebPreferences.yaml:
        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-09-21  Simon Fraser  <simon.fraser@apple.com>

        Change from ENABLE(RUBBER_BANDING) to HAVE(RUBBER_BANDING)
        https://bugs.webkit.org/show_bug.cgi?id=230583

        Reviewed by Tim Horton.

        RUBBER_BANDING is not a feature we'll ever turn off on macOS, and it was only ever enabled
        for that platform. However, it's also used in some cross-platform code, so
        HAVE(RUBBER_BANDING) makes more sense for that use.

        Also remove ENABLE(RUBBER_BANDING) #ifdefs from inside PLATFORM(MAC) code.

        * Scripts/Preferences/WebPreferences.yaml:
        * wtf/PlatformHave.h:

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Reduce use of makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230585

        Reviewed by Alex Christensen.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrFactory::createWeakPtr const):

2021-09-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Use Int128 in MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=230575

        Reviewed by Eric Carlson.

        Previously, __int128_t exists only in 64bit clang and GCC environments. But now
        we always have Int128. Int128 is __int128_t in 64bit clang and GCC, and Int128 library
        implementation in the other environments. So we always use Int128 code in MediaTime.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::setTimeScale):

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Drop makeRefPtr() and use RefPtr { } directly instead
        https://bugs.webkit.org/show_bug.cgi?id=230564

        Reviewed by Alex Christensen.

        * wtf/RefPtr.h:

2021-09-21  David Kilzer  <ddkilzer@apple.com>

        Rename {checked,dynamic}_ns_cast<> to {checked,dynamic}_objc_cast<>
        <https://webkit.org/b/230508>
        <rdar://problem/83323145>

        Reviewed by Brent Fulgham.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformMac.cmake:
        - Update for rename of TypeCastsNS.h to TypeCastsCocoa.h.

        * wtf/RetainPtr.h:
        (WTF::dynamic_objc_cast):
        - Move dynamic_ns_cast<> from TypeCastsNS.h to here.
        - Remove `using` statements to limit Objective-C types without
          asterisks to match RetainPtr<>.
        * wtf/cocoa/TypeCastsCocoa.h: Rename from TypeCastsNS.h.
        (WTF::checked_objc_cast):
        (WTF::dynamic_objc_cast):
        - Do the rename.
        - Remove "using WTF::dynamic_ns_cast;" instead of renaming it
          since this is already in RetainPtr.h.

2021-09-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Enable MSE in WKWebViews by default on iPad
        https://bugs.webkit.org/show_bug.cgi?id=230426

        Reviewed by Tim Horton.

        Give a default value getter for the MediaSourceEnabled preference.

        * Scripts/Preferences/WebPreferences.yaml:

2021-09-21  Philip Chimento  <philip.chimento@gmail.com>

        Add LLVM/FLang's int128_t implementation to WTF
        https://bugs.webkit.org/show_bug.cgi?id=230437

        Added int128_t implementation from LLVM, and its dependency
        LeadingZeroBitCount.h. Both reformatted according to WebKit style.

        Reviewed by Yusuke Suzuki.

        * LICENSE-LLVM.txt: Added.
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Int128.h: Added.
        (WTF::Int128Impl::Int128Impl):
        (WTF::Int128Impl::operator+ const):
        (WTF::Int128Impl::operator~ const):
        (WTF::Int128Impl::operator- const):
        (WTF::Int128Impl::operator! const):
        (WTF::Int128Impl::operator bool const):
        (WTF::Int128Impl::operator std::uint64_t const):
        (WTF::Int128Impl::operator std::int64_t const):
        (WTF::Int128Impl::operator int const):
        (WTF::Int128Impl::high const):
        (WTF::Int128Impl::low const):
        (WTF::Int128Impl::operator++):
        (WTF::Int128Impl::operator--):
        (WTF::Int128Impl::operator& const):
        (WTF::Int128Impl::operator |  const):
        (WTF::Int128Impl::operator^ const):
        (WTF::Int128Impl::operator<< const):
        (WTF::Int128Impl::operator>> const):
        (WTF::Int128Impl::operator* const):
        (WTF::Int128Impl::operator/ const):
        (WTF::Int128Impl::operator% const):
        (WTF::Int128Impl::operator< const):
        (WTF::Int128Impl::operator<= const):
        (WTF::Int128Impl::operator== const):
        (WTF::Int128Impl::operator!= const):
        (WTF::Int128Impl::operator>= const):
        (WTF::Int128Impl::operator> const):
        (WTF::Int128Impl::operator&=):
        (WTF::Int128Impl::operator|=):
        (WTF::Int128Impl::operator^=):
        (WTF::Int128Impl::operator<<=):
        (WTF::Int128Impl::operator>>=):
        (WTF::Int128Impl::operator+=):
        (WTF::Int128Impl::operator-=):
        (WTF::Int128Impl::operator*=):
        (WTF::Int128Impl::operator/=):
        (WTF::Int128Impl::operator%=):
        (WTF::Int128Impl::leadingZeroes const):
        * wtf/LeadingZeroBitCount.cpp: Added.
        * wtf/LeadingZeroBitCount.h: Added.
        (WTF::leadingZeroBitCount):
        (WTF::bitsNeededFor):

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Reduce use of makeRefPtr() and use RefPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=230503

        Reviewed by Geoffrey Garen.

        * wtf/CrossThreadTask.h:
        (WTF::createCrossThreadTask):

2021-09-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some code that controls Live Text selection behavior
        https://bugs.webkit.org/show_bug.cgi?id=230482
        rdar://83173597

        Reviewed by Megan Gardner.

        Add an (off-by-default) internal feature to enable certain enhancements to Live Text.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-09-20  Brent Fulgham  <bfulgham@apple.com>

        Remove XSS Auditor: Part 1 (Turn off by default)
        https://bugs.webkit.org/show_bug.cgi?id=230483
        <rdar://problem/83310922>

        Reviewed by Yusuke Suzuki.

        As an initial step in removing the XSS Auditor, turn it off by default.

        * Scripts/Preferences/WebPreferences.yaml:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Stop using makeRef(*this) / makeRefPtr(this)
        https://bugs.webkit.org/show_bug.cgi?id=230464

        Reviewed by Alex Christensen.

        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::dispatchAfter):
        * wtf/glib/SocketConnection.cpp:
        (WTF::SocketConnection::SocketConnection):
        (WTF::SocketConnection::waitForSocketWritability):

2021-09-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make AVSampleBufferVideoOutput support an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=230424

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformHave.h:

2021-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS Family] Delete letterpress support
        https://bugs.webkit.org/show_bug.cgi?id=230441

        Reviewed by Tim Horton.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-09-17  David Kilzer  <ddkilzer@apple.com>

        Build fix: WebKit::WebProcessPool should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/230227>
        <rdar://problem/83067708>

        * wtf/spi/cocoa/NSObjCRuntimeSPI.h:
        - Fix internal Catalina builds by including
          NSObjCRuntime_Private.h, but falling through to define
          NS_DIRECT and NS_DIRECT_MEMBERS if they weren't defined in the
          private header.

2021-09-17  Tim Horton  <timothy_horton@apple.com>

        Enable UseCGDisplayListsForDOMRendering by default where it is available
        https://bugs.webkit.org/show_bug.cgi?id=230387

        Reviewed by Dean Jackson.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-09-17  Cameron McCormack  <heycam@apple.com>

        Preserve color space when creating ImageBuffers for ImageBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=229022
        <rdar://problem/81828459>

        Reviewed by Sam Weinig.

        * wtf/PlatformHave.h:

2021-09-17  Simon Fraser  <simon.fraser@apple.com>

        Convert usesMockScrollAnimator from a DeprecatedGlobalSettings to a WebPreference
        https://bugs.webkit.org/show_bug.cgi?id=230371

        Reviewed by Tim Horton.

        Add a MockScrollAnimatorEnabled setting.

        * Scripts/Preferences/WebPreferences.yaml:

2021-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add a build option to enable ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230254

        Reviewed by Adrian Perez de Castro.

        Enable isolated tree when building with ATSPI.

        * Scripts/Preferences/WebPreferences.yaml:

2021-09-16  David Kilzer  <ddkilzer@apple.com>

        WebKit::WebProcessPool should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/230227>
        <rdar://problem/83067708>

        Reviewed by Darin Adler.

        Tests (API):
            TestWTF.TypeCastsNS.checked_ns_cast
            TestWTF.TypeCastsNS.dynamic_ns_cast
            TestWTF.TypeCastsNS.dynamic_ns_cast_RetainPtr

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformMac.cmake:
        - Add new header files to the project.

        * wtf/cocoa/TypeCastsNS.h: Add.
        (WTF::checked_ns_cast):
        (WTF::dynamic_ns_cast):
        - Add casts for NS objects similar to TypeCastsCF.h.

        * wtf/PlatformHave.h:
        (HAVE_NS_DIRECT_SUPPORT): Add.
        - Note that clang for macOS 11 Big Sur claims to know about the
          attributes, but will fail to compile if they are actually
          used.

        * wtf/spi/cocoa/NSObjCRuntimeSPI.h: Add.
        (NS_DIRECT):
        (NS_DIRECT_MEMBERS):
        - Define compiler attributes for direct dispatch of Objective-C
          methods.

2021-09-16  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Remove ENABLE_RESIZE_OBSERVER build-time option. This option is
        quite broken if you try to disable it.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnableCocoa.h:

2021-09-16  Tim Horton  <timothy_horton@apple.com>

        Adjust ARKIT_INLINE_PREVIEW* compile time flags
        https://bugs.webkit.org/show_bug.cgi?id=230332

        Reviewed by Sam Weinig.

        * wtf/PlatformEnableCocoa.h:
        Make these ENABLE()s instead of HAVE()s (as they control a WebKit feature).
        Also, disable the ASVInlinePreview version if WKSeparatedModelView is enabled,
        we don't need both, and we currently always make a WKSeparatedModelView
        in that case anyway.

        * wtf/PlatformHave.h:
        Stop using __has_include in favor of version checks, now that
        the header has been around for a while.

2021-09-16  Youenn Fablet  <youenn@apple.com>

        Enable RTCRtpScriptTransform by default
        https://bugs.webkit.org/show_bug.cgi?id=230220

        Reviewed by Eric Carlson.

        Splitting  WebRTCInsertableStreamsEnabled to WebRTCEncodedTransformEnabled and WebRTCSFrameTransformEnabled.
        Keeping WebRTCSFrameTransformEnabled as off by default until SFrame solidifies and mark WebRTCEncodedTransformEnabled as on by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Disable display-p3 canvas and ImageData on platforms other than Monterey+ and iOS 15+
        https://bugs.webkit.org/show_bug.cgi?id=230139
        <rdar://81828819>

        Reviewed by Sam Weinig.

        Add HAVE(CORE_ANIMATION_FIX_FOR_RADAR_78402035) to represent whether
        CoreAnimation has a fix for a bug that prevents Display P3 canvas
        rendering operations from behaving correctly.

        Add ENABLE(PREDEFINED_COLOR_SPACE_DISPLAY_P3) to represent whether the
        "display-p3" values of the PredefinedColorSpace IDL enum is enabled.
        This in turn controls whether Display P3 canvases and ImageData objects
        can be created. We turn this on only for platforms where
        ENABLE(DESTINATION_COLOR_SPACE_DISPLAY_P3), since that is what the
        canvas and ImageData backing stores use, and only if
        HAVE(CORE_ANIMATION_FIX_FOR_RADAR_78402035). The result is that these
        features are only enabled on macOS Monterey+ and iOS 15+.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-09-15  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Remove ENABLE_INTERSECTION_OBSERVER build-time option. This option is
        quite broken if you try to disable it.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnableCocoa.h:

2021-09-15  Alex Christensen  <achristensen@webkit.org>

        Add IDL skeleton for SharedWorker
        https://bugs.webkit.org/show_bug.cgi?id=230293

        Reviewed by Geoff Garen.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-14  John Wilander  <wilander@apple.com>

        Rename RESOURCE_LOAD_STATISTICS to INTELLIGENT_TRACKING_PREVENTION
        https://bugs.webkit.org/show_bug.cgi?id=230279
        <rdar://problem/83118683>

        Reviewed by Darin Adler.

        * wtf/PlatformEnableCocoa.h:

2021-09-14  Chris Dumez  <cdumez@apple.com>

        Enable BroadcastChannel for modern WebKit
        https://bugs.webkit.org/show_bug.cgi?id=230235

        Reviewed by Geoffrey Garen.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r282408.

        Breaks internal builds.

        Reverted changeset:

        "Enable RTCRtpScriptTransform by default"
        https://bugs.webkit.org/show_bug.cgi?id=230220
        https://commits.webkit.org/r282408

2021-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSFontFaceSrcValue.cssText should be quoted consistently with other browsers
        https://bugs.webkit.org/show_bug.cgi?id=230273
        <rdar://problem/79644124>

        Reviewed by Darin Adler.

        * wtf/unicode/CharacterNames.h:

2021-09-14  Youenn Fablet  <youenn@apple.com>

        Enable RTCRtpScriptTransform by default
        https://bugs.webkit.org/show_bug.cgi?id=230220

        Reviewed by Eric Carlson.

        Splitting  WebRTCInsertableStreamsEnabled to WebRTCEncodedTransformEnabled and WebRTCSFrameTransformEnabled.
        Keeping WebRTCSFrameTransformEnabled as off by default until SFrame solidifies and mark WebRTCEncodedTransformEnabled as on by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        StackTrace outputs a garbage prefix because WTF::StackTrace::m_prefix is filled with the stack content
        https://bugs.webkit.org/show_bug.cgi?id=230207

        Reviewed by Yusuke Suzuki.

        r278474 (Bug 226390) added a new member m_prefix to StackTrace at
        the bottom of the structure. However, StackTrace isn't a normal
        structure. The members are filled with the stack content.

        * wtf/StackTrace.h: Moved the m_prefix to the top of the members.

2021-09-14  Kate Cheney  <katherine_cheney@apple.com>

        Followup to https://bugs.webkit.org/show_bug.cgi?id=217784

        Reviewed by Wenson Hsieh.

        Update platform name for watchOS.

        * Scripts/Preferences/WebPreferences.yaml:

2021-09-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate to CTFontHasTable() from CTFontCopyAvailableTables()
        https://bugs.webkit.org/show_bug.cgi?id=230248

        Reviewed by Anders Carlsson.

        * wtf/PlatformUse.h:

2021-09-13  Alex Christensen  <achristensen@webkit.org>

        Add unit test that uses PCM daemon
        https://bugs.webkit.org/show_bug.cgi?id=230191

        Reviewed by Chris Dumez.

        * wtf/PlatformHave.h:
        * wtf/spi/darwin/XPCSPI.h:

2021-09-13  Sihui Liu  <sihui_liu@apple.com>

        Add stub for File System Access API
        https://bugs.webkit.org/show_bug.cgi?id=230101

        Reviewed by Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-13  Sam Sneddon  <gsnedders@apple.com>

        Move ENABLE_RESOLUTION_MEDIA_QUERY to a runtime flag, start running tests again
        https://bugs.webkit.org/show_bug.cgi?id=229776

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        Add ResolutionMediaFeatureEnabled

2021-09-13  Youenn Fablet  <youenn@apple.com>

        Remove WritableStream runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=230148

        Reviewed by Sihui Liu.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-11  Philippe Normand  <pnormand@igalia.com>

        [GLIB] MediaSession is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=217991
        <rdar://problem/70740119>

        Reviewed by Michael Catanzaro.

        GRefPtr template specialization for GDBusNodeInfo.

        * wtf/glib/GRefPtr.cpp:
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * wtf/glib/GRefPtr.h:

2021-09-10  Alex Christensen  <achristensen@webkit.org>

        Use std::not_fn instead of lambda in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=230058

        Reviewed by Darin Adler.

        Since the return type of std::not_fn is not specified, it can't be converted to a bool(*)(UChar).
        This necessitates the templatizing of CodeUnitMatchFunction to be anything that is invocable with a UChar
        and returns a type that is convertable to a bool.

        * wtf/URLParser.cpp:
        (WTF::dnsNameEndsInNumber):
        * wtf/text/StringCommon.h:
        * wtf/text/StringImpl.h:
        (WTF::find): Deleted.
        * wtf/text/StringView.h:
        * wtf/text/WTFString.h:

2021-09-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r282105.

        Add description for "BroadcastChannel Origin Partitioning" experimental feature.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed, follow-up after r282007

        Somehow, the wrong settings got enabled by the patch landed.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-09  Darin Adler  <darin@apple.com>

        Improve performance by using StringView, not "const StringView&"
        https://bugs.webkit.org/show_bug.cgi?id=229834

        Reviewed by Anders Carlsson.

        Since StringView is a small structure that fits into two registers, it's not
        good to pass a pointer to it; better performance to pass it by value. Note
        that this is for release builds, not debug builds where StringView has
        significant additional overhead when copying.

        * wtf/PrintStream.cpp:
        (WTF::printInternal):
        * wtf/PrintStream.h:
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringView.cpp:
        (WTF::StringView::containsIgnoringASCIICase const):
        (WTF::StringView::findIgnoringASCIICase const):
        (WTF::StringView::startsWith const):
        (WTF::StringView::startsWithIgnoringASCIICase const):
        (WTF::StringView::endsWith const):
        (WTF::StringView::endsWithIgnoringASCIICase const):
        (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
        (WTF::StringView::GraphemeClusters::Iterator::Iterator):
        * wtf/text/StringView.h:
        * wtf/text/WTFString.h:
        Use StringView, not const StringView&.

2021-09-09  Alex Christensen  <achristensen@webkit.org>

        Add PrivateClickMeasurement daemon
        https://bugs.webkit.org/show_bug.cgi?id=230052

        Reviewed by Chris Dumez.

        * wtf/spi/darwin/XPCSPI.h:

2021-09-09  Patrick Angle  <pangle@apple.com>

        run-webkit-archive crashes with dyld error
        https://bugs.webkit.org/show_bug.cgi?id=228060

        Reviewed by Alex Christensen.

        Bump the maximum macOS version that `HAVE_SAFARI_FOR_WEBKIT_DEVELOPMENT_REQUIRING_EXTRA_SYMBOLS` will be enabled
        to provide compatibility with changes made in macOS 12.

        * wtf/PlatformHave.h:

2021-09-08  Jean-Yves Avenard  <jya@apple.com>

        Safari TP 131 audio canPlayType() reports false negatives
        https://bugs.webkit.org/show_bug.cgi?id=229799
        rdar://problem/82776747

        Reviewed by Youenn Fablet.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Remove preference.

2021-09-07  Sihui Liu  <sihui_liu@apple.com>

        Add basic support for Storage API
        https://bugs.webkit.org/show_bug.cgi?id=229925

        Reviewed by Darin Adler.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.PlainTime
        https://bugs.webkit.org/show_bug.cgi?id=229892

        Reviewed by Darin Adler.

        * wtf/text/IntegerToStringConversion.h:
        * wtf/text/StringParsingBuffer.h:

2021-09-07  Cameron McCormack  <heycam@apple.com>

        Add an IPCMessages channel to log all IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=229664
        <rdar://problem/82511640>

        Reviewed by Alex Christensen.

        Two changes to TextStream in this patch.

        The first is a new argument to the constructor to allow limiting
        the number of elements in a container when appending it to a
        TextStream. This is intended to be used when the output is for
        human consumption and could potentially be uselessly large.

        The second is a value adapter ValueOrEllipsis. This allows appending
        a value to a TextStream even if it doesn't have an
        operator<<(TextStream&) defined. If it doesn't, then the fallback
        value "..." is used instead.

        An implementation detail of ValueOrEllipsis is a new type trait
        supports_text_stream_insertion, which detects at compile time whether
        a given type can be appended to a TextStream. It works by using
        "expression SFINAE" and partial template specialization.

        The base, unspecialized version of the template inherits from
        std::false_type, and is selected for all types by default.

        A partial specialization that uses decltype() to check whether a
        `TextStream() << value` expression would compile inherits from
        std::true_type.

        Sadly, C++ SFINAE has a limitation that means template definitions
        that would be instantiated inside the decltype() are not checked
        to ensure they would compile. This would mean container types whose
        elements are types that don't have an operator<< defined would still
        report true from supports_text_stream_insertion. We work around this
        by having more specific partial specializations for all of the container
        types we have operator<< definitions for, which defer to the
        supports_text_stream_insertion value for the element type(s).

        If an operator<< is added for a new container type without a
        corresponding supports_text_stream_insertion specialization, and that
        type is used with ValueOrEllipsis, it will cause a compile error.

        The supports_text_stream_insertion template takes six template
        arguments, which looks odd, but is needed because all specializations
        must have the same number (and kind) of template arguments. The six
        include five type template arguments (which is how many HashMap has)
        plus a size_t value template argument (for Vector's inlineCapacity
        argument).

        * wtf/text/TextStream.h:
        (WTF::TextStream::TextStream):
        (WTF::TextStream::containerSizeLimit const):
        (WTF::operator<<):
        (WTF::ValueOrEllipsis::ValueOrEllipsis):

2021-09-07  Chris Dumez  <cdumez@apple.com>

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=229814

        Reviewed by Alex Christensen.

        Add experimental preference for BroadcastChannel origin partitioning. This is useful because we currently
        disable this when running web-platform-tests in WKTR / DRT for now.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-06  Dmitry Kalinkin  <dmitry.kalinkin+webkit@gmail.com>

        Fix WebKitGTK build on MacOS
        https://bugs.webkit.org/show_bug.cgi?id=225850

        Reviewed by Michael Catanzaro.

        Define HAVE_AUDIT_TOKEN only for Cocoa backend.

        * wtf/PlatformHave.h:

2021-09-03  Basuke Suzuki  <basuke.suzuki@sony.com>

        Use USE(SYSTEM_MALLOC) macro in all cases
        https://bugs.webkit.org/show_bug.cgi?id=229902

        Reviewed by Yusuke Suzuki.

        Convert old style macro check to USE() macro for USE_SYSTEM_MALLOC.

        * wtf/FastMalloc.cpp:
        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:
        * wtf/IsoMalloc.h:
        * wtf/IsoMallocInlines.h:
        * wtf/JSValueMalloc.cpp:
        * wtf/PlatformUse.h:
        * wtf/RAMSize.cpp:
        * wtf/VMTags.h:
        * wtf/WTFConfig.h:

2021-09-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.TimeZone
        https://bugs.webkit.org/show_bug.cgi?id=229703

        Reviewed by Ross Kirsling.

        * wtf/text/IntegerToStringConversion.h: Support integer serialization into Vector.
        * wtf/text/StringConcatenate.h: Extends StringConcatenate feature for Vector with UChar/LChar + N size.

2021-09-03  Chris Dumez  <cdumez@apple.com>

        [WK2] Turn on support for Cross-Origin-Opener-Policy / Cross-Origin-Embedder-Policy
        https://bugs.webkit.org/show_bug.cgi?id=229818

        Reviewed by Sam Weinig.

        Turn on support for Cross-Origin-Opener-Policy / Cross-Origin-Embedder-Policy on WebKit2 now that
        the feature is complete and all known issues have been fixed.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-09-02  Alex Christensen  <achristensen@webkit.org>

        Reject non-IPv4 hostnames that end in numbers
        https://bugs.webkit.org/show_bug.cgi?id=228826

        Reviewed by Tim Horton.

        This implements a recent change to the URL specification at https://github.com/whatwg/url/pull/619
        Chrome has made the same change in https://crbug.com/1237032

        Since there are no TLDs that are only numbers and some think it might be confusing to have a valid URL
        like http://example.com.127.0.0.1/ we prevent URLs that end in a segment between dots that contains only
        numbers from parsing successfully.

        * wtf/URLParser.cpp:
        (WTF::URLParser::parse):
        (WTF::dnsNameEndsInNumber):
        (WTF::URLParser::parseHostAndPort):
        I give more information in the return type so one can tell what the code is doing.
        We only check if it is valid or not, but for documentation purposes I think it's useful to return more information.
        * wtf/URLParser.h:

2021-09-02  Mark Lam  <mark.lam@apple.com>

        Add more support for JIT operation validation testing.
        https://bugs.webkit.org/show_bug.cgi?id=229534
        rdar://81526335

        Reviewed by Saam Barati.

        * wtf/PlatformCallingConventions.h:
        * wtf/PtrTag.h:
        (WTF::PtrTagTraits::isTagged):
        (WTF::isTaggedNativeCodePtrImpl):
        (WTF::isTaggedWith):
        (WTF::assertIsTaggedWith):

2021-08-26  Darin Adler  <darin@apple.com>

        Cut down on use of CFGetTypeID, using dynamic_cf_cast instead; related streamlining
        https://bugs.webkit.org/show_bug.cgi?id=229414

        Reviewed by Tim Horton.

        * wtf/cf/TypeCastsCF.h: Added WTF_DECLARE_CF_TYPE_TRAIT(CFURL). Added a
        dynamic_cf_cast overload that converts from one RetainPtr type to another
        and avoids reference count churn. Tweaked comments.

        * wtf/cocoa/Entitlements.mm:
        (WTF::hasEntitlement): Use kCFBooleanTrue instead of CFBooleanGetValue.

        * wtf/text/cocoa/TextBreakIteratorInternalICUCocoa.cpp:
        (WTF::textBreakLocalePreference): Use dynamic_cf_cast.

2021-08-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.Calendar
        https://bugs.webkit.org/show_bug.cgi?id=229651

        Reviewed by Ross Kirsling.

        Add UChar version of createStaticStringImpl to make immortal thread-safe StringImpl with UChar.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createStaticStringImpl):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createStaticStringImpl):

2021-08-30  Sihui Liu  <sihui_liu@apple.com>

        Add stubs for Permissions API
        https://bugs.webkit.org/show_bug.cgi?id=229339
        <rdar://problem/82442205>

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-30  Zan Dobersek  <zdobersek@igalia.com>

        RISCV64 support in LLInt
        https://bugs.webkit.org/show_bug.cgi?id=229035
        <rdar://problem/82120908>

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformEnable.h:
        Define ENABLE_LLINT_EMBEDDED_OPCODE_ID to 1 for CPU(RISCV64).

2021-08-28  Cameron McCormack  <heycam@apple.com>

        Miscellaneous typo fixes
        https://bugs.webkit.org/show_bug.cgi?id=229642

        Reviewed by Fujii Hironori.

        * wtf/CrossThreadTask.h:
        (WTF::callMemberFunctionForCrossThreadTask):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createSubstringSharingImpl):

2021-08-28  David Kilzer  <ddkilzer@apple.com>

        [WTF] Fix static analyzer warnings about nullptr derefs in StringImpl::copyCharacters() and tryMakeStringFromAdapters()
        <https://webkit.org/b/229461>
        <rdar://problem/82303279>

        Reviewed by Darin Adler.

        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):
        - Add nullptr checks for `buffer` since it makes no sense to
          call stringTypeAdapterAccumulator() with a nullptr argument,
          and it fixes static analyzer warnings about dereferencing
          nullptr.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::copyCharacters):
        - Add `ASSERT(destination || !numCharacters)` statement to
          describe an invariant when calling this method.  This stops
          the static analyzer from emitting false positive warnings
          about `destination` being nullptr.

2021-08-27  Simon Fraser  <simon.fraser@apple.com>

        Define ENABLE_CONTENT_CHANGE_OBSERVER for IOS_FAMILY and use it to wrap content observation code
        https://bugs.webkit.org/show_bug.cgi?id=229624

        Reviewed by Alan Bujtas.

        Deploy ENABLE(CONTENT_CHANGE_OBSERVER).

        * Scripts/Preferences/WebPreferences.yaml:
        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-08-27  Eric Carlson  <eric.carlson@apple.com>

        [ Catalina EWS ] media/track/track-disabled-addcue.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=229462
        <rdar://problem/82302915>

        Reviewed by Darin Adler.

        * wtf/SetForScope.h:
        (WTF::SetForScope::SetForScope): Add a constructor that takes the value to set
        on scope exit.

2021-08-27  Russell Epstein  <repstein@apple.com>

        Land Windows build fixes from safari-612.1.29.14-branch
        https://bugs.webkit.org/show_bug.cgi?id=229627

        Reviewed by Per Arne Vollan.

        * WTF.vcxproj/WTF.proj:

2021-08-27  Antti Koivisto  <antti@apple.com>

        [CSS Cascade Layers] Initial support
        https://bugs.webkit.org/show_bug.cgi?id=229542

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-27  Mikhail R. Gadelha  <mikhail@igalia.com>

        Avoid increasing required alignment of target type warning on ARM 32 bits
        https://bugs.webkit.org/show_bug.cgi?id=229151

        Reviewed by Mark Lam.

        Same approach as https://bugs.webkit.org/show_bug.cgi?id=38045
        cast pointers to void* to bypass warning about increasing pointer
        alingment. reinterpret_cast_ptr has custom behaviour only on ARM and
        MIPS 32 bits, and doesn't change the behaviour in 64 bits archs
        (reinterpret_cast_ptr is preprocessed to reinterpret_cast in 64 bits
        archs)

        * wtf/BloomFilter.h:
        (WTF::BloomFilter<keyBits>::keysFromHash):
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::makeSalt):

2021-08-26  Risul Islam  <risul_islam@apple.com>

        Add new experimental feature flag for sanitizing links
        https://bugs.webkit.org/show_bug.cgi?id=229451

        Reviewed by Kate Cheney.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some iOS-specific compile-time guards that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=229500

        Reviewed by Tim Horton.

        Remove the feature flags. See WebKit/ChangeLog for more details.

        * wtf/PlatformHave.h:
        * wtf/PlatformUse.h:

2021-08-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add Intl Enumeration APIs
        https://bugs.webkit.org/show_bug.cgi?id=214795

        Reviewed by Ross Kirsling.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createFromLiteral):
        * wtf/text/StringImpl.h:

2021-08-24  Tim Nguyen  <ntim@apple.com>

        Implement inert attribute behind feature flag
        https://bugs.webkit.org/show_bug.cgi?id=165279

        Reviewed by Chris Dumez.

        Add runtime InertAttributeEnabled feature flag disabled by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        overwriteCodePoint() in createAndFillGlyphPage() is wrong
        https://bugs.webkit.org/show_bug.cgi?id=215643
        <rdar://problem/67430461>

        Reviewed by Alan Bujtas.

        * wtf/unicode/CharacterNames.h:

2021-08-21  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: crash when triggering IDBOpenRequest completion back on a worker thread
        https://bugs.webkit.org/show_bug.cgi?id=229375

        Protect callee in CrossThreadTask if it inherits from ThreadSafeRefCounted<T>.

        Reviewed by Brady Eidson.

        * wtf/CrossThreadTask.h:

2021-08-20  Mark Lam  <mark.lam@apple.com>

        Make ptrTagName and tagForPtr WTF_EXPORT_PRIVATE.
        https://bugs.webkit.org/show_bug.cgi?id=229328

        Reviewed by Yusuke Suzuki.

        If ptrTagName and tagForPtr are defined, make them WTF_EXPORT_PRIVATE instead of
        static functions.  This allows us to call them from the debugger during
        interactive debugging sessions.

        * wtf/PtrTag.cpp:
        (WTF::tagForPtr):
        (WTF::ptrTagName):
        * wtf/PtrTag.h:

2021-08-20  Mark Lam  <mark.lam@apple.com>

        Remove assertIsTagged and assertIsNullOrTagged.
        https://bugs.webkit.org/show_bug.cgi?id=229329
        rdar://82162851

        Reviewed by Yusuke Suzuki.

        These assertion utility functions rely on tagged pointers always having non-zero
        PAC bits.  This is an incorrect assumption.  A tagged pointer can have PAC bits
        that are completely zero.  Hence, these assert functions cannot be made to work
        reliably.  We should remove them to prevent them from being used, and potentially
        resulting in flaky assertion failures that will be hard to debug later.

        Note: assertIsNotTagged is fine to keep.  It asserts that PAC bits of a pointer
        are all 0.  As a result, this assertion can have false positives where it may think
        a tagged pointer is an untagged pointer.  However, this is rare because it is not
        common to have 0 PAC bits in tagged pointers.  False positives on this assertion
        won't result in flaky test failures that will waste our time later.  Hence,
        keeping the assertion will do more good (it will tend to help us find bugs) than
        bad (it will rarely let false positives thru).  As a result, I'm opting to not
        remove it.

        * wtf/PtrTag.h:
        (WTF::assertIsTagged): Deleted.
        (WTF::assertIsNullOrTagged): Deleted.

2021-08-19  Antti Koivisto  <antti@apple.com>

        [:has() pseudo-class] Basic support
        https://bugs.webkit.org/show_bug.cgi?id=228894

        Reviewed by Simon Fraser.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

        Add off-by-default HasPseudoClassEnabled preference value.

2021-08-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Stop treating the system font as a non-variable font
        https://bugs.webkit.org/show_bug.cgi?id=228176

        Reviewed by Sam Weinig.

        * wtf/PlatformUse.h:

2021-08-19  Aditya Keerthi  <akeerthi@apple.com>

        Remove __has_include guard for _UIDatePickerOverlayPresentation
        https://bugs.webkit.org/show_bug.cgi?id=227298
        rdar://79970171

        Reviewed by Tim Horton.

        * wtf/PlatformHave.h:

2021-08-19  David Kilzer  <ddkilzer@apple.com>

        [WTF] Fix static analyzer warnings for clang tidy bugprone-move-forwarding-reference checker
        <https://webkit.org/b/229114>

        Reviewed by Darin Adler.

        * wtf/Deque.h:
        (WTF::inlineCapacity>::appendAndBubble):
        * wtf/Scope.h:
        (WTF::ScopeExit::ScopeExit):
        * wtf/ScopedLambda.h:
        (WTF::scopedLambda):
        * wtf/SharedTask.h:
        (WTF::createSharedTask):
        - Replace WTFMove() with std::forward<>().

2021-08-19  Alex Christensen  <achristensen@webkit.org>

        Remove more non-inclusive language from Source
        https://bugs.webkit.org/show_bug.cgi?id=229230

        Reviewed by Myles C. Maxfield.

        * icu/unicode/uspoof.h:
        This comment change comes from upstream ICU.
        * wtf/URL.h:

2021-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        [ iOS Debug ] 12 TestWebKitAPI.WebKitLegacy. tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=229250

        Reviewed by Wenson Hsieh.

        Disable the assertion when Web Thread is enabled for now.

        * wtf/CheckedRef.h:
        (WTF::SingleThreadIntegralWrapper::assertThread const):

2021-08-18  Megan Gardner  <megan_gardner@apple.com>

        Remove unneeded UIKitSPI declarations
        https://bugs.webkit.org/show_bug.cgi?id=210075

        Reviewed by Wenson Hsieh.

        Remove unneeded feature define.

        * wtf/PlatformHave.h:

2021-08-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Try to parse XML init datas that could possibly come from MPD manifests
        https://bugs.webkit.org/show_bug.cgi?id=229145

        Reviewed by Alicia Boya Garcia.

        * wtf/glib/GUniquePtr.h: Added deleter for GMarkupParseContext.

2021-08-16  Alex Christensen  <achristensen@webkit.org>

        Enable PerformanceNavigationAPI by default
        https://bugs.webkit.org/show_bug.cgi?id=227336

        Reviewed by Chris Dumez.

        It passes WPT tests except the following:

        navigation-timing/nav2_test_redirect_chain_xserver_partial_opt_in.html and navigation-timing/nav2_test_redirect_xserver.html pass when run from wpt.live,
        and other browsers also don't pass when run from our local hosting infrastructure, which doesn't have a good cross-domain redirect.

        nav2_test_attributes_values.html fails in Chrome and Firefox.  There's something wrong with the port detection in the test.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add thread safe version of CanMakeCheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=229018

        Reviewed by Geoffrey Garen.

        Introduce CanMakeThreadSafeCheckedPtr which is a thread safe version of CanMakeCheckedPtr.

        * wtf/CheckedRef.h:
        (WTF::CanMakeCheckedPtrBase): Extracted from CanMakeCheckedPtr.
        (WTF::CanMakeCheckedPtrBase::~CanMakeCheckedPtrBase):
        (WTF::CanMakeCheckedPtrBase::ptrCount const):
        (WTF::SingleThreadIntegralWrapper): Added.
        (WTF::SingleThreadIntegralWrapper::SingleThreadIntegralWrapper):
        (WTF::SingleThreadIntegralWrapper::operator IntegralType const):
        (WTF::SingleThreadIntegralWrapper::operator! const):
        (WTF::SingleThreadIntegralWrapper::operator++):
        (WTF::SingleThreadIntegralWrapper::operator--):
        (WTF::SingleThreadIntegralWrapper::assertThread const):
        (WTF::CanMakeCheckedPtr): Redefined using CanMakeCheckedPtrBase and SimpleNonAtomicType.
        (WTF::CanMakeThreadSafeCheckedPtr): Added.

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        ThreadSanitizer: ignore uninteresting data races for reference counting of static WTF::StringImpl objects
        <https://webkit.org/b/229113>

        Reviewed by Chris Dumez.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::isStatic const):
        - Add SUPPRESS_TSAN attribute since the 0x1 bit is set at
          construction and refcounting occurs in increments of 0x2, so
          the static bit never changes.
        (WTF::StringImpl::ref):
        (WTF::StringImpl::deref):
        - Return early for static WTF::StringImpl objects to prevent
          TSan from reporting data races for m_refCount.

2021-08-15  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Add API to pass WebKitMemoryPressureHandler parameters to the network processes
        https://bugs.webkit.org/show_bug.cgi?id=228227

        Reviewed by Carlos Garcia Campos.

        Added a new method to MemoryPressureHandler to set the configuration by copying the parameter
        instead of moving it.

        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setConfiguration):

2021-08-11  Chris Dumez  <cdumez@apple.com>

        Add initial support for Cross-Origin-Embedder-Policy (COEP)
        https://bugs.webkit.org/show_bug.cgi?id=228754

        Reviewed by Alex Christensen.

        Add experimental feature flag for Cross-Origin-Embedder-Policy (COEP), off by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-11  Darin Adler  <darin@apple.com>

        Add deduction guide to RetainPtr, use constexpr a bit more, and streamline the implementation
        https://bugs.webkit.org/show_bug.cgi?id=228852

        Reviewed by Sam Weinig.

        * wtf/RetainPtr.h: Sort includes. Made many functions constexpr including the move
        constructors and adoptCF. Use using instead of typedef in most places. Use
        remove_pointer_t, conditional_t, is_convertible_v, is_same_v, and other such templates
        to simplify expressions. Initialize the m_ptr data member and use the default constructor.
        Removed unneeded StorageType synonym for CFTypeRef. Move some inline function bodies out
        of the class template definition. Use if constexpr to get rid of the need for the overloaded
        autoreleaseHelper function. Added a deduction guide so we can use expressions with the
        type RetainPtr on the left side, and an Objective-C pointer or CFTypeRef on the right side,
        and have the appropriate RetainPtr type deduced.

2021-08-11  Sihui Liu  <sihui_liu@apple.com>

        Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner
        https://bugs.webkit.org/show_bug.cgi?id=228748
        <rdar://problem/81626714>

        Reviewed by Chris Dumez.

        Add SuspendableWorkQueue that would perform suspend check before each task.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Forward.h:
        * wtf/SuspendableWorkQueue.cpp: Added.
        (WTF::SuspendableWorkQueue::create):
        (WTF::SuspendableWorkQueue::SuspendableWorkQueue):
        (WTF::SuspendableWorkQueue::suspend):
        (WTF::SuspendableWorkQueue::resume):
        (WTF::SuspendableWorkQueue::dispatch):
        (WTF::SuspendableWorkQueue::dispatchAfter):
        (WTF::SuspendableWorkQueue::dispatchSync):
        (WTF::SuspendableWorkQueue::invokeAllSuspensionCompletionHandlers):
        (WTF::SuspendableWorkQueue::suspendIfNeeded):
        * wtf/SuspendableWorkQueue.h: Added.
        * wtf/WorkQueue.h:
        (): Deleted.

2021-08-11  Youenn Fablet  <youenn@apple.com>

        Enable WebRTC relay by default
        https://bugs.webkit.org/show_bug.cgi?id=229000
        <rdar://78767922>

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-10  Peng Liu  <peng.liu6@apple.com>

        Disable SYSTEM_FEATURE_FLAGS on iOS 14
        https://bugs.webkit.org/show_bug.cgi?id=228979
        <rdar://problem/81764452>

        Reviewed by Tim Horton.

        Stop using feature flags mechanism on iOS 14 to avoid some issues on iOS simulators.

        * wtf/PlatformHave.h:

2021-08-10  Stephan Szabo  <stephan.szabo@sony.com>

        [WTF][PlayStation] REGRESSION(r280795) error: undefined symbol: WTF::logLevelString()
        https://bugs.webkit.org/show_bug.cgi?id=228959

        Reviewed by Fujii Hironori.

        As per followup win fix, for declspec platforms, LoggingUnix needs
        to include LogInitialization to get the export declaration.

        * wtf/unix/LoggingUnix.cpp:

2021-08-10  Keith Miller  <keith_miller@apple.com>

        CallFrame::returnPC should untag the return address before passing it to ReturnAddressPtr
        https://bugs.webkit.org/show_bug.cgi?id=228931

        Reviewed by Mark Lam.

        Add a new helper to untag the return pc from a stack frame.

        * wtf/PtrTag.h:
        (WTF::untagReturnPC):

2021-08-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK][WPE] REGRESSION(r280795): MemoryPressureHandlerUnix.cpp:45:28: error: ‘LogMemoryPressure’ was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=228938

        Unreviewed build fix.

        * wtf/unix/MemoryPressureHandlerUnix.cpp:

2021-08-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF][Win] REGRESSION(r280795) error LNK2019: unresolved external symbol "class WTF::String __cdecl WTF::logLevelString(void)"
        https://bugs.webkit.org/show_bug.cgi?id=228937
        <rdar://problem/81722757>

        Unresolved build fix.
        The previous attempt (r280819) didn't actually fix the build
        error. LoggingWin.cpp has to include LogInitialization.h.

        * wtf/win/LoggingWin.cpp:

2021-08-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF][Win] REGRESSION(r280795) error LNK2019: unresolved external symbol "class WTF::String __cdecl WTF::logLevelString(void)"
        https://bugs.webkit.org/show_bug.cgi?id=228937

        Unreviewed build fix.

        > error LNK2019: unresolved external symbol "class WTF::String __cdecl WTF::logLevelString(void)" (?logLevelString@WTF@@YA?AVString@1@XZ)
        >   referenced in function "private: void __cdecl WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters(struct WebKit::GPUProcessCreationParameters &)"
        >   (?platformInitializeGPUProcessParameters@GPUProcessProxy@WebKit@@AEAAXAEAUGPUProcessCreationParameters@2@@Z)
        >   bin64\WebKit2.dll : fatal error LNK1120: 1 unresolved externals

        * wtf/LogInitialization.h: Added WTF_EXPORT_PRIVATE for logLevelString.

2021-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Create a Language log channel
        https://bugs.webkit.org/show_bug.cgi?id=228764

        Reviewed by Simon Fraser.

        There have been a variety of bug reports over the past months/years about the procedure
        by which we determine navigator.language. It's actually somewhat convoluted, so this
        patch adds a (debug) log channel for it so we can follow what it's doing easily.

        To enable all the logging, run these commands:

        % defaults write com.apple.WebKit.WebContent.Development WTFLogging Language
        % defaults write com.apple.WebKit.WebContent.Development WebKit2Logging Language
        % defaults write com.apple.WebKit.WebContent WTFLogging Language
        % defaults write com.apple.WebKit.WebContent WebKit2Logging Language
        % defaults write -g WTFLogging Language
        % defaults write -g WebKit2Logging Language
        % defaults write /Users/$USER/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plist WTFLogging Language
        % defaults write /Users/$USER/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plist WebKit2Logging Language

        * wtf/Language.cpp:
        (WTF::defaultLanguage):
        (WTF::overrideUserPreferredLanguages):
        (WTF::userPreferredLanguages):
        * wtf/Logging.cpp:
        * wtf/Logging.h:
        * wtf/cf/LanguageCF.cpp:
        (WTF::platformUserPreferredLanguages):
        * wtf/cocoa/LanguageCocoa.mm:
        (WTF::minimizedLanguagesFromLanguages):

2021-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Support WTF logging channels
        https://bugs.webkit.org/show_bug.cgi?id=228768

        This patch builds on top of https://bugs.webkit.org/show_bug.cgi?id=228809, which added shared infrastructure
        for logging. This patch simply triggers that shared infrastructure for WTF. There is no change in behavior -
        the existing WTF logging channels currently are all implemented independently in custom ways, so this patch
        just migrates them over to use the shared infrastructure.

        Reviewed by Fujii Hironori.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Assertions.h:
        * wtf/CMakeLists.txt:
        * wtf/LogInitialization.cpp: Added.
        (WTF::logChannels):
        * wtf/LogInitialization.h: Added.
        * wtf/Logging.cpp: Added.
        * wtf/Logging.h: Added.
        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::singleton):
        * wtf/MemoryPressureHandler.h:
        * wtf/PlatformFTW.cmake:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/RefCountedLeakCounter.cpp:
        * wtf/cocoa/LoggingCocoa.mm: Copied from Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm.
        (WTF::logLevelString):
        * wtf/cocoa/MachSendRight.cpp:
        * wtf/cocoa/MainThreadCocoa.mm:
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        * wtf/unix/LoggingUnix.cpp: Added.
        (WTF::logLevelString):
        * wtf/win/LoggingWin.cpp: Added.
        (WTF::logLevelString):

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        The current infrastructure (before this patch) had the following duplicated for each framework:
          - A .cpp file declared the list of logging channels for that framework
          - The .cpp file also had algorithms to search, modify, and initialize these logging channels

        Each framework's .cpp file had duplicate algorithms. (The initialization algorithm was even
        duplicated 3 times!)

        Because the algorithms directly name their specific list of logging channels, a naive deduplication
        would have had to add new parameters to these algorithms to pass in the appropriate framework's
        list. That's fine, but this is exactly the sort of thing classes were designed for - classes are
        an association of algorithms and data. The algorithms are shared but the data isn't, which really
        just means we should have 3 instances of a shared class - one for the 3 sets of data.

        So, this patch creates the LogChannels class which contains the deduplicated algorithms, and each
        framework has a NeverDestroyed singleton instance of that class. There is a single virtual method
        in the class, so the appropriate "default write" variable can be queried for each framework.

        The instances cannot be declared in the Logging.h files in the frameworks, because certain WebKit2
        files want to initialize all 3 instances of LogChannels, but you can't #include multiple Logging.h
        files at the same time because their LOG_CHANNEL_PREFIX #defines will collide with each other.
        Luckily, LogInitialization.h files exist exactly to solve this purpose, so that's where the
        LogChannels instances are declared in. After this change, the Logging.h files are just for the
        declarations of the logging channels themselves, and the LogInitialization.h files are for the
        LogChannels instances which contain the searching/modifying/initializing algorithms on the list of
        logging channels. If you just want to LOG(...) something, #include the relevant Logging.h file, and
        if you want to search/modify/initialize across the entire list of channels, then #include the
        relevant LogInitialization.h file.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/LogChannels.cpp: Copied from Source/WebCore/platform/Logging.cpp.
        (WTF::LogChannels::isLogChannelEnabled):
        (WTF::LogChannels::setLogChannelToAccumulate):
        (WTF::LogChannels::clearAllLogChannelsToAccumulate):
        (WTF::LogChannels::initializeLogChannelsIfNecessary):
        (WTF::LogChannels::getLogChannel):
        * wtf/LogChannels.h: Copied from Source/WebCore/platform/LogInitialization.h.

2021-08-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280756.
        https://bugs.webkit.org/show_bug.cgi?id=228897

        Broke gtk build

        Reverted changeset:

        "Deduplicate logging channel algorithms"
        https://bugs.webkit.org/show_bug.cgi?id=228809
        https://commits.webkit.org/r280756

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        The current infrastructure (before this patch) had the following duplicated for each framework:
          - A .cpp file declared the list of logging channels for that framework
          - The .cpp file also had algorithms to search, modify, and initialize these logging channels

        Each framework's .cpp file had duplicate algorithms. (The initialization algorithm was even
        duplicated 3 times!)

        Because the algorithms directly name their specific list of logging channels, a naive deduplication
        would have had to add new parameters to these algorithms to pass in the appropriate framework's
        list. That's fine, but this is exactly the sort of thing classes were designed for - classes are
        an association of algorithms and data. The algorithms are shared but the data isn't, which really
        just means we should have 3 instances of a shared class - one for the 3 sets of data.

        So, this patch creates the LogChannels class which contains the deduplicated algorithms, and each
        framework has a NeverDestroyed singleton instance of that class. There is a single virtual method
        in the class, so the appropriate "default write" variable can be queried for each framework.

        The instances cannot be declared in the Logging.h files in the frameworks, because certain WebKit2
        files want to initialize all 3 instances of LogChannels, but you can't #include multiple Logging.h
        files at the same time because their LOG_CHANNEL_PREFIX #defines will collide with each other.
        Luckily, LogInitialization.h files exist exactly to solve this purpose, so that's where the
        LogChannels instances are declared in. After this change, the Logging.h files are just for the
        declarations of the logging channels themselves, and the LogInitialization.h files are for the
        LogChannels instances which contain the searching/modifying/initializing algorithms on the list of
        logging channels. If you just want to LOG(...) something, #include the relevant Logging.h file, and
        if you want to search/modify/initialize across the entire list of channels, then #include the
        relevant LogInitialization.h file.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/LogChannels.cpp: Copied from Source/WebCore/platform/Logging.cpp.
        (WTF::LogChannels::isLogChannelEnabled):
        (WTF::LogChannels::setLogChannelToAccumulate):
        (WTF::LogChannels::clearAllLogChannelsToAccumulate):
        (WTF::LogChannels::initializeLogChannelsIfNecessary):
        (WTF::LogChannels::getLogChannel):
        * wtf/LogChannels.h: Copied from Source/WebCore/platform/LogInitialization.h.

2021-08-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        GCC 11 builds should use -Wno-array-bounds, -Wno-nonnull
        https://bugs.webkit.org/show_bug.cgi?id=228601

        Reviewed by Carlos Garcia Campos.

        * wtf/Bitmap.h:
        (WTF::WordType>::clear):
        * wtf/Compiler.h:
        * wtf/Packed.h:
        (WTF::PackedAlignedPtr::get const):
        * wtf/RefPtr.h:
        (WTF::DefaultRefDerefTraits::derefIfNotNull):

2021-08-05  Zan Dobersek  <zdobersek@igalia.com>

        Avoid reinterpret_cast alignment increase warnings with GCC on CPU(RISCV64)
        https://bugs.webkit.org/show_bug.cgi?id=228818

        Reviewed by Adrian Perez de Castro.

        * wtf/StdLibExtras.h: As with 32-bit ARM and MIPS targets, RISC-V 64-bit
        builds with GCC also spawn warnings when the use of reinterpret_cast
        causes an increase in alignment. Workaround via reinterpret_cast_ptr is
        thus required for CPU(RISCV64).

2021-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Tweak the formatting for passing NSArrays to TextStreams
        https://bugs.webkit.org/show_bug.cgi?id=228766

        Reviewed by Simon Fraser.

        Instead of using -[NSArray description], which puts its output on multiple lines,
        instead use the same formatting as WTF::Vector, which puts its output on a single line.

        We can also use this opportunity to tweak the implementation of operator<<(id) to
        allow it to be called with Core Foundation types in raw C++ code.

        * wtf/text/TextStream.h:
        * wtf/text/cocoa/TextStreamCocoa.mm:
        (WTF::TextStream::operator<<):

2021-08-03  Risul Islam  <risul_islam@apple.com>

        Add functions for parsing URL query string
        https://bugs.webkit.org/show_bug.cgi?id=228122

        Reviewed by Darin Adler.
        
        Added parsing of URL query strings.
        
        * wtf/KeyValuePair.h:
        (WTF::operator== const):
        * wtf/URL.cpp:
        (WTF::URL::differingQueryParameters):
        (WTF::lengthOfURLIgnoringQueryAndFragments):
        (WTF::URL::isEqualIgnoringQueryAndFragments):
        (WTF::URL::removeQueryParameters):
        * wtf/URL.h:

2021-08-03  Youenn Fablet  <youenn@apple.com>

        RealtimeMediaSource::audioSamplesAvailable is calling malloc as part of locking in audio thread
        https://bugs.webkit.org/show_bug.cgi?id=228688

        Reviewed by Eric Carlson.

        Allow allocations in lockSlow since allocations might happen in rare case and not for each lockSlow call.

        * wtf/Lock.cpp:
        (WTF::Lock::lockSlow):
        (WTF::Lock::unlockSlow):
        (WTF::Lock::unlockFairlySlow):

2021-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        Add CheckedRef
        https://bugs.webkit.org/show_bug.cgi?id=227164

        Reviewed by Geoffrey Garen.

        Like r278344, this patch introduces a new type of smart pointer, CheckedRef,
        which lets each object keep track of pointers pointing to the object.

        As with CheckedPtr, the purpose of the internal counter for CheckedRef is
        to release assert that there is no outstanding pointer at the time of destruction
        instead of keeping the object alive when there is one.

        This patch also removes makeCheckedPtr in favor of using CheckedPtr with
        template argument deduction in C++17.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CheckedPtr.h:
        (WTF::CheckedPtr::CheckedPtr): Added variants which take CheckedRef as arguments.
        (WTF::makeCheckedPtr): Deleted.
        (WTF::CanMakeCheckedPtr): Moved to CheckedRef.h
        * wtf/CheckedRef.h: Added.
        (WTF::CheckedRef::~CheckedRef): Added.
        (WTF::CheckedRef::CheckedRef): Added.
        (WTF::CheckedRef::isHashTableDeletedValue const): Added.
        (WTF::CheckedRef::isHashTableEmptyValue const): Added.
        (WTF::CheckedRef::hashTableEmptyValue): Added.
        (WTF::CheckedRef::ptrAllowingHashTableEmptyValue const): Added.
        (WTF::CheckedRef::ptrAllowingHashTableEmptyValue): Added.
        (WTF::CheckedRef::ptr const): Added.
        (WTF::CheckedRef::ptr): Added.
        (WTF::CheckedRef::get const): Added.
        (WTF::CheckedRef::get): Added.
        (WTF::CheckedRef::operator-> const): Added.
        (WTF::CheckedRef::operator->): Added.
        (WTF::CheckedRef::operator const T& const): Added.
        (WTF::CheckedRef::operator T&): Added.
        (WTF::CheckedRef::operator! const): Added.
        (WTF::CheckedRef::operator=): Added.
        (WTF::CheckedRef::releasePtr): Added. Returns m_ptr without calling decrementPtrCount.
        This is equivalent of leakPtr in Ref but we don't call this that since CheckedRef or
        CheckedPtr is generally not used to manage the object lifetime.
        (WTF::CheckedRef::poison): Added.
        (WTF::CheckedRef::unpoison): Added.
        (WTF::is): Added.
        (WTF::CheckedRefHashTraits): Added.
        (WTF::CheckedRefHashTraits::emptyValue): Added.
        (WTF::CheckedRefHashTraits::constructEmptyValue): Added.
        (WTF::CheckedRefHashTraits::isEmptyValue): Added.
        (WTF::CheckedRefHashTraits::peek): Added.
        (WTF::CheckedRefHashTraits::take): Added.
        (WTF::CanMakeCheckedPtr): Moved from CheckedPtr.h
        * wtf/Forward.h:

2021-08-02  Devin Rousso  <drousso@apple.com>

        [Live Text] SPI for machine readable codes is only available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=228711

        Reviewed by Tim Horton.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-08-02  Youenn Fablet  <youenn@apple.com>

        Enable WebRTCPlatformUDPSocketsEnabled experimental feature by default
        https://bugs.webkit.org/show_bug.cgi?id=228689
        <rdar://problem/81383711>

        Reviewed by Eric Carlson.

        Enable WebRTCPlatformUDPSocketsEnabled experimental feature by default, WebRTC proxying being off by default for now.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr should use Bitmap instead of ByteVector for BoyerMoore search
        https://bugs.webkit.org/show_bug.cgi?id=228676

        Reviewed by Saam Barati.

        * wtf/Bitmap.h:

2021-08-01  Youenn Fablet  <youenn@apple.com>

        Introduce an experimental feature to toggle WebRTC socket proxying
        https://bugs.webkit.org/show_bug.cgi?id=228681

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Move JIT_UNICODE_EXPRESSIONS to ENABLE(YARR_JIT_UNICODE_EXPRESSIONS) in PlatformEnable.h
        https://bugs.webkit.org/show_bug.cgi?id=228669

        Reviewed by Alexey Shvayka.

        * wtf/PlatformEnable.h:

2021-07-30  Rob Buis  <rbuis@igalia.com>

        [css-overflow] Implement clip value for overflow
        https://bugs.webkit.org/show_bug.cgi?id=198230

        Reviewed by Simon Fraser.

        Add preference for overflow: clip support.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-30  Chris Dumez  <cdumez@apple.com>

        Add initial support for 'Cross-Origin-Opener-Policy' HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=192193
        <rdar://problem/42013525>

        Reviewed by Geoff Garen.

        Add experimental feature flag for 'Cross-Origin-Opener-Policy' HTTP header
        support.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop building WebGPU and the WHLSL compiler to decrease binary size
        https://bugs.webkit.org/show_bug.cgi?id=228179

        Reviewed by Dean Jackson, Robin Morisset, and Devin Rousso.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-07-29  Devin Rousso  <drousso@apple.com>

        [Payment Request] `additionalShippingMethods` are not used if a `paymentMethodType` is provided
        https://bugs.webkit.org/show_bug.cgi?id=228599
        <rdar://problem/81190366>

        Reviewed by Andy Estes.

        r275169 made it so that `paymentMethodType` is no longer `required` so that `additionalShippingMethods`
        can be specified without having to limit it to a specific payment method type. While this
        works in theory, WebKit doesn't know about the user's selected payment method type until the
        user actually selects a payment method, meaning that until then the `additionalShippingMethods`
        are not used. Unfortunately (until now) `PKPaymentRequestPaymentMethodUpdate` did not
        support providing a `NSArray<PKShippingMethod *> *`, so there was no way to update the list
        of shipping methods when the user changed their selected payment method, meaning that WebKit
        would have to wait/rely on the user to change their shipping address _after_ selecting a
        payment method in order for `additionalShippingMethods` to take effect.

        This also fixes an issue with WebKit's implementation of the W3C Payment Request API by
        allowing any generic (i.e. things not specific to Apple Pay) `shippingOptions` provided in
        `PaymentDetailsUpdate` to actually be used and update the Apple Pay sheet accordingly.

        * wtf/PlatformHave.h:
        * wtf/PlatformEnableCocoa.h:
        Add new compile flags for PassKit supporting modifying shipping methods with any update.

2021-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr should perform BoyerMoore search
        https://bugs.webkit.org/show_bug.cgi?id=228301

        Reviewed by Saam Barati.

        * wtf/BitVector.cpp:
        (WTF::BitVector::dump const):
        * wtf/Bitmap.h:
        (WTF::WordType>::dump const):
        * wtf/UniqueRef.h:
        (WTF::makeUniqueRefFromNonNullUniquePtr):
        (WTF::UniqueRef::UniqueRef):

2021-07-29  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r278877) [Cocoa] WebAuthn stopped working for non-Safari browsers 
        https://bugs.webkit.org/show_bug.cgi?id=228116
        <rdar://problem/80693607>

        Patch by Brent Fulgham.

        Reviewed by Per Arne Vollan.

        Add new SPI header for code signing features.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/spi/cocoa/SecuritySPI.h:
        * wtf/spi/darwin/CodeSignSPI.h: Added.

2021-07-29  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Don't set capture attribution dynamically in the simulator
        https://bugs.webkit.org/show_bug.cgi?id=228596
        rdar://81176531

        Reviewed by Jer Noble.

        * wtf/PlatformHave.h: Don't define HAVE_SYSTEM_STATUS for the simulator.

2021-07-29  Kate Cheney  <katherine_cheney@apple.com>

        GetIdentifierStringForPreferredVoiceInListWithLocale() is deprecated in Monterey
        <https://webkit.org/b/228066>
        <rdar://problem/80577312>

        Patch by David Kilzer.

        Reviewed by David Kilzer.

        * wtf/PlatformHave.h:
        - Add HAVE(SPEECHSYNTHESIS_MONTEREY_SPI).

2021-07-28  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio] Add webm/opus container support
        https://bugs.webkit.org/show_bug.cgi?id=227110
        <rdar://problem/79437067>

        Reviewed by Jer Noble.

        Add WebMWebAudioEnabled preference to make canPlayType return probably for mimetype:
        "audio/webm; codecs=opus"
        Disabled by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        makeWeakPtr should support Ref and RefPtr as the argument
        https://bugs.webkit.org/show_bug.cgi?id=228574

        Reviewed by Wenson Hsieh.

        This patch adds variants of makeWeakPtr<T> which take Ref<T> and RefPtr<T>.

        Tests: TestWebKitAPI.WTF_WeakPtr.MakeWeakPtrTakesRef
               TestWebKitAPI.WTF_WeakPtr.MakeWeakPtrTakesRefPtr

        * wtf/WeakPtr.h:
        (WTF::makeWeakPtr):

2021-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] macOS Monterey and parallel OSes no longer need r280103
        https://bugs.webkit.org/show_bug.cgi?id=228539

        Reviewed by Alan Bujtas.

        Core Text's behavior changed on these OSes.

        * wtf/PlatformUse.h:

2021-07-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative revert of r280193
        https://bugs.webkit.org/show_bug.cgi?id=228142

        * wtf/Vector.h:
        (WTF::Malloc>::shrinkCapacity):
        (WTF::Malloc>::shrinkToBestFit): Deleted.
        * wtf/text/AtomStringImpl.cpp:
        (WTF::UCharBufferTranslator::equal):
        (WTF::LCharBufferTranslator::equal):
        (WTF::BufferFromStaticDataTranslator::equal):
        * wtf/text/StringView.h:
        (WTF::StringView::stripLeadingMatchedCharacters): Deleted.

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [Cocoa] WebKit is making GroupActivities API calls for all WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=228299
        <rdar://80802982>

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-26  Per Arne  <pvollan@apple.com>

        The layout test fast/images/heic-as-background-image.html is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=228195
        <rdar://80334724>

        Reviewed by Said Abou-Hallawa.

        Add HAVE macro for the system function CMPhotoIsTileDecoderAvailable.

        * wtf/PlatformHave.h:

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [iOS] All home screen web apps resume when any home screen web app is foregrounded
        https://bugs.webkit.org/show_bug.cgi?id=228246
        <rdar://72949281>

        Reviewed by Eric Carlson.

        * Scripts/Preferences/WebPreferences.yaml:

2021-07-23  Chris Dumez  <cdumez@apple.com>

        SharedBuffer::takeData() is a bit dangerous
        https://bugs.webkit.org/show_bug.cgi?id=228161

        Reviewed by Darin Adler.

        Add Vector::uncheckedAppend() overload that takes in a Span.

        * wtf/Vector.h:
        (WTF::Vector::uncheckedAppend):
        (WTF::Malloc>::uncheckedAppend):

2021-07-23  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r280205.

        Broke multiple WebAuthn tests.

        Reverted changeset:

        "REGRESSION (r278877) [Cocoa] WebAuthn stopped working for
        non-Safari browsers"
        https://bugs.webkit.org/show_bug.cgi?id=228116
        https://commits.webkit.org/r280205

2021-07-23  Philippe Normand  <pnormand@igalia.com>

        [GLib] Remove libportal dependency
        https://bugs.webkit.org/show_bug.cgi?id=228056

        Reviewed by Carlos Garcia Campos.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Enable screen capture on GStreamer
        ports. The PIPEWIRE ifdef is redundant.

2021-07-22  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r278877) [Cocoa] WebAuthn stopped working for non-Safari browsers 
        https://bugs.webkit.org/show_bug.cgi?id=228116
        <rdar://problem/80693607>

        Reviewed by Per Arne Vollan.

        Add new SPI header for code signing features.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/spi/cocoa/SecuritySPI.h: Move some SecTask calls out of PLATFORM(MAC).
        * wtf/spi/darwin/CodeSignSPI.h: Added.

2021-07-22  Saam Barati  <sbarati@apple.com>

        Fix uses of Dependency::fence with respect to the compiler outsmarting us
        https://bugs.webkit.org/show_bug.cgi?id=227757
        <rdar://problem/80280931>

        Reviewed by Robin Morisset.

        * wtf/Atomics.h:
        (WTF::opaque):
        (WTF::Dependency::loadAndFence):

2021-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r280193
        https://bugs.webkit.org/show_bug.cgi?id=228142

        I accidentally reverted auto change when switching branches.

        * wtf/text/AtomStringImpl.cpp:
        (WTF::UCharBufferTranslator::equal):
        (WTF::LCharBufferTranslator::equal):
        (WTF::BufferFromStaticDataTranslator::equal):

2021-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Micro-optimize innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=228142

        Reviewed by Simon Fraser.

        * wtf/Vector.h:
        (WTF::Malloc>::shrinkToBestFit): This shrinks the backing storage to "appropriate for the living Vector".
        * wtf/text/AtomStringImpl.cpp:
        (WTF::UCharBufferTranslator::equal): WTF::equal for String does not check hash. This is because computing hash is expensive
        and we would like to avoid that if it is not necessary. But when inserting string into AtomStringTable, we can use hash value
        since they must be already computed because of HashMap's requirement. So let's use it before calling WTF::equal.
        (WTF::LCharBufferTranslator::equal):
        (WTF::BufferFromStaticDataTranslator::equal):
        * wtf/text/StringView.h:
        (WTF::StringView::stripLeadingMatchedCharacters): Add this and use it in HTMLTreeBuilder.

2021-07-22  Alex Christensen  <achristensen@webkit.org>

        XHR.send(Document) should replace mismatched surrogates with replacement character before sending
        https://bugs.webkit.org/show_bug.cgi?id=228170

        Reviewed by Chris Dumez.

        * wtf/text/WTFString.cpp:
        (WTF::replaceUnpairedSurrogatesWithReplacementCharacter):
        * wtf/text/WTFString.h:
        Move from WebCore, rename as suggested, update spec link to one that works.

2021-07-22  Zan Dobersek  <zdobersek@igalia.com>

        Add CPU(RISCV64)
        https://bugs.webkit.org/show_bug.cgi?id=228178

        Reviewed by Adrian Perez de Castro.

        Detect when compiling for the RISC-V 64-bit architecture and define
        the WTF_CPU_RISCV64 macro under that condition, enabling use of
        CPU(RISCV64) build guards.

        * wtf/PageBlock.h: Use 4 kB as the page size ceiling for CPU(RISCV64).
        * wtf/PlatformCPU.h:

2021-07-21  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Allow the user to configure the MemoryPressureHandler inside the web process
        https://bugs.webkit.org/show_bug.cgi?id=222738

        Reviewed by Carlos Garcia Campos.

        Add a configuration structure to MemoryPressureHandler, with the methods to encode/decode it. Also
        add a method to set a configuration structure to a MemoryPressureHandler instance, and modify the
        behavior so the the configuration is used when checking the memory used by the process.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::MemoryPressureHandler::thresholdForPolicy):
        (WTF::MemoryPressureHandler::policyForFootprint):
        (WTF::MemoryPressureHandler::Configuration::Configuration):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::Configuration::encode const):
        (WTF::MemoryPressureHandler::Configuration::decode):
        (WTF::MemoryPressureHandler::setConfiguration):

2021-07-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r280129.

        Broke the internal Monterey build bots

        Reverted changeset:

        "GetIdentifierStringForPreferredVoiceInListWithLocale() is
        deprecated in Monterey"
        https://bugs.webkit.org/show_bug.cgi?id=228066
        https://commits.webkit.org/r280129

2021-07-21  David Kilzer  <ddkilzer@apple.com>

        GetIdentifierStringForPreferredVoiceInListWithLocale() is deprecated in Monterey
        <https://webkit.org/b/228066>
        <rdar://problem/80577312>

        Reviewed by Alexey Proskuryakov.

        * wtf/PlatformHave.h:
        - Add HAVE(SPEECHSYNTHESIS_MONTEREY_SPI).

2021-07-20  Myles C. Maxfield  <mmaxfield@apple.com>

        r280103 is not necessary on all operating systems
        https://bugs.webkit.org/show_bug.cgi?id=228136

        Reviewed by Alan Bujtas.

        * wtf/PlatformUse.h:

2021-07-16  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK][WPE] Support color-schemes CSS property
        https://bugs.webkit.org/show_bug.cgi?id=208204

        Reviewed by Adrian Perez de Castro.

        * wtf/PlatformHave.h:
        Enable HAVE_OS_DARK_MODE_SUPPORT for GTK and WPE.

2021-07-15  Jean-Yves Avenard  <jya@apple.com>

        [Wk1] media/media-source/media-webm-opus-partial.html is a consistent failure (Enable VP8/VP9/Vorbis/Opus in WebKitLegacy)
        https://bugs.webkit.org/show_bug.cgi?id=228005
        rdar://80346720

        Reviewed by Jer Noble.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Enable VP8/VP9/Vorbis/Opus
        codecs for WebKitLegacy, no reasons they weren't already enabled.

2021-07-15  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Fix the build warning below since r279895.
        warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]

        * wtf/URL.cpp:
        (WTF::URL::setPath):

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Add initial support for BroadcastChannel behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227924

        Reviewed by Sam Weinig.

        Add experimental feature flag for BroadcastChannel, off by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Pipewire] Implement getDisplayMedia() backend
        https://bugs.webkit.org/show_bug.cgi?id=210926

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Enable screen-capture if libportal
        was found.

2021-07-14  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r279912 (239661@main); Add a HAVE(SYSTEM_STATUS) macro.

        * wtf/PlatformHave.h:

2021-07-13  Alex Christensen  <achristensen@webkit.org>

        Update and fix URL WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=227820

        Reviewed by Chris Dumez.

        There was an edge case where if we set a path to an empty string, it would add a slash.  No more.

        * wtf/URL.cpp:
        (WTF::URL::setPath):

2021-07-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Remove USE_64KB_PAGE_BLOCK
        https://bugs.webkit.org/show_bug.cgi?id=227905

        Reviewed by Yusuke Suzuki.

        * wtf/PageBlock.h:

2021-07-12  Filip Pizlo  <fpizlo@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

        New malloc algorithm
        https://bugs.webkit.org/show_bug.cgi?id=226404

        Reviewed by Yusuke Suzuki.

        Introduce flags for using libpas as the ExecutableAllocator.

        Explicitly ask for gigacage initialization, since libpas prefers it this way right now.

        * wtf/FastTLS.h:
        * wtf/PlatformUse.h:
        * wtf/Threading.cpp:
        (WTF::initialize):

2021-07-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Turn on `USE(OS_STATE)` when building with a non-Apple-internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=227884

        Reviewed by Tim Horton.

        Enable the compile-time flag for all Cocoa builds.

        * wtf/PlatformUse.h:

2021-07-12  Chris Fleizach  <cfleizach@apple.com>

        AX: Make WebKit observe spatial audio accessibility settings
        https://bugs.webkit.org/show_bug.cgi?id=227848

        Reviewed by Sam Weinig.

        This flag was using the wrong format for a HAVE setting, so the code wasn't being compiled in.

        * wtf/PlatformHave.h:

2021-07-12  Simon Fraser  <simon.fraser@apple.com>

        Add a StyleSheets log channel and some logging
        https://bugs.webkit.org/show_bug.cgi?id=227880

        Reviewed by Alan Bujtas.

        Make it possible to feed Ref<> and RefPtr<> into TextStream.

        * wtf/text/TextStream.h:
        (WTF::operator<<):

2021-07-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make Coordinator playback commands more precise
        https://bugs.webkit.org/show_bug.cgi?id=227756

        Reviewed by Eric Carlson.

        Add a method to convert from a MonotonicTime to a MachAbsoluteTime.

        * wtf/CurrentTime.cpp:
        (WTF::machTimebaseInfo):
        (WTF::MonotonicTime::fromMachAbsoluteTime):
        (WTF::MonotonicTime::toMachAbsoluteTime const):
        * wtf/MonotonicTime.h:
        * wtf/PlatformHave.h:

2021-07-08  Alex Christensen  <achristensen@webkit.org>

        Fix some whitespace handling issues in URL setters
        https://bugs.webkit.org/show_bug.cgi?id=227806

        Reviewed by Chris Dumez.

        Setters should ignore tabs and newlines like the main parser does.
        The protocol setter is problematic, which I reported in https://github.com/whatwg/url/issues/620

        * wtf/URL.cpp:
        (WTF::URL::setFragmentIdentifier):
        * wtf/URLParser.cpp:
        (WTF::URLParser::isSpecialScheme):
        (WTF::URLParser::parse):
        * wtf/URLParser.h:
        The URL.hash setter should allow trailing C0 and control characters, which we would otherwise trim.
        Rather than introduce a new parameter, use a sentinel value for when we need to do this.

2021-07-08  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Expose SPI to opt out of Extensible SSO authentication
        https://bugs.webkit.org/show_bug.cgi?id=227729
        <rdar://problem/75647892>

        Reviewed by Tim Horton.

        Create new WKPreference to allow WebKit clients to opt out of Extensible SSO authentication.

        * Scripts/Preferences/WebPreferences.yaml:

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        URL host setter should pass host to URLParser instead of trying to encode it itself
        https://bugs.webkit.org/show_bug.cgi?id=227749

        Reviewed by Chris Dumez.

        For non-special schemes, the host is percent-encoded instead of punycode-encoded.
        Allowing the URL parser to handle all input directly does the right thing for non-special schemes.

        * wtf/URL.cpp:
        (WTF::URL::setHost):
        (WTF::URL::setHostAndPort):

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        URL path setter should add "./" before non-empty path and after empty host for URLs with non-special schemes
        https://bugs.webkit.org/show_bug.cgi?id=227750

        Reviewed by Chris Dumez.

        This is related to r267837 but in the path setter, too.
        This helps preserve idempotence in parsed URLs.
        This is an edge case that will rarely be hit in practice, but now the path setter matches the parser.

        * wtf/URL.cpp:
        (WTF::URL::setPath):

2021-07-07  Christopher Reid  <chris.reid@sony.com>

        [PlayStation] Don't assume 4KB block size when estimating Network Cache disk usage
        https://bugs.webkit.org/show_bug.cgi?id=227502

        Reviewed by Chris Dumez.

        Add getVolumeFileBlockSize to fetch the block size from the filesystem.
        Currently only implemented for Windows and POSIX filesystems.

        * wtf/FileSystem.cpp:
        * wtf/FileSystem.h:
        * wtf/playstation/FileSystemPlayStation.cpp:

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        Use more Span
        https://bugs.webkit.org/show_bug.cgi?id=227606

        Reviewed by Darin Adler.

        New is always better, right?

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::mapToFile):
        * wtf/FileSystem.h:
        * wtf/persistence/PersistentCoders.cpp:
        (WTF::Persistence::Coder<CString>::encode):
        (WTF::Persistence::Coder<CString>::decode):
        (WTF::Persistence::Coder<String>::encode):
        (WTF::Persistence::decodeStringText):
        (WTF::Persistence::Coder<SHA1::Digest>::encode):
        (WTF::Persistence::Coder<SHA1::Digest>::decode):
        * wtf/persistence/PersistentCoders.h:
        * wtf/persistence/PersistentDecoder.cpp:
        (WTF::Persistence::Decoder::Decoder):
        (WTF::Persistence::Decoder::bufferIsLargeEnoughToContain const):
        (WTF::Persistence::Decoder::bufferPointerForDirectRead):
        (WTF::Persistence::Decoder::decodeFixedLengthData):
        (WTF::Persistence::Decoder::decodeNumber):
        (WTF::Persistence::Decoder::verifyChecksum):
        * wtf/persistence/PersistentDecoder.h:
        (WTF::Persistence::Decoder::length const):
        (WTF::Persistence::Decoder::currentOffset const):
        * wtf/persistence/PersistentEncoder.cpp:
        (WTF::Persistence::Encoder::updateChecksumForData):
        (WTF::Persistence::Encoder::encodeFixedLengthData):
        (WTF::Persistence::Encoder::encodeChecksum):
        * wtf/persistence/PersistentEncoder.h:

2021-07-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize Object.assign and putDirectInternal
        https://bugs.webkit.org/show_bug.cgi?id=227677

        Reviewed by Filip Pizlo.

        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.h:
        (WTF::HashTable::isNullStorage const):

2021-07-02  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Only use WebGL on Metal by default on safe versions of macOS
        https://bugs.webkit.org/show_bug.cgi?id=227633
        <rdar://problem/78527887>

        Reviewed by Dean Jackson.

        Tested by WebGL test suite.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformHave.h:

2021-07-01  Youenn Fablet  <youenn@apple.com>

        Disable relay for UDP sockets when not needed
        https://bugs.webkit.org/show_bug.cgi?id=227253
        <rdar://problem/79912154>

        Reviewed by Eric Carlson.

        * wtf/PlatformHave.h:
        Add a macro for new NW methods.

2021-07-01  Antoine Quint  <graouts@webkit.org>

        [Model] Restrict IPC calls to ARKit SPI availability and runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227581

        Reviewed by Tim Horton.

        Define a new compile-time flag when either of the iOS or macOS ARKit SPIs are available.

        * wtf/PlatformHave.h:

2021-07-01  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] <select> menus should scroll to the selected option
        https://bugs.webkit.org/show_bug.cgi?id=227562
        <rdar://problem/77887668>

        Reviewed by Wenson Hsieh.

        * wtf/PlatformHave.h:

        Add HAVE(UIMENUOPTIONS_SINGLE_SELECTION).

2021-07-01  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Add a new experimental flag for NW backed UDP sockets.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-07-01  Jer Noble  <jer.noble@apple.com>

        [Mac] (Re-)enable GroupActivities after upstreaming
        https://bugs.webkit.org/show_bug.cgi?id=227546

        Reviewed by Eric Carlson.

        Add support for HAVE_GROUP_ACTIVITIES.

        * wtf/PlatformHave.h:

2021-06-30  Antoine Quint  <graouts@webkit.org>

        [Model] [macOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227530
        <rdar://problem/79968206>

        Reviewed by Dean Jackson.

        Add a new compile-time flag indicating the availability of the ASVInlinePreview SPI on macOS.
        We only define it when the header itself is present for now to avoid issues with older macOS
        12 SDKs, but ultimately we will only use the macOS version check.

        * wtf/PlatformHave.h:

2021-06-30  Megan Gardner  <megan_gardner@apple.com>

        Add ID and versioning support for AppHighlights
        https://bugs.webkit.org/show_bug.cgi?id=227279

        Reviewed by Tim Horton.

        Allow PersistentDecoders to rewind, to help support v0 highlight data.

        * wtf/persistence/PersistentDecoder.cpp:
        (WTF::Persistence::Decoder::Decoder):
        (WTF::Persistence::Decoder::rewind):
        * wtf/persistence/PersistentDecoder.h:

2021-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        Use WeakHashMap and WeakPtr with Node in more places
        https://bugs.webkit.org/show_bug.cgi?id=227192
        <rdar://problem/79828322>

        Reviewed by Geoffrey Garen.

        * wtf/WeakHashMap.h:
        (WTF::WeakHashMap::WeakHashMapIteratorBase::makePeek): Fixed type mismatch errors.
        (WTF::WeakHashMap::ensure): Made this function return AddResult like HashMap::ensure.
        (WTF::WeakHashMap::take): Added.
        (WTF::WeakHashMap::removeIf): Fixed the bug that the callback was called with the iterator
        of m_impl and not WeakHashMapIterator.
        * wtf/WeakHashSet.h:
        (WTF::HashTraits<Ref<WeakPtrImpl<Counter>>>::isReleasedWeakValue): Moved to WeakPtr.h
        * wtf/WeakPtr.h:
        (WTF::HashTraits<Ref<WeakPtrImpl<Counter>>>::isReleasedWeakValue): Moved from WeakHashSet.h

2021-06-30  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279405.

        Casued 50+ webrtc crashes on Big Sur Debug

        Reverted changeset:

        "[Cocoa] Migrate WebRTC UDP socket handling to NW API"
        https://bugs.webkit.org/show_bug.cgi?id=227210
        https://commits.webkit.org/r279405

2021-06-30  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * wtf/PlatformHave.h:
        This is not available on the simulator; disable it.

2021-06-30  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Add a new experimental flag for NW backed UDP sockets.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-06-29  Antoine Quint  <graouts@webkit.org>

        WebKit_iosmac build failure: SystemPreviewSPI.h:29:9: fatal error: 'AssetViewer/ARQuickLookWebKitItem.h' file not found
        https://bugs.webkit.org/show_bug.cgi?id=227507
        <rdar://problem/79902043>

        Reviewed by Dean Jackson.

        When we added new SPIs in Source/WebCore/PAL/pal/spi/ios/SystemPreviewSPI.h as part of r279312 we also included this file
        from a new file that is compiled on Catalyst. This revealed an issue where existing SPIs included in that file weren't
        actually available on Catalyst. We now make sure we compile those out on Catalyst.

        * wtf/PlatformHave.h:

2021-06-29  Antti Koivisto  <antti@apple.com>

        Enable Probabilistic Guard Malloc for RuleData and RuleFeature vectors
        https://bugs.webkit.org/show_bug.cgi?id=227446

        Reviewed by Geoffrey Garen.

        Add SystemMalloc type that can be used with containers like Vector and
        ProbabilisticGuardMalloc alias for it on Mac/iOS platforms.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/SystemMalloc.h: Added.
        (WTF::SystemMalloc::malloc):
        (WTF::SystemMalloc::tryMalloc):
        (WTF::SystemMalloc::zeroedMalloc):
        (WTF::SystemMalloc::tryZeroedMalloc):
        (WTF::SystemMalloc::realloc):
        (WTF::SystemMalloc::tryRealloc):
        (WTF::SystemMalloc::free):
        * wtf/Vector.h:
        (WTF::Malloc>::appendVector):

        Include all template parameters for the appendVector argument.

2021-06-28  Mikhail R. Gadelha  <mikhail@igalia.com>

        Prevent sign-extended casts for 32 bits arch
        https://bugs.webkit.org/show_bug.cgi?id=227170

        Reviewed by Yusuke Suzuki.

        In a number of places, addresses are reinterpreted as uint64, which can
        lead to wrong addresses in 32 bits arch.

        * wtf/LoggerHelper.h:
        (WTF::LoggerHelper::childLogIdentifier):

2021-06-28  Sam Weinig  <weinig@apple.com>

        Add helpers to create Spans from CFDataRef and NSData
        https://bugs.webkit.org/show_bug.cgi?id=227217

        Reviewed by Chris Dumez.

        Add overloads of asBytes() for CFDataRef and NSData. This is going to
        be a common enough pattern to warrent these helpers.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformFTW.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cf/SpanCF.h: Added.
        (WTF::asBytes):
        * wtf/cocoa/SpanCocoa.h: Added.
        (WTF::asBytes):

2021-06-27  Antoine Quint  <graouts@webkit.org>

        [Model] [iOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227392
        <rdar://problem/79770136>

        Reviewed by Tim Horton.

        Add a new compile-time flag indicating the availability of the ASVInlinePreview SPI on iOS.
        We only define it when the header itself is present for now to avoid issues with older iOS
        15 SDKs, but ultimately we will only use the iOS version check.

        * wtf/PlatformHave.h:

2021-06-25  Kenneth Russell  <kbr@chromium.org>

        Set ImageBitmap experimental feature flag to true
        https://bugs.webkit.org/show_bug.cgi?id=227140

        Reviewed by Dean Jackson.

        Web developers - most recently Google's Meet team - have asked for
        ImageBitmap support in WebKit. The implementation was
        substantially upgraded during development of WebGL 2.0, and is
        thoroughly tested on the EWS. Change the default value for
        ImageBitmap's experimental flag to true; this can be removed
        completely after one release cycle.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-06-24  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Remove ENABLE_SCROLL_SNAP compile-time option
        https://bugs.webkit.org/show_bug.cgi?id=227067

        Reviewed by Simon Fraser.

        Remove compile-time ENABLE_SCROLL_SNAP configuration option.

        * wtf/PlatformEnable.h: Remove the global feature definition.

2021-06-23  Mark Lam  <mark.lam@apple.com>

        Base Options::useWebAssemblyFastMemory's default value on Gigacage::hasCapacityToUseLargeGigacage.
        https://bugs.webkit.org/show_bug.cgi?id=227328

        Reviewed by Saam Barati.

        Provide a Gigacage::hasCapacityToUseLargeGigacage value for when !GIGACAGE_ENABLED.

        * wtf/Gigacage.h:

2021-06-23  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize UBFIZ supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227204

        Reviewed by Filip Pizlo.

        Add functions to count the consecutive zero bits (trailing) on the 
        right with modulus division and lookup. Reference: Bit Twiddling Hacks.

        * wtf/MathExtras.h:
        (WTF::countTrailingZeros):

2021-06-23  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        Update compile flag naming to align with the App Privacy Report
        feature. Added a new check for Symptoms for a simpler, more clear
        check.

        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformHave.h:

2021-06-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Adopt new date picker presentation SPI
        https://bugs.webkit.org/show_bug.cgi?id=227221
        <rdar://problem/77930086>

        Reviewed by Wenson Hsieh.

        * wtf/PlatformHave.h:

        Add HAVE(UIDATEPICKER_OVERLAY_PRESENTATION) and HAVE(UITOOLBAR_STANDARD_APPEARANCE).

2021-06-21  Darin Adler  <darin@apple.com>

        Improve more of the CSS list style implementations
        https://bugs.webkit.org/show_bug.cgi?id=227206

        Reviewed by Antti Koivisto.

        * wtf/unicode/CharacterNames.h: Added blackDown/Left/RightPointingSmallTriangle.

2021-06-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] [macOS] Add an internal option to disable inline text selection in images
        https://bugs.webkit.org/show_bug.cgi?id=227265
        rdar://79460142

        Reviewed by Tim Horton.

        Add a new internal feature flag. See WebKit ChangeLog for more details.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-06-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GLib] Rewrite NetworkCache::Data::adoptMap without FileSystem::MappedFileData::leakHandle and munmap
        https://bugs.webkit.org/show_bug.cgi?id=227017

        Reviewed by Carlos Garcia Campos.

        * wtf/FileSystem.h: MappedFileData::leakHandle is used only if PLATFORM(COCOA) now.

2021-06-22  Saam Barati  <sbarati@apple.com>

        jitCompileAndSetHeuristics shouldn't return true when we fail to compile
        https://bugs.webkit.org/show_bug.cgi?id=227155

        Reviewed by Tadeu Zagallo.

        * wtf/WeakRandom.h:

2021-06-22  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279083.

        Broke Mac Builds

        Reverted changeset:

        "Migrate App Privacy Report code from WebKitAdditions"
        https://bugs.webkit.org/show_bug.cgi?id=227045
        https://commits.webkit.org/r279083

2021-06-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        Functions dispatched to WorkQueue are sometimes destroyed in the calling thread due to block refcounting
        https://bugs.webkit.org/show_bug.cgi?id=227160

        Reviewed by Antti Koivisto.

        WorkQueue::dispatch Function bodies always execute in the thread of target
        queue. However, sometimes the Function destruction would happen in the
        dispatched-from thread. This is not what the WorkQueue::dispatch callers
        expect.

        Implement some of the WorkQueue::dispatch* in terms of dispatch_..._f()
        variants which take a function and context pointer instead of a block.

        Blocks are reference counted objects without the ability to pass the
        ownership of the reference. For dispatch case, it means that caller will
        need to hold the reference while dispatch_...() returns. In thread
        contention cases the called block might complete and reference be
        dropped in the thread of the queue before the dispatched-from thread
        would drop its reference to the block. This would cause the dispatched
        Function to be destroyed in the dispatched-from thread.

        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::dispatchWorkItem):
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::dispatchAfter):
        (WTF::WorkQueue::dispatchSync):

2021-06-21  Chris Dumez  <cdumez@apple.com>

        Adjust `fetch` port blocking for ports 990, 989
        https://bugs.webkit.org/show_bug.cgi?id=226971
        <rdar://problem/79287147>

        Reviewed by Geoffrey Garen.

        Prevent connecting to ports 989 & 990 as per:
        - https://github.com/whatwg/fetch/pull/1250

        * wtf/URL.cpp:
        (WTF::portAllowed):

2021-06-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Turn ENABLE_SHAREABLE_RESOURCE on
        https://bugs.webkit.org/show_bug.cgi?id=227011

        Reviewed by Don Olmstead.

        Added a new member m_fileMapping to MappedFileData to store a file
        mapping object handle to create a SharedMemory from a
        MappedFileData on Windows.

        Conditioned out MappedFileData::leakHandle() if OS(WINDOWS). And,
        removed unmapViewOfFile(). Destruction of MappedFileData should be
        done by ~MappedFileData.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::MappedFileData::~MappedFileData):
        (WTF::FileSystemImpl::MappedFileData::mapFileHandle):
        (WTF::FileSystemImpl::unmapViewOfFile): Deleted.
        * wtf/FileSystem.h:
        (WTF::FileSystemImpl::MappedFileData::fileMapping const):
        (WTF::FileSystemImpl::MappedFileData::MappedFileData):
        (WTF::FileSystemImpl::MappedFileData::operator=):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::MappedFileData::~MappedFileData):
        (WTF::FileSystemImpl::MappedFileData::mapFileHandle):
        (WTF::FileSystemImpl::unmapViewOfFile): Deleted.

2021-06-21  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        Update compile flag naming to align with the App Privacy Report
        feature.

        * wtf/PlatformEnableCocoa.h:

2021-06-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        makeUnique cannot be used to instantiate function-local classes
        https://bugs.webkit.org/show_bug.cgi?id=227163

        Reviewed by Antti Koivisto.

        Make WTF_MAKE_FAST_ALLOCATED and similar macros work in function
        local classes. Mark the typedef that is used to enforce semicolon
        after the macro as unused to avoid unused typedef warning.
        Fixes cases where the compiler is able to prove that it sees all the
        use sites of the class and the typedef is not used.

        * wtf/Compiler.h:
        * wtf/FastMalloc.h:

2021-06-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed build fix after r279062

        * wtf/Span.h:
        (std::is_convertible_v<std::remove_pointer_t<decltype):

2021-06-20  Sam Weinig  <weinig@apple.com>

        Replace Span implementation with one from libc++, which is more spec complient
        https://bugs.webkit.org/show_bug.cgi?id=227197

        Reviewed by Darin Adler.

        * wtf/Span.h:
        The tcb span implementation had some SFINAE issues when converting containers
        had data() and size() member functions but were not span compatible that were
        causing failures. Rather than trying to fix those, this adopts a modified version
        of the libc++ span implementation which is more up-to-date.

        To fix MSVC compile issues, the as_bytes/as_writable_bytes functions have been
        re-implemented to not work around a compile issue seen where using the dynamic_extent
        specicialization from the static extent specicialization was failing to compile.

2021-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
        https://bugs.webkit.org/show_bug.cgi?id=227193

        Reviewed by Sam Weinig.

        Add some compile-time flags to guard QuickLook SPI declarations.

        * wtf/PlatformHave.h:

2021-06-20  Sam Weinig  <weinig@apple.com>

        Adopt Span in SHA1.h
        https://bugs.webkit.org/show_bug.cgi?id=227184

        Reviewed by Chris Dumez.

        Replaces overload of addBytes taking a Vector with ones taking
        a Span and add overloads for Span<const std::byte> which all the
        others are now implemented in terms of. This is useful since
        any Span can be turned into one of type Span<const std::byte>
        just by calling asBytes(existingSpan).

        This leaves most of the existing overloads in place (though
        simplifies them by implementing them as Span contructions),
        though we should consider removing some in a separate pass.

        * wtf/SHA1.cpp:
        * wtf/SHA1.h:

2021-06-19  Sam Weinig  <weinig@apple.com>

        Adopt Span in Base64.h
        https://bugs.webkit.org/show_bug.cgi?id=227132

        Reviewed by Chris Dumez.

        Replaces overloads taking Vectors with ones taking Spans
        and add overloads for Span<const std::byte> which all the
        others are now implemented in terms of. This is useful since
        any Span can be turned into one of type Span<const std::byte>
        just by calling asBytes(existingSpan).

        This leaves most of the existing overloads in place (though
        simplifies them by implementing them as Span contructions)
        though we should consider removing some in a separate pass.

        * wtf/Vector.h:
        Add value_type typedef so that Vector<T> can be automatically
        deduced as Span<T>.

        * wtf/text/CString.h:
        Add bytes() and bytesInludingNullTerminator() (only the former
        is used in this patch, but the later will be needed shortly)
        which return Span<const uint8_t> of the CString. I chose to use
        an explicit function, rather than making it converible to Span
        like Vector, because some callers will want the null terminator
        and some will not.

        * wtf/text/Base64.cpp:
        * wtf/text/Base64.h:
        Canonicalize all input buffers either as a Span<const std::byte> or
        a StringView, making all the other overloads just forward to one of
        those two (String -> StringView, everything else -> Span<const std::byte>).

        Clean up the header a bit by putting all the declarations at the top of
        the file.

2021-06-17  Said Abou-Hallawa  <said@apple.com>

        [Cocoa] Disable hardware decoding in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=226869
        <rdar://77548905>

        Reviewed by Per Arne Vollan and Simon Fraser.

        Add have macros for using:
        1. kCGImageSourceEnableRestrictedDecoding
        2. VTRestrictVideoDecoders()

        * wtf/PlatformHave.h:

2021-06-17  Mark Lam  <mark.lam@apple.com>

        Rename numberOfPACBits to maxNumberOfAllowedPACBits.
        https://bugs.webkit.org/show_bug.cgi?id=227156

        Reviewed by Saam Barati.

        * wtf/CagedPtr.h:

2021-06-17  Mark Lam  <mark.lam@apple.com>

        Define MacroAssemblerARM64E::numberOfPACBits based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH).
        https://bugs.webkit.org/show_bug.cgi?id=227147
        rdar://78785309

        Reviewed by Saam Barati.

        For OS(DARWIN), define OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) in terms of
        MACH_VM_MAX_ADDRESS, which is provided by the SDK.  This ensures that it is
        correct for each target OS(DARWIN) platform.

        Also update an assertion in WTFAssertions.cpp to verify that address bits are
        less than 48.  The purpose of this assertion is to ensure that our 64-bit NaN
        boxing encoding for JSValues will work.  Hence, we should use the encoding limit
        for pointers of 48 bits.  It no longer makes sense to assert based on
        OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH), because OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH)
        is defined in terms of MACH_VM_MAX_ADDRESS.

        * wtf/CagedPtr.h:
        * wtf/CompactPointerTuple.h:
        * wtf/PlatformOS.h:
        * wtf/WTFAssertions.cpp:
        * wtf/threads/Signals.cpp:

2021-06-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WTF.ParseInteger and WTF.ParseIntegerAllowingTrailingJunk are failing
        https://bugs.webkit.org/show_bug.cgi?id=227090

        Reviewed by Yusuke Suzuki.

        ArithmeticOperations::sub unexpectedly reported an overflow for
        the result of std::numeric_limits<ResultType>::min() in MSVC code path.
        For example, Checked<int, RecordOverflow>(INT_MIN + 1) - 1 was reported an overflow.

        In the case of calculating (lhs - rhs), and lhs < 0 and rhs > 0,
        the original code reported an overflow if (rhs > max() + lhs).
        Mathematically, this condition checks (lhs - rhs < -max()).
        It should use min() instead of max() in this case. It should be
        (lhs - rhs < min()) mathematically.

        * wtf/CheckedArithmetic.h:

2021-06-17  Alex Christensen  <achristensen@webkit.org>

        Add assertion in RunLoop::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=227154
        <rdar://79243769>

        Reviewed by Geoff Garen.

        This should help us find what is scheduling null functions.

        * wtf/RunLoop.cpp:
        (WTF::RunLoop::dispatch):
        (WTF::RunLoop::dispatchAfter):

2021-06-17  Ben Nham  <nham@apple.com>

        Remove Mac-specific CPUTime functions
        https://bugs.webkit.org/show_bug.cgi?id=227109

        Reviewed by Yusuke Suzuki.

        There's no reason for the Mac-specific CPU time functions to exist, since getrusage and
        clock_gettime work fine on Mac. It's actually slightly more efficient to use the POSIX calls
        since getrusage returns CPU time for both current and terminated threads in a single
        syscall, while using task_info requires two syscalls to do the same thing.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/cocoa/CPUTimeCocoa.cpp: Removed.
        * wtf/posix/CPUTimePOSIX.cpp: Renamed from Source/WTF/wtf/unix/CPUTimeUnix.cpp.

2021-06-17  Tim Horton  <timothy_horton@apple.com>

        Adopt WKHoverGestureRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=227116
        <rdar://79442027>

        Reviewed by Wenson Hsieh.

        * wtf/PlatformEnableCocoa.h:

2021-06-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Disable JITCage on macOS until we evaluate performance throughly
        https://bugs.webkit.org/show_bug.cgi?id=227104

        Reviewed by Mark Lam.

        This patch disables JITCage on macOS until we evaluate performance throughly.

        * wtf/PlatformEnable.h:

2021-06-16  Alicia Boya García  <aboya@igalia.com>

        [WTF] DataMutex: Assert on double locking on the same thread
        https://bugs.webkit.org/show_bug.cgi?id=227069

        Reviewed by Xabier Rodriguez-Calvar.

        DataMutex used to use OwnerAwareLock to track what thread is holding
        the mutex and emit assertion errors if a thread is found attempting to
        lock a mutex held by that same thread. This turns deadlocks into
        runtime errors.

        OwnerAwareLock was removed when DataMutex got clang thread safety
        annotations. This patch reintroduces the same logic, while keeping
        thread-safety annotations.

        This fixes WTF_DataMutex.DoubleLockDeathTest, which tested this
        functionality and was previously regressed.

        * wtf/DataMutex.h:

2021-06-06  Darin Adler  <darin@apple.com>

        Delete some recently-obsoleted files
        https://bugs.webkit.org/show_bug.cgi?id=226705

        Reviewed by Chris Dumez.

        * wtf/CMakeLists.txt: Removed Optional.h.
        * wtf/Optional.h: Removed.

2021-06-15  Alex Christensen  <achristensen@webkit.org>

        Check for "xn--" in any subdomain when parsing URL hosts
        https://bugs.webkit.org/show_bug.cgi?id=226912

        Reviewed by Darin Adler.

        We have a fast path that doesn't call uidna_nameToASCII if the host is already ASCII.
        We need to check if the host is properly-punycode-encoded if it starts with "xn--"
        but we also need to check if any subdomain starts with "xn--" (not just the first one).

        In order to not regress tests, I needed to also take the fix I did in r256629 and apply it to all use of uidna_nameToASCII.

        * wtf/URL.cpp:
        (WTF::appendEncodedHostname):
        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::mapHostName):
        * wtf/URLParser.cpp:
        (WTF::URLParser::domainToASCII):
        (WTF::URLParser::subdomainStartsWithXNDashDash):
        (WTF::URLParser::parseHostAndPort):
        (WTF::URLParser::startsWithXNDashDash): Deleted.
        * wtf/URLParser.h:

2021-06-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds warning in Packed.h
        https://bugs.webkit.org/show_bug.cgi?id=226557
        <rdar://problem/79103658>

        Reviewed by Darin Adler.

        * wtf/Bitmap.h:
        (WTF::WordType>::clear): Use the newly-introduced IGNORE_ARRAY_BOUNDS_WARNINGS macros
        instead of vanilla IGNORE_WARNINGS.
        * wtf/Compiler.h: Add new IGNORE_ARRAY_BOUNDS_WARNINGS_[BEGIN,END] macros, since this
        warning is now suppressed in several different places.
        * wtf/Packed.h: Suppress the warning. Also, add a static_assert for safety.

2021-06-15  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Harden WebAuthn process by restricting to browser-entitled processes
        https://bugs.webkit.org/show_bug.cgi?id=226772
        <rdar://problem/74721877>

        Reviewed by Darin Adler.

        Add a new entitlement utility that returns the String value of a given entitlement for
        the process with the provided audit token.

        * wtf/cocoa/Entitlements.h:
        * wtf/cocoa/Entitlements.mm:
        (WTF::hasEntitlementValue):
        * wtf/PlatformHave.h: Add item for PAC shared region feature.

2021-06-14  Per Arne  <pvollan@apple.com>

        [iOS] Sync Accessibility preferences
        https://bugs.webkit.org/show_bug.cgi?id=226738
        <rdar://77922839>

        Reviewed by Brent Fulgham.

        Enable Per-App Accessibility preferences on iOS.

        * wtf/PlatformHave.h:

2021-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Number pad button is missing its image when tapping on <input type=tel> in watchOS 8
        https://bugs.webkit.org/show_bug.cgi?id=226955

        Reviewed by Darin Adler.

        Add compile-time flags to guard the presence of `PUICQuickboardController` and `PUICButtonTypePill`.

        * wtf/PlatformHave.h:

2021-06-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashMap
        https://bugs.webkit.org/show_bug.cgi?id=226872

        Reviewed by Geoffrey Garen.

        Added WeakHashMap which deletes entries during rehashing and amortized over time (based on
        the number of read & write accesses done on a given WeakHashMap instance).

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/WeakHashMap.h: Added.
        (WTF::WeakHashMap): Added.
        (WTF::WeakHashMap::PeekKeyValuePairTraits): Added.
        (WTF::WeakHashMap::PeekType): Added.
        (WTF::WeakHashMap::PeekPtrType): Added. Unlike a regular HashMap, we need to fake the iterator
        pointer value with this struct since key-value pair doesn't exist in HashTable itself as it stores
        Ref<WeakRefImpl> instead.
        (WTF::WeakHashMap::WeakHashMapIteratorBase): Added. Has a bunch of helper functions so that
        WeakHashMapIterator and WeakHashMapConstIterator can share the code.
        (WTF::WeakHashMap::WeakHashMapIterator): Added.
        (WTF::WeakHashMap::WeakHashMapConstIterator): Added.
        (WTF::WeakHashMap::AddResult): Added.
        (WTF::WeakHashMap::begin): Added.
        (WTF::WeakHashMap::end): Added.
        (WTF::WeakHashMap::add): Added.
        (WTF::WeakHashMap::set): Added.
        (WTF::WeakHashMap::find): Added.
        (WTF::WeakHashMap::contains): Added.
        (WTF::WeakHashMap::get): Added.
        (WTF::WeakHashMap::remove): Added.
        (WTF::WeakHashMap::removeIf): Added.
        (WTF::WeakHashMap::clear): Added.
        (WTF::WeakHashMap::capacity): Added.
        (WTF::WeakHashMap::isEmptyIgnoringNullReferences): Added. This is akin to WeakHashSet::computesEmpty.
        Per prior discussion, we intend to rename WeakHashSet's version to this name as well for clarity.
        Note that this function will clear the hash table completely if the map is semantically empty
        but HashTable contains null references as keys.
        (WTF::WeakHashMap::hasNullReferences): Added. Triggers amortized cleanup based on the number
        of iterations performed. If there are no null references, it resets m_operationCountSinceLastCleanup.
        (WTF::WeakHashMap::computeSize): Added.
        (WTF::WeakHashMap::removeNullReferences): Added. Since WeakHashMap doesn't eagerly delete the value
        when the key goes away, this function should be called when values held onto by WeakRefImpl with
        the nullptr back pointer should be deleted en masse.
        (WTF::WeakHashMap::checkConsistency): Added.
        (WTF::WeakHashMap::makeKeyImpl): Added.
        (WTF::WeakHashMap::keyImplIfExists): Added.
        * wtf/WeakPtr.h:

2021-06-11  Jonathan Bedard  <jbedard@apple.com>

        [Monterey] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Reviewed by Tim Horton.

        * wtf/PlatformHave.h: Add HAVE(VK_IMAGE_ANALYSIS).
        * wtf/spi/cocoa/SecuritySPI.h:

2021-06-09  Chris Dumez  <cdumez@apple.com>

        Avoid some calls to StringView::toString() / StringView::toStringWithoutCopying()
        https://bugs.webkit.org/show_bug.cgi?id=226803

        Reviewed by Darin Adler.

        Add support to TextStream for printing a StringView directly, without having to convert
        it to a String first.

        * wtf/text/TextStream.cpp:
        (WTF::TextStream::operator<<):
        * wtf/text/TextStream.h:

2021-06-09  Alicia Boya García  <aboya@igalia.com>

        [WTF][GStreamer] Add RAII lockers for 3rd party locks
        https://bugs.webkit.org/show_bug.cgi?id=225650

        Reviewed by Xabier Rodriguez-Calvar.

        This patch introduces WTF::ExternalLocker, which allows to lock 3rd
        party mutexes in a RAII fashion, very similar to WTF::Locker.

        This is used also in WebCore to provide RAII lockers for GStreamer.

        * wtf/Locker.h:
        (WTF::unlockFunction):

2021-06-08  Alex Christensen  <achristensen@webkit.org>

        Move PrivacyStance code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=226774

        Reviewed by Jer Noble.

        * wtf/PlatformHave.h:

2021-06-08  Ben Nham  <nham@apple.com>

        Use access instead of stat in some filesystem functions
        https://bugs.webkit.org/show_bug.cgi?id=226667

        Reviewed by Chris Dumez.

        We are spending a bit more time in WTF::FileSystemImpl functions after the move to
        std::filesystem (https://bugs.webkit.org/show_bug.cgi?id=225255). In particular, several
        std::filesystem functions (like the ones called by fileExists and makeAllDirectories) prefer
        to use stat() over access() for file existence checks. Since our sandbox has a fast path for
        access(path, F_OK) but not for stat, we ended up spending more time in sandbox evaluation in
        the kernel after the move to std::filesystem.

        Note that the two checks don't do exactly the same thing. access(path, F_OK) only checks for
        path existence, while stat(path) additionally fetches metadata, which requires checking the
        file-read-metadata permission. But in practice our code was written to be fine with just
        checking for existence.

        To work around this, I've re-introduced some of the old WTF::FileSystemImpl functions from
        FileSystemPosix.cpp. They are the ones that are called by NetworkCache, which seems to be
        the biggest consumer of these functions. The rest of the functions are still implemented
        using std::filesystem.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::fileExists):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::pathByAppendingComponent):
        (WTF::FileSystemImpl::pathByAppendingComponents):
        * wtf/PlatformEnableCocoa.h:
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::fileExists):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::pathByAppendingComponent):
        (WTF::FileSystemImpl::pathByAppendingComponents):

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Payment Request] upstream new features
        https://bugs.webkit.org/show_bug.cgi?id=226740
        <rdar://problem/78963132>

        Reviewed by Andy Estes.

         - recurring line items (`HAVE_PASSKIT_RECURRING_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_RECURRING_LINE_ITEM`)
         - deferred line items (`HAVE_PASSKIT_DEFERRED_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_DEFERRED_LINE_ITEM`)
         - estimated shipping dates (`HAVE_PASSKIT_SHIPPING_METHOD_DATE_COMPONENTS_RANGE` and `ENABLE_APPLE_PAY_SHIPPING_METHOD_DATE_COMPONENTS_RANGE`)
         - coupon code entry (`HAVE_PASSKIT_COUPON_CODE` and `ENABLE_APPLE_PAY_COUPON_CODE`)
         - shipped vs in-store pickup (`HAVE_PASSKIT_SHIPPING_CONTACT_EDITING_MODE` and `ENABLE_APPLE_PAY_SHIPPING_CONTACT_EDITING_MODE`)

        * wtf/PlatformHave.h:
        * wtf/PlatformEnableCocoa.h:

2021-06-08  Chris Dumez  <cdumez@apple.com>

        Reduce use of reinterpret_cast<> in the codebase
        https://bugs.webkit.org/show_bug.cgi?id=226743

        Reviewed by Darin Adler.

        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/FastMalloc.h:
        (WTF::FastAllocator::allocate):
        * wtf/SHA1.h:
        (WTF::SHA1::addBytes):
        * wtf/StackCheck.h:
        (WTF::StackCheck::Scope::Scope):
        (WTF::StackCheck::StackCheck):
        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::userVisibleURL):
        * wtf/URLParser.cpp:
        (WTF::URLParser::formURLDecode):
        * wtf/cf/URLCF.cpp:
        (WTF::URL::createCFURL const):
        * wtf/cocoa/URLCocoa.mm:
        (WTF::URL::createCFURL const):
        * wtf/persistence/PersistentCoders.cpp:
        (WTF::Persistence::Coder<CString>::encode):
        (WTF::Persistence::Coder<String>::encode):
        * wtf/text/CString.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::latin1 const):
        * wtf/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] upstream new features
        https://bugs.webkit.org/show_bug.cgi?id=226736
        <rdar://problem/78957464>

        Reviewed by Eric Carlson.

         - bring the "Audio"/"Languages" tracks menu to iOS
         - add a new "Playback Speed" menu on iOS and macOS in the overflow menu
         - add support for showing the most relevant `<track kind="chapters">` in the overflow menu

        * wtf/PlatformEnableCocoa.h:

2021-06-08  Sam Weinig  <weinig@apple.com>

        Add copy of std::span so that we can use it pre-moving to c++20
        https://bugs.webkit.org/show_bug.cgi?id=226351

        Reviewed by Alex Christensen.

        Imports a copy of Tristan Brindle's Boost licensed implementation of std::span 
        from 5d8d366eca918d0ed3d2d196cbeae6abfd874736 of https://github.com/tcbrindle/span.

        It has been further modified to rename tcb::span to WTF::Span.

        * LICENSE_1_0-Boost.txt: Added.
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Span.h: Added.

2021-06-07  Alex Christensen  <achristensen@webkit.org>

        Adopt SecTrustGetCertificateAtIndex replacement where available
        https://bugs.webkit.org/show_bug.cgi?id=225893

        Reviewed by Chris Dumez.

        rdar://74752046 introduced a new way to access the same thing.

        * wtf/PlatformHave.h:

2021-06-07  Chris Dumez  <cdumez@apple.com>

        Drop legacy MainThreadTaskQueue & EventLoopTaskQueue classes
        https://bugs.webkit.org/show_bug.cgi?id=226734

        Reviewed by Ryosuke Niwa.

        We recently introduced the WTF::CancellableTask in order to be able to cancel
        a pending task in the event loop, and/or check if the task is still pending.
        It worked great as a replacement for EventLoopDeferrableTask. However, it was
        insufficient as a replacement for task queues (such as MainThreadTaskQueue &
        EventLoopTaskQueue) since there was no convenient way to cancel a group of
        tasks. To address this, I am introducing WTF::TaskCancellationGroup. Whenever one
        needs to create a CancellableTask, it now needs to provide a TaskCancellationGroup.
        Several CancellableTask objects can share the same TaskCancellationGroup. Code now
        now schedule one or more CancellableTasks on the event loop and hold on
        to a TaskCancellationGroup. If they need to cancel those tasks, they can simply
        call cancel() on the TaskCancellationGroup. They can also check if previously
        scheduled tasks are still pending via TaskCancellationGroup::hasPendingTask().

        * wtf/CancellableTask.h:
        (WTF::TaskCancellationGroup::TaskCancellationGroup):
        (WTF::TaskCancellationGroup::cancel):
        (WTF::TaskCancellationGroup::hasPendingTask const):
        (WTF::TaskCancellationGroup::Impl::cancel):
        (WTF::TaskCancellationGroup::Impl::hasPendingTask const):
        (WTF::TaskCancellationGroup::Handle::isCancelled const):
        (WTF::TaskCancellationGroup::Handle::Handle):
        (WTF::TaskCancellationGroup::createHandle):
        (WTF::CancellableTask::CancellableTask):
        (WTF::CancellableTask::operator()):
        * wtf/WeakPtr.h:
        (WTF::WeakPtrFactory::weakPtrCount const):

2021-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Upstream WebKit support for Live Text
        https://bugs.webkit.org/show_bug.cgi?id=226706
        <rdar://problem/78933684>

        Reviewed by Tim Horton.

        * wtf/PlatformEnableCocoa.h:

        Move the feature flag out of WebKitAdditions and into OpenSource as IMAGE_ANALYSIS.

2021-06-07  Alicia Boya García  <aboya@igalia.com>

        [WTF][GStreamer] Fix clang TSA warnings in WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=226719

        Reviewed by Xabier Rodriguez-Calvar.

        Fix the remaning clang thread safety warnings in WTF::DataMutex.

        The goal of this patch is to reduce the number of warnings in the
        GStreamer codebase. Whether DataMutex should be deprecated in favor of
        Locker with the clang TSA annotations is outside of the scope of this
        patch.

        * wtf/DataMutex.h:

2021-06-07  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Remove spurious assert in WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=226714

        Reviewed by Michael Catanzaro.

        Remove DATA_MUTEX_CHECK(!mutex().isHeld()); from the DataMutexLocker
        constructor, introduced in r278248.

        Trying to lock a currently held mutex is not an error condition that
        should crash the process, it will just wait for its turn to lock it.

        * wtf/DataMutex.h:

2021-06-06  Chris Dumez  <cdumez@apple.com>

        Stop using legacy EventLoopDeferrableTask
        https://bugs.webkit.org/show_bug.cgi?id=226700

        Reviewed by Darin Adler.

        Introduce new WTF::CancellableTask type which is a wrapper around a WTF::Function.
        It can create a handle for the task and this handle can be used to check if the
        task is still pending and to cancel it. This is useful when scheduling tasks in the
        event loop for example as there are cases where we need to know if a task we
        scheduled is still pending (to avoid double scheduling) or where we need to cancel
        a previously scheduled task.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CancellableTask.h: Added.
        (WTF::CancellableTask::CancellableTask):
        (WTF::CancellableTask::operator()):
        (WTF::CancellableTask::isPending const):
        (WTF::CancellableTask::cancel):
        (WTF::CancellableTask::Handle::Handle):
        (WTF::CancellableTask::Handle::isPending const):
        (WTF::CancellableTask::Handle::cancel):
        (WTF::CancellableTask::createHandle):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        FileSystem::readFromFile() should return data as `void*`
        https://bugs.webkit.org/show_bug.cgi?id=226671

        Reviewed by Darin Adler.

        FileSystem::readFromFile() should return data as `void*` instead of `char*`. This is more flexible and
        consistent with FileSystem::writeToFile().

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::appendFileContentsToFileHandle):
        (WTF::FileSystemImpl::readOrMakeSalt):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::readFromFile):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::readFromFile):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::readFromFile):

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        Implement off-by-default experimental feature for PerformanceResourceTiming.transferSize, encodedBodySize, and decodedBodySize
        https://bugs.webkit.org/show_bug.cgi?id=226629

        Reviewed by Brady Eidson.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-06-04  Devin Rousso  <drousso@apple.com>

        Add a way to prefix output of `WTFReportBacktrace` to make log filtering easier
        https://bugs.webkit.org/show_bug.cgi?id=226390

        Reviewed by Megan Gardner.

        Often times while debugging I add `WTFLogAlways("<DR> ...")` to various places as indicators
        that "logic has reached here". This is especially useful when debugging iOS as unlike macOS
        there's no console output from `run-safari`, meaning that I have to use system logging,
        which is often a deluge of unrelated information. Having "<DR>" as a prefix makes filtering
        through the system logging trivial as I can ignore logs that don't have it. Unfortunately,
        `WTFReportBacktrace` does not have a way to add this prefix, so it becomes much harder to
        find in the logs. This patch enables adding a prefix to each line of `WTFReportBacktrace`
        via a new function `WTFReportBactraceWithPrefix`.

        * wtf/Assertions.h:
        * wtf/Assertions.cpp:
        (WTFReportBacktraceWithPrefix): Added.
        (WTFPrintBacktraceWithPrefix): Added.

        * wtf/StackTrace.h:
        (WTF::StackTrace::StackTrace):
        * wtf/StackTrace.cpp:
        (WTF::StackTrace::dump const):

2021-06-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix more GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=226193

        Reviewed by Adrian Perez de Castro.

        Add missing static_cast<void*> required to suppress GCC's -Wclass-memaccess warning when
        intentionally not running constructors/destructors. There's already a static_assert to
        ensure this is safe, which is better than usual for us.

        * wtf/SmallSet.h:

2021-06-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r277881.

        Fix warning about unused function.

        * wtf/cocoa/FileSystemCocoa.mm:

2021-06-03  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r277744): Broke build on s390x mainframes
        https://bugs.webkit.org/show_bug.cgi?id=226497

        Reviewed by Darin Adler.

        The problem is we have a template defined in a C++ source file, used by multiple source
        files. This is not valid C++, so let's split the templates defined in StringBuilder.cpp out
        into a new StringBuilderInternals.h that we can #include in both StringBuilder.cpp and
        StringBuilderJSON.cpp.

        Ideally we would move the template defined in StringBuilderJSON.cpp as well, and then
        eliminate StringBuilderJSON.cpp since there would only be one function left. But that file
        has an MPL license. It's easier to leave it be to keep the license situation simpler.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::expandedCapacity):
        (WTF::expandedCapacity): Deleted.
        (WTF::StringBuilder::allocateBuffer): Deleted.
        (WTF::StringBuilder::extendBufferForAppending): Deleted.
        (WTF::StringBuilder::extendBufferForAppendingSlowCase): Deleted.
        * wtf/text/StringBuilder.h:
        * wtf/text/StringBuilderInternals.h: Added.
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::reallocateBuffer):
        (WTF::StringBuilder::extendBufferForAppending):
        (WTF::StringBuilder::extendBufferForAppendingSlowCase):
        * wtf/text/StringBuilderJSON.cpp:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Drop WTF::Vector overloads taking index as Checked<size_t>
        https://bugs.webkit.org/show_bug.cgi?id=226553

        Reviewed by Geoffrey Garen.

        Drop WTF::Vector overloads taking index as Checked<size_t>. They are no longer needed now that
        Checked<size_t> can implicitly get converted to size_t (r278338).

        * wtf/Vector.h:
        (WTF::Vector::at const):
        (WTF::Vector::operator[] const):

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Drop Checked::safeGet()
        https://bugs.webkit.org/show_bug.cgi?id=226537

        Reviewed by Geoffrey Garen.

        Drop Checked::safeGet() and replace with uses of Checked::operator T() or Checked::value().
        safeGet() is a bit akward, having both a return value and an out-parameter.

        * wtf/CheckedArithmetic.h:
        (WTF::Checked::value const):
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator*):
        (WTF::operator/):

2021-06-02  Antti Koivisto  <antti@apple.com>

        Style::Scope should use CheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=226530

        Reviewed by Sam Weinig.

        * wtf/CMakeLists.txt:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Use Checked aliases instead of Checked<T, RecordOverflow>
        https://bugs.webkit.org/show_bug.cgi?id=226535

        Reviewed by Keith Miller.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::userVisibleURL):
        * wtf/URLParser.cpp:
        (WTF::URLParser::parseIPv4Piece):
        * wtf/cocoa/NSURLExtras.mm:
        (WTF::dataWithUserTypedString):
        * wtf/glib/SocketConnection.cpp:
        (WTF::SocketConnection::sendMessage):

2021-05-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add CheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=226158

        Reviewed by Antti Koivisto.

        This patch introduces a new type of smart pointer, CheckedPtr, which behaves like RefPtr and
        let each object keep track of pointers pointing to the object. Unlike CheckedPtr, the purpose of
        this internal counter is to release assert that there is no outstanding pointer at the time
        of destruction instead of keeping the object alive when there is one.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CheckedPtr.h: Added.
        (WTF::CheckedPtr): Added.
        (WTF::CheckedPtr::CheckedPtr): Added.
        (WTF::CheckedPtr::~CheckedPtr): Added.
        (WTF::CheckedPtr::isHashTableDeletedValue const): Added.
        (WTF::CheckedPtr::operator UnspecifiedBoolType const): Added.
        (WTF::CheckedPtr::operator! const): Added.
        (WTF::CheckedPtr::get const): Added.
        (WTF::CheckedPtr::get): Added.
        (WTF::CheckedPtr::operator* const): Added.
        (WTF::CheckedPtr::operator*): Added.
        (WTF::CheckedPtr::operator-> const): Added.
        (WTF::CheckedPtr::operator->): Added.
        (WTF::CheckedPtr::operator== const): Added.
        (WTF::CheckedPtr::operator=): Added.
        (WTF::CheckedPtr::unspecifiedBoolTypeInstance const): Added.
        (WTF::CheckedPtr::refIfNotNull): Added.
        (WTF::CheckedPtr::derefIfNotNull): Added.
        (WTF::makeCheckedPtr): Added.
        (WTF::is): Added.
        (WTF::CanMakeCheckedPtr): Added.
        (WTF::CanMakeCheckedPtr::~CanMakeCheckedPtr): Added. Release assert that m_ptrCount is 0.
        (WTF::CanMakeCheckedPtr::ptrCount const): Added.
        (WTF::CanMakeCheckedPtr::incrementPtrCount): Added.
        (WTF::CanMakeCheckedPtr::decrementPtrCount): Added. Note that we don't do anything when m_ptrCount
        becomes 0 unlike RefPtr.
        (WTF::HashTraits<CheckedPtr<P>>): Added.
        (WTF::HashTraits<CheckedPtr<P>>::emptyValue): Added.
        (WTF::HashTraits<CheckedPtr<P>>::peek): Added.
        (WTF::HashTraits<CheckedPtr<P>>::customDeleteBucket): Added.

2021-06-01  Darin Adler  <darin@apple.com>

        Remove <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=226437

        Reviewed by Chris Dumez.

        * <many files>: Removed include of <wtf/Optional.h>.

        * WTF.xcodeproj/project.pbxproj: Removed Optional.h.

        * wtf/Markable.h: Added include of <optional>.
        * wtf/OptionSet.h: Ditto.

        * wtf/Optional.h: Emptied this file. On the Windows build system, we can't
        seem to build successfully without an empty file here. The copied forwarding
        header seems to linger even if we remove the original. Until we fix the
        Windows build system, if we want to support incremental builds, we need
        to keep this empty file around.

        * wtf/PrintStream.h: Added include of <optional>.
        * wtf/Seconds.h: Ditto.
        * wtf/StackTrace.h: Ditto.

        * wtf/StdLibExtras.h: Moved the valueOrCompute function here from Optional.h.
        Re-sorted the "using" at the bottom of the file.

        * wtf/URLHelpers.h: Added include of <optional>.
        * wtf/Vector.h: Ditto.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Rename Checked::unsafeGet() to Checked::value()
        https://bugs.webkit.org/show_bug.cgi?id=226514

        Reviewed by Darin Adler.

        Rename Checked::unsafeGet() to Checked::value(). The "unsafeGet" naming is confusing as this
        function isn't really unsafe since it will crash if the value has overflowed. Also add an
        `operator T()` to implicitly convert a Checked to its underlying type without needing to
        call value().

        * wtf/CheckedArithmetic.h:
        (WTF::Checked::operator! const):
        (WTF::Checked::operator bool const):
        (WTF::Checked::operator T const):
        (WTF::Checked::value const):
        (WTF::Checked::operator==):
        (WTF::Checked::operator< const):
        (WTF::Checked::operator<= const):
        (WTF::Checked::operator> const):
        (WTF::Checked::operator>= const):
        * wtf/ConcurrentBuffer.h:
        * wtf/FastMalloc.cpp:
        (WTF::fastCalloc):
        (WTF::tryFastCalloc):
        * wtf/Gigacage.cpp:
        (Gigacage::tryMallocArray):
        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::userVisibleURL):
        * wtf/URLParser.cpp:
        (WTF::URLParser::parseIPv4Piece):
        * wtf/UniqueArray.h:
        * wtf/cocoa/NSURLExtras.mm:
        (WTF::dataWithUserTypedString):
        * wtf/glib/SocketConnection.cpp:
        (WTF::SocketConnection::readMessage):
        (WTF::SocketConnection::sendMessage):
        * wtf/text/CString.cpp:
        (WTF::CStringBuffer::createUninitialized):
        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::StringBuffer):
        * wtf/text/StringBuilderJSON.cpp:
        (WTF::StringBuilder::appendQuotedJSONString):
        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::allocationSize):
        * wtf/text/StringToIntegerConversion.h:
        (WTF::parseInteger):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r277881.

        Silence unused parameter warnings.

        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::setAllowsMaterializingDatalessFiles):
        (WTF::FileSystemImpl::allowsMaterializingDatalessFiles): Deleted.
        (WTF::FileSystemImpl::isSafeToUseMemoryMapForPath): Deleted.
        (WTF::FileSystemImpl::makeSafeToUseMemoryMapForPath): Deleted.

2021-06-01  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Support building against uClibc
        https://bugs.webkit.org/show_bug.cgi?id=226244

        Reviewed by Michael Catanzaro.

        * wtf/PlatformRegisters.h: Use the <sys/ucontext.h> header instead of
        <ucontext.h>, which is enough to gain access to the type definitions
        for CPU registers and is available on every libc. On the other hand,
        uClibc does not have <ucontext.h>, so this fixes the build in that
        case.

2021-05-30  Chris Dumez  <cdumez@apple.com>

        Drop UncheckedCondition / UncheckedLock
        https://bugs.webkit.org/show_bug.cgi?id=226432

        Reviewed by Darin Adler.

        Drop UncheckedCondition / UncheckedLock now that the whole codebase has been ported to
        Condition / Lock, which support Clang thread safety analysis.

        * wtf/Condition.h:
        * wtf/Forward.h:
        * wtf/Lock.cpp:
        (WTF::Lock::lockSlow):
        (WTF::Lock::unlockSlow):
        (WTF::Lock::unlockFairlySlow):
        (WTF::Lock::safepointSlow):
        * wtf/Lock.h:
        (WTF::assertIsHeld):
        (WTF::WTF_ASSERTS_ACQUIRED_LOCK):

2021-05-30  Darin Adler  <darin@apple.com>

        Remove WTF::Optional synonym for std::optional, using that class template directly instead
        https://bugs.webkit.org/show_bug.cgi?id=226433

        Reviewed by Chris Dumez.

        * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>.

        * wtf/Optional.h: Remove WTF::Optional.

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::VMInspector
        https://bugs.webkit.org/show_bug.cgi?id=226427

        Reviewed by Mark Lam.

        Add Lock::tryLockWithTimeout(), similar to tryLock() but gives up after a
        specified timeout. This used to be implemented in VMInspector but I think
        Lock is a better place for it.

        * wtf/Lock.cpp:
        (WTF::Lock::tryLockWithTimeout):
        * wtf/Lock.h:

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Adopt clang thread safety annotations in WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=226431

        Reviewed by Darin Adler.

        Adopt clang thread safety annotations in WTF::DataMutex. This allows us to
        stop using UncheckedCondition in a few places.

        * wtf/DataMutex.h:
        (WTF::DataMutex::DataMutex):

2021-05-28  Darin Adler  <darin@apple.com>

        Clients of optional should use has_value instead of relying on hasValue macro
        https://bugs.webkit.org/show_bug.cgi?id=226395

        Reviewed by Chris Dumez.

        * wtf/Hasher.h: Use has_value.

        * wtf/Optional.h: Remove hasValue macro. Not needed any more, but also a bit
        dangerous because of how widespread the use of hasValue is for things other
        than WTF::Optional.

2021-05-28  Alex Christensen  <achristensen@webkit.org>

        Punycode encode U+0BE6 when not in context of other Tamil characters
        https://bugs.webkit.org/show_bug.cgi?id=226409
        <rdar://78160926>

        Reviewed by Tim Horton.

        It has quite legitimate use, so we don't want to always punycode encode it,
        but when used in the context of non-Tamil characters we want to punycode encode it.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::isLookalikeCharacterOfScriptType<USCRIPT_ARMENIAN>):
        (WTF::URLHelpers::isLookalikeCharacterOfScriptType<USCRIPT_TAMIL>):
        (WTF::URLHelpers::isOfScriptType):
        (WTF::URLHelpers::isLookalikeSequence):
        (WTF::URLHelpers::isLookalikeCharacter):
        (WTF::URLHelpers::isArmenianLookalikeCharacter): Deleted.
        (WTF::URLHelpers::isArmenianScriptCharacter): Deleted.
        (WTF::URLHelpers::isArmenianLookalikeSequence): Deleted.

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in WTF::MetaAllocator
        https://bugs.webkit.org/show_bug.cgi?id=226396

        Reviewed by Darin Adler.

        Stop using UncheckedLock in WTF::MetaAllocator, as it is being phased out in favor on Lock,
        which supports Clang thread safety analysis.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::release):
        (WTF::MetaAllocator::MetaAllocator):
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        * wtf/MetaAllocator.h:

2021-05-28  Robin Morisset  <rmorisset@apple.com>

        Fix LikelyDenseUnsignedIntegerSet::clear()
        https://bugs.webkit.org/show_bug.cgi?id=226388

        Reviewed by Mark Lam.

        There are two problems with it:
        1) It calls BitVector::clearAll(), which does not free any memory.
        Instead, it should call BitVector::~BitVector(), then do a placement new of a fresh BitVector (to get it back to its inline condition)
        2) More problematically, it changes m_size before calling isBitVector() which relies crucially on the value of m_size.
        So it is going to believe that it is in BitVector mode even when it is actually in HashSet mode.

        * wtf/LikelyDenseUnsignedIntegerSet.h:
        (WTF::LikelyDenseUnsignedIntegerSet::clear):

2021-05-28  Sam Weinig  <weinig@apple.com>

        Add stub implementation of CA separated portal bits for GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=226343

        Reviewed by Simon Fraser.

        * wtf/PlatformHave.h: Add HAVE_CORE_ANIMATION_SEPARATED_PORTALS.

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r277881.

        Deal with IOPOL_TYPE_VFS_MATERIALIZE_DATALESS_FILES potentially not being defined on
        older OSes.

        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::setAllowsMaterializingDatalessFiles):
        (WTF::FileSystemImpl::allowsMaterializingDatalessFiles):

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r277881.

        Add missing header include.

        * wtf/cocoa/FileSystemCocoa.mm:

2021-05-27  Said Abou-Hallawa  <said@apple.com>

        Values of keySplines control points must all be in the range 0 to 1
        https://bugs.webkit.org/show_bug.cgi?id=226336

        Reviewed by Sam Weinig.

        * wtf/MathExtras.h:
        (isInRange):
        There are a least couple of implementations of this function in WebCore.
        The next step is to remove the redundant code in WebCore and use this one.

2021-05-27  Robin Morisset  <rmorisset@apple.com>

        AirAllocateStackByGraphColoring should use the optimized interference graphs from AirAllocateRegistersByGraphColoring
        https://bugs.webkit.org/show_bug.cgi?id=226258

        Reviewed by Phil Pizlo.

        I moved the interference graphs datastructures from AirAllocateRegistersByGraphColoring to their own wtf/InterferenceGraph.h file.
        There are three of them:
        - SmallInterferenceGraph, best for n < 400
        - LargeInterferenceGraph, for n < 2**16
        - HugeInterferenceGraph, for n up to 2**32
        I also added "Iterable" versions of them, that have an operator[] method whose result you can iterate on to get all the indices which interfere with a given index.
        SmallIterableInterferenceGraph is the same as the non-iterable version, but the Large and Huge versions are a bit slower than their counterparts and use 2x memory.

        All of these were tested by running JetStream2 with the TEST_OPTIMIZED_INTERFERENCE_GRAPH set to 1.
        This flag makes the optimized datastructures run in parallel with a reference implementation, and their results are checked for equality on every method call.
        There is one small difference allowed: iteration is not guaranteed to go through elements in the same order.

        I also added a clear() method to LikelyDenseUnsignedIntegerSet, and added the NotNull flag to its various uses of placement new.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/HashSet.h:
        (WTF::W>::memoryUse const):
        * wtf/InterferenceGraph.h: Added.
        (WTF::InterferenceBitVector::contains):
        (WTF::InterferenceBitVector::addAndReturnIsNewEntry):
        (WTF::InterferenceBitVector::add):
        (WTF::InterferenceBitVector::clear):
        (WTF::InterferenceBitVector::mayClear):
        (WTF::InterferenceBitVector::setMaxIndex):
        (WTF::InterferenceBitVector::forEach):
        (WTF::InterferenceBitVector::size const):
        (WTF::InterferenceBitVector::memoryUse const):
        (WTF::InterferenceBitVector::dumpMemoryUseInKB const):
        (WTF::InterferenceBitVector::Iterable::iterator::operator++):
        (WTF::InterferenceBitVector::Iterable::iterator::operator* const):
        (WTF::InterferenceBitVector::Iterable::iterator::operator== const):
        (WTF::InterferenceBitVector::Iterable::iterator::operator!= const):
        (WTF::InterferenceBitVector::Iterable::begin const):
        (WTF::InterferenceBitVector::Iterable::end const):
        (WTF::InterferenceBitVector::operator[] const):
        (WTF::InterferenceBitVector::index const):
        (WTF::InterferenceVector::contains):
        (WTF::InterferenceVector::addAndReturnIsNewEntry):
        (WTF::InterferenceVector::add):
        (WTF::InterferenceVector::clear):
        (WTF::InterferenceVector::mayClear):
        (WTF::InterferenceVector::setMaxIndex):
        (WTF::InterferenceVector::forEach):
        (WTF::InterferenceVector::size const):
        (WTF::InterferenceVector::memoryUse const):
        (WTF::InterferenceVector::dumpMemoryUseInKB const):
        (WTF::InterferenceVector::Iterable::begin const):
        (WTF::InterferenceVector::Iterable::end const):
        (WTF::InterferenceVector::operator[] const):
        (WTF::UndirectedEdgesDuplicatingAdapter::contains):
        (WTF::UndirectedEdgesDuplicatingAdapter::addAndReturnIsNewEntry):
        (WTF::UndirectedEdgesDuplicatingAdapter::add):
        (WTF::UndirectedEdgesDuplicatingAdapter::clear):
        (WTF::UndirectedEdgesDuplicatingAdapter::mayClear):
        (WTF::UndirectedEdgesDuplicatingAdapter::setMaxIndex):
        (WTF::UndirectedEdgesDuplicatingAdapter::forEach):
        (WTF::UndirectedEdgesDuplicatingAdapter::size const):
        (WTF::UndirectedEdgesDuplicatingAdapter::memoryUse const):
        (WTF::UndirectedEdgesDuplicatingAdapter::dumpMemoryUseInKB const):
        (WTF::UndirectedEdgesDuplicatingAdapter::operator[] const):
        (WTF::UndirectedEdgesDedupAdapter::contains):
        (WTF::UndirectedEdgesDedupAdapter::addAndReturnIsNewEntry):
        (WTF::UndirectedEdgesDedupAdapter::add):
        (WTF::UndirectedEdgesDedupAdapter::clear):
        (WTF::UndirectedEdgesDedupAdapter::mayClear):
        (WTF::UndirectedEdgesDedupAdapter::setMaxIndex):
        (WTF::UndirectedEdgesDedupAdapter::forEach):
        (WTF::UndirectedEdgesDedupAdapter::size const):
        (WTF::UndirectedEdgesDedupAdapter::memoryUse const):
        (WTF::UndirectedEdgesDedupAdapter::dumpMemoryUseInKB const):
        (WTF::InterferenceHashSet::contains):
        (WTF::InterferenceHashSet::addAndReturnIsNewEntry):
        (WTF::InterferenceHashSet::add):
        (WTF::InterferenceHashSet::clear):
        (WTF::InterferenceHashSet::setMaxIndex):
        (WTF::InterferenceHashSet::forEach):
        (WTF::InterferenceHashSet::size const):
        (WTF::InterferenceHashSet::memoryUse const):
        (WTF::InterferenceHashSet::dumpMemoryUseInKB const):
        (WTF::InstrumentedInterferenceGraph::contains):
        (WTF::InstrumentedInterferenceGraph::addAndReturnIsNewEntry):
        (WTF::InstrumentedInterferenceGraph::add):
        (WTF::InstrumentedInterferenceGraph::clear):
        (WTF::InstrumentedInterferenceGraph::mayClear):
        (WTF::InstrumentedInterferenceGraph::setMaxIndex):
        (WTF::InstrumentedInterferenceGraph::forEach):
        (WTF::InstrumentedInterferenceGraph::size const):
        (WTF::InstrumentedInterferenceGraph::memoryUse const):
        (WTF::InstrumentedInterferenceGraph::dumpMemoryUseInKB const):
        (WTF::InstrumentedIterableInterferenceGraph::Iterable::Iterable):
        (WTF::InstrumentedIterableInterferenceGraph::Iterable::begin const):
        (WTF::InstrumentedIterableInterferenceGraph::Iterable::end const):
        (WTF::InstrumentedIterableInterferenceGraph::operator[] const):
        * wtf/LikelyDenseUnsignedIntegerSet.h:
        (WTF::LikelyDenseUnsignedIntegerSet::LikelyDenseUnsignedIntegerSet):
        (WTF::LikelyDenseUnsignedIntegerSet::clear):
        (WTF::LikelyDenseUnsignedIntegerSet::add):
        (WTF::LikelyDenseUnsignedIntegerSet::estimateHashSetSize):
        (WTF::LikelyDenseUnsignedIntegerSet::transitionToHashSet):
        (WTF::LikelyDenseUnsignedIntegerSet::transitionToBitVector):

2021-05-27  Darin Adler  <darin@apple.com>

        Next step toward using std::optional directly instead of through WTF::Optional typedef
        https://bugs.webkit.org/show_bug.cgi?id=226280

        Reviewed by Chris Dumez.

        * <many files>: Accept the renaming done by do-webcore-rename.

        * wtf/Optional.h: Remove WTF::nullopt_t and WTF::makeOptional.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::mapHostName): Convert from nullopt to std::nullopt.

2021-05-27  Sihui Liu  <sihui_liu@apple.com>

        Abandon pending tasks on background thread when WebIDBServer is closed
        https://bugs.webkit.org/show_bug.cgi?id=226295

        Reviewed by Chris Dumez.

        Make the wait end with either a new message or queue being killed.

        * wtf/CrossThreadQueue.h:
        (WTF::CrossThreadQueue<DataType>::waitForMessage):
        * wtf/CrossThreadTask.h:
        (WTF::CrossThreadTask::operator bool const):
        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::taskRunLoop):

2021-05-27  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add check for timingsafe_bcmp
        https://bugs.webkit.org/show_bug.cgi?id=226347

        Reviewed by Chris Dumez.

        Use HAVE(TIMINGSAFE_BCMP) in CryptographicUtilities code. Set its value in PlatformHave for
        platforms not using CMake.

        * wtf/CryptographicUtilities.cpp:
        * wtf/CryptographicUtilities.h:
        * wtf/PlatformHave.h:

2021-05-27  Mikhail R. Gadelha  <mikhail.ramalho@gmail.com>

        Increase NumberToStringBuffer to account for negative number
        https://bugs.webkit.org/show_bug.cgi?id=226014

        Reviewed by Robin Morisset.

        In r250389, NumberToStringBuffer length was increased from 96 to 123 because:

        <21 digits> + decimal point + <100 digits> + null char = 123.

        however,

        a = -100000000000000000000
        a.toFixed(100)

        is a valid conversion and it is 124 chars long, because of the "-" sign.

        So this patch increases the length of NumberToStringBuffer to 124 and adds new
        test cases.

        Reviewed by Ryosuke Niwa.

        * wtf/dtoa.h:

2021-05-27  Alex Christensen  <achristensen@webkit.org>

        Revert r277344
        https://bugs.webkit.org/show_bug.cgi?id=225602
        <rdar://78411776>

        * wtf/PlatformHave.h:

2021-05-27  Devin Rousso  <drousso@apple.com>

        Use `NSLocale` SPI for comparing language identifiers instead of string comparison
        https://bugs.webkit.org/show_bug.cgi?id=226252

        Reviewed by Wenson Hsieh.

        The existing `indexOfBestMatchingLanguageInList` logic uses (sub)string comparison of BCP47
        language tags (e.g. looking for a `'-'` and comparing the substring before and after in the
        input language and each item in the language list). While this does work for some languages,
        it's really not the correct way to compare BCP47 language tags. Additionally, it basically
        ignores the text after the first `'-'`, unless there's an exact match with the input
        language. This leads to `"zh-CN"` and `"zh-HK"` being considered a (not exact) match, which
        isn't ideal.

        * wtf/Language.cpp:
        * wtf/cocoa/LanguageCocoa.mm:
        (WTF::indexOfBestMatchingLanguageInList): Added.
        * wtf/spi/cocoa/NSLocaleSPI.h:

2021-05-26  Cameron McCormack  <heycam@apple.com>

        Prevent sbix glyphs from being rendered in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=226159
        <rdar://77231959>

        Reviewed by Darin Adler.

        * wtf/PlatformHave.h: Add HAVE_CORE_TEXT_SBIX_IMAGE_SIZE_FUNCTIONS.

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Leverage the new Vector(const T*, size_t) constructor
        https://bugs.webkit.org/show_bug.cgi?id=226304

        Reviewed by Darin Adler.

        Leverage the new Vector(const T*, size_t) constructor in existing code.

        * wtf/text/WTFString.cpp:
        (asciiDebug):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Use timingsafe_bcmp() in WTF::constantTimeMemcmp() when available
        https://bugs.webkit.org/show_bug.cgi?id=226294
        <rdar://problem/78542643>

        Reviewed by Darin Adler.

        Follow-up to r278140 to address post-landing feedback.

        * wtf/CryptographicUtilities.cpp:
        (WTF::constantTimeMemcmp):
        * wtf/CryptographicUtilities.h:
        (WTF::constantTimeMemcmp):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Use timingsafe_bcmp() in WTF::constantTimeMemcmp() when available
        https://bugs.webkit.org/show_bug.cgi?id=226294

        Reviewed by Alex Christensen.

        Use timingsafe_bcmp() in WTF::constantTimeMemcmp() when available (iOS, macOS, FreeBSD, OpenBSD),
        instead of our own custom implementation.

        * wtf/CryptographicUtilities.cpp:
        (WTF::constantTimeMemcmp):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        [Hardening] Have the Ref<> destructor null out its pointer
        https://bugs.webkit.org/show_bug.cgi?id=226293
        <rdar://problem/78532149>

        Reviewed by Geoffrey Garen.

        * wtf/Ref.h:
        (WTF::Ref::~Ref):

2021-05-26  Alex Christensen  <achristensen@webkit.org>

        URL path setter messes up UTF-8 encoding after ?
        https://bugs.webkit.org/show_bug.cgi?id=226136

        Reviewed by Chris Dumez.

        escapePathWithoutCopying needs to tell percentEncodeCharacters to percent encode all non-ASCII characters in the output of UTF-8 encoding
        in addition to ? and #.  Otherwise, we take the output of UTF-8 encoding and append each code unit to the input of URL parsing as if it were Latin-1.
        This matches Chrome, Firefox, and reason.
        Covered by a newly passing WPT test.
        Other callers of percentEncodeCharacters use functions that already encode all non-ASCII characters.

        * wtf/URL.cpp:
        (WTF::escapePathWithoutCopying):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in WTF::AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=226255

        Reviewed by Keith Miller.

        Stop using UncheckedLock in WTF::AutomaticThread as it is being phased out in favor of
        Lock, which supports Clang thread safety analysis.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::wait):
        (WTF::AutomaticThreadCondition::waitFor):
        (WTF::AutomaticThread::AutomaticThread):
        * wtf/AutomaticThread.h:
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::~ParallelHelperClient):
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::finishWithLock):
        (WTF::ParallelHelperPool::ParallelHelperPool):
        * wtf/ParallelHelperPool.h:
        (WTF::ParallelHelperPool::numberOfThreads const):
        * wtf/WorkerPool.cpp:
        (WTF::WorkerPool::WorkerPool):
        * wtf/WorkerPool.h:

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Use UncheckedLock less in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=226212

        Reviewed by Saam Barati.

        Add support for unlockEarly() to Locker<Lock> specialization, for consistency
        with the generic Locker.

        * wtf/Lock.h:

2021-05-25  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] REGRESSION(r254389) media controls needs the full list of language preferences for ordering tracks
        https://bugs.webkit.org/show_bug.cgi?id=226038

        Reviewed by Myles C. Maxfield and Eric Carlson.

        Media controls need access to the full list of language preferences in order to properly
        sort/order the list of tracks in the controls UI. For example, if a `<video>` has subtitles
        for English, Spanish, and French, and the user has English (default) and French (alternate)
        configured in the Language & Region view of System Preferences on macOS, WebKit should order
        the subtitles list English, French, and then Spanish.

        * wtf/Language.h:
        * wtf/Language.cpp:
        (WTF::cachedFullPlatformPreferredLanguages): Added.
        (WTF::cachedMinimizedPlatformPreferredLanguages): Added.
        (WTF::languageDidChange):
        (WTF::defaultLanguage):
        (WTF::userPreferredLanguages):
        (WTF::platformLanguageDidChange): Deleted.
        Move the caching in `wtf/cf/LanguageCF.cpp` to `wtf/Language.cpp` so that all platforms can
        benefit from caching the result of `platformUserPreferredLanguages`.

        * wtf/cf/LanguageCF.cpp:
        (WTF::platformUserPreferredLanguages):
        (WTF::platformLanguageDidChange): Deleted.
        * wtf/playstation/LanguagePlayStation.cpp:
        (WTF::platformUserPreferredLanguages):
        * wtf/spi/cocoa/NSLocaleSPI.h:
        * wtf/unix/LanguageUnix.cpp:
        (WTF::platformUserPreferredLanguages):
        * wtf/win/LanguageWin.cpp:
        (WTF::platformUserPreferredLanguages):
        Add `WTF::ShouldMinimizeLanguages` that controls whether `WTF::minimizedPreferredLanguages`
        is called. Since the result is cached, create separate `Vector<String>` for each enum value.

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in html/canvas
        https://bugs.webkit.org/show_bug.cgi?id=226186

        Reviewed by Darin Adler.

        Allow converting a Locker<Lock> to an AbstractLocker type. This allows porting
        code from UncheckedLock to Lock even if said code is passing the Locker<Lock>
        as parameter around as an AbstractLocker. This is very common in JSC and in
        html/canvas.

        Also make DropLockForScope work with Locker<Lock> to help port code over.

        * wtf/Lock.h:

2021-05-24  Darin Adler  <darin@apple.com>

        Switch from WTF::Optional to std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Reviewed by Chris Dumez.

        * wtf/Forward.h: Remove Optional forward declaration.
        Also include Optional.h, just for now. Need to remove this once
        we do the global rename.

        * wtf/Optional.h: Replaced the entire WTF::Optional implementation
        with a WTF::Optional "using" that makes it a synonym for std::optional.
        WTF::nullopt being a synonym for std::nullopt and WTF::nullopt_t
        being a synonym for std::nullopt_t. Also included functions so
        that WTF::makeOptional calls std::make_optional and kept the
        WTF extension named valueOrCompute. Need to remove these once we
        do the global rename, and likely just get rid of valueOrCompute, and
        then delete this entire header.

        * wtf/Seconds.h: Added an include of FastMalloc.h, since it's no
        longer pulled in because of including Optional.h.

        * wtf/persistence/PersistentCoder.h: Use Forward.h for now instead of
        forward-declaring WTF::optional.

2021-05-25  Per Arne Vollan  <pvollan@apple.com>

        [AppleWin] JSC fails to build
        https://bugs.webkit.org/show_bug.cgi?id=226225
        <rdar://78330435>

        Reviewed by Brent Fulgham.

        Speculative build fix for missing script to generate unified sources. Make sure the WTF scripts directory exists before
        copying the script there, and add a CMake log message to help further debugging if this is not the correct fix.

        * wtf/CMakeLists.txt:

2021-05-25  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Implement FileSystem without std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=226197

        Reviewed by Chris Dumez.

        The PlayStation 4 doesn't have support in its SDK for std::filesystem so backport the
        functions jettisoned from FileSystemPOSIX and add them to a FileSystemPlayStation.cpp.
        The ordering matches the contents of FileSystem.cpp.

        Most of the functions ported to std::filesystem were just moved over as is from the commit
        prior to r276879. Minor changes to the function signatures made when required.

        The fileTypePotentiallyFollowingSymLinks function was created from the previous behavior
        of fileMetadataUsingFunction and toFileMetataType.

        The hardLinkCount was created from looking at the behavior hardLinkCount replaced in
        r277446.

        * wtf/FileSystem.cpp:
        * wtf/PlatformHave.h:
        * wtf/PlatformPlayStation.cmake:
        * wtf/StdFilesystem.h:
        * wtf/playstation/FileSystemPlayStation.cpp: Added.
        (WTF::FileSystemImpl::fileTypePotentiallyFollowingSymLinks):
        (WTF::FileSystemImpl::fileExists):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::deleteEmptyDirectory):
        (WTF::FileSystemImpl::moveFile):
        (WTF::FileSystemImpl::fileSize):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::volumeFreeSpace):
        (WTF::FileSystemImpl::createSymbolicLink):
        (WTF::FileSystemImpl::hardLink):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        (WTF::FileSystemImpl::hardLinkCount):
        (WTF::FileSystemImpl::deleteNonEmptyDirectory):
        (WTF::FileSystemImpl::fileModificationTime):
        (WTF::FileSystemImpl::updateFileModificationTime):
        (WTF::FileSystemImpl::isHiddenFile):
        (WTF::FileSystemImpl::fileType):
        (WTF::FileSystemImpl::fileTypeFollowingSymlinks):
        (WTF::FileSystemImpl::pathFileName):
        (WTF::FileSystemImpl::parentPath):
        (WTF::FileSystemImpl::realPath):
        (WTF::FileSystemImpl::pathByAppendingComponent):
        (WTF::FileSystemImpl::pathByAppendingComponents):
        (WTF::FileSystemImpl::listDirectory):

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in WTF::RecursiveLock
        https://bugs.webkit.org/show_bug.cgi?id=226206

        Reviewed by Sam Weinig.

        Stop using UncheckedLock in WTF::RecursiveLock and use a regular Lock instead.
        This is a step towards phasing out UncheckedLock.

        Note that despite this change, RecursiveLock still doesn't benefit from
        Clang thread safety analysis. Its functions do conditional locking / unlocking
        which are not currently supported by analysis. Even if they were, we'd need
        a template specialization for RecursiveLockAdapter<Lock> since
        RecursiveLockAdapter may wrap other types of Lock which do not support analysis.

        * wtf/RecursiveLockAdapter.h:

2021-05-24  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendLiteral
        https://bugs.webkit.org/show_bug.cgi?id=226137

        Reviewed by Chris Dumez.

        The optimization done by appendLiteral has minimal value and is something we
        can do without. It does not cut down the number of allocations, which is the
        main cost of the StringBuilder class. Getting rid of the differently named
        appendLiteral improves the design of the StringBuilder class for callers.
        Our goal is to get as close as possible to a single append function.

        If we decide we need an optimization for literals, we can come up with a
        different way that is compatible with append. For example, we could assume
        that any char array is a literal and check that at compile time in
        StringConcatenate; that optimization would work for both makeString and
        StringBuilder. Or we could use a strategy like ASCIILiteral.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::encodeForFileName): Streamline logic,
        and use variadic append to make this more efficient.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::escapeString): Use append instead
        of appendLiteral.
        (WTF::JSONImpl::Value::writeJSON const): Ditto.

        * wtf/Logger.h:
        (WTF::Logger::log): Use auto for result of makeString.
        (WTF::Logger::logVerbose): Ditto.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toString const): Use makeString instead of StringBuilder.

        * wtf/text/IntegerToStringConversion.h:
        Made lengthOfIntegerAsString a constexpr function so we can use it to
        compute the required size of arrays for conversion. Added using for both
        lengthOfIntegerAsString and writeIntegerToBuffer so we can use them without
        the WTF prefix as is customary for functions in WTF.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendLiteral): Deleted.

        * wtf/text/StringConcatenate.h: Added support for appending StringImpl&,
        StringImpl*, AtomStringImpl&, and AtomStringImpl*.

2021-05-24  Keith Miller  <keith_miller@apple.com>

        Unreviewed, revert r276610 because it causes a 1% PLT regression.

        * wtf/Bag.h:

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Drop CheckedLock / CheckedCondition aliases
        https://bugs.webkit.org/show_bug.cgi?id=226176

        Reviewed by Kate Cheney.

        Drop CheckedLock / CheckedCondition aliases now that they are the default.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Assertions.cpp:
        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::wait):
        (WTF::AutomaticThreadCondition::waitFor):
        (WTF::AutomaticThread::AutomaticThread):
        * wtf/AutomaticThread.h:
        * wtf/CMakeLists.txt:
        * wtf/CheckedCondition.h: Removed.
        * wtf/CheckedLock.h: Removed.
        * wtf/Condition.h:
        * wtf/CrossThreadQueue.h:
        * wtf/CrossThreadTaskHandler.h:
        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/Forward.h:
        * wtf/Language.cpp:
        * wtf/Lock.cpp:
        (WTF::UncheckedLock::lockSlow):
        (WTF::UncheckedLock::unlockSlow):
        (WTF::UncheckedLock::unlockFairlySlow):
        (WTF::UncheckedLock::safepointSlow):
        * wtf/Lock.h:
        (WTF::WTF_ASSERTS_ACQUIRED_LOCK):
        * wtf/Logger.cpp:
        * wtf/Logger.h:
        (WTF::Logger::WTF_RETURNS_LOCK):
        * wtf/MessageQueue.h:
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::release):
        (WTF::MetaAllocator::MetaAllocator):
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        * wtf/MetaAllocator.h:
        * wtf/OSLogPrintStream.h:
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperPool::ParallelHelperPool):
        * wtf/ParallelHelperPool.h:
        * wtf/ParallelJobsGeneric.h:
        * wtf/ParallelVectorIterator.h:
        * wtf/ReadWriteLock.h:
        * wtf/RecursiveLockAdapter.h:
        * wtf/RunLoop.h:
        * wtf/SynchronizedFixedQueue.h:
        * wtf/Threading.cpp:
        (WTF::Thread::allThreadsLock):
        * wtf/Threading.h:
        * wtf/TimingScope.cpp:
        * wtf/URL.cpp:
        * wtf/WTFSemaphore.h:
        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply):
        * wtf/WorkerPool.cpp:
        (WTF::WorkerPool::WorkerPool):
        * wtf/WorkerPool.h:
        * wtf/cf/LanguageCF.cpp:
        * wtf/text/AtomStringImpl.cpp:
        (WTF::AtomStringTableLocker::AtomStringTableLocker):
        * wtf/text/StringView.cpp:
        * wtf/threads/BinarySemaphore.h:
        * wtf/unicode/icu/CollatorICU.cpp:

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Make CheckedLock the default Lock
        https://bugs.webkit.org/show_bug.cgi?id=226157

        Reviewed by Darin Adler.

        Make CheckedLock the default Lock so that we get more benefits from Clang
        Thread Safety Analysis. Note that CheckedLock 100% relies on the existing
        Lock implementation and merely adds the clang anotations for thread
        safety.

        That this patch does is:
        1. Rename the Lock class to UncheckedLock
        2. Rename the CheckedLock class to Lock
        3. Rename the Condition class to UncheckedCondition
        4. Rename the CheckedCondition class to Condition
        5. Update the types of certain variables from Lock / Condition to
           UncheckedLock / UncheckedCondition if I got a build failure. Build
           failures are usually caused by the following facts:
           - Locker<CheckedLock> doesn't subclass AbstractLocker which a lot of
             JSC code passes as argument
           - Locker<CheckedLock> has no move constructor
           - Locker<CheckedLock> cannot be constructed from a lock pointer, only
             a reference
        
        For now, CheckedLock and CheckedCondition remain as aliases to Lock and
        Condition, in their respective CheckedLock.h / CheckedCondition.h headers.
        I will drop them in a follow-up to reduce patch size.

        I will also follow-up to try and get rid of as much usage of UncheckedLock
        and UncheckedCondition as possible. I did not try very hard in this patch
        to reduce patch size.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::wait):
        (WTF::AutomaticThreadCondition::waitFor):
        (WTF::AutomaticThread::AutomaticThread):
        * wtf/AutomaticThread.h:
        * wtf/CheckedCondition.h:
        * wtf/CheckedLock.h:
        * wtf/Condition.h:
        * wtf/Lock.cpp:
        (WTF::UncheckedLock::lockSlow):
        (WTF::UncheckedLock::unlockSlow):
        (WTF::UncheckedLock::unlockFairlySlow):
        (WTF::UncheckedLock::safepointSlow):
        * wtf/Lock.h:
        (WTF::WTF_ASSERTS_ACQUIRED_LOCK):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::release):
        (WTF::MetaAllocator::MetaAllocator):
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        * wtf/MetaAllocator.h:
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperPool::ParallelHelperPool):
        * wtf/ParallelHelperPool.h:
        * wtf/RecursiveLockAdapter.h:
        * wtf/WorkerPool.cpp:
        (WTF::WorkerPool::WorkerPool):
        * wtf/WorkerPool.h:

2021-05-23  Mark Lam  <mark.lam@apple.com>

        Remove ENABLE(MASM_PROBE) flag.
        https://bugs.webkit.org/show_bug.cgi?id=226154

        Reviewed by Yusuke Suzuki.

        The MacroAssembler::probe() mechanism is now available on all supported platforms.
        There's no longer a need for the ENABLE(MASM_PROBE) flag.

        * wtf/PlatformEnable.h:

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis
        https://bugs.webkit.org/show_bug.cgi?id=226145

        Reviewed by Darin Adler.

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis.
        Instead, use the following pattern which is supported:
        ```
        if (lock.tryLock()) {
            Locker locker { AdoptLock, lock };
            // ...
        }
        ```

        * wtf/CheckedLock.h:
        * wtf/Lock.h:
        * wtf/Locker.h:
        (WTF::Locker::Locker):

2021-05-23  Mark Lam  <mark.lam@apple.com>

        Build fix for JSCOnly-Linux-AArch64 bot.

        Not reviewed.

        * wtf/Vector.h:
        (WTF::Malloc>::expandCapacity):
        (WTF::Malloc>::reserveCapacity):
        (WTF::Malloc>::constructAndAppendSlowCase):

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Adopt CheckedLock in more places
        https://bugs.webkit.org/show_bug.cgi?id=226138

        Reviewed by Darin Adler.

        Adopt CheckedLock in more places to benefit from Clang Thread Safety Analysis.

        * wtf/Assertions.cpp:
        * wtf/TimingScope.cpp:
        * wtf/threads/BinarySemaphore.cpp:
        (WTF::BinarySemaphore::waitUntil):
        * wtf/threads/BinarySemaphore.h:

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * benchmarks/LockSpeedTest.cpp:
        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::~AutomaticThread):
        (WTF::AutomaticThread::join):
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h:
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::shrink):
        (WTF::MetaAllocator::addFreshFreeSpace):
        (WTF::MetaAllocator::debugFreeSpaceSize):
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::ParallelHelperClient):
        (WTF::ParallelHelperClient::~ParallelHelperClient):
        (WTF::ParallelHelperClient::setTask):
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::doSomeHelping):
        (WTF::ParallelHelperClient::runTask):
        (WTF::ParallelHelperPool::~ParallelHelperPool):
        (WTF::ParallelHelperPool::ensureThreads):
        (WTF::ParallelHelperPool::doSomeHelping):
        * wtf/Seconds.cpp:
        (WTF::sleep):
        * wtf/TimeWithDynamicClockType.cpp:
        (WTF::sleep):
        * wtf/WorkerPool.cpp:
        (WTF::WorkerPool::WorkerPool):
        (WTF::WorkerPool::~WorkerPool):
        (WTF::WorkerPool::postTask):
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::suspend):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        * wtf/win/DbgHelperWin.cpp:
        (WTF::DbgHelper::SymFromAddress):
        * wtf/win/ThreadingWin.cpp:
        (WTF::Thread::suspend):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):

2021-05-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277913.
        https://bugs.webkit.org/show_bug.cgi?id=226140

        Caused multiple layout-test crash on mac debug queues

        Reverted changeset:

        "Replace LockHolder with Locker in local variables"
        https://bugs.webkit.org/show_bug.cgi?id=226133
        https://trac.webkit.org/changeset/277913

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Remove WTF::holdLock() / WTF::holdLockIf()
        https://bugs.webkit.org/show_bug.cgi?id=226135

        Reviewed by Darin Adler.

        Remove WTF::holdLock() / WTF::holdLockIf() because they are not compatible with
        Clang Thread Safety Analysis. All call sites have been converted to use the Locker
        constructor directly.

        * wtf/Locker.h:

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * benchmarks/LockSpeedTest.cpp:
        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::~AutomaticThread):
        (WTF::AutomaticThread::join):
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h:
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::shrink):
        (WTF::MetaAllocator::addFreshFreeSpace):
        (WTF::MetaAllocator::debugFreeSpaceSize):
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::ParallelHelperClient):
        (WTF::ParallelHelperClient::~ParallelHelperClient):
        (WTF::ParallelHelperClient::setTask):
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::doSomeHelping):
        (WTF::ParallelHelperClient::runTask):
        (WTF::ParallelHelperPool::~ParallelHelperPool):
        (WTF::ParallelHelperPool::ensureThreads):
        (WTF::ParallelHelperPool::doSomeHelping):
        * wtf/Seconds.cpp:
        (WTF::sleep):
        * wtf/TimeWithDynamicClockType.cpp:
        (WTF::sleep):
        * wtf/WorkerPool.cpp:
        (WTF::WorkerPool::WorkerPool):
        (WTF::WorkerPool::~WorkerPool):
        (WTF::WorkerPool::postTask):
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::suspend):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        * wtf/win/DbgHelperWin.cpp:
        (WTF::DbgHelper::SymFromAddress):
        * wtf/win/ThreadingWin.cpp:
        (WTF::Thread::suspend):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Use CheckedCondition in more places
        https://bugs.webkit.org/show_bug.cgi?id=226113

        Reviewed by Darin Adler.

        Use CheckedCondition in more places to benefit from Clang Thread Safety
        Analysis.

        * wtf/RunLoop.h:
        * wtf/SynchronizedFixedQueue.h:
        * wtf/WTFSemaphore.h:
        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply):
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::~RunLoop):
        (WTF::RunLoop::populateTasks):
        (WTF::RunLoop::runImpl):
        (WTF::RunLoop::stop):
        (WTF::RunLoop::wakeUpWithLock):
        (WTF::RunLoop::wakeUp):
        (WTF::RunLoop::schedule):
        (WTF::RunLoop::scheduleAndWakeUpWithLock):
        (WTF::RunLoop::TimerBase::~TimerBase):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::stop):
        (WTF::RunLoop::TimerBase::isActive const):
        (WTF::RunLoop::TimerBase::secondsUntilFire const):
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::TimerBase::timerFired):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::stop):
        (WTF::RunLoop::TimerBase::isActive const):
        (WTF::RunLoop::TimerBase::secondsUntilFire const):

2021-05-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Adopt QLItem in WKImageExtractionPreviewController
        https://bugs.webkit.org/show_bug.cgi?id=226114
        rdar://76657718

        Reviewed by Tim Horton.

        Introduce `SOFT_LINK_FRAMEWORK_IN_UMBRELLA_FOR_SOURCE_WITH_EXPORT`, so that we can soft link frameworks that are
        embedded inside other umbrella frameworks in PAL.

        * wtf/cocoa/SoftLinking.h:

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Stop using holdLock() in WTF as it is not compatible with Clang thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=226117

        Reviewed by Darin Adler.

        Stop using holdLock() in WTF as it is not compatible with Clang thread safety analysis
        (WTF::CheckedLock) and use the Locker constructor instead.

        This is a step towards getting rid of holdLock() completely.

        * benchmarks/ConditionSpeedTest.cpp:
        * wtf/ConcurrentPtrHashSet.cpp:
        (WTF::ConcurrentPtrHashSet::deleteOldTables):
        (WTF::ConcurrentPtrHashSet::clear):
        (WTF::ConcurrentPtrHashSet::containsImplSlow const):
        (WTF::ConcurrentPtrHashSet::sizeSlow const):
        (WTF::ConcurrentPtrHashSet::resizeIfNecessary):
        * wtf/CountingLock.h:
        * wtf/HashTable.cpp:
        (WTF::HashTableStats::recordCollisionAtCount):
        (WTF::HashTableStats::dumpStats):
        * wtf/HashTable.h:
        (WTF::invalidateIterators):
        (WTF::addIterator):
        (WTF::removeIterator):
        * wtf/LockedPrintStream.cpp:
        (WTF::LockedPrintStream::vprintf):
        (WTF::LockedPrintStream::flush):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
        * wtf/MetaAllocator.h:
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        * wtf/ReadWriteLock.h:
        * wtf/StackShotProfiler.h:
        (WTF::StackShotProfiler::profile):
        (WTF::StackShotProfiler::run):
        * wtf/StackStats.cpp:
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        (WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
        * wtf/ThreadGroup.cpp:
        (WTF::ThreadGroup::~ThreadGroup):
        (WTF::ThreadGroup::add):
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageScoped):
        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        (WTF::Thread::addToThreadGroup):
        (WTF::Thread::removeFromThreadGroup):
        (WTF::Thread::numberOfThreadGroups):
        * wtf/TimingScope.cpp:
        * wtf/WTFConfig.cpp:
        (WTF::Config::permanentlyFreeze):
        * wtf/WTFSemaphore.h:
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::signal):
        (WTF::Thread::establishPlatformSpecificHandle):
        * wtf/threads/BinarySemaphore.cpp:
        (WTF::BinarySemaphore::signal):
        (WTF::BinarySemaphore::waitUntil):
        * wtf/threads/Signals.cpp:
        (WTF::SignalHandlers::add):
        (WTF::registerThreadForMachExceptionHandling):
        (WTF::activateSignalHandlersFor):
        * wtf/win/LanguageWin.cpp:
        (WTF::platformLanguage):
        * wtf/win/ThreadingWin.cpp:
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::establishPlatformSpecificHandle):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Unable to upload files that are stored in the cloud (without a local copy)
        https://bugs.webkit.org/show_bug.cgi?id=226090
        <rdar://77775887>

        Reviewed by Darin Adler.

        Add FileSystem API to allow/disallow the materializing of dataless files stored
        in the cloud, at process or thread level.

        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::toIOPolicyScope):
        (WTF::FileSystemImpl::setAllowsMaterializingDatalessFiles):
        (WTF::FileSystemImpl::allowsMaterializingDatalessFiles):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Replace more static Locks with CheckedLocks in WTF / WebCore
        https://bugs.webkit.org/show_bug.cgi?id=226040

        Reviewed by Darin Adler.

        Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.

        * wtf/Threading.cpp:
        (WTF::Thread::allThreadsLock):
        (WTF::Thread::create):
        (WTF::Thread::didExit):
        * wtf/Threading.h:
        * wtf/URL.cpp:
        (WTF::WTF_REQUIRES_LOCK):
        (WTF::registerDefaultPortForProtocolForTesting):
        (WTF::clearDefaultPortForProtocolMapForTesting):
        (WTF::defaultPortForProtocol):
        * wtf/cf/LanguageCF.cpp:
        (WTF::WTF_REQUIRES_LOCK):
        (WTF::platformLanguageDidChange):
        (WTF::platformUserPreferredLanguages):
        * wtf/text/StringView.cpp:
        (WTF::StringView::invalidate):
        (WTF::StringView::adoptUnderlyingString):
        (WTF::StringView::setUnderlyingString):
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::Collator):
        (WTF::Collator::~Collator):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock more in cases where we try-lock
        https://bugs.webkit.org/show_bug.cgi?id=226056

        Reviewed by Alex Christensen.

        Use CheckedLock more in cases where we try-lock to benefit from Clang
        Thread Safety Analysis.

        * wtf/Logger.cpp:
        * wtf/Logger.h:
        (WTF::Logger::addObserver):
        (WTF::Logger::removeObserver):
        (WTF::Logger::log):
        (WTF::Logger::logVerbose):
        (WTF::Logger::WTF_RETURNS_LOCK):

2021-05-20  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock more in WTF
        https://bugs.webkit.org/show_bug.cgi?id=226045

        Reviewed by Darin Adler.

        Use CheckedLock more in WTF to benefit from Clang Thread Safety Analysis.

        * wtf/CrossThreadQueue.h:
        (WTF::CrossThreadQueue<DataType>::append):
        (WTF::CrossThreadQueue<DataType>::waitForMessage):
        (WTF::CrossThreadQueue<DataType>::tryGetMessage):
        (WTF::CrossThreadQueue<DataType>::kill):
        (WTF::CrossThreadQueue<DataType>::isKilled const):
        (WTF::CrossThreadQueue<DataType>::isEmpty const):
        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::postTaskReply):
        (WTF::CrossThreadTaskHandler::handleTaskRepliesOnMainThread):
        * wtf/CrossThreadTaskHandler.h:
        (WTF::CrossThreadTaskHandler::WTF_GUARDED_BY_LOCK):
        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/FastMalloc.cpp:
        (WTF::MallocCallTracker::recordMalloc):
        (WTF::MallocCallTracker::recordRealloc):
        (WTF::MallocCallTracker::recordFree):
        (WTF::MallocCallTracker::dumpStats):
        * wtf/MessageQueue.h:
        (WTF::MessageQueue<DataType>::append):
        (WTF::MessageQueue<DataType>::appendAndKill):
        (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
        (WTF::MessageQueue<DataType>::prepend):
        (WTF::MessageQueue<DataType>::waitForMessageFilteredWithTimeout):
        (WTF::MessageQueue<DataType>::tryGetMessage):
        (WTF::MessageQueue<DataType>::takeAllMessages):
        (WTF::MessageQueue<DataType>::tryGetMessageIgnoringKilled):
        (WTF::MessageQueue<DataType>::removeIf):
        (WTF::MessageQueue<DataType>::isEmpty):
        (WTF::MessageQueue<DataType>::kill):
        (WTF::MessageQueue<DataType>::killed const):
        * wtf/OSLogPrintStream.cpp:
        (WTF::OSLogPrintStream::vprintf):
        * wtf/OSLogPrintStream.h:
        * wtf/ParallelJobsGeneric.h:
        (WTF::ParallelEnvironment::ThreadPrivate::WTF_GUARDED_BY_LOCK):
        * wtf/ParallelVectorIterator.h:
        (WTF::ParallelVectorIterator::iterate):
        (WTF::ParallelVectorIterator::WTF_GUARDED_BY_LOCK):
        * wtf/ReadWriteLock.cpp:
        (WTF::ReadWriteLock::readLock):
        (WTF::ReadWriteLock::readUnlock):
        (WTF::ReadWriteLock::writeLock):
        (WTF::ReadWriteLock::writeUnlock):
        * wtf/ReadWriteLock.h:
        (WTF::ReadWriteLock::WTF_GUARDED_BY_LOCK):

2021-05-20  Chris Dumez  <cdumez@apple.com>

        Add missing locks in Language.cpp
        https://bugs.webkit.org/show_bug.cgi?id=226059

        Reviewed by Alex Christensen.

        Add missing locks in Language.cpp. This was found via Clang Thread Safety Analysis.
        Some of the overrideUserPreferredLanguages() call sites were failing to grab the
        lock first.

        Also use NeverDestroyed in preferredLanguagesOverride() instead of LazyNeverDestroyed
        with std::call_once. All call sites are already grabbing a lock so there is no need
        for extra synchronization.

        * wtf/Language.cpp:
        (WTF::WTF_REQUIRES_LOCK):
        (WTF::userPreferredLanguagesOverride):
        (WTF::overrideUserPreferredLanguages):
        (WTF::userPreferredLanguages):
        (WTF::preferredLanguagesOverride): Deleted.

2021-05-19  Alex Christensen  <achristensen@webkit.org>

        Add support for Navigation Timing Level 2
        https://bugs.webkit.org/show_bug.cgi?id=184363

        Reviewed by Ryosuke Niwa.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-05-19  Chris Dumez  <cdumez@apple.com>

        Drop "get" prefix from SQLiteStatement member functions as well as out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=225971

        Reviewed by Darin Adler.

        Add Vector constructor that takes in an array and a size.

        * wtf/Vector.h:
        (WTF::Vector::Vector):

2021-05-18  Darin Adler  <darin@apple.com>

        Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF
        https://bugs.webkit.org/show_bug.cgi?id=225839

        Reviewed by Sam Weinig.

        The new header makes CFStringRef and NSString work with string concatenation,
        which means it now works with the variadic StringBuilder::append and makeString,
        and still works with the single-argument StringBuilder::append. More efficient
        that the old version because it does not allocate a temporary WTF::String for
        the 16-bit character path.

        Also made many other small improvements to the StringBuilder implementation.

        * WTF.xcodeproj/project.pbxproj: Added StringConcatenateCF.h.

        * wtf/CheckedArithmetic.h: Removed ConditionalCrashOnOverflow, which was only
        here for use by StringBuilder, which does not use CheckedArithmetic any more.

        * wtf/PlatformFTW.cmake: Added StringConcatenateCF.h..
        * wtf/PlatformMac.cmake: Ditto.
        * wtf/PlatformWin.cmake: Ditto.

        * wtf/SaturatedArithmetic.h: Moved the contents of this file inside the
        WTF namespace.
        (WTF::signedAddInt32Overflows): Renamed this function. The type here is
        important, and we are not doing anything to prevent type conversion or
        create ambiguity, so it's good to be explicit in the function name.
        (WTF::saturatedSum<int32_t>): Renamed this from saturatedAddition for
        clarity. The function returns a sum, so that's a better name than calling
        it "addition". Also, it's clearer to be explicit about the return type.
        (WTF::signedSubtractInt32Overflows): Renamed. Same reason as above.
        (WTF::saturatedDifference<int32_t>): Ditto.
        (WTF::saturatedSum): Added. Does unsigned integer saturated addition.
        This one can be written in a portable manner and still get really
        efficient code on at least Intel and ARM64.
        (WTF::saturatedSum): Added a function template that lets callers pass
        larger number of arguments to saturatedSum, rather than exactly two.

        * wtf/text/StringBuilder.cpp:
        (WTF::expandedCapacity): Renamed to use the term capacity rather than
        length for the new required capacity.
        (WTF::StringBuilder::didOverflow): Implement the new approach to
        overflow, meaning we need to write the CRASH() here explicitly and
        in the non-crashing mode, set m_length.
        (WTF::StringBuilder::reifyString const): Changed the overflow check
        into a RELEASE_ASSERT. This is now responsible for doing the check that
        callers were doing earlier, so we want it in production builds. Also
        simplified this since our m_length member is a simple integer now,
        and removed the unused m_isReified.
        (WTF::StringBuilder::shrink): Renamed this to shrink to match the
        Vector::shrink function, since this has never supported making the
        builder larger. Removed unnecessary overflow checks, since shrinking
        cannot cause overflow.
        (WTF::StringBuilder::allocateBuffer): Replaced two separate functions
        with a single simpler function template. Removed extra overflow checks
        because the StringImpl::tryCreateUninitialized function already does
        the only overflow check we need. Also move to StringImpl::copyCharacters
        for copying characters rather than using std::memcpy directly.
        Removed code to set m_is8Bit and m_bufferCharacters.
        (WTF::StringBuilder::reallocateBuffer): Replaced two separate
        functions with a function template and a cover that calls the
        appropriate instance of the template for places where we aren't
        already in character-type-specific code paths. This version now
        supports allocating a buffer for the first time in cases where
        we have m_string and not m_buffer, which used to be handled at
        the higher level. Removed code to set m_bufferCharacters.
        (WTF::StringBuilder::reserveCapacity): Rewrote for simplicity.
        By relying on the overflow checking inside reallocateBuffer and
        allocateBuffer we no longer need checking of the passed-in value
        at this level.
        (WTF::StringBuilder::extendBufferForAppending): Removed the
        version of this that takes additionalLength since it's
        potentially confusing to have a family of functions that have the
        same name and take the same type of argument, but interpret it
        subtly differently. Streamlined the code using std::exchange.
        This function now also includes the logic from the function named
        extendBufferForAppendingWithoutOverflowCheck, which was subtly
        misnamed since that was not the only semantic difference. Also
        removed the ALWAYS_INLINE because the compiler will do the right
        thing without such heavy handed advice.
        (WTF::StringBuilder::extendBufferForAppendingSlowCase): Streamlined
        this by using std::exchange and removed additional overflow checks
        at this level since reallocateBuffer already does them. Also added
        a check for the case where the new total length is 0, which would
        not be handled correctly and efficiently by reallocateBuffer.
        (WTF::StringBuilder::extendBufferForAppendingLChar): Renamed this
        from extendBufferForAppending8, since it's now identical to calling
        extendBufferForAppending<LChar>, except for inlining and linkage.
        (WTF::StringBuilder::extendBufferForAppendingWithUpconvert):
        Renamed this from extendBufferForAppending16. It is different from
        the other extendBuffer functions because is supports upconverting
        from LChar to UChar. Like the others it relies on allocateBuffer
        for the overflow checking.
        (WTF::StringBuilder::appendCharacters): Removed an unnecessary
        assertion that the characters pointer is non-null; that will fail
        in an obvious way without an assertion. Simplified the logic and
        removed some invariant assertions that don't help us much. Changed
        overflow checking by using saturatedSum to compute the new length.
        In overflow cases, the new sum will be larger than the maximum
        string length, but will fit in an unsigned, so we can pass it
        down to lower levels and let functions like reallocateBuffer do
        the actual overflow checking. Also use StringImpl::copyCharacters.
        (WTF::StringBuilder::append): Removed the CFStringRef overload.
        (WTF::StringBuilder::shouldShrinkToFit const): Rename this from
        canShrink. Simplify the function a bit and remove the vague FIXME
        that says "this should be tuned". That may be so, but the FIXME
        is not really driving us to action.
        (WTF::StringBuilder::shrinkToFit): Simplify by using the new
        reallocateBuffer and std::exchange. Removed unneeded assertion
        about overflow that doesn't help us maintain the invariant.
        (WTF::StringBuilder::isAllASCII const): Was tempted to remove
        this function, but for now just made it use the StringView
        version for brevity.

        * wtf/text/StringBuilder.h: Removed many unneeded includes, and
        notably included SaturatedArithmetic.h instead of
        CheckedArithmetic.h because we now use the former instead of the
        latter. Changed the overflow checking implementation to work
        more simply based on saturated addition rather than Checked.
        This allowed us to get rid of dependency on our own unique mode
        for Checked, called ConditionalCrashOnOverflow. Removed a
        comment about making a templatized version of StringBuilder.
        We can do it if we like, but does not seem urgent. Moved
        fucntion bodies out of the class definition so it's easier to
        see what's going on in the class. Since m_length is now an
        ordinary integer, the check for overflowed simply checks to see
        if the length is larger than the maximum string length. When we
        encounter overflow that is not about length computation, we set
        the length to the maximum integer to indicate the failure.
        Deleted the append overloads for CFStringRef and NSString.
        Removed m_bufferCharacters, m_is8Bit, and m_isReified.
        (WTF::StringBuilder::StringBuilder): Simplified the constructor
        since we only have to initialize the m_shouldCrashOnOverflow member.
        (WTF::StringBuilder::clear): Fixed a mistake where this was not
        resetting the m_isReified flag.
        (WTF::StringBuilder::swap): Updated for changes in the data members.
        (WTF::StringBuilder::operator StringView const): Moved out of line.
        Made sure to call the length() function so we crash if this is
        called after overflow.
        (WTF::StringBuilder::append): Remove some of the unnecessary checks
        and special cases in the various versions of append. Most of the
        checking is done inside appendCharacters, with only a few exceptions.
        (WTF::StringBuilder::appendSubstring): Moved out of the class
        definition without making significant changes.
        (WTF::StringBuilder::appendCharacter): Ditto.
        (WTF::StringBuilder::toString): Greatly simplified this function
        by relying on overflow checking in the reifyString function instead
        of doing it here and removing unneeded invariant assertions.
        (WTF::StringBuilder::toStringPreserveCapacity const): Ditto.
        (WTF::StringBuilder::toAtomString const): Rewrote this to streamline,
        removing explicit overflow checks.
        (WTF::StringBuilder::length const): Moved out of the class
        definition without making significant changes.
        (WTF::StringBuilder::capacity const): Ditto.
        (WTF::StringBuilder::operator[] const): Ditto.
        (WTF::StringBuilder::characters const): Implemented this operation
        in the function template. Now rather than having this call the
        characters8 and characters16 functions, they can call it.
        (WTF::StringBuilder::getBufferCharacters<LChar>): Deleted.
        (WTF::StringBuilder::getBufferCharacters<UChar>): Deleted.
        (WTF::StringBuilder::appendFromAdapters): Use saturatedSum to
        compute the required length, which allows the extendBuffer
        functions to do overflow checking without having to take special
        checked integer types for arguments.
        (WTF::StringBuilder::equal): Implement using StringView.

        * wtf/text/StringBuilderJSON.cpp:
        (WTF::StringBuilder::appendQuotedJSONString): Simplified the checked
        arithmetic for computing the required capacity. Updated since we
        removed m_bufferCharacters and changed the type of m_length.

        * wtf/text/cf/StringConcatenateCF.h: Added. Specializes StringTypeAdapter for
        both CFStringRef and NSString *. If CFStringGetCStringPtr works for Latin-1, then
        does the 8-bit code path, otherwise the 16-bit.

        * wtf/text/cocoa/TextStreamCocoa.mm: Include StringConcatenateCF.h, since it's
        now needed to use CFStringRef with StringBuilder.

2021-05-19  Sam Weinig  <weinig@apple.com>

        Update Base64 encoding/decoding to match more modern WebKit conventions
        https://bugs.webkit.org/show_bug.cgi?id=225920

        Reviewed by Chris Dumez.

        Bring base64 encoding/decoding up to more modern WebKit conventions by:
        - Replace use of "out parameter + bool" with Optional return values.
        - Using enum class for enumerations.
        - Replacing SignedOrUnsignedCharVectorAdapter/ConstSignedOrUnsignedCharVectorAdapter
          with appropriate function overloads.

        Also adds a new StringTypeAdapter for inline base64 encoding data in either makeString()
        or StringBuilder. To make this work, a few modifications were need to the base64Encode()
        functions to support the fixed size writeTo() function.

        First, the length of the encoded data is now computed up front depending on the policy.
        This has been extracted into a new calculateBase64EncodedSize() function used by both
        the adaptor and by base64Encode when passed a Vector. Previously, when encoding using
        some policies, the size was an overestimate and the resulting Vector would be resized
        down after encoding.

        Second, base64EncodeInternal was made into a template function to allow for two new 
        base64Encode functions, one of which has a UChar* destination. These are used by the
        adaptor to write the encoded data.

        One additional small change is that now a optional map type parameter has been added
        to all the encoders to allow using either the default map or the URL one as defined 
        in RFC 4648. This simplifies the implementation of the StringTypeAdapter and makes the
        base64URLEncode/base64URLDecode functions into simple convenience functions that use
        the right defaults for the generic encode/decode functions. 

        * wtf/text/Base64.cpp:
        (WTF::base64EncodeInternal):
        (WTF::base64Encode):
        (WTF::base64DecodeInternal):
        (WTF::base64Decode):
        (WTF::base64URLDecode):
        (WTF::base64URLEncode): Deleted.
        * wtf/text/Base64.h:
        (WTF::base64Decode):
        (WTF::base64Encode):
        (WTF::base64URLEncode):
        (WTF::isBase64OrBase64URLCharacter):
        (WTF::calculateBase64EncodedSize):
        (WTF::base64Encoded):
        (WTF::base64URLEncoded):
        (WTF::StringTypeAdapter<Base64Specification>::StringTypeAdapter):
        (WTF::StringTypeAdapter<Base64Specification>::length const):
        (WTF::StringTypeAdapter<Base64Specification>::is8Bit const):
        (WTF::StringTypeAdapter<Base64Specification>::writeTo const):

2021-05-18  Robin Morisset  <rmorisset@apple.com>

        Make AirAllocateRegistersByGraphColoring use less memory
        https://bugs.webkit.org/show_bug.cgi?id=225848

        Reviewed by Filip Pizlo.

        Two changes: the addition of LikelyDenseUnsignedIntegerSet, and various improvements to Small(Ptr)Set.

        The latter include:
        - Renaming SmallPtrSet into SmallSet, as it now supports integers as well as pointers.
        - Reducing its size by sharing the same storage for m_buffer and for m_smallStorage.
        This is safe to do, because all operations branch on isSmall() which depends purely on m_capacity.
        - Adding trivial size(), isEmpty() and memoryUse() methods
        - Adding a comment at the top of the file explaining when to use, and (more importantly) not to use SmallSet.

        LikelyDenseUnsignedIntegerSet is an even more specialized data structure, that can represent sets of unsigned integers very compactly if they are clustered.

        Finally I added an outOfLineMemoryUse() method to BitVector, making it more convenient to compare the memory consumption of different data structures in the register allocator.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BitVector.h:
        * wtf/CMakeLists.txt:
        * wtf/LikelyDenseUnsignedIntegerSet.cpp: Copied from Source/WTF/wtf/SmallPtrSet.cpp.
        * wtf/LikelyDenseUnsignedIntegerSet.h: Added.
        (WTF::LikelyDenseUnsignedIntegerSet::LikelyDenseUnsignedIntegerSet):
        (WTF::LikelyDenseUnsignedIntegerSet::~LikelyDenseUnsignedIntegerSet):
        (WTF::LikelyDenseUnsignedIntegerSet::contains const):
        (WTF::LikelyDenseUnsignedIntegerSet::add):
        (WTF::LikelyDenseUnsignedIntegerSet::size const):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::iterator):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::m_shift):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::operator++):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::operator* const):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::operator== const):
        (WTF::LikelyDenseUnsignedIntegerSet::iterator::operator!= const):
        (WTF::LikelyDenseUnsignedIntegerSet::begin const):
        (WTF::LikelyDenseUnsignedIntegerSet::end const):
        (WTF::LikelyDenseUnsignedIntegerSet::memoryUse const):
        (WTF::LikelyDenseUnsignedIntegerSet::validate const):
        (WTF::LikelyDenseUnsignedIntegerSet::isBitVector const):
        (WTF::LikelyDenseUnsignedIntegerSet::isValidValue const):
        (WTF::LikelyDenseUnsignedIntegerSet::transitionToHashSet):
        (WTF::LikelyDenseUnsignedIntegerSet::transitionToBitVector):
        * wtf/SmallPtrSet.h: Removed.
        * wtf/SmallSet.cpp: Renamed from Source/WTF/wtf/SmallPtrSet.cpp.
        * wtf/SmallSet.h: Added.

2021-05-18  Chris Dumez  <cdumez@apple.com>

        Use WTF::Locker for locking BaseAudioContext's graph lock
        https://bugs.webkit.org/show_bug.cgi?id=225935

        Reviewed by Sam Weinig.

        * wtf/RecursiveLockAdapter.h:
        (WTF::RecursiveLockAdapter::isOwner const):
        Add isOwner() function that returns true if the current thread is holding the lock.
        This is needed for WebAudio purposes.

2021-05-18  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Titlebar separator doesn't show when WKWebView is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=220633
        <rdar://problem/71094055>

        Reviewed by Darin Adler.

        * wtf/PlatformHave.h: Defined HAVE_NSSCROLLVIEW_SEPARATOR_TRACKING_ADAPTER.

2021-05-18  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Fix PlayStation port
        https://bugs.webkit.org/show_bug.cgi?id=225913

        Reviewed by Don Olmstead.

        Fix PlayStation port

        * wtf/PlatformPlayStation.cmake: Rename
        PLAYSTATION_COPY_SHARED_LIBRARIES to PLAYSTATION_COPY_REQUIREMENTS.

2021-05-17  Saam Barati  <sbarati@apple.com>

        Enable JS to emit sign posts and trace points under Options::exposeProfilersOnGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=225895

        Reviewed by Yusuke Suzuki.

        * wtf/SystemTracing.h:

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Object identifiers with the deleted value should cause MESSAGE_CHECKs
        https://bugs.webkit.org/show_bug.cgi?id=225886
        rdar://78114708

        Reviewed by Chris Dumez.

        See WebCore/ChangeLog for more details. Add a helper method on `ObjectIdentifier` that returns true only if it
        is the empty value or deleted value.

        * wtf/ObjectIdentifier.h:
        (WTF::ObjectIdentifier::isValid const):

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Use kAudioObjectPropertyElementMain where available
        https://bugs.webkit.org/show_bug.cgi?id=224635

        Reviewed by Eric Carlson.

        * wtf/PlatformHave.h:

2021-05-16  Chris Dumez  <cdumez@apple.com>

        Modernize / Optimize SQLiteStatement creation and preparation
        https://bugs.webkit.org/show_bug.cgi?id=225791

        Reviewed by Sam Weinig.

        Allow constructing a UniqueRef<> from a C++ reference. std::unique_ptr<>() can be constructed
        using a raw pointer and we can construct a UniqueRef<> from a std::unique_ptr<>() so I see
        no reason not to allow that.

        The reason I needed this is that I want to prevent call sites from allocating SQLiteStatement
        without going through the SQLiteDatabase. As a result, I made the SQLiteStatement constructor
        private and marked SQLiteDatabase as a friend class. SQLiteDatabase has to heap-allocate
        a SQLiteStatement via new and then construct a UniqueRef<> for it. SQLiteDatabase cannot use
        makeUniqueRef() because the SQLiteStatement constructor is private. I also cannot mark
        makeUniqueRef() as a friend function of SQLiteStatement or anybody could heap allocate a
        SQLiteStatement via makeUniqueRef (not just the SQLiteDatabase).

        * wtf/UniqueRef.h:
        (WTF::UniqueRef::UniqueRef):

2021-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Delete WebSQL code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=225739

        Reviewed by Sihui Liu.

        Deleted the experimental feature to disable WebSQL since we've been shipping this,
        and made the flag to selectively enable WebSQL in WebKit1 an internal debug setting
        since nobody should be enabling this now.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-05-15  Sam Weinig  <weinig@apple.com>

        Allow conditionally enabling OffscreenCanvas only for non-worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=225845

        Reviewed by Darin Adler.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Add new OffscreenCanvasInWorkersEnabled preference.

        * wtf/PlatformEnable.h:
        Add new ENABLE_OFFSCREEN_CANVAS_IN_WORKERS macro.

2021-05-15  Alberto Garcia  <berto@igalia.com>

        CeilingOnPageSize too low for Loongson CPUs
        https://bugs.webkit.org/show_bug.cgi?id=221198
        <rdar://problem/74089683>

        Reviewed by Michael Catanzaro.

        Increase the page size to 16KB in MIPS64.

        * wtf/PageBlock.h:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks()
        https://bugs.webkit.org/show_bug.cgi?id=225820

        Reviewed by Darin Adler.

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks(). Those don't match very closely the
        std::filesystem API we use internally and they are not very efficient because we gather several attributes
        of a file but the callers are usually only interested in one thing (e.g. file type or file size).

        Callers interested in the file size, can call the pre-existing FileSystem::fileSize(). For call sites
        wanting to check if it is a hidden file, I introduced a new FileSystem::isHiddenFile() API. For call sites
        interested in the file type, I replaced FileSystem::isDirectory() / FileSystem::isDirectoryFollowingSymlinks()
        with more generic FileSystem::fileType() / FileSystem::fileTypeFollowingSymlinks().

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FileMetadata.h: Removed.
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::isHiddenFile):
        (WTF::FileSystemImpl::fileTypePotentiallyFollowingSymLinks):
        (WTF::FileSystemImpl::fileType):
        (WTF::FileSystemImpl::fileTypeFollowingSymlinks):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop legacy / prefixed WebAudio implementation
        https://bugs.webkit.org/show_bug.cgi?id=225832

        Reviewed by Darin Adler.

        Drop preference for prefixed WebAudio, which was disabled everywhere.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Port WTF::FileSystem::realPath() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225828

        Reviewed by Darin Adler.

        Port WTF::FileSystem::realPath() to std::filesystem (in particular std::filesystem::canonical())
        so that we no longer need platform-specific code.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::realPath):
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop "get" prefix from WTF::FileSystem's getFileModificationTime() / getFileCreationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225812

        Reviewed by Darin Adler.

        We avoid the "get" prefix in WebKit.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::fileModificationTime):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::fileCreationTime):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::fileCreationTime):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::fileCreationTimeFromFindData):
        (WTF::FileSystemImpl::fileModificationTimeFromFindData):
        (WTF::FileSystemImpl::fileCreationTime):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::getVolumeFreeSpace() to FileSystem::volumeFreeSpace()
        https://bugs.webkit.org/show_bug.cgi?id=225811

        Reviewed by Darin Adler.

        Rename FileSystem::getVolumeFreeSpace() to FileSystem::volumeFreeSpace() given that we
        avoid the "get" prefix in WebKit. Also modernize the function by returning an
        Optional<uint64_t> instead of using an out-parameter.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::volumeFreeSpace):
        * wtf/FileSystem.h:

2021-05-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _pageExtendedBackgroundColor]` SPI to `-[WKWebView underPageBackgroundColor]` API
        https://bugs.webkit.org/show_bug.cgi?id=225615
        <rdar://problem/76568094>

        Reviewed by Wenson Hsieh.

        `underPageBackgroundColor` is a `null_resettable` property that will return (in order of validity)
         - the most recent non-null value provided
         - the CSS `background-color` of the `<body>` and/or `<html>` (this is the current value of `_pageExtendedBackgroundColor`)
         - the underlying platform view's background color
        Modifications to this property will not have any effect until control is returned to the runloop.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Remove the experimental settings `UseSampledPageTopColorForScrollAreaBackgroundColor`and
        `UseThemeColorForScrollAreaBackgroundColor` now that clients can override the default
        overscroll area background color using `-[WKWebView setUnderPageBackgroundColor:]`.

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Introduce FileSystem::updateFileModificationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225810

        Reviewed by Darin Adler.

        Introduce FileSystem::updateFileModificationTime() to update the modification time of a
        file. The implementation is cross-platform and relies on std::filesystem. It allows us
        to replace platform-specific code that we had at the WebKit2 layer.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::updateFileModificationTime):
        * wtf/FileSystem.h:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop unused FileSystem::homeDirectoryPath()
        https://bugs.webkit.org/show_bug.cgi?id=225808

        Reviewed by Anders Carlsson.

        Only Windows-specific code was calling FileSystem::homeDirectoryPath() but the Windows implementation
        for this was always returning the empty string.

        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::homeDirectoryPath): Deleted.
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::homeDirectoryPath): Deleted.
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::homeDirectoryPath): Deleted.

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::getFileSize() to FileSystem::fileSize()
        https://bugs.webkit.org/show_bug.cgi?id=225798

        Reviewed by Alex Christensen.

        Rename FileSystem::getFileSize() to FileSystem::fileSize() as we usually avoid the "get"
        prefix in WebKit. It is also more consistent with the std::filesystem::file_size() the
        implementation relies on.

        Also have it return an Optional<uint64_t> instead of taking a long long out-parameter, as
        this is more modern.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::fileSize):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::fileSize):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::fileSize):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::getFileSizeFromByHandleFileInformationStructure):
        (WTF::FileSystemImpl::fileSize):
        (WTF::FileSystemImpl::MappedFileData::mapFileHandle):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName()
        https://bugs.webkit.org/show_bug.cgi?id=225806

        Reviewed by Alex Christensen.

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName(), as we avoid "get" prefixes in WebKit.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::pathFileName):
        (WTF::FileSystemImpl::pathGetFileName): Deleted.
        * wtf/FileSystem.h:

2021-05-13  Dean Jackson  <dino@apple.com>

        [WebXR] Allow WebXR to be tested on PLATFORM(COCOA)
        https://bugs.webkit.org/show_bug.cgi?id=225578

        Reviewed by Sam Weinig.

        Compile-time enabled on all Cocoa platforms.

        * wtf/PlatformEnableCocoa.h:

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::directoryName() to FileSystem::parentPath()
        https://bugs.webkit.org/show_bug.cgi?id=225768

        Reviewed by Darin Adler.

        Rename FileSystem::directoryName() to FileSystem::parentPath() for clarity and
        consistency with std::filesystem::parent_path() which is used internally.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::readOrMakeSalt):
        (WTF::FileSystemImpl::parentPath):
        (WTF::FileSystemImpl::directoryName): Deleted.
        * wtf/FileSystem.h:

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::fileIsDirectory(path, followSymlinks) to isDirectory(path) / isDirectoryFollowingSymlinks(path)
        https://bugs.webkit.org/show_bug.cgi?id=225772

        Reviewed by Darin Adler.

        I don't think the "file" prefix is useful here so I am renaming the function to
        isDirectory(). Also, instead of using an enum parameter to decide whether or
        not to follow symlink, I am adding a separate function called
        isDirectoryFollowingSymlinks(). This is consistent with the
        fileMetadata() / fileMetadataFollowingSymlinks() pattern, which Darin said he
        preferred.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::isDirectory):
        (WTF::FileSystemImpl::isDirectoryFollowingSymlinks):
        (WTF::FileSystemImpl::fileIsDirectory): Deleted.
        * wtf/FileSystem.h:

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Introduce FileSystem::hardLinkCount()
        https://bugs.webkit.org/show_bug.cgi?id=225767

        Reviewed by Darin Adler.

        Introduce FileSystem::hardLinkCount() to replace our platform-specific implementation
        in NetworkCacheBlobStorage.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::hardLinkCount):
        * wtf/FileSystem.h:

2021-05-13  Alicia Boya García  <aboya@igalia.com>

        [WTF] Add holdLock() overload for WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=225652

        Reviewed by Xabier Rodriguez-Calvar.

        This patch adds a holdLock() overload for WTF::DataMutex as syntactic
        sugar to simplify usage in a similar way to what holdLock() already
        does for WTF::Locker.

        * wtf/DataMutex.h:
        (WTF::holdLock):

2021-05-13  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732

        Reviewed by Sam Weinig.

        We originally added StringBuilder::appendNumber to resolve the ambiguity
        between UChar and uint16_t, but that problem was solved long ago and it
        is safe to use StringBuilder::append, including the variadic form, on all
        types of numbers and we'll get the same results we did with appendNumber.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::writeJSON const): Use append instead of appendNumber.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendNumber): Deleted.
        * wtf/text/StringBuilder.h: Removed appendNumber.

        * wtf/text/TextStream.cpp:
        (WTF::TextStream::operator<<): Use append instead of appendNumber.

2021-05-12  Mark Lam  <mark.lam@apple.com>

        Implement some common Baseline JIT slow paths using JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=225682

        Reviewed by Filip Pizlo.

        Introduce ENABLE(EXTRA_CTI_THUNKS) flag to guard the use of these new thunks.
        Currently, the thunks are 64-bit only, and only supported for ARM64 and non-Windows
        X86_64.  The reason it is not supported for Windows as well is because Windows
        only has 4 argument registers.  In this patch, the thunks do not use that many
        registers yet, but there will be more thunks coming that will require the use
        of up to 6 argument registers.

        * wtf/PlatformEnable.h:

2021-05-11  Chris Dumez  <cdumez@apple.com>

        Port WTF::FileSystem::listDirectory to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225633

        Reviewed by Darin Adler.

        Port WTF::FileSystem::listDirectory to std::filesystem with the following 2 changes:
        - The function no longer takes a (blob-style) filter parameter
        - The function now returns file names instead of file paths, allowing the call sites
          to more easily filter based on prefixes.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::listDirectory):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

2021-05-11  Darin Adler  <darin@apple.com>

        Remove the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225599

        Reviewed by Anders Carlsson.

        * wtf/text/AtomString.h: Deleted AtomString::toInt.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::toIntStrict): Deleted.
        (WTF::StringImpl::toUIntStrict): Deleted.
        (WTF::StringImpl::toInt64Strict): Deleted.
        (WTF::StringImpl::toUInt64Strict): Deleted.
        (WTF::StringImpl::toIntPtrStrict): Deleted.
        (WTF::StringImpl::toInt): Deleted.
        (WTF::StringImpl::toUInt): Deleted.
        (WTF::StringImpl::toInt64): Deleted.
        (WTF::StringImpl::toUInt64): Deleted.
        (WTF::StringImpl::toIntPtr): Deleted.
        * wtf/text/StringImpl.h: Deleted the above functions.

        * wtf/text/StringToIntegerConversion.h: Removed toIntegralType.

        * wtf/text/StringView.cpp:
        (WTF::parseUInt16): Deleted.

        * wtf/text/StringView.h: Deleted StringView::toInt,
        StringView::toIntStrict, StringView::toUInt64Strict,
        StringView::toInt64Strict, and parseUInt16. Changed the constructor
        that takes a const char* to work when passed nullptr. StringView has
        a null value, and converting a null const char* should produce that.

        * wtf/text/WTFString.cpp:
        (WTF::String::toIntStrict const): Deleted.
        (WTF::String::toUIntStrict const): Deleted.
        (WTF::String::toInt64Strict const): Deleted.
        (WTF::String::toUInt64Strict const): Deleted.
        (WTF::String::toIntPtrStrict const): Deleted.
        (WTF::String::toInt const): Deleted.
        (WTF::String::toUInt const): Deleted.
        (WTF::String::toInt64 const): Deleted.
        (WTF::String::toUInt64 const): Deleted.
        (WTF::String::toIntPtr const): Deleted.
        (WTF::lengthOfCharactersAsInteger): Deleted.
        (WTF::charactersToIntStrict): Deleted.
        (WTF::charactersToUIntStrict): Deleted.
        (WTF::charactersToInt64Strict): Deleted.
        (WTF::charactersToUInt64Strict): Deleted.
        (WTF::charactersToIntPtrStrict): Deleted.
        (WTF::charactersToInt): Deleted.
        (WTF::charactersToUInt): Deleted.
        (WTF::charactersToInt64): Deleted.
        (WTF::charactersToUInt64): Deleted.
        (WTF::charactersToIntPtr): Deleted.
        * wtf/text/WTFString.h: Deleted the above functions.

2021-05-11  Devin Rousso  <drousso@apple.com>

        [macCatalyst] should have CSS `hover: hover` and `pointer: fine`
        https://bugs.webkit.org/show_bug.cgi?id=225672

        Reviewed by Tim Horton.

        * wtf/PlatformHave.h:
        Add `HAVE_MOUSE_DEVICE_OBSERVATION` and `HAVE_STYLUS_DEVICE_OBSERVATION` to make callsites
        clearer instead of having a somewhat unrelated connection to `HAVE_UIKIT_WITH_MOUSE_SUPPORT`
        and `HAVE_PENCILKIT_TEXT_INPUT` (not to mention both of them are `PLATFORM(MACCATALYST)`
        which isn't desirable since macCatalyst should consider the mouse as the primary pointing
        device, just like macOS).

2021-05-11  Alex Christensen  <achristensen@webkit.org>

        Remove xpc_connection_kill
        https://bugs.webkit.org/show_bug.cgi?id=225602

        Reviewed by Alexey Proskuryakov.

        * wtf/PlatformHave.h:

2021-05-10  Chris Dumez  <cdumez@apple.com>

        [ macOS Release wk2 ] http/tests/cache-storage/cache-records-persistency.https.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=225522
        <rdar://problem/77680019>

        Reviewed by Darin Adler.

        Pass ec parameter to std::filesystem::directory_iterator() so that it doesn't throw in case of the
        path does not exist. Normally, the function would return early earlier if the path does not exist
        or isn't a directory. However, in the context of the test, this function is getting called on a
        background thread and another thread is deleting the directory in parallel.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::deleteEmptyDirectory):

2021-05-10  Devin Rousso  <drousso@apple.com>

        `SLEEP_THREAD_FOR_DEBUGGER` should print the PID before sleeping
        https://bugs.webkit.org/show_bug.cgi?id=225619

        Reviewed by Tim Horton.

        * wtf/DebugUtilities.h:

2021-05-10  Rob Buis  <rbuis@igalia.com>

        Implement <form>.requestSubmit()
        https://bugs.webkit.org/show_bug.cgi?id=197958

        Reviewed by Darin Adler.

        Add requestSubmit as experimental feature, disabled by default.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-05-09  Darin Adler  <darin@apple.com>

        Remove uses of the String::toInt family of functions from WebCore/html and similar directories
        https://bugs.webkit.org/show_bug.cgi?id=225577

        Reviewed by Sam Weinig.

        * wtf/text/StringBuilder.h: Added conversion operator to make a StringView, built on the exiting
        is8Bit, characters8, characters16 and length functions. Removed now-uneeded equal function and
        == and != operators since the StringView ones work for those same cases with the same syntax.

2021-05-08  Darin Adler  <darin@apple.com>

        Rename toIntegralType to parseInteger and prepare to use it to replace all our integer-parsing functions
        https://bugs.webkit.org/show_bug.cgi?id=225560

        Reviewed by Sam Weinig.

        I have a much larger patch that replaces all the many toInt functions with these parseInteger
        function templates. The parseInteger ones take StringView, which means we can pass almost any
        type of string or character/length pair including a substring without allocating a new string,
        return Optional rather than using an out argument to report failure, take the integer type as
        a template parameter so can be used for precisely the desired type at each call site, and make
        the "allow trailing junk" feature explicit, rather than implicitly including it in the shortest
        named functions, which I hope will discourage people from using that junk-ignoring mode
        when it's not desirable.

        Also includes adoption of parseInteger within WTF itself, outside the string classes.

        My plan is to land the rest of adoption of this in chunks so we can review carefully and spot
        mistakes as we go. Then return to files like WTFString.h and remove the many old functions
        this replaces, including the String::toInt and charactersToInt families of functions.

        * wtf/URL.cpp:
        (WTF::URL::port const): Use parseInteger<uint16_t>.
        (WTF::URL::setHostAndPort): Ditto.

        * wtf/text/StringToIntegerConversion.h: Refactored the existing code to tighten things up
        a bit, and got rid of overloads that take pointer and length and the the generic "any string
        type" feature, since StringView already works well for that. Renamed toIntegralType to
        parseInteger, leaving the old name behind to ease the transition while adopting parseInteger.

        * wtf/text/WTFString.cpp:
        (WTF::toDoubleType): Use the TrailingJunkPolicy enumeration from the
        StringToIntegerConversion.h header.
        (WTF::charactersToDouble): Ditto.
        (WTF::charactersToFloat): Ditto.

2021-05-08  Chris Dumez  <cdumez@apple.com>

        Port Filesystem::pathByAppendingComponent() & Filesystem:: pathByAppendingComponents() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225550

        Reviewed by Darin Adler.

        Port Filesystem::pathByAppendingComponent() & Filesystem:: pathByAppendingComponents() to std::filesystem
        and get rid of platform-specific implementations.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::pathByAppendingComponent):
        (WTF::FileSystemImpl::pathByAppendingComponents):
        * wtf/glib/FileSystemGlib.cpp:
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

2021-05-08  Diego Pino Garcia  <dpino@igalia.com>

        [GLIB] REGRESSION(r277158) imported/w3c/web-platform-tests/xhr/FormData-append.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=225551

        Reviewed by Chris Dumez.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::fileIsDirectory): Remove unnecessary path.isEmpty check.
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::fileSystemRepresentation): Return empty CString if path is empty.

2021-05-07  Chris Dumez  <cdumez@apple.com>

        Port FileSystem::pathGetFileName() & Filesystem::directoryName() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225524

        Reviewed by Darin Adler.

        Port FileSystem::pathGetFileName() & Filesystem::directoryName() to std::filesystem so
        that we can get rid of platform-specific implementions.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::pathGetFileName):
        (WTF::FileSystemImpl::directoryName):
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::pathGetFileName): Deleted.
        (WTF::FileSystemImpl::directoryName): Deleted.
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::pathGetFileName): Deleted.
        (WTF::FileSystemImpl::directoryName): Deleted.
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::pathGetFileName): Deleted.
        (WTF::FileSystemImpl::directoryName): Deleted.

2021-05-07  Tim Horton  <timothy_horton@apple.com>

        Add an experimental alternative display-list-based RemoteLayerBackingStore implementation
        https://bugs.webkit.org/show_bug.cgi?id=225508

        Reviewed by Sam Weinig.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-05-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] Warnings about unused filesystem functions
        https://bugs.webkit.org/show_bug.cgi?id=225507

        Reviewed by Adrian Perez de Castro.

        Since r277158 these functions are no longer needed.
        
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::getFileStat): Deleted.
        (WTF::FileSystemImpl::getFileLStat): Deleted.

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Port Filesystem::fileMetadata() & Filesystem::getFileModificationTime() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225362

        Reviewed by Darin Adler.

        Port Filesystem::fileMetadata() & Filesystem::getFileModificationTime() to std::filesystem
        and get rid of platform-specific implementations.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::toWallTime):
        (WTF::FileSystemImpl::getFileModificationTime):
        (WTF::FileSystemImpl::fileMetadata):
        * wtf/FileSystem.h:
        * wtf/glib/FileSystemGlib.cpp:
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

2021-05-06  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [OpenSSL] Implement CryptoAlgorithmRSA*
        https://bugs.webkit.org/show_bug.cgi?id=225294

        Reviewed by Don Olmstead.

        Implement RSA for OpenSSL.

        Implement CryptoAlgorithmRSA_OAEP, CryptoAlgorithmRSA_PSS,
        CryptoAlgorithmRSAES_PKCS1_v1_5, CryptoAlgorithmRSASA_PKCS1_v1_5,
        and CryptoKeyRSA for OpenSSL.

        Note that if such OpenSSL version that does not support RSA_OAEP or
        RSA_PSS, the WebCrypto API for those algorithm will return a
        NotSupportedError.

        * wtf/Platform.h: Set HAVE_RSA_PSS for USE(OPENSSL)

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Regression(r254389?) navigator.languages returns all lowercase languages for ports using CF
        https://bugs.webkit.org/show_bug.cgi?id=225461

        Reviewed by Darin Adler.

        Stop lowercasing the languages returned by navigator.language / navigator.languages
        as this does not match the specification [1][2] or other Web browsers. The proper format is
        'en-US', not 'en-us'.

        [1] https://html.spec.whatwg.org/#dom-navigator-language
        [2] https://tools.ietf.org/html/bcp47

        * wtf/cf/LanguageCF.cpp:
        (WTF::httpStyleLanguageCode):

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        Remove old and unused memory barrier abstractions
        https://bugs.webkit.org/show_bug.cgi?id=225487

        Reviewed by Mark Lam.

        We don't use memoryBarrierBlahBlah anymore.

        * wtf/Atomics.h:
        (WTF::memoryBarrierAfterLock): Deleted.
        (WTF::memoryBarrierBeforeUnlock): Deleted.

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        Reduce use of dmb ish on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=225465

        Reviewed by Keith Miller.

        * wtf/Atomics.h:
        (WTF::dependentLoadLoadFence):

2021-05-06  Per Arne Vollan  <pvollan@apple.com>

        Add sandbox extension flag to specify that path contains no symlinks
        https://bugs.webkit.org/show_bug.cgi?id=219428
        <rdar://problem/66551986>

        Reviewed by Brent Fulgham.

        Declare canonical sandbox flag.

        * wtf/spi/darwin/SandboxSPI.h:

2021-05-06  Dean Jackson  <dino@apple.com>

        [WebXR] Add IOSurface to FrameData::LayerData
        https://bugs.webkit.org/show_bug.cgi?id=225428
        <rdar://problem/77586270>

        Reviewed by Tim Horton.

        Add USE(IOSURFACE_FOR_XR_LAYER_DATA) and make it true
        for Cocoa platforms.

        * wtf/PlatformUse.h:

2021-05-06  Darin Adler  <darin@apple.com>

        Streamline codec parsing, replacing uses of HashMap with SortedArrayMap
        https://bugs.webkit.org/show_bug.cgi?id=225368

        Reviewed by Sam Weinig.

        * wtf/SortedArrayMap.h: Moved PackedASCIILowerCodes here for reuse.
        Slightly tweaked ComparableASCIISubsetLiteral to match better.

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: take additional snapshots further down the page to see if the sampled top color is more than just a tiny strip
        https://bugs.webkit.org/show_bug.cgi?id=225323

        Reviewed by Beth Dakin.

        Add a `SampledPageTopColorMinHeight` setting that controls how far down the sampled page top
        color needs to extend in order for us to not bail. If the value > 0, we take an additional
        snapshot at (0, SampledPageTopColorMinHeight) and (width, SampledPageTopColorMinHeight),
        comparing each to the snapshot directly above (e.g. (0, SampledPageTopColorMinHeight) is
        compared to (0, 0)) using the `SampledPageTopColorMaxDifference`. Depending on the value, if
        the color across the top of the page is only a small strip, these extra snapshot comparisons
        will prevent a resulting color from being derived.

        * Scripts/Preferences/WebPreferences.yaml:

2021-05-05  Sam Weinig  <weinig@apple.com>

        Add preliminary support for specifying a color space for 2D canvas
        https://bugs.webkit.org/show_bug.cgi?id=225286

        Reviewed by Dean Jackson.

        Add new experimental feature, CanvasColorSpaceEnabled, which blocks
        access to the new ability to specify color spaces for 2D canvas.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-05-04  Alex Christensen  <achristensen@webkit.org>

        Don't iterate NetworkProcessProxy::m_websiteDataStores
        https://bugs.webkit.org/show_bug.cgi?id=225337
        <rdar://77233103>

        Reviewed by Geoffrey Garen.

        * wtf/Vector.h:
        (WTF::copyToVectorOf):
        Use a universal reference instead of const&.
        * wtf/WeakHashSet.h:
        WeakHashSet iteration returns T&, and we need this instead of WeakPtr<T> to be able to return a Ref from a map function.

2021-05-04  Chris Dumez  <cdumez@apple.com>

        Drop std::filesystem logic in PlatformJSCOnly.cmake
        https://bugs.webkit.org/show_bug.cgi?id=225355

        Reviewed by Alex Christensen.

        Drop std::filesystem logic in PlatformJSCOnly.cmake as it is no longer needed after r276946.

        * wtf/PlatformJSCOnly.cmake:

2021-05-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        [GPUP] Move GPUProcess WebGL to Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=222836
        rdar://75048190

        Reviewed by Brent Fulgham.

        Move the setting for WebGL in GPU process
        to experimental features but disable it by default,
        even on layout tests.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-05-03  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r276879) Add libstdc++fs to wtf libraries when using experimental fs headers
        https://bugs.webkit.org/show_bug.cgi?id=225341

        Reviewed by Chris Dumez.

        After r276879, Filesystem.cpp uses std::filesystem directly. So,
        expose the need for stdc++fs like was done in r268708 when std::fs was
        used in WTR.

        * wtf/CMakeLists.txt:

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Restore pre-r276879 behavior for FileSystem::moveFile()
        https://bugs.webkit.org/show_bug.cgi?id=225307

        Reviewed by Sam Weinig.

        Update FileSystem::moveFile() so that it now supports again moving a file across different
        volumes by copying the file over and then deleting the source file.

        I have verified locally that the function is now able to move a file to a different volumes.
        Sadly, I don't think having an API test is feasible here as it requires pre-determined
        volumes to be available.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::moveFile):

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix JSCOnly build with recent clang after r276879
        https://bugs.webkit.org/show_bug.cgi?id=225327

        * wtf/PlatformJSCOnly.cmake:

2021-05-03  Diego Pino Garcia  <dpino@igalia.com>

        [GLIB] REGRESSION(r276879): Several tests are crashing or failing
        https://bugs.webkit.org/show_bug.cgi?id=225292

        Reviewed by Carlos Alberto Lopez Perez.

        * wtf/FileSystem.cpp: 
        (WTF::FileSystemImpl::fileIsDirectory): Return false if path is empty.

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Restore pre-r276879 behavior for FileSystem::deleteFile() and FileSystem::deleteEmptyDirectory()
        https://bugs.webkit.org/show_bug.cgi?id=225289

        Reviewed by Darin Adler.

        Restore pre-r276879 behavior for FileSystem::deleteFile() and FileSystem::deleteEmptyDirectory() to
        reduce the risk of regressions. In particular, calling FileSystem::deleteFile() on an empty directory
        now fails and calling FileSystem::deleteEmptyDirectory() on a non-directory now fails.

        I have also gotten rid of the macOS-specific implementation of deleteEmptyDirectory() and merged the
        needed behavior (Dealing with .DS_Store files) to the generic function.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::deleteEmptyDirectory):
        * wtf/mac/FileSystemMac.mm:
        (WTF::FileSystem::deleteEmptyDirectory): Deleted.

2021-05-02  Sam Weinig  <weinig@apple.com>

        Add support for DestinationColorSpace::DisplayP3 in preparation for DisplayP3 canvas
        https://bugs.webkit.org/show_bug.cgi?id=225280

        Reviewed by Anders Carlsson.

        Add new ENABLE_DESTINATION_COLOR_SPACE_DISPLAY_P3 macro to declare which ports
        support P3 backing stores. Currently, only the Apple/Cocoa ports support it.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:

2021-04-30  Darin Adler  <darin@apple.com>

        Use SortedArrayMap in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=225251

        Reviewed by Sam Weinig.

        * wtf/SortedArrayMap.h: Added support for types that don't have a parse member function.

        * wtf/cocoa/MainThreadCocoa.mm: Removed unneeded includes.
        * wtf/text/AtomStringImpl.cpp: Ditto.
        * wtf/text/AtomStringTable.cpp: Ditto.

2021-05-01  Chris Dumez  <cdumez@apple.com>

        Start leveraging std::filesystem in WTF::FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=225255

        Reviewed by Sam Weinig.

         Start leveraging std::filesystem in WTF::FileSystem to reduce the amount of
        platform-specific code.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::fileExists):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::deleteEmptyDirectory):
        (WTF::FileSystemImpl::moveFile):
        (WTF::FileSystemImpl::getFileSize):
        (WTF::FileSystemImpl::fileIsDirectory):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::getVolumeFreeSpace):
        (WTF::FileSystemImpl::createSymbolicLink):
        (WTF::FileSystemImpl::hardLink):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        (WTF::FileSystemImpl::deleteNonEmptyDirectory):
        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::createTemporaryDirectory):
        * wtf/glib/FileSystemGlib.cpp:
        * wtf/posix/FileSystemPOSIX.cpp:
        * wtf/win/FileSystemWin.cpp:

        * wtf/PlatformJSCOnly.cmake:
        GNU implementation prior to 9.1 requires linking with -lstdc++fs and LLVM implementation
        prior to LLVM 9.0 requires linking with -lc++fs.

        * wtf/StdFilesystem.cpp: Removed.
        * wtf/StdFilesystem.h:
        Drop our own copy of std::filesystem as all the operating system we support now have
        support for this.

2021-05-01  Sam Weinig  <weinig@apple.com>

        Make destination color space enumeration match supported destination color spaces for the port
        https://bugs.webkit.org/show_bug.cgi?id=225237

        Reviewed by Simon Fraser.

        Add ENABLE_DESTINATION_COLOR_SPACE_LINEAR_SRGB and enabled it for all ports
        except the Apple Windows port, which is the only one doesn't have any support
        for it.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:
        * wtf/PlatformEnableWinApple.h:

2021-04-30  Darin Adler  <darin@apple.com>

        Optimize SortedArrayMap by using linear search for small arrays
        https://bugs.webkit.org/show_bug.cgi?id=225223

        Reviewed by Yusuke Suzuki.

        * wtf/SortedArrayMap.h: Added a base class SortedArrayBase that contains a constant
        for the cutoff between linear and binary search. Based on a quick empirical test,
        it seems faster to do linear search for arrays that have less then 20 elements.
        While doing this also switched from tryBinarySearch to std::find/find_if/lower_bound
        because the standard library function templates should be excellent for this purpose,
        and there's no reason to use our own. Also filled out the operations for the
        ComparableASCIILiteral family so that the "<" operator works in either direction,
        since that's needed for compatibility with standard library algorithms.

2021-04-29  Ben Nham  <nham@apple.com>

        Reduce memory footprint for background tabs
        https://bugs.webkit.org/show_bug.cgi?id=225007

        Reviewed by Chris Dumez.

        Add an option to slim background tabs by proactively calling WebCore::releaseMemory on Macs.

        * wtf/PlatformEnableCocoa.h:

2021-04-29  Darin Adler  <darin@apple.com>

        Extend SortedArrayMap further to work on case-folded strings, use in MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=224968

        Reviewed by Sam Weinig.

        * wtf/ASCIICType.h: Make most functions constexpr.

        * wtf/Forward.h: Added FixedVector.

        * wtf/SortedArrayMap.h: Added SortedArraySet. Added ComparableCaseFoldingASCIILiteral
        and ComparableLettersLiteral, using a template shared with ComparableASCIILiteral.

        * wtf/StdLibExtras.h: Added isSortedConstExpr and allOfConstExpr.

2021-04-29  Ben Nham  <nham@apple.com>

        Unreviewed, reverting r276619.

        Causes multiple regressions on perf bots.

        Reverted changeset:

        "Reduce memory footprint for background tabs"
        https://bugs.webkit.org/show_bug.cgi?id=225007
        https://commits.webkit.org/r276619

2021-04-28  Devin Rousso  <drousso@apple.com>

        experiment with averaging sampling colors across the top of the page as the scroll area background
        https://bugs.webkit.org/show_bug.cgi?id=224987
        <rdar://problem/76251889>

        Reviewed by Darin Adler.

        * Scripts/Preferences/WebPreferences.yaml:
        Add a `SampledPageTopColorMaxDifference` setting that controls both whether or not to sample
        colors from the top of the page (only if value > 0) and the max Lab color difference allowed
        across all samples.

        * Scripts/Preferences/WebPreferencesInternal.yaml:
        Add a `UseSampledPageTopColorForScrollAreaBackgroundColor` internal setting that controls
        whether the sampled page top color can be used as the overscroll area background color.

2021-04-28  Kate Cheney  <katherine_cheney@apple.com>

        Disable App Bound Requests on macOS
        https://bugs.webkit.org/show_bug.cgi?id=225155
        <rdar://problem/77288787>

        App-bound requests is causing potential performance issues on macOS.
        We should disable it while we investigate further.

        Reviewed by Brent Fulgham.

        * wtf/PlatformEnableCocoa.h:

2021-04-28  Basuke Suzuki  <basuke.suzuki@sony.com>

        Suppress warnings for %{private}s format specifier
        https://bugs.webkit.org/show_bug.cgi?id=225137

        Reviewed by Alex Christensen.

        Add PRIVATE_LOG_STRING macro which is defined depending on if
        os_log() is used or rather old printf().
        See also: https://bugs.webkit.org/show_bug.cgi?id=207478

        * wtf/Assertions.h:

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WebView
        https://bugs.webkit.org/show_bug.cgi?id=224449

        Reviewed by Geoffrey Garen.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-04-28  Chris Dumez  <cdumez@apple.com>

        Drop ModernUnprefixedWebAudio & AudioWorklet experimental feature flags
        https://bugs.webkit.org/show_bug.cgi?id=225130

        Reviewed by Eric Carlson.

        Drop ModernUnprefixedWebAudio & AudioWorklet experimental feature flags now that
        these features have shipped. It also doesn't make sense to disable them given
        that the prefixed WebAudio API is no longer exposed and there is no feature flag
        to turn the legacy prefixed API back on.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-04-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        Asserting that function or variable is accessed in a certain thread should be simpler and more robust
        https://bugs.webkit.org/show_bug.cgi?id=224971

        Reviewed by Darin Adler.

        Adds support for more fine-grained thread assertion than
        ASSERT(isMainThread()) / ASSERT(!isMainThread())

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Compiler.h:
        Add NO_UNIQUE_ADDRESS which can be used to declare members that are empty in
        RELEASE builds. The declaration avoids increasing the size of the enclosing type.
        This should be used with ThreadAssertion:
        class MyThreadAware {
            ....
            NO_UNIQUE_ADDRESS ThreadAssertion m_ownerThread;
        };

        * wtf/ThreadAssertions.h: Added.
        Add ThreadAssertion class that can be held as a member of a type.
        This allows consistent assertions that the code in the type
        runs in the expected thread.

        Add NamedAssertion& WTF::mainThread.
        Add NamedAssertion& WTF::mainRunLoop.
        These are only to be used in thread safety analysis phase. These are undefined
        symbols, it is an error to reference them.

        Adds functions assertIsMainThread() and assertIsMainRunLoop() to replace
        patterns of  ASSERT(isMainThread()), ASSERT(isMainRunLoop().
        In addition to behaving as the direct ASSERT behaves, the functions
        enable compile-time thread safety analysis to know that the calling
        scope has the assertions. These can be optionally then used in the
        function and member signatures to require the assertions.

2021-04-28  Daniel Kolesa  <dkolesa@igalia.com>

        [WPE][GTK] More correct fixes for stack size issues on musl libc
        https://bugs.webkit.org/show_bug.cgi?id=225099

        Reviewed by Adrian Perez de Castro.

        Partial revert https://bugs.webkit.org/show_bug.cgi?id=210068

        While the changes in r236306 stopped JSC from crashing outright,
        they are not correct, since they also make it rather unstable.

        To counter this, increase stack size for threads on Linux with
        non-glibc/bionic libcs to 1 megabyte, which is a robust enough
        value that should always be sufficient.

        While at it, the previous approach to musl thread stack size was
        breaking use of DEFAULT_THREAD_STACK_SIZE_IN_KB (if defined) as
        well as not properly taking care of the unused parameter. Move
        the code to a more appropriate place, which solves these problems.

        All this is however not enough, since there is still the main thread;
        using pthread_attr_getstack on a main thread is not reliable since main
        thread stacks are allowed to grow, and we expect the bounds to always
        be constant. On glibc, this already behaved right, but e.g. on musl
        (and possibly other C libraries) this is not necessarily the case - at
        the point of the check, it was returning 128k (since that's the initial
        size reserved by the kernel). Therefore, do the same thing as on Darwin
        and use process resource limits to get the boundary on Linux as well.

        This results in JavaScriptCore behaving correctly on musl libc and
        allows us to drop the options special-casing that was in place.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::currentThreadStackBoundsInternal):
        * wtf/Threading.cpp:
        (WTF::stackSize):

2021-04-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add a Condition type that supports thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=224970

        Reviewed by Darin Adler.

        Add CheckedCondition, a condition variable to be used with CheckedLock.
        Use thread safety analysis annotations for CheckedCondition.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CheckedCondition.h: Added.
        * wtf/CheckedLock.h:

2021-04-27  Ben Nham  <nham@apple.com>

        Memory pressure events should be logged to com.apple.WebKit subsystem
        https://bugs.webkit.org/show_bug.cgi?id=225112

        Reviewed by Chris Dumez.

        Currently memory pressure events are logged to the default os_log subsystem instead of the
        com.apple.WebKit subsystem. This makes it hard to capture such events using common logging
        prefs (e.g. a pref that persists all logs from the WebKit subsystem).

        To fix this, call WTFInitializeLogChannelStatesFromString at init time. This associates the
        WTFLogChannel with an os_log object that sends the messages to the WebKit subsystem.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::singleton):
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):

2021-04-27  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r275912.
        rdar://77179042

        Broke internal client

        Reverted changeset:

        "Remove support for NPAPI plugins in WebView"
        https://bugs.webkit.org/show_bug.cgi?id=224449
        https://commits.webkit.org/r275912

2021-04-26  Ben Nham  <nham@apple.com>

        Reduce memory footprint for background tabs
        https://bugs.webkit.org/show_bug.cgi?id=225007

        Reviewed by Chris Dumez.

        When a WebContent process contains only non-visible pages (e.g. if it is a background tab),
        we should attempt to reduce our memory footprint after some time interval to help relieve
        system-wide memory pressure. This is enabled only on Mac because iOS already does something
        similar just before WebContent suspends.

        * wtf/PlatformEnableCocoa.h:

2021-04-26  Keith Miller  <keith_miller@apple.com>

        CodeBlock should do a better job accounting for extra memory it allocates.
        https://bugs.webkit.org/show_bug.cgi?id=225068

        Reviewed by Mark Lam.

        Small convenience function to help compute the memory used by a Bag for JS GC
        accounting.

        * wtf/Bag.h:

2021-04-26  Angelos Oikonomopoulos  <angelos@igalia.com>

        Bump CeilingOnPageSize to 16KB on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=225030

        Reviewed by Michael Catanzaro.

        * wtf/PageBlock.h:

2021-04-25  Darin Adler  <darin@apple.com>

        Fix handling of overflow of /= and *= operators with double over Checked<uint64_t> and other 64-bit types.
        https://bugs.webkit.org/show_bug.cgi?id=224835

        Reviewed by Chris Dumez.

        * wtf/CheckedArithmetic.h: Since it is quite difficult to write correct implementations of the
        operations where we multiply or divide a checked integer by a floating point number, deleted
        those functions, which were barely used. Also corrected return types of various member functions,
        which were unconventional "const Type", replacing them with the conventional "Type" for functions
        that return a distinct value, "Type&" for assignment operators, and bool for relational operators.

2021-04-25  Devin Rousso  <drousso@apple.com>

        Add `ALWAYS_LOG_WITH_STREAM` macro for easier development/debugging
        https://bugs.webkit.org/show_bug.cgi?id=224959

        Reviewed by Darin Adler.

        It's often very helpful to use existing `operator<<` defined on objects, but annoying to
        have to copypaste the boilerplate code that creates a `WTF::TextStream` and uses it in a
        `WTFLogAlways` or wait for a debug build to enable existing `LOG_WITH_STREAM`.

        * wtf/Assertions.h:
        (LOG_WITH_STREAM): Moved from `Source/WebCore/pal/LogMacros.h`.
        (ALWAYS_LOG_WITH_STREAM): Added.
        Add `ALWAYS_LOG_WITH_STREAM` so that one change existing `LOG` when debugging with minimal
        friction. As an example, many times I've wished I could've just changed
        ```
            LOG_WITH_STREAM(Channel, stream << node);
        ```
        to something like
        ```
            ALWAYS_LOG_WITH_STREAM(stream << node);
        ```
        and avoid having to modify the surrounding code too much.

2021-04-23  Darin Adler  <darin@apple.com>

        Remove decoder memory allocations based on untrusted data (sizes) in the stream; related changes
        https://bugs.webkit.org/show_bug.cgi?id=224984

        Reviewed by Sam Weinig.

        * wtf/persistence/PersistentDecoder.cpp:
        (WTF::Persistence::Decoder::bufferPointerForDirectRead): Added.
        (WTF::Persistence::Decoder::decodeFixedLengthData): Refactor to use bufferPointerForDirectRead.

        * wtf/persistence/PersistentDecoder.h: Added bufferPointerForDirectRead function for use in the
        rare cases where we want to read directly out of the decoder buffer, rather than writing to a
        passed-in pointer. Also did a small refactoring of bufferIsLargeEnoughToContain to use &&
        rather than an if statement.

2021-04-23  Chris Dumez  <cdumez@apple.com>

        Disable GPUProcess on shipping iOS
        https://bugs.webkit.org/show_bug.cgi?id=224897

        Reviewed by Eric Carlson.

        * wtf/PlatformEnableCocoa.h:

2021-04-22  Lauro Moura  <lmoura@igalia.com>

        [WTF] Undefined behavior warning in StringBuilder::allocateBuffer
        https://bugs.webkit.org/show_bug.cgi?id=224942

        Reviewed by Chris Dumez.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::allocateBuffer): Add check before calling memcpy

2021-04-22  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for WKWebView snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=224943

        Reviewed by Tim Horton.

        New snapshot values.

        * wtf/SystemTracing.h:

2021-04-22  Martin Robinson  <mrobinson@webkit.org>

        [GTK] Turn on editable <input type=date> and <input type=time> fields
        https://bugs.webkit.org/show_bug.cgi?id=224921

        Reviewed by Carlos Garcia Campos.

        Turn on editable date and time inputs for GTK.

        * Scripts/Preferences/WebPreferencesInternal.yaml: Set editable date/time inputs
        on by default for GTK as well.

2021-04-22  Aditya Keerthi  <akeerthi@apple.com>

        Fix the tvOS build after r276325
        https://bugs.webkit.org/show_bug.cgi?id=224929
        <rdar://problem/77003408>

        Reviewed by Wenson Hsieh.

        Fix the tvOS build after r276325

        * wtf/PlatformHave.h:

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Fix internal builds after r276325
        https://bugs.webkit.org/show_bug.cgi?id=224896

        Reviewed by Tim Horton.

        * wtf/PlatformHave.h:

2021-04-21  Martin Robinson  <mrobinson@igalia.com>

        Enable CSS Scroll Snap by default
        https://bugs.webkit.org/show_bug.cgi?id=224867

        Reviewed by Don Olmstead.

        * wtf/PlatformEnable.h: Move the preprocessor enabling of scroll snap here.
        * wtf/PlatformEnableCocoa.h: Move it from here.

2021-04-21  Simon Fraser  <simon.fraser@apple.com>

        Enhance scrolling-related trace points
        https://bugs.webkit.org/show_bug.cgi?id=224852

        Reviewed by Tim Horton.
        
        One new trace point, and some argument descriptors.

        * wtf/SystemTracing.h:

2021-04-20  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Prevent GPU and WebContent processes from attempting to connect to the AppSSO service 
        https://bugs.webkit.org/show_bug.cgi?id=224834
        <rdar://problem/72157514>

        Reviewed by Jiewen Tan.

        * wtf/PlatformHave.h:

2021-04-20  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Enable MediaSession and MediaSessionCoordinator experimental features
        https://bugs.webkit.org/show_bug.cgi?id=224822
        <rdar://problem/76908014>

        Reviewed by Jer Noble.

        * Scripts/Preferences/WebPreferencesExperimental.yaml: Change the defaults for
        MediaSessionCoordinatorEnabled and MediaSessionEnabled to true.

2021-04-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Lots of spurious -Wnonnull warnings with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224452

        Reviewed by Darin Adler.

        * wtf/RefPtr.h:
        (WTF::DefaultRefDerefTraits::derefIfNotNull):

2021-04-20  Keith Miller  <keith_miller@apple.com>

        FullGCActivityCallback should use the percentage of pages uncompressed in RAM to determine deferral.
        https://bugs.webkit.org/show_bug.cgi?id=224817

        Reviewed by Filip Pizlo.

        Add a noexcept flavor of FunctionTraits. On Linux mincore (and probably other syscalls) are marked noexcept so the existing overloads don't work.

        * wtf/FunctionTraits.h:

2021-04-20  Chris Dumez  <cdumez@apple.com>

        Make sure we don't exit the GPUProcess too frequently while under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=224798

        Reviewed by Darin Adler.

        Add member function to the MemoryPressureHandler to indicate if we're currently simulating memory
        pressure or not.

        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::isSimulatingMemoryPressure const):

2021-04-19  Darin Adler  <darin@apple.com>

        Refactor sorted array mapping machinery in LocaleToScriptMapping.cpp for reuse elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=224733

        Reviewed by Yusuke Suzuki.

        * WTF.xcodeproj/project.pbxproj: Added SortedArrayMap.h.
        * wtf/CMakeLists.txt: Ditto.

        * wtf/SortedArrayMap.h: Added. Builds on the idiom in LocalToScriptMapping, and to be
        generic uses std::pair instead of custom structures. Includes the ComparableASCIILiteral
        structure for maps that are keyed by case-sensitive ASCII strings.

        * wtf/StdLibExtras.h:
        (WTF::binarySearchImpl): Use auto in one place to make this a bit more generic.

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        Implement rudimentary support for clang thread safety analysis.
        The added macros can be used to declare which member variables or
        global variables are locked by which mutexes. The compiler will
        check statically that the mutexes are held correctly. The checking
        is intra procedural, not global.

        * Configurations/Base.xcconfig:
            Add -Wthread-safety to compile flags.

        * wtf/CheckedLock.h: Added.
        Add CheckedLock, a Lock variant that is amenable to static
        analysis.
        Add a Locker specialization for CheckedLock that is amenable to
        static analysis.

        Locker<CheckedLock> is a std::scoped_lock. The scoped_lock cannot be aliased,
        since it appears that (Apple's) libcxx is not compiled with thread safety
        analysis support enabled by default.

        New types are needed due Locker move constructor and conditional locking.
        The Locker has default usage pattern of:
          auto locker = holdLock(m_lock);
        This forces dynamism that removes the possibility of simple statical
        analysis that thread safety analysis capabilities "mutex" and "scoped_lock"
        currently implement. Most likely large fraction of call sites is due to historical
        lack of CTAD and as such can be converted to less general form.
        Once the pattern is not used by default, CheckedLock can be deleted
        and the move dynamism bits of Locker can be moved to some more specific type
        ("UncheckedLocker").

        * wtf/ThreadSafetyAnalysis.h: Added.
        Add macro wrappers around clang "mutex" and "scoped_lock" capability attributes.

2021-04-17  Sam Weinig  <weinig@apple.com>

        Move RuntimeEnabledFeatures to Settings (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=224440

        Reviewed by Alex Christensen.

        Move a few RuntimeEnabledFeatures to Settings to consolidate settings
        in one object and removes the need for additional boilerplate. This 
        is now possible as Settings are now accessible in workers.

        Moves PeerConnectionEnabled, WebGLUsingMetal, WebGL2Enabled, WebGPUEnabled
        and MaskWebGLStringsEnabled.

        * Scripts/Preferences/WebPreferences.yaml:
        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-04-16  Kate Cheney  <katherine_cheney@apple.com>

        Disable app-bound request API tests on specific OS versions
        https://bugs.webkit.org/show_bug.cgi?id=223692
        <rdar://problem/75787288>

        Reviewed by Brent Fulgham.

        * wtf/PlatformEnableCocoa.h:

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Disable ApplicationCache with linkedOnOrAfter check
        https://bugs.webkit.org/show_bug.cgi?id=224629

        Reviewed by Brady Eidson.

        * Scripts/Preferences/WebPreferences.yaml:

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Reduce maximum HashTable entry size to 128 bytes
        https://bugs.webkit.org/show_bug.cgi?id=224381

        Reviewed by Yusuke Suzuki.

        * wtf/HashTable.h:
        (WTF::KeyTraits>::inlineLookup):

2021-04-16  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse and add feature flag for @counter-style
        https://bugs.webkit.org/show_bug.cgi?id=223150

        Reviewed by Darin Adler.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
         Add CSSCounterStyleAtRulesEnabled and CSSCounterStyleAtRuleImageSymbolsEnabled flags.

2021-04-15  Alex Christensen  <achristensen@webkit.org>

        Use WTF::Function instead of std::function in SVGPropertyAnimatorFactory::attributeAnimatorCreator
        https://bugs.webkit.org/show_bug.cgi?id=224586

        Reviewed by Darin Adler.

        This requires something like r223122 until something like http://wg21.link/P1249 is accepted.
        I also added a missing reserveInitialCapacity call that could reduce rehashing when constructing a HashMap from an initializer_list.

        * wtf/HashMap.h:

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Revert important part of r275948
        https://bugs.webkit.org/show_bug.cgi?id=224381

        It caused an internal build failure.

        * wtf/HashTable.h:
        (WTF::KeyTraits>::inlineLookup):

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Reduce maximum HashTable entry size to 128 bytes
        https://bugs.webkit.org/show_bug.cgi?id=224381

        Reviewed by Yusuke Suzuki.

        It turns out that HashMaps use HashTable::Value as KeyValuePair, so sizeof(Key) + sizeof(Value) was double counting the key size.
        This caused FontCascadeCache to be a false positive.  It has a key size of a little over 100 bytes.  Only counting it once reflects what is intended.
        Also, the USE(ANGLE) exception was convenient for a downstream branch, but isn't needed.  Next time they rebase they will use UniqueRef.

        * wtf/HashTable.h:
        (WTF::KeyTraits>::inlineLookup):

2021-04-13  Ada Chan  <ada.chan@apple.com>

        Implement PlatformXRSystem::xrCoordinator() for USE(APPLE_INTERNAL_SDK)
        https://bugs.webkit.org/show_bug.cgi?id=224510

        Reviewed by Dean Jackson.

        Update ENABLE_WEBXR flag

        * wtf/PlatformEnableCocoa.h:

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        WebProcessPool should store Vector<Ref<WebProcessProxy>> instead of Vector<RefPtr>
        https://bugs.webkit.org/show_bug.cgi?id=224412

        Reviewed by Chris Dumez.

        * wtf/Ref.h:
        (WTF::operator==):
        (WTF::operator!=):

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WebView
        https://bugs.webkit.org/show_bug.cgi?id=224449

        Reviewed by Chris Dumez.

        * Scripts/Preferences/WebPreferences.yaml:

2021-04-13  Chris Dumez  <cdumez@apple.com>

        Make MemoryPressureHandler::isUnderMemoryPressure() return true for 2 seconds after a simulated warning
        https://bugs.webkit.org/show_bug.cgi?id=224505

        Reviewed by Darin Adler.

        Make MemoryPressureHandler::isUnderMemoryPressure() return true for 2 seconds after a simulated warning,
        to make our simulated warning more realistic.

        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):

2021-04-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add Vector&& move constructor / assignment to FixedVector and RefCountedArray
        https://bugs.webkit.org/show_bug.cgi?id=224475

        Reviewed by Ryosuke Niwa.

        This patch adds move constructor and move-assignment taking Vector to FixedVector / RefCountedArray.
        This allows transferring MoveOnly things from Vector to FixedVector.

        * wtf/FixedVector.h:
        (WTF::FixedVector::FixedVector):
        (WTF::FixedVector::operator=):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::operator=):
        (WTF::RefCountedArray::~RefCountedArray):
        (WTF::RefCountedArray::allocateUninitializedData):
        (WTF::RefCountedArray::assign):

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Revert r275172
        https://bugs.webkit.org/show_bug.cgi?id=224499
        <rdar://76396241>

        Reviewed by Tim Horton.

        * wtf/spi/darwin/XPCSPI.h:

2021-04-12  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Enable WTFCrashWithInfo implementation
        https://bugs.webkit.org/show_bug.cgi?id=224458

        Reviewed by Don Olmstead.

        Enable WTFCrashWithInfo implementation for PlayStation platform. It is x86_64 and uses clang
        so that it can share Darwin's implemetation with us.

        * wtf/Assertions.cpp:

2021-04-12  Youenn Fablet  <youenn@apple.com>

        Block loading for port 10080
        https://bugs.webkit.org/show_bug.cgi?id=224432

        Reviewed by Alex Christensen.

        Follow Chrome and Firefox by blocking port 10080.

        * wtf/URL.cpp:
        (WTF::portAllowed):

2021-04-11  Sam Weinig  <weinig@apple.com>

        Reduce compile time and binary size cost of enabling proper CSSStyleDeclaration property access behavior
        https://bugs.webkit.org/show_bug.cgi?id=222518
        <rdar://problem/75136887>

        Reviewed by Darin Adler.

        * wtf/PlatformEnable.h:
        Remove ENABLE_ATTRIBUTE_BASED_PROPERTIES_FOR_CSS_STYLE_DECLARATION, as it is now the default and on everwhere.

2021-04-09  Jer Noble  <jer.noble@apple.com>

        WTF SoftLinking macros can cause collisions with their target functions
        https://bugs.webkit.org/show_bug.cgi?id=224379
        <rdar://76434202>

        Reviewed by Eric Carlson.

        Do not declare an inline version of the target function, as this will collide if the target function
        becomes inlined. Instead, callers should use the explicit softLink_Library_Function() syntax, or
        the LibrarySoftLinking.h headers should use #defines to re-declare the function name.

        * wtf/cocoa/SoftLinking.h:

2021-04-08  Stephan Szabo  <stephan.szabo@sony.com>

        [RunLoopGeneric] OneShotTimer should not remain "isActive" after fired
        https://bugs.webkit.org/show_bug.cgi?id=189335
        <rdar://problem/44226604>

        Reviewed by Geoffrey Garen.

        * wtf/generic/RunLoopGeneric.cpp:

        Deactivate one-shot timer before invoking its callback.

2021-04-08  Khem Raj  <raj.khem@gmail.com>

        [WPE] Build fixes for musl C library on Linux
        https://bugs.webkit.org/show_bug.cgi?id=210068

        Reviewed by Carlos Alberto Lopez Perez.

        Define 128KB DEFAULT_THREAD_STACK_SIZE_IN_KB for musl
        Use OS(LINUX) check to include musl when building for
        Linux based platforms.

        * wtf/PlatformHave.h:
        * wtf/Threading.cpp:

2021-04-08  Chris Dumez  <cdumez@apple.com>

        OfflineAudioContext objects are leaking
        https://bugs.webkit.org/show_bug.cgi?id=224279

        Reviewed by Darin Adler.

        Add flag that can be passed when constructing a WeakPtr to disable threading assertions.
        This is useful for cases where we know it is safe due to locking but we'd like to use a
        WeakPtr instead of a raw pointer because it is safer.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::get const):
        (WTF::WeakPtr::operator-> const):
        (WTF::WeakPtr::operator* const):
        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtrFactory::createWeakPtr const):
        (WTF::=):
        (WTF::makeWeakPtr):

2021-04-08  Simon Fraser  <simon.fraser@apple.com>

        Copy-constructed Vectors should not have excess capacity
        https://bugs.webkit.org/show_bug.cgi?id=224313

        Reviewed by Darin Adler.

        When copy-constructing a Vector<>, set the capacity to the size of the input.
        This avoids wasted vector capacity at call sites that dynamically build vectors
        and then copy them into read-only caches.

        * wtf/Vector.h:
        (WTF::Malloc>::Vector):

2021-04-02  Darin Adler  <darin@apple.com>

        Use Hasher more, remove IntegerHasher, fix hashing-related mistakes
        https://bugs.webkit.org/show_bug.cgi?id=224138

        Reviewed by Chris Dumez.

        * wtf/HashFunctions.h: Export intHash and pairIntHash to the global namespace
        so they can be called without an explicit WTF prefix. This follows the usual
        WTF design pattern given that these functions are intended for use outside WTF.

        * wtf/Hasher.h: Deleted IntegerHasher.
        (WTF::add): Added overloads for String, AtomString, and URL.

        * wtf/ObjectIdentifier.h:
        (WTF::add): Added a Hasher overload for any ObjectIdentifier.

        * wtf/RetainPtr.h: Export safeCFEqual and safeCFHash to the global namespace
        so they can be called without an explicit WTF prefix. This follows the usual
        WTF design pattern given that these functions are intended for use outside WTF.

        * wtf/VectorHash.h: Removed the VectorHash template, instead just specializing
        DefaultHash. Use computeHash to hash the contents of the vector instead of
        hashing the hashes of the items in the vector. This is better in general and
        better for the one case where we are currently using this, for a Vector<int>.
        We want to hash all the integers rather than hashing hashes of all the integers.
        In the future, this means the elements of the Vector need to be hashable using
        the Hasher machinery. The old requirement was the the elements had a DefaultHash.

2021-04-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        Suppress -Warray-bounds warning spam in Bitmap.h
        https://bugs.webkit.org/show_bug.cgi?id=224207

        Reviewed by Don Olmstead.

        Suppress this warning.

        * wtf/Bitmap.h:
        (WTF::WordType>::clear):

2021-04-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use FixedVector more in bytecode dir and JumpTable
        https://bugs.webkit.org/show_bug.cgi?id=224275

        Reviewed by Michael Saboff and Mark Lam.

        * wtf/FixedVector.h:
        (WTF::FixedVector::offsetOfStorage):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::Header::size):
        (WTF::RefCountedArray::Header::offsetOfLength):

2021-04-07  Alex Christensen  <achristensen@webkit.org>

        Use os_transaction_create instead of deprecated xpc_transaction_begin/end
        https://bugs.webkit.org/show_bug.cgi?id=224288

        Reviewed by Tim Horton.

        * wtf/spi/darwin/XPCSPI.h:

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] WasmMemory caging should care nullptr
        https://bugs.webkit.org/show_bug.cgi?id=224268
        <rdar://problem/74654838>

        Reviewed by Mark Lam.

        Accept size_t since Wasm::Memory's length can be larger than 4GB.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::CagedPtr):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::at const):
        (WTF::CagedPtr::recage):
        * wtf/CagedUniquePtr.h:
        (WTF::CagedUniquePtr::CagedUniquePtr):
        (WTF::CagedUniquePtr::create):
        (WTF::CagedUniquePtr::tryCreate):

2021-04-06  Alex Christensen  <achristensen@webkit.org>

        Add U+0581 and U+0585 to list of Armenian characters that look like Latin characters
        https://bugs.webkit.org/show_bug.cgi?id=224219
        <rdar://75896365>

        Reviewed by Brent Fulgham.

        These code points are allowed in the context of other Armenian code points and punctuation, but not other script code points.
        This was already implemented for the others, but I consolidated the list to one location to avoid having two locations for the list.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::isArmenianLookalikeCharacter):
        (WTF::URLHelpers::isArmenianLookalikeSequence):
        (WTF::URLHelpers::isLookalikeCharacter):

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce FixedVector and use it for FixedOperands
        https://bugs.webkit.org/show_bug.cgi?id=224171

        Reviewed by Mark Lam.

        This FixedVector<T> is a wrapper around RefCountedArray<T>, but this offers Vector-like copy / move semantics,
        so that we can use this FixedVector<T> as a drop-in-replacement for fixed-sized Vector fields. The purpose
        of that is saving memory by removing unnecessary storage (FixedVector is fixed-sized allocated) and putting size
        into the allocated memory.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FastBitVector.h:
        (WTF::FastBitVector::FastBitVector):
        * wtf/FixedVector.h: Added.
        (WTF::FixedVector::FixedVector):
        (WTF::FixedVector::operator=):
        (WTF::FixedVector::size const):
        (WTF::FixedVector::isEmpty const):
        (WTF::FixedVector::byteSize const):
        (WTF::FixedVector::data):
        (WTF::FixedVector::begin):
        (WTF::FixedVector::end):
        (WTF::FixedVector::data const):
        (WTF::FixedVector::begin const):
        (WTF::FixedVector::end const):
        (WTF::FixedVector::rbegin):
        (WTF::FixedVector::rend):
        (WTF::FixedVector::rbegin const):
        (WTF::FixedVector::rend const):
        (WTF::FixedVector::at):
        (WTF::FixedVector::at const):
        (WTF::FixedVector::operator[]):
        (WTF::FixedVector::operator[] const):
        (WTF::FixedVector::first):
        (WTF::FixedVector::first const):
        (WTF::FixedVector::last):
        (WTF::FixedVector::last const):
        (WTF::FixedVector::fill):
        (WTF::FixedVector::operator== const):
        (WTF::FixedVector::swap):
        (WTF::swap):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::fill):
        (WTF::RefCountedArray::swap):

2021-04-06  Youenn Fablet  <youenn@apple.com>

        Enable NSURLSession WebSocket code path by default
        https://bugs.webkit.org/show_bug.cgi?id=224102

        Reviewed by Alex Christensen.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink some of Vectors in JSC
        https://bugs.webkit.org/show_bug.cgi?id=224162

        Reviewed by Simon Fraser.

        Add rbegin and rend to make RefCountedArray usable for Vector clients who use these features.

        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::begin):
        (WTF::RefCountedArray::end):
        (WTF::RefCountedArray::begin const):
        (WTF::RefCountedArray::end const):
        (WTF::RefCountedArray::rbegin):
        (WTF::RefCountedArray::rend):
        (WTF::RefCountedArray::rbegin const):
        (WTF::RefCountedArray::rend const):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * wtf/PlatformMac.cmake:

2021-04-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() on various tests
        https://bugs.webkit.org/show_bug.cgi?id=209450
        <rdar://problem/60799255>

        Reviewed by Tim Horton.

        Replace the call to `setNeedsRecalcStyleInAllFrames` with `textAutosizingUsesIdempotentModeChanged` when
        changing whether idempotent text autosizing is enabled.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Define AtomString(ASCIILiteral) and use ASCIILiteral more to avoid memory allocation
        https://bugs.webkit.org/show_bug.cgi?id=224125

        Reviewed by Saam Barati.

        Add AtomString(ASCIILiteral). ASCIILiteral ensures that storage is constant non-heap string by its type.
        So we can just use it as a literal (not allocating a string storage).

        * wtf/text/AtomString.h:

2021-04-02  Simon Fraser  <simon.fraser@apple.com>

        Enable PreferPageRenderingUpdatesNear60FPSEnabled by default
        https://bugs.webkit.org/show_bug.cgi?id=224133

        Reviewed by Tim Horton.

        Turn the PreferPageRenderingUpdatesNear60FPSEnabled internal setting on by default. This
        means that requestAnimationFrame on 144Hz displays will fire at 72Hz. 60Hz displays are
        unaffected.

        Firing at "close to 60fps" was determined to be necessary for web compatibility and power.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        [MacOS] Enable NSURLSession WebSocket code path in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220973
        <rdar://problem/73655870>

        Reviewed by Darin Adler.

        * wtf/PlatformHave.h:
        Bump NSURLSessionWebSocket path to above BigSur and iOS14.

2021-04-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix passing hash value
        https://bugs.webkit.org/show_bug.cgi?id=223895

        * wtf/RobinHoodHashTable.h:
        (WTF::SizePolicy>::addPassingHashCode):

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce RobinHoodHashTable
        https://bugs.webkit.org/show_bug.cgi?id=223895

        Reviewed by Fil Pizlo.

        This patch implements RobinHoodHashTable[1]. We don't use it as a default hashtable since it has different performance v.s. memory-saving characteristics,
        and this patch's goal is not tackling on making this default. Rather, the goal of this patch is introducing it to non-performance sensitive area quickly
        so that we can save memory. RobinHoodHashTable more frequently computes hash value compared to HashTable, so this is not drop-in replacement for the existing
        one. But still, this is useful since we know that "while there are many small HashTables and they holds much memory, there are super large HashTables and
        they holds almost same amount of memory while they are a few.". This patch's goal is applying this RobinHoodHashTable to these "large, but a few" singleton tables.

        RobinHoodHashTable maintains distance-from-initial-bucket (DIB) small by adjusting existing entries when inserting. When inserting, if we found that the
        existing entry has less DIB than the current inserting entry's DIB, then we swap entries, and insert the existing entry to the other place. This is giving
        some good DIB from rich entry to poor entry (that's why it is called RobinHood Hashing), and making average DIB lower. And this algorithm adds good invariant
        that, when looking up an entry, and we found that existing entry has smaller DIB, then we can stop searching in the middle of the chain since we know that
        we should swap entries when this happened when inserting. These two tricks maintain HashTable performance even under significantly high load factor: 90% load-factor
        just works. 95% load-factor regress adding performance, but still it does not become catastrophic compared to normal open-addressing HashTable.

        We introduce RobinHoodHashTable, and adding several kinds of tables based on load-factors.

        1. MemoryCompactLookupOnlyRobinHoodHashSet / HashMap

            This has 95% load-factor. This is suitable for sets and maps which is mostly-constant: constructing once, and looking up repeatedly. In WebKit, there are so
            many this kind of tables e.g. singleton HashMap for various kinds of things. We can use this super high load-factor table so that we can save memory even while
            we are maintains fast HashTable lookup.

        2. MemoryCompactRobinHoodHashSet / HashMap

            This has 90% load-factor. It just works, and we can try using it if sets and maps are significantly performance intensive.

        3. FastRobinHoodHashSet / HashMap

            This has 75% load-factor. This is still good compared to HashSet and HashMap since they are using 50% load-factor for large sized tables. This has very slightly performance regressed
            compared to 50% load-factor large HashSet and HashMap, but if that is not performance intensive (e.g. AtomStringTable is one of the most performance intensive table), this is good.

        In this patch, we replace many singleton HashSet / HashMap with RobinHoodHashTable.

        [1]: https://www.sebastiansylvan.com/post/robin-hood-hashing-should-be-your-default-hash-table-implementation/

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Forward.h:
        * wtf/HashMap.h:
        (WTF::Y>::swap):
        (WTF::Y>::size const):
        (WTF::Y>::capacity const):
        (WTF::Y>::isEmpty const):
        (WTF::Y>::begin):
        (WTF::Y>::end):
        (WTF::Y>::begin const):
        (WTF::Y>::end const):
        (WTF::Y>::find):
        (WTF::Y>::find const):
        (WTF::Y>::contains const):
        (WTF::Y>::get const):
        (WTF::Y>::inlineGet const):
        (WTF::TableTraitsArg>::inlineSet):
        (WTF::TableTraitsArg>::inlineAdd):
        (WTF::TableTraitsArg>::inlineEnsure):
        (WTF::TableTraitsArg>::set):
        (WTF::TableTraitsArg>::add):
        (WTF::TableTraitsArg>::fastAdd):
        (WTF::TableTraitsArg>::ensure):
        (WTF::Y>::remove):
        (WTF::Y>::removeIf):
        (WTF::Y>::clear):
        (WTF::Y>::take):
        (WTF::Y>::checkConsistency const):
        (WTF::Y>::isValidKey):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::X>::swap): Deleted.
        (WTF::X>::size const): Deleted.
        (WTF::X>::capacity const): Deleted.
        (WTF::X>::isEmpty const): Deleted.
        (WTF::X>::begin): Deleted.
        (WTF::X>::end): Deleted.
        (WTF::X>::begin const): Deleted.
        (WTF::X>::end const): Deleted.
        (WTF::X>::find): Deleted.
        (WTF::X>::find const): Deleted.
        (WTF::X>::contains const): Deleted.
        (WTF::X>::get const): Deleted.
        (WTF::X>::inlineGet const): Deleted.
        (WTF::MappedTraitsArg>::inlineSet): Deleted.
        (WTF::MappedTraitsArg>::inlineAdd): Deleted.
        (WTF::MappedTraitsArg>::inlineEnsure): Deleted.
        (WTF::MappedTraitsArg>::set): Deleted.
        (WTF::MappedTraitsArg>::add): Deleted.
        (WTF::MappedTraitsArg>::fastAdd): Deleted.
        (WTF::MappedTraitsArg>::ensure): Deleted.
        (WTF::MappedTraits>::get const): Deleted.
        (WTF::MappedTraits>::inlineGet const): Deleted.
        (WTF::X>::remove): Deleted.
        (WTF::X>::removeIf): Deleted.
        (WTF::X>::clear): Deleted.
        (WTF::MappedTraits>::take): Deleted.
        (WTF::X>::take): Deleted.
        (WTF::X>::checkConsistency const): Deleted.
        (WTF::X>::isValidKey): Deleted.
        * wtf/HashSet.h:
        (WTF::W>::swap):
        (WTF::W>::size const):
        (WTF::W>::capacity const):
        (WTF::W>::isEmpty const):
        (WTF::W>::begin const):
        (WTF::W>::end const):
        (WTF::W>::find const):
        (WTF::W>::contains const):
        (WTF::TableTraits>::find const):
        (WTF::TableTraits>::contains const):
        (WTF::TableTraits>::ensure):
        (WTF::W>::add):
        (WTF::W>::addVoid):
        (WTF::TableTraits>::add):
        (WTF::W>::remove):
        (WTF::W>::removeIf):
        (WTF::W>::clear):
        (WTF::W>::take):
        (WTF::W>::takeAny):
        (WTF::TableTraits>::remove):
        (WTF::TableTraits>::take):
        (WTF::W>::isValidValue):
        (WTF::= const):
        (WTF::W>::checkConsistency const):
        (WTF::V>::swap): Deleted.
        (WTF::V>::size const): Deleted.
        (WTF::V>::capacity const): Deleted.
        (WTF::V>::isEmpty const): Deleted.
        (WTF::V>::begin const): Deleted.
        (WTF::V>::end const): Deleted.
        (WTF::V>::find const): Deleted.
        (WTF::V>::contains const): Deleted.
        (WTF::Traits>::find const): Deleted.
        (WTF::Traits>::contains const): Deleted.
        (WTF::Traits>::ensure): Deleted.
        (WTF::V>::add): Deleted.
        (WTF::V>::addVoid): Deleted.
        (WTF::Traits>::add): Deleted.
        (WTF::V>::remove): Deleted.
        (WTF::V>::removeIf): Deleted.
        (WTF::V>::clear): Deleted.
        (WTF::V>::take): Deleted.
        (WTF::V>::takeAny): Deleted.
        (WTF::Traits>::remove): Deleted.
        (WTF::Traits>::take): Deleted.
        (WTF::V>::isValidValue): Deleted.
        (WTF::V>::checkConsistency const): Deleted.
        * wtf/HashTable.h:
        (WTF::addIterator):
        (WTF::removeIterator):
        (WTF::invalidateIterators):
        (WTF::HashTable::~HashTable):
        (WTF::HashTable::random):
        (WTF::KeyTraits>::inlineLookup):
        (WTF::KeyTraits>::lookupForWriting):
        (WTF::KeyTraits>::fullLookupForWriting):
        (WTF::KeyTraits>::addUniqueForInitialization):
        (WTF::KeyTraits>::add):
        (WTF::KeyTraits>::addPassingHashCode):
        (WTF::KeyTraits>::removeAndInvalidateWithoutEntryConsistencyCheck):
        (WTF::KeyTraits>::removeAndInvalidate):
        (WTF::KeyTraits>::clear):
        (WTF::KeyTraits>::swap):
        (WTF::KeyTraits>::HashTable):
        (WTF::HashTable::invalidateIterators): Deleted.
        (WTF::KeyTraits>::invalidateIterators): Deleted.
        * wtf/RobinHoodHashMap.h: Added.
        * wtf/RobinHoodHashSet.h: Added.
        * wtf/RobinHoodHashTable.h: Added.
        (WTF::RobinHoodHashTable::~RobinHoodHashTable):
        (WTF::RobinHoodHashTable::begin):
        (WTF::RobinHoodHashTable::end):
        (WTF::RobinHoodHashTable::begin const):
        (WTF::RobinHoodHashTable::end const):
        (WTF::RobinHoodHashTable::random):
        (WTF::RobinHoodHashTable::random const):
        (WTF::RobinHoodHashTable::size const):
        (WTF::RobinHoodHashTable::capacity const):
        (WTF::RobinHoodHashTable::isEmpty const):
        (WTF::RobinHoodHashTable::reserveInitialCapacity):
        (WTF::RobinHoodHashTable::add):
        (WTF::RobinHoodHashTable::find):
        (WTF::RobinHoodHashTable::find const):
        (WTF::RobinHoodHashTable::contains const):
        (WTF::RobinHoodHashTable::isEmptyBucket):
        (WTF::RobinHoodHashTable::isEmptyOrDeletedBucket):
        (WTF::RobinHoodHashTable::lookup):
        (WTF::RobinHoodHashTable::checkTableConsistency):
        (WTF::RobinHoodHashTable::internalCheckTableConsistency const):
        (WTF::RobinHoodHashTable::internalCheckTableConsistencyExceptSize const):
        (WTF::RobinHoodHashTable::internalCheckTableConsistencyExceptSize):
        (WTF::RobinHoodHashTable::internalCheckTableConsistency):
        (WTF::RobinHoodHashTable::shouldExpand):
        (WTF::RobinHoodHashTable::computeTableHash):
        (WTF::RobinHoodHashTable::shouldExpand const):
        (WTF::RobinHoodHashTable::shouldShrink const):
        (WTF::RobinHoodHashTable::shrink):
        (WTF::RobinHoodHashTable::deleteBucket):
        (WTF::RobinHoodHashTable::desiredIndex):
        (WTF::RobinHoodHashTable::probeDistance):
        (WTF::RobinHoodHashTable::makeIterator):
        (WTF::RobinHoodHashTable::makeConstIterator const):
        (WTF::RobinHoodHashTable::makeKnownGoodIterator):
        (WTF::RobinHoodHashTable::makeKnownGoodConstIterator const):
        (WTF::RobinHoodHashTable::checkTableConsistencyExceptSize):
        (WTF::RobinHoodHashTable::tableSize const):
        (WTF::RobinHoodHashTable::tableSizeMask const):
        (WTF::RobinHoodHashTable::keyCount const):
        (WTF::RobinHoodHashTable::tableHash const):
        (WTF::SizePolicy>::checkKey):
        (WTF::SizePolicy>::lookup):
        (WTF::SizePolicy>::inlineLookup):
        (WTF::SizePolicy>::initializeBucket):
        (WTF::SizePolicy>::add):
        (WTF::SizePolicy>::maintainProbeDistanceForAdd):
        (WTF::SizePolicy>::addPassingHashCode):
        (WTF::SizePolicy>::reinsert):
        (WTF::SizePolicy>::find):
        (WTF::SizePolicy>::find const):
        (WTF::SizePolicy>::contains const):
        (WTF::SizePolicy>::removeAndInvalidateWithoutEntryConsistencyCheck):
        (WTF::SizePolicy>::removeAndInvalidate):
        (WTF::SizePolicy>::remove):
        (WTF::SizePolicy>::removeWithoutEntryConsistencyCheck):
        (WTF::SizePolicy>::allocateTable):
        (WTF::SizePolicy>::deallocateTable):
        (WTF::SizePolicy>::expand):
        (WTF::SizePolicy>::computeBestTableSize):
        (WTF::SizePolicy>::shrinkToBestSize):
        (WTF::SizePolicy>::rehash):
        (WTF::SizePolicy>::clear):
        (WTF::SizePolicy>::RobinHoodHashTable):
        (WTF::SizePolicy>::swap):
        (WTF::=):
        (WTF::SizePolicy>::checkTableConsistency const):
        (WTF::SizePolicy>::checkTableConsistencyExceptSize const):
        * wtf/text/AtomStringHash.h:
        * wtf/text/AtomStringImpl.cpp:
        * wtf/text/AtomStringTable.cpp:
        (WTF::AtomStringTable::~AtomStringTable):
        * wtf/text/AtomStringTable.h:
        (WTF::AtomStringTable::table):
        * wtf/text/StringHash.h:

2021-04-01  Kate Cheney  <katherine_cheney@apple.com>

        Clear network website data when a user clears history/website data
        https://bugs.webkit.org/show_bug.cgi?id=224030
        <rdar://problem/75288338>

        Reviewed by David Kilzer.

        * wtf/cocoa/SoftLinking.h:
        Add a new soft link macro to link umbrella private frameworks. We need
        this to support internal additions we need to clear network domain data.

2021-04-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r275267): [GTK][WPE] 12 new crashes on service-workers layout tests
        https://bugs.webkit.org/show_bug.cgi?id=224059

        Reviewed by Carlos Alberto Lopez Perez.

        Have the glib implementation of FileSystem::writeToFile() return early when the size to
        write is 0, instead of calling g_output_stream_write_all(). It appears that passing a
        NULL buffer to g_output_stream_write_all() crashes, even if size is 0.

        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::writeToFile):

2021-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        Allow ASCWebKitSPISupport to be used on macOS
        https://bugs.webkit.org/show_bug.cgi?id=224036
        <rdar://76028645>

        Reviewed by Brent Fulgham.

        * wtf/PlatformHave.h:

2021-03-31  Sam Weinig  <weinig@apple.com>

        Ease experimentation by enabling <model> if SEPARATED_MODEL is being used
        https://bugs.webkit.org/show_bug.cgi?id=224011

        Reviewed by Tim Horton.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        There is little point to experimenting with SEPARATED_MODEL if <model> is disabled.

2021-03-31  Antoine Quint  <graouts@webkit.org>

        Remove CA_WHERE_ADDITIVE_TRANSFORMS_ARE_REVERSED
        https://bugs.webkit.org/show_bug.cgi?id=224000

        Reviewed by Simon Fraser.

        Since trunk is no longer maintained on macOS versions earlier than 10.15,
        we can remove this compile-time flag.

        * wtf/PlatformHave.h:

2021-03-30  Chris Dumez  <cdumez@apple.com>

        Service Worker scripts use too much memory in the network process
        https://bugs.webkit.org/show_bug.cgi?id=223808
        <rdar://75637093>

        Reviewed by Geoff Garen.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::deleteNonEmptyDirectory):
        Add an implementation of FileSystem::deleteNonEmptyDirectory() on all supported platforms.
        We previously only had implemetations for Cocoa and Windows.

        (WTF::FileSystemImpl::mapToFile):
        Moved most of the mapToFile() logic from NetworkCacheData::mapToFile() to FileSystem, so that
        it can be reused by the new SWScriptStorage class. It creates the destination file, mmap's it,
        writes the provided data to it and then returns the mmap'd file.

        (WTF::FileSystemImpl::readOrMakeSalt):
        Move readOrMakeSalt() from NetworkCacheData to FileSystem so that it can be reused by the new
        SWScriptStorage.
        
        * wtf/FileSystem.h:

2021-03-30  Sam Weinig  <weinig@apple.com>

        JSGlobalObject's m_customGetterFunctionMap and m_customSetterFunctionMap should be sets, not maps, and should use both the identifier and function pointer as the key
        https://bugs.webkit.org/show_bug.cgi?id=223613

        Reviewed by Saam Barati.

        Adds a heterogenous HashSet::ensure, which allows lazy construction of the value to
        insert into the HashSet only if the heterogenous key (e.g. a key + HashTranslator
        that are not the same as the HashSet's ValueType) does not match any item in the
        set. For example given a set of ExpensiveToConstruct, but uniquely identifiable
        by CheapToConstruct:
        
            HashSet<ExpensiveToConstruct> hashSet;
            ...
            struct Translator {
                static unsigned hash(const CheapToConstruct& key)
                {
                    return key.hash();
                }
                static bool equal(const ExpensiveToConstruct& a, const CheapToConstruct& b)
                {
                    return a == b;
                }
            };
            
            hashSet.ensure<Translator>(CheapToConstruct { ... }, [] {
                return ExpensiveToConstruct { ... };
            });

        This will be used by the custom getter/setter sets to avoid constructing the GC objects
        unless they are really needed.

        Also took the opertunity to replace some typedefs with usings, and fixed some comments.

        * wtf/HashSet.h:
        (WTF::Traits>::ensure):

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Add disableForwardingVPrintfStdErrToOSLog() and use it in the jsc shell.
        https://bugs.webkit.org/show_bug.cgi?id=223963

        Reviewed by Saam Barati.

        * wtf/Assertions.cpp:
        (WTF::disableForwardingVPrintfStdErrToOSLog):
        * wtf/Assertions.h:
        * wtf/WTFConfig.h:

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        Use terminate_with_reason instead of xpc_connection_kill
        https://bugs.webkit.org/show_bug.cgi?id=223618

        Reviewed by Darin Adler.

        * wtf/spi/darwin/XPCSPI.h:

2021-03-28  Cameron McCormack  <heycam@apple.com>

        Enable AspectRatioOfImgFromWidthAndHeightEnabled for WebKitLegacy.
        https://bugs.webkit.org/show_bug.cgi?id=223815

        Reviewed by Sam Weinig.

        There's no reason this is enabled for WebKit and not WebKitLegacy.
        And set WebCore = true since this feature could conceivably be
        used in SVG images.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS, it seems like it is on for all ports
        https://bugs.webkit.org/show_bug.cgi?id=223810

        Reviewed by Simon Fraser.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:
        Remove ENABLE_INDEXED_DATABASE and ENABLE_INDEXED_DATABASE_IN_WORKERS.

2021-03-27  Chris Dumez  <cdumez@apple.com>

        wtf/Vector.h:1276:88: runtime error: reference binding to null pointer of type 'const WebCore::Style::RuleFeature'
        https://bugs.webkit.org/show_bug.cgi?id=223828

        Reviewed by David Kilzer.

        Fix issue found by UBSan in Vector::append(const U*, size_t):
        wtf/Vector.h:1276:88: runtime error: reference binding to null pointer of type 'const WebCore::Style::RuleFeature'
        wtf/Vector.h:1276:88: runtime error: reference binding to null pointer of type 'const WebCore::LayoutRect'
        wtf/Vector.h:1276:88: runtime error: reference binding to null pointer of type 'const WTF::RefPtr<WebCore::CSSStyleSheet, WTF::RawPtrTraits<WebCore::CSSStyleSheet>, WTF::DefaultRefDerefTraits<WebCore::CSSStyleSheet> >'

        * wtf/Vector.h:
        (WTF::Malloc>::append):
        Return early if dataSize is 0. For some call sites, the pointer may be null and dataSize is 0. In such cases,
        we should just return early instead of proceeding and using the null pointer. I believe this can happen if
        you call Vector::appendVector() with an empty Vector for example.

2021-03-26  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r275038?): Perf test IndexedDB/stress/large-binary-keys.html failing with logging about memory pressure events
        https://bugs.webkit.org/show_bug.cgi?id=223826
        <rdar://problem/75906134>

        Reviewed by Darin Adler.

        Use RELEASE_LOG() instead of WTFLogAlways() to log memory pressure events, so that they don't
        show on stdout in the performance tests and make them fail.

        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):

2021-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use PUICQuickboardController for text input when HAVE(QUICKBOARD_CONTROLLER) is defined
        https://bugs.webkit.org/show_bug.cgi?id=223809
        <rdar://problem/56730407>

        Reviewed by Tim Horton.

        Remove the `QuickboardControllerForTextInputEnabled` WebKit preference, now that the feature is enabled by
        default behind a build-time flag.

        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-03-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use new Apple ICU APIs to avoid C++ ICU API usage
        https://bugs.webkit.org/show_bug.cgi?id=223783
        <rdar://problem/75060240>

        Reviewed by Mark Lam.

        * wtf/DateMath.h:
        (WTF::LocalTimeOffset::LocalTimeOffset):

2021-03-26  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Brent Fulgham.

        Add ENABLE define for Notify filtering.

        * wtf/PlatformEnableCocoa.h:

2021-03-26  Dean Jackson  <dino@apple.com>

        Enable Metal ANGLE backend for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=220076
        <rdar://problem/72565020>

        Reviewed by Sam Weinig.

        Turn the Metal backend for ANGLE on, moving the feature
        from Internal to Experimental.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-03-26  Jessie Berlin  <jberlin@webkit.org>

        Update the BEFORE/SINCE, SYSTEM_VERSION_PREFIX, and MACOSX_DEPLOYMENT_TARGET flags
        https://bugs.webkit.org/show_bug.cgi?id=223779

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig:

2021-03-25  Megan Gardner  <megan_gardner@apple.com>

        Have App Highlights be a Configuration Setting instead of an internal Preference setting.
        https://bugs.webkit.org/show_bug.cgi?id=223720
        rdar://75196085

        Reviewed by Wenson Hsieh.

        * Scripts/Preferences/WebPreferences.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-03-25  Jessie Berlin  <jberlin@webkit.org>

        Remove 10.13 DEPLOYMENT_TARGETs and SYSTEM_VERSION_PREFIXs
        https://bugs.webkit.org/show_bug.cgi?id=223765

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2021-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275057.
        https://bugs.webkit.org/show_bug.cgi?id=223768

        Caused build failure

        Reverted changeset:

        "Enforce notifyd message filtering"
        https://bugs.webkit.org/show_bug.cgi?id=223601
        https://trac.webkit.org/changeset/275057

2021-03-25  Kate Cheney  <katherine_cheney@apple.com>

        Some calls in AuthenticatorPresenterCoordinator::selectAssertionResponse are not yet available for mac
        https://bugs.webkit.org/show_bug.cgi?id=223752
        <rdar://problem/75808515>

        Reviewed by Jiewen Tan.

        * wtf/PlatformHave.h:

2021-03-25  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Brent Fulgham.

        Add ENABLE define for Notify filtering.

        * wtf/PlatformEnableCocoa.h:

2021-03-25  Don Olmstead  <don.olmstead@sony.com>

        Embiggen maximum HashTable size when not using ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=223757

        Reviewed by Alex Christensen.

        This is a partial revert of r274603 which cut the maximum size HashTable from 400 to 250.
        When not using ANGLE directly for an OpenGL ES implementation there's some code hashing its
        sh::ShaderVariable from the shader compiler ANGLE ships with. This type is too big and
        triggers the static_assert.

        The eventual goal is for ANGLE to be the OpenGL ES implementation for WebKit when enabling
        WebGL. On PlayStation we already have a system OpenGL ES and any use of WebGL is in legacy
        applications. The WebGL compliance features in ANGLE aren't needed in this case so ideally
        we wouldn't even compile out ANGLE.

        This patch punts on fixing the actual problem and just resolves this build issue.

        * wtf/HashTable.h:
        (WTF::KeyTraits>::inlineLookup):

2021-03-25  Chris Dumez  <cdumez@apple.com>

        Do not do process pre-warming when the system is under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=223717
        <rdar://problem/75810423>

        Reviewed by Antti Koivisto.

        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):
        - Listen to the same memory pressure notifications on macOS and iOS. Previously, macOS would not respond to
          non-critical memory pressure notifications for example. Also, since macOS would not listen for the notification
          that happens when the memory usage goes back to normal, MemoruPressureHandler::isUnderMemoryPressure() would
          start returning true after a critical memory pressure notification and it would never go back to false.

2021-03-25  Alberto Garcia  <berto@igalia.com>

        REGRESSION(r271560): [Linux] release assert in Thread::initializePlatformThreading
        https://bugs.webkit.org/show_bug.cgi?id=223069

        Reviewed by Carlos Garcia Campos.

        Replace an existing signal handler instead of aborting.

        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Thread::initializePlatformThreading):

2021-03-24  Mark Lam  <mark.lam@apple.com>

        WTF::setPermissionsOfConfigPage() should allow its VM_FLAGS_PERMANENT workaround unconditionally.
        https://bugs.webkit.org/show_bug.cgi?id=223725
        rdar://75813316

        Reviewed by Saam Barati.

        If the OS does not support the flag, then we should not require it.

        * wtf/WTFConfig.cpp:
        (WTF::setPermissionsOfConfigPage):

2021-03-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Use StaticStringImpl instead of StringImpl::createStaticStringImpl if it is not dynamic string content
        https://bugs.webkit.org/show_bug.cgi?id=223714

        Reviewed by Saam Barati.

        We should just use StaticStringImpl instead of StringImpl::createStaticStringImpl if the string content is
        not dynamically allocated one. Keep in mind that this URL code is strongly assuming that internal StringImpl
        is static so that this string (and URL) can be used in multiple threads. And StaticStringImpl meets this requirement.

        * wtf/URL.cpp:
        (WTF::aboutBlankURL):
        (WTF::aboutSrcDocURL):

2021-03-24  Yusuke Suzuki  <ysuzuki@apple.com>

        All string resources from UserAgentStyleSheets / UserAgentScripts should be used as non-copying StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=223685

        Reviewed by Saam Barati.

        Add StringImpl::createWithoutCopying for `const char*`.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createWithoutCopying):

2021-03-24  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Add Experimental MediaSession coordinator
        https://bugs.webkit.org/show_bug.cgi?id=222158
        <rdar://problem/74508862>

        Reviewed by Jer Noble.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * wtf/PlatformEnableCocoa.h:

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Address undefined behavior found by UBSan in StringToIntegerConversion.h
        https://bugs.webkit.org/show_bug.cgi?id=223694

        Reviewed by Geoffrey Garen.

        Update StringToIntegerConversion to deal with overflows in a well-defined manner,
        by relying on CheckedArithmetics. This addresses undefined behavior reborted by
        UBSan:
        - wtf/text/StringToIntegerConversion.h:94:30: runtime error: signed integer overflow: 2147483640 + 8 cannot be represented in type 'int'
        - wtf/text/StringToIntegerConversion.h:104:17: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself

        * wtf/text/StringToIntegerConversion.h:
        (WTF::toIntegralType):

2021-03-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r274927.

        Broke many tests in WebGL

        Reverted changeset:

        "Enable Metal ANGLE backend for WebGL"
        https://bugs.webkit.org/show_bug.cgi?id=220076
        https://commits.webkit.org/r274927

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Address undefined behavior found by UBSan in DateMath.h
        https://bugs.webkit.org/show_bug.cgi?id=223663

        Reviewed by Darin Adler.

        Address undefined behavior found by UBSan in DateMath.h
        Release/usr/local/include/wtf/DateMath.h:247:39: runtime error: nan is outside the range of representable values of type 'int'
        Release/usr/local/include/wtf/DateMath.h:221:29: runtime error: nan is outside the range of representable values of type 'int'
        Release/usr/local/include/wtf/DateMath.h:165:38: runtime error: signed integer overflow: -2147483648 - 1 cannot be represented in type 'int'

        * wtf/DateMath.h:
        (WTF::daysFrom1970ToYear):
        Cast year to a double *before* substracting 1 instead of *after*. This works around the fact that INT_MIN-1 would not
        fit in an int and would be undefined behavior.

        (WTF::dayInYear):
        (WTF::msToYear):
        Deal with the double potentially being NaN before casting to an int, since
        casting NaN to an int type has undefined behavior.

2021-03-23  Dean Jackson  <yolo@apple.com>

        Enable Metal ANGLE backend for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=220076
        <rdar://problem/72565020>

        Reviewed by Sam Weinig.

        Turn the Metal backend for ANGLE on, moving the feature
        from Internal to Experimental.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:
        * Scripts/Preferences/WebPreferencesInternal.yaml:

2021-03-23  Chris Dumez  <cdumez@apple.com>

        DerivedSources/WebKitTestRunner/JSAccessibilityUIElement.cpp:802:72: runtime error: -1 is outside the range of representable values of type 'unsigned int'
        https://bugs.webkit.org/show_bug.cgi?id=223650

        Reviewed by Darin Adler.

        Update the clampTo() template specialization that converts floating types into integer types so that
        it deals with NaN inputs in a well-defined manner. Previously, it would simply cast the NaN to the
        integer type, which was undefined behavior. We now return the minimum range boundary for the output
        when the input is NaN.

        * wtf/MathExtras.h:
        (clampTo):

2021-03-23  Saam Barati  <sbarati@apple.com>

        Don't require VM_FLAGS_PERMANENT on the simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=223649
        <rdar://problem/75747788>

        Reviewed by Alexey Proskuryakov.

        Since VM_FLAGS_PERMANENT must be supported by the kernel, let's make
        it so that the vm_map that passes this flag in can fail when running
        on the simulator. This is to support the use case of running a newer
        simulator on an older OS. When the call to vm_map fails when running
        on the simulator, we try again without the VM_FLAGS_PERMANENT flag.

        * wtf/WTFConfig.cpp:
        (WTF::setPermissionsOfConfigPage):

2021-03-23  Alex Christensen  <achristensen@webkit.org>

        Remove unused WTF::String::percentage
        https://bugs.webkit.org/show_bug.cgi?id=223651

        Reviewed by Chris Dumez.

        * wtf/text/AtomString.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::percentage const): Deleted.
        * wtf/text/WTFString.h:

2021-03-23  Chris Dumez  <cdumez@apple.com>

        wtf/text/IntegerToStringConversion.h:54:104: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
        https://bugs.webkit.org/show_bug.cgi?id=223614

        Reviewed by Darin Adler.

        numberToStringSigned() was calling -number when number is negative. This could trigger undefined behavior
        since -number may not be representable in the input type. For example, if the type was int and number was
        INT_MIN, -INT_MIN would overflow and the result would be undefined. To address the issue, we now cast
        number to the destination *unsigned* type *before* negating it.

        * wtf/text/IntegerToStringConversion.h:
        (WTF::numberToStringSigned):

2021-03-23  Alex Christensen  <achristensen@webkit.org>

        Optimize StringView::CodePoints::Iterator
        https://bugs.webkit.org/show_bug.cgi?id=162315

        Reviewed by Darin Adler.

        This stores range pointers in the iterator instead of a pointer to a pointer.

        * wtf/text/StringView.h:
        (WTF::StringView::CodePoints::Iterator::Iterator):
        (WTF::StringView::CodePoints::Iterator::operator++):
        (WTF::StringView::CodePoints::Iterator::operator* const):
        (WTF::StringView::CodePoints::Iterator::operator== const):

2021-03-23  Chris Dumez  <cdumez@apple.com>

        Add assertions to guard against heap allocations on the audio thread
        https://bugs.webkit.org/show_bug.cgi?id=223226

        Reviewed by Darin Adler.

        Add ForbidMallocUseForCurrentThreadScope to FastMalloc.h to enable assertions guarding against
        doing heap allocations on the current thread (during the lifetime of the Scope object).

        Also add a DisableMallocRestrictionsForCurrentThreadScope to temporarily disable those checks
        to allow for some very specific assertions (either because they are required, or simply because
        they are not fixed yet).

        * wtf/FastMalloc.cpp:
        (WTF::ForbidMallocUseForCurrentThreadScope::ForbidMallocUseForCurrentThreadScope):
        (WTF::ForbidMallocUseForCurrentThreadScope::~ForbidMallocUseForCurrentThreadScope):
        (WTF::DisableMallocRestrictionsForCurrentThreadScope::DisableMallocRestrictionsForCurrentThreadScope):
        (WTF::DisableMallocRestrictionsForCurrentThreadScope::~DisableMallocRestrictionsForCurrentThreadScope):
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastRealloc):
        (WTF::tryFastRealloc):
        (WTF::fastAlignedMalloc):
        (WTF::tryFastAlignedMalloc):
        * wtf/FastMalloc.h:
        (WTF::ForbidMallocUseForCurrentThreadScope::~ForbidMallocUseForCurrentThreadScope):
        (WTF::DisableMallocRestrictionsForCurrentThreadScope::~DisableMallocRestrictionsForCurrentThreadScope):

2021-03-22  Devin Rousso  <drousso@apple.com>

        Remove unused JS and CSS files of media controls
        https://bugs.webkit.org/show_bug.cgi?id=214955
        <rdar://problem/66604040>

        Reviewed by Eric Carlson.

        Cocoa platforms are already using modern media controls so there's no reason to keep the old
        media controls resources/logic around any longer. It just wastes space.

        The non-iOS Apple controls must be kept though as they are still used on Windows.

        * wtf/PlatformEnable.h:
        * wtf/PlatformEnableCocoa.h:
        * Scripts/Preferences/WebPreferences.yaml:
        Replace `ModernMediaControlsEnabled` setting with `ENABLE_MODERN_MEDIA_CONTROLS` build flag.

2021-03-22  Rob Buis  <rbuis@igalia.com>

        [css-contain] Parse CSS contain property
        https://bugs.webkit.org/show_bug.cgi?id=223252

        Reviewed by Darin Adler.

        Add experimental feature flag.

        * Scripts/Preferences/WebPreferencesExperimental.yaml:

2021-03-22  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, fix Mac and non-unified JSCOnly builds
        https://bugs.webkit.org/show_bug.cgi?id=223546

        * wtf/PlatformJSCOnly.cmake:
        Add missing file for JSCOnly build on Mac.

2021-03-19  Darin Adler  <darin@apple.com>

        [Cocoa] Make it possible to release a WKWebView on a non-main thread without a crash due to WKScriptMessage race
        https://bugs.webkit.org/show_bug.cgi?id=222336

        Reviewed by Chris Dumez.

        * wtf/spi/cocoa/objcSPI.h: Removed unnecessary #if so functions are correctly compiled for
        non-Objective-C source files. Added include of <objc/objc.h> so that "id" is defined.

2021-03-19  Sam Weinig  <weinig@apple.com>

        Add PropertyName parameter to custom setters to allow shared implementations to do late name lookup
        https://bugs.webkit.org/show_bug.cgi?id=223413

        Reviewed by Alexey Shvayka.

        * wtf/PlatformCallingConventions.h:
        Update JSC_DECLARE_CUSTOM_SETTER to account for the new PropertyName parameter.

== Rolled over to ChangeLog-2021-03-18 ==
