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 ==
