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

        [JSC] Figure out missing prepareCallOperation
        https://bugs.webkit.org/show_bug.cgi?id=203285

        Reviewed by Mark Lam.

        Enable USE(BUILTIN_FRAME_ADDRESS) regardless of platform is the compilers and architectures match.

        * wtf/Platform.h:

2019-10-23  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Should dispatch contextmenu event on right click
        https://bugs.webkit.org/show_bug.cgi?id=203316
        <rdar://problem/54617376>

        Reviewed by Wenson Hsieh.

        * wtf/FeatureDefines.h:

2019-10-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251261.

        This broke multiple tests

        Reverted changeset:

        "Using version 1 CFRunloopSource for faster task dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/251261

2019-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Remove Hiragino Sans site-specific quirk for Yahoo Japan
        https://bugs.webkit.org/show_bug.cgi?id=203345

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2019-10-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Make `JSGlobalObject*` threading change more stabilized by adding tests and assertions
        https://bugs.webkit.org/show_bug.cgi?id=203274

        Reviewed by Saam Barati.

        * wtf/Platform.h:

2019-10-22  Antti Koivisto  <antti@apple.com>

        operator==(Vector, Vector) should work with different inline capacities
        https://bugs.webkit.org/show_bug.cgi?id=203245

        Reviewed by Alex Christensen.

        Also allow different overflow behavior and minimum capacity.

        * wtf/Vector.h:
        (WTF::operator==):
        (WTF::operator!=):

2019-10-22  Rob Buis  <rbuis@igalia.com>

        https://bugs.webkit.org/show_bug.cgi?id=169667
        URL: protocol setter needs to be more restrictive around file

        Reviewed by Alex Christensen.

        Restrict setting protocol to "file" as indictaed in the spec [1].

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        [1] https://url.spec.whatwg.org/#scheme-state steps 2.1.3 and 2.1.4.

        * wtf/URL.cpp:
        (WTF::URL::setProtocol):

2019-10-21  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Swipe navigation gestures do not work
        https://bugs.webkit.org/show_bug.cgi?id=203205
        <rdar://problem/54617473>

        Reviewed by Wenson Hsieh.

        * wtf/Platform.h:
        Add a new HAVE.

2019-10-20  Mark Lam  <mark.lam@apple.com>

        Remove all uses of untagCodePtr in debugging code.
        https://bugs.webkit.org/show_bug.cgi?id=203188
        <rdar://problem/56453043> 

        Reviewed by Yusuke Suzuki.

        We want the ability to always assert on failure to authenticate in untagCodePtr
        (though we don't currently do that yet).

        * wtf/PtrTag.cpp:
        (WTF::tagForPtr):
        * wtf/PtrTag.h:
        (WTF::retagCodePtrImpl):
        (WTF::tagCFunctionPtrImpl):
        (WTF::untagCFunctionPtrImpl):
        (WTF::assertIsCFunctionPtr):
        (WTF::isTaggedWith):

2019-10-19  Simon Fraser  <simon.fraser@apple.com>

        Add support to TextStream for dumping HashMap<> and HashSet<>
        https://bugs.webkit.org/show_bug.cgi?id=202969

        Reviewed by Dean Jackson.
        
        Make it possible to output HashMap<> and HashSet<> to TextStream,
        so long as key and value types are streamable. Also implement operator<<(char)
        so that chars show as ASCII, rather than numbers.

        * wtf/text/TextStream.cpp:
        (WTF::TextStream::operator<<):
        * wtf/text/TextStream.h:
        (WTF::operator<<):

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

        [JSC] Make ConcurrentJSLock Lock even if ENABLE_CONCURRENT_JS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=202892

        Reviewed by Mark Lam.

        BaselineJIT also has concurrent compiler. ENABLE(CONCURRENT_JS) should not rely on ENABLE(DFG_JIT).
        It should rely on ENABLE(JIT) instead.

        * wtf/Platform.h:

2019-10-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr in more places and remove some unnecessary external linkage.
        https://bugs.webkit.org/show_bug.cgi?id=203115

        Reviewed by Yusuke Suzuki.

        Also removed unused lockSpinLimit in Threading.h.

        * wtf/MD5.h:
        * wtf/SHA1.h:
        * wtf/StackBounds.h:
        * wtf/Threading.h:

2019-10-17  Sihui Liu  <sihui_liu@apple.com>

        Using version 1 CFRunloopSource for faster task dispatch
        https://bugs.webkit.org/show_bug.cgi?id=202874

        Reviewed by Geoffrey Garen.

        We used CFRunLoopWakeUp to wake up runloop to process source, which seems to be slow according to profiling. To 
        avoid calling CFRunLoopWakeUp, we should use version 1 CFRunloopSource instead of version 0. This patch brings
        about 15% speedup for test PerformanceTests/IndexedDB/basic/objectstore-get.html.

        * wtf/RunLoop.cpp:
        (WTF::RunLoop::initializeWebRunLoop):
        (WTF::RunLoop::web):
        * wtf/RunLoop.h:
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::performWork):
        (WTF::RunLoop::RunLoop):
        (WTF::RunLoop::~RunLoop):
        (WTF::RunLoop::wakeUp):
        * wtf/cocoa/MainThreadCocoa.mm:
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::initializeWebThread):
        (-[JSWTFMainThreadCaller call]): Deleted.

2019-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal macOS 10.13 and 10.14 builds after r251171

        * wtf/Platform.h: Add a HAVE() macro for AXClientType, which is only available on macOS 10.15+ SDKs.

2019-10-15  Chris Dumez  <cdumez@apple.com>

        [macOS] Simplify main thread initialization
        https://bugs.webkit.org/show_bug.cgi?id=203001

        Reviewed by Geoff Garen.

        Simplify main thread initialization on macOS by always using pthread main as main thread.
        The complexity is now isolated to the USE(WEB_THREAD) code path.

        This patch also adds a debug assertion in WTF::initializeWebThreadPlatform() to make sure
        it gets called on the actual main thread. In release, it will log a fault message indicating
        it was called on the wrong thread.

        * wtf/MainThread.cpp:
        * wtf/MainThread.h:
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::applyRefDerefThreadingCheck const):
        * wtf/cocoa/MainThreadCocoa.mm:
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::initializeWebThreadPlatform):
        (WTF::canAccessThreadLocalDataForThread):
        (WTF::isMainThread):
        * wtf/generic/MainThreadGeneric.cpp:
        * wtf/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):
        * wtf/win/MainThreadWin.cpp:

2019-10-14  Tim Horton  <timothy_horton@apple.com>

        Unify sources for bindings more densely
        https://bugs.webkit.org/show_bug.cgi?id=202918

        Reviewed by Simon Fraser.

        * Scripts/generate-unified-source-bundles.rb:
        Add an option to separate and more densely unify sources that match
        a given glob pattern.

2019-10-14  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202820
        <rdar://problem/56164838>

        Reviewed by Anders Carlsson.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Devin Rousso was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/Platform.h:

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

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Reviewed by Ryosuke Niwa.

        * wtf/Vector.h:
        The code introduced in r108153 to workaround a warning when building Chrome was causing us to use uninitialized memory
        when we create a Vector with the size_t/{signed,unsigned}char constructor with a constexpr size_t.
        This was the cause of bug 201902 and bug 201620 which only manifested themselves in release builds with some compilers.

2019-10-14  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sandbox extensions should be created with audit tokens, not PIDs
        https://bugs.webkit.org/show_bug.cgi?id=201828

        Reviewed by Brent Fulgham.

        Remove HAVE macro for issuing sandbox extension by PID, and fix version checks for the HAVE
        macros related to issuing sandbox extensions by audit token. Remove SPI for creating
        extensions by PID, and add SPI for creating mach extension by audit token. Also remove an
        unneeded flag.
        
        * wtf/Platform.h:
        * wtf/spi/darwin/SandboxSPI.h:

2019-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Make WebInspector's remote debug EventLoop code into RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=202716

        Reviewed by Joseph Pecoraro.

        This patch merges WebInspector's EventLoop code into RunLoop as a static function.

        * wtf/RunLoop.h:
        (WTF::RunLoop::cycle):
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::cycle): Added.
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::cycle): Added.
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::cycle): Added.
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::cycle): Added.

2019-10-10  Ryosuke Niwa  <rniwa@webkit.org>

        Make it safe to store a ThreadSafeRefCounted object in Ref & RefPtr safe inside its destructor
        https://bugs.webkit.org/show_bug.cgi?id=201576

        Reviewed by Geoffrey Garen and Mark Lam.

        This patch leaves m_refCount 1 inside the last deref call to ThreadSafeRefCounted
        so that storing an instance of this object in Ref or RefPtr would not trigger a recursive delete.

        Note: this patch does not try to fix a race condition by which another thread tries to ref()
        this object after the "last" call to deref had happened since such a code would ref() this object
        long after it had been removed (UAF), nor some code calling deref() before calling ref() inside
        a destructor since there is no way to defend against unpaired calls to ref() & deref() like that.

        Also added m_deletionHasBegun like RefCounted.

        * wtf/ThreadSafeRefCounted.h:
        (WTF::ThreadSafeRefCountedBase::ref const):
        (WTF::ThreadSafeRefCountedBase::hasOneRef const):
        (WTF::ThreadSafeRefCountedBase::derefBase const):

2019-10-11  Alex Christensen  <achristensen@webkit.org>

        Only use CFNetwork SPI for metrics where needed
        https://bugs.webkit.org/show_bug.cgi?id=202825

        Reviewed by Joseph Pecoraro.

        * wtf/Platform.h:

2019-10-11  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202819
        <rdar://problem/56164233>

        Reviewed by Anders Carlsson.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Jiewen Tan was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/Platform.h:

2019-10-11  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250945.

        Broke 18 Debug API tests

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250945

2019-10-11  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        MediaTime pretty printer can print if time is invalid
        https://bugs.webkit.org/show_bug.cgi?id=202735

        Reviewed by Eric Carlson.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toString const): Append ", invalid" if isInvalid().
        (WTF::MediaTime::toJSONObject const): Set boolean invalid to true
        when invalid.

2019-10-09  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202371
        <rdar://problem/55853960>

        Reviewed by Youenn Fablet.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Dean Jackson was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2019-10-09  Daniel Bates  <dabates@apple.com>

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Support using an OptionSet<> for the byte value portion of a CompactPointerTuple so that
        you can encode both a pointer and 8-bit bitmask in a type-safe way. Another benefit of
        supporting OptionSet<> is that we have a LLDB pretty-printer for it so this makes it easy
        to see the set flags in such a CompactPointerTuple.

        * wtf/CompactPointerTuple.h:

2019-10-09  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r250930.

        Broke watchOS Builds

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250930

2019-10-09  Daniel Bates  <dabates@apple.com>

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Support using an OptionSet<> for the byte value portion of a CompactPointerTuple so that
        you can encode both a pointer and 8-bit bitmask in a type-safe way. Another benefit of
        supporting OptionSet<> is that we have a LLDB pretty-printer for it so this makes it easy
        to see the set flags in such a CompactPointerTuple.

        * wtf/CompactPointerTuple.h:

2019-10-08  Robin Morisset  <rmorisset@apple.com>

        dataLogIf should be ALWAYS_INLINE
        https://bugs.webkit.org/show_bug.cgi?id=202703

        Reviewed by Saam Barati.

        We often have the following pattern:
        ```
        static constexpr bool verbose = false;
        ...
        dataLogLnIf(verbose, "Something is happening");
        ```
        To make sure that these are always properly eliminated I'd like to make dataLogIf/dataLogLnIf ALWAYS_INLINE.
        
        We may as well mark the branch as UNLIKELY too, for the cases where the condition comes from Options::verboseSomething() and is only known at runtime.

        * wtf/DataLog.h:
        (WTF::dataLogIf):
        (WTF::dataLogLnIf):

2019-10-07  Alexey Proskuryakov  <ap@apple.com>

        Build failure in WebHTMLView.mm with the public SDK (Xcode 11 and Mojave)
        https://bugs.webkit.org/show_bug.cgi?id=199705

        Patch by Dan Bernstein and Kenneth Russell.
        Reviewed by Alexey Proskuryakov.

        * wtf/Platform.h: Added HAVE_SUBVIEWS_IVAR_DECLARED_BY_SDK.

2019-10-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r250762.
        https://bugs.webkit.org/show_bug.cgi?id=202609

        Broke JSC tests by breaking refCount check in
        DropAllLocks::DropAllLocks (Requested by rniwa on #webkit).

        Reverted changeset:

        "Make a ThreadSafeRefCounted object safe to ref & deref inside
        its destructor"
        https://bugs.webkit.org/show_bug.cgi?id=201576
        https://trac.webkit.org/changeset/250762

2019-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix for macOS Catalina.

        * wtf/spi/darwin/SandboxSPI.h:

2019-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Make a ThreadSafeRefCounted object safe to ref & deref inside its destructor
        https://bugs.webkit.org/show_bug.cgi?id=201576

        Reviewed by Geoffrey Garen.

        This patch leaves m_refCount 1 inside the last deref call to ThreadSafeRefCounted
        such that ref'ing and deref'ing it again inside its destructor would never try
        to double delete the object.

        Also added m_deletionHasBegun like RefCounted.

        * wtf/ThreadSafeRefCounted.h:
        (WTF::ThreadSafeRefCountedBase::ref const):
        (WTF::ThreadSafeRefCountedBase::hasOneRef const):
        (WTF::ThreadSafeRefCountedBase::derefBase const):

2019-10-04  Heiko Becker  <heirecka@exherbo.org>

        Fix build with icu 65.1
        https://bugs.webkit.org/show_bug.cgi?id=202600

        Reviewed by Konstantin Tokarev.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::allCharactersInIDNScriptWhiteList):

2019-10-04  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250583.

        Broke multiple internal API tests

        Reverted changeset:

        "[JSC] Place VM* in TLS"
        https://bugs.webkit.org/show_bug.cgi?id=202391
        https://trac.webkit.org/changeset/250583

2019-10-03  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202549
        <rdar://problem/55967232>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0. 

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Michael Saboff was involved. These changes are
        isolated from other similar changes in order to facilitate the
        reviewing process.

        * wtf/spi/darwin/ProcessMemoryFootprint.h:

2019-10-03  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(249649): Unable to open local files in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=201798

        Reviewed by Brent Fulgham.

        Add HAVE_AUDIT_TOKEN and SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN defines.

        * wtf/Platform.h:

2019-10-02  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION (r245672): <select> dropdown with text-rendering: optimizeLegibility freezes Safari
        https://bugs.webkit.org/show_bug.cgi?id=202198

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2019-10-02  Mark Lam  <mark.lam@apple.com>

        DoubleToStringConverter::ToExponential() should null terminate its string.
        https://bugs.webkit.org/show_bug.cgi?id=202492
        <rdar://problem/55907708>

        Reviewed by Filip Pizlo.

        * wtf/dtoa/double-conversion.cc:
        - DoubleToStringConverter::DoubleToAscii() always produces a null terminated
          string.  Fixed the padding loop in DoubleToStringConverter::ToExponential()
          that follows it to also keep the null terminator.

        * wtf/dtoa/utils.h:
        (WTF::double_conversion::StringBuilder::AddSubstring):
        - An assertion in here was using strlen() which indicates that it expects a null
          terminator in the incoming string.  However, this requirement is too restrictive.
          The code does not actually depend on the string having a null terminator, only
          that a null terminator does not manifest before the nth character.  Changed
          the assertion to use strnlen() instead to reflect this.

2019-10-02  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Enable async scrolling at build-time for Nicosia-using ports
        https://bugs.webkit.org/show_bug.cgi?id=202397

        Reviewed by Carlos Garcia Campos.

        * wtf/Platform.h:
        Flip ENABLE_KINETIC_SCROLLING to 1 also for PlayStation and WPE ports
        when ASYNC_SCROLLING is enabled.
2019-10-01  Jonathan Bedard  <jbedard@apple.com>

        WebKitTestRunner: Many tests timeout on macOS Catalina
        https://bugs.webkit.org/show_bug.cgi?id=201616
        <rdar://problem/55200897>

        Reviewed by Alexey Proskuryakov.

        * wtf/Platform.h: USE_SOURCE_APPLICATION_AUDIT_DATA should only be enabled on
        builds which allow restricted entitlements.

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

        [JSC] Place VM* in TLS
        https://bugs.webkit.org/show_bug.cgi?id=202391

        Reviewed by Mark Lam.

        Changed FastTLS's key name from WTF_GC_TLC_KEY to WTF_VM_KEY.

        * wtf/FastTLS.h:

2019-10-01  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202386
        <rdar://problem/55863017>

        Reviewed by Eric Carlson.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Jer Noble was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/Platform.h:


2019-09-30  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=202384

        Rubber-stamped by Tim Horton.

        * wtf/PlatformMac.cmake:

2019-09-30  Mark Lam  <mark.lam@apple.com>

        Add some assertions to convertUTF8ToUTF16().
        https://bugs.webkit.org/show_bug.cgi?id=202356
        <rdar://problem/52846813>

        Reviewed by Filip Pizlo.

        * wtf/unicode/UTF8Conversion.cpp:
        (WTF::Unicode::convertUTF8ToUTF16):

2019-09-30  Guillaume Emont  <guijemont@igalia.com>

        Don't try to use backtrace() on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=202196

        Reviewed by Carlos Garcia Campos.

        backtrace() on mips seems to always return 1 on mips/glibc (I tried
        with buildroot, debian stable and debian testing, with and without
        libunwind), which renders it useless and breaks a RELEASE_ASSERT in
        StackTrace::captureStackTrace().

        * wtf/Platform.h:

2019-09-29  Keith Rollin  <krollin@apple.com>

        Address static analysis warning in ParkingLot.cpp: Access to field 'size' results in a dereference of a null pointer
        https://bugs.webkit.org/show_bug.cgi?id=202154
        <rdar://problem/55672103>

        Reviewed by Brent Fulgham.

        Static analysis reports the following:

            .../OpenSource/Source/WTF/wtf/ParkingLot.cpp:376:30: warning: Access to field 'size' results in a dereference of a null pointer (loaded from variable 'oldHashtable')
                RELEASE_ASSERT(newSize > oldHashtable->size);
                                         ^~~~~~~~~~~~~~~~~~

        This warning arises because earlier code checks to see if oldHashtable
        is NULL, leading the static analyzer to think that it *could* be NULL.
        However, even earlier code actually ensures that oldHashtable will not
        be NULL. Address this by removing the NULL check, and back it up with
        an ASSERT to ensure that it's not NULL.

        * wtf/ParkingLot.cpp:

2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        toExponential, toFixed, and toPrecision should allow arguments up to 100
        https://bugs.webkit.org/show_bug.cgi?id=199163

        Reviewed by Ross Kirsling.

        Increase size of NumberToStringBuffer: <21 digits> + decimal point + <100 digits> + null char = 123.
        Increase kMaxFixedDigitsAfterPoint to make Number.prototype.toFixed work with arguments up to 100.
        Also update other constants to their correct values.

        * wtf/dtoa.h:
        * wtf/dtoa/double-conversion.cc:
        * wtf/dtoa/double-conversion.h:

2019-09-25  Keith Rollin  <krollin@apple.com>

        Address static analysis warning in UTextProviderLatin1.cpp: Array access results in a null pointer dereference
        https://bugs.webkit.org/show_bug.cgi?id=202155
        <rdar://problem/55672422>

        Reviewed by Geoffrey Garen.

        Xcode's static analysis reports:

            .../OpenSource/Source/WTF/wtf/text/icu/UTextProviderLatin1.cpp:185:22: warning: Array access (from variable 'dest') results in a null pointer dereference
                    dest[length] = 0;
                    ~~~~         ^

        This error is due to an earlier "if" statement that caused the static
        analyzer to infer that "dest" could be NULL. It turns out that that
        previous check was in error, in that it tested for "!dest" when it
        should have tested for "dest". So this patch fixes that.

        Even with that error fixed, the static analyzer will still infer that
        "dest" could be NULL at the point shown above. Therefore, add a "dest"
        test just before the assignment.

        * wtf/text/icu/UTextProviderLatin1.cpp:
        (WTF::uTextLatin1Extract):

2019-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
        https://bugs.webkit.org/show_bug.cgi?id=202167
        <rdar://problem/55185021>

        Reviewed by Tim Horton.

        Declare DYLD_IOS_VERSION_13_2.

        * wtf/spi/darwin/dyldSPI.h:

2019-09-24  Keith Rollin  <krollin@apple.com>

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Reviewed by Alex Christensen.

        After refactoring and other code evolution, some platform checks have
        ended up looking like PLATFORM(MAC) || PLATFORM(IOS_FAMILY) (or
        vice-versa). These can be converted into the equivalent
        PLATFORM(COCOA). Where the instance occurs in a Cocoa-only file, the
        check can be removed altogether (along with any "#else" branches).

        * wtf/Platform.h:
        * wtf/text/TextBreakIterator.h:

2019-09-21  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy/ref churn of for loop variables in WTF/JavaScriptCore
        <https://webkit.org/b/202069>

        Reviewed by Mark Lam.

        Fix unwanted copying/ref churn of loop variables by making them
        const references.

        * wtf/AggregateLogger.h:
        (WTF::AggregateLogger::log const):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201967
        <rdar://problem/55504738>

        Reviewed by Andy Estes.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Andy Estes was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/FeatureDefines.h:

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201973
        <rdar://problem/55506966>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Chris Dumez was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * wtf/FeatureDefines.h:

2019-09-20  Paulo Matos  <pmatos@igalia.com>

        Implement memory monitoring functions for Linux OS
        https://bugs.webkit.org/show_bug.cgi?id=200391

        Reviewed by Žan Doberšek.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/linux/ProcessMemoryFootprint.h: Added.
        (ProcessMemoryFootprint::now):
        (ProcessMemoryFootprint::resetPeak):

2019-09-20  Libor Bukata  <libor.bukata@oracle.com>

        UI process crash when using callOnMainThread() after the main thread dispatcher has been destroyed
        https://bugs.webkit.org/show_bug.cgi?id=197266

        Reviewed by Carlos Garcia Campos.

        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):

2019-09-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr instead of const in symbol definitions that are obviously constexpr.
        https://bugs.webkit.org/show_bug.cgi?id=201879

        Rubber-stamped by Joseph Pecoraro.

        * wtf/Assertions.cpp:
        * wtf/AutomaticThread.cpp:
        * wtf/BitVector.h:
        * wtf/Bitmap.h:
        * wtf/BloomFilter.h:
        * wtf/Brigand.h:
        * wtf/CheckedArithmetic.h:
        * wtf/CrossThreadCopier.h:
        * wtf/CurrentTime.cpp:
        * wtf/DataLog.cpp:
        * wtf/DateMath.cpp:
        (WTF::daysFrom1970ToYear):
        * wtf/DeferrableRefCounted.h:
        * wtf/GetPtr.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/JSONValues.cpp:
        * wtf/JSONValues.h:
        * wtf/ListHashSet.h:
        * wtf/Lock.h:
        * wtf/LockAlgorithm.h:
        * wtf/LockAlgorithmInlines.h:
        (WTF::Hooks>::lockSlow):
        * wtf/Logger.h:
        * wtf/LoggerHelper.h:
        (WTF::LoggerHelper::childLogIdentifier const):
        * wtf/MainThread.cpp:
        * wtf/MetaAllocatorPtr.h:
        * wtf/MonotonicTime.h:
        * wtf/NaturalLoops.h:
        (WTF::NaturalLoops::NaturalLoops):
        * wtf/ObjectIdentifier.h:
        * wtf/RAMSize.cpp:
        * wtf/Ref.h:
        * wtf/RefPtr.h:
        * wtf/RetainPtr.h:
        * wtf/SchedulePair.h:
        * wtf/StackShot.h:
        * wtf/StdLibExtras.h:
        * wtf/TinyPtrSet.h:
        * wtf/URL.cpp:
        * wtf/URLHash.h:
        * wtf/URLParser.cpp:
        (WTF::URLParser::defaultPortForProtocol):
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        * wtf/WallTime.h:
        * wtf/WeakHashSet.h:
        * wtf/WordLock.h:
        * wtf/cocoa/CPUTimeCocoa.cpp:
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        * wtf/persistence/PersistentDecoder.h:
        * wtf/persistence/PersistentEncoder.h:
        * wtf/text/AtomStringHash.h:
        * wtf/text/CString.h:
        * wtf/text/StringBuilder.cpp:
        (WTF::expandedCapacity):
        * wtf/text/StringHash.h:
        * wtf/text/StringImpl.h:
        * wtf/text/StringToIntegerConversion.h:
        (WTF::toIntegralType):
        * wtf/text/SymbolRegistry.h:
        * wtf/text/TextStream.cpp:
        (WTF::hasFractions):
        * wtf/text/WTFString.h:
        * wtf/text/cocoa/TextBreakIteratorInternalICUCocoa.cpp:

2019-09-16  Alex Christensen  <achristensen@webkit.org>

        Remove "gopher" from list of special schemes in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=201852

        Reviewed by Simon Fraser.

        There is little meaningful content on gopher servers, and WebKit does not actually support gopher.
        This makes WebKit match the behavior of Gecko and goes along with a change proposed at
        https://github.com/whatwg/url/issues/342

        * wtf/URLParser.cpp:
        (WTF::URLParser::defaultPortForProtocol):
        (WTF::scheme):
        (WTF::URLParser::copyURLPartsUntil):
        (WTF::URLParser::parse):

2019-09-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Retire x86 32bit JIT support
        https://bugs.webkit.org/show_bug.cgi?id=201790

        Reviewed by Mark Lam.

        * wtf/Platform.h:

2019-09-13  Jonathan Bedard  <jbedard@apple.com>

        iOS 13: Some SPI targets 13.1
        https://bugs.webkit.org/show_bug.cgi?id=201777

        Reviewed by Alexey Proskuryakov.

        * wtf/Platform.h:

2019-09-12  Mark Lam  <mark.lam@apple.com>

        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        Add a source file that was missing so that Xcode can search its contents too.

        * WTF.xcodeproj/project.pbxproj:

2019-09-09  Tim Horton  <timothy_horton@apple.com>

        Clarify some macCatalyst feature flags
        https://bugs.webkit.org/show_bug.cgi?id=201619
        <rdar://problem/54615618>

        Reviewed by Megan Gardner.

        * wtf/Platform.h:
        We prefer specific flags over platform checks.

2019-09-07  David Quesada  <david_quesada@apple.com>

        REGRESSION(r248533): Unable to use WTF::RefCounted when building in a debug configuration against a non-debug WebKit
        https://bugs.webkit.org/show_bug.cgi?id=201585
        rdar://problem/55153369

        Reviewed by Chris Dumez.

        Export WTF::RefCountedBase::areThreadingChecksEnabledGlobally regardless of whether or not assertions
        are enabled for the WTF being built. This allows WebKit-based projects to use RefCounted for their own
        objects in a debug configuration without requiring a debug build of WebKit.

        * wtf/RefCounted.cpp:
        * wtf/RefCounted.h:

2019-09-07  Mark Lam  <mark.lam@apple.com>

        performJITMemcpy() source buffer should not be in the Gigacage.
        https://bugs.webkit.org/show_bug.cgi?id=201577
        <rdar://problem/55142606>

        Reviewed by Michael Saboff.

        * wtf/Gigacage.h:
        (Gigacage::contains):

2019-09-06  Mark Lam  <mark.lam@apple.com>

        Harden protection of the Gigacage Config parameters.
        https://bugs.webkit.org/show_bug.cgi?id=201570
        <rdar://problem/55134229>

        Reviewed by Saam Barati.

        Just renaming some function names here.

        * wtf/Gigacage.h:
        (Gigacage::forbidDisablingPrimitiveGigacage):
        (Gigacage::isDisablingPrimitiveGigacageForbidden):
        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled): Deleted.
        (Gigacage::isDisablingPrimitiveGigacageDisabled): Deleted.

2019-09-05  Mark Lam  <mark.lam@apple.com>

        Refactor the Gigacage code to require less pointer casting.
        https://bugs.webkit.org/show_bug.cgi?id=201521

        Reviewed by Saam Barati.

        Remove some unneeded stubs in WTF Gigacage.h.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:
        (Gigacage::name):
        (Gigacage::isEnabled):
        (Gigacage::basePtr): Deleted.
        (Gigacage::basePtrs): Deleted.

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Remove HAVE_CFNETWORK_WITH_AUTO_ADDED_HTTP_HEADER_SUPPRESSION_SUPPORT conditional
        https://bugs.webkit.org/show_bug.cgi?id=201280

        Reviewed by Youenn Fablet.

        * wtf/Platform.h:

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Remove HAVE_CFNETWORK_WITH_IGNORE_HSTS conditional
        https://bugs.webkit.org/show_bug.cgi?id=201279

        Reviewed by Darin Adler.

        * wtf/Platform.h:

2019-08-30  Alex Christensen  <achristensen@webkit.org>

        Fix non-iOS iOS-family and catalyst builds after r249019
        https://bugs.webkit.org/show_bug.cgi?id=200945

        * wtf/Platform.h:
        State that they have tls_protocol_version_t

2019-08-30  Simon Fraser  <simon.fraser@apple.com>

        Add system tracing points for compositing updates, and touch-event dispatching
        https://bugs.webkit.org/show_bug.cgi?id=201327

        Reviewed by Alex Christensen.

        * wtf/SystemTracing.h:

2019-08-30  Keith Rollin  <krollin@apple.com>

        Remove AppKitCompatibilityDeclarations.h
        https://bugs.webkit.org/show_bug.cgi?id=201283
        <rdar://problem/54822042>

        Reviewed by Alexey Proskuryakov.

        The two copies of these files -- on in WTF, one in MiniBrowser -- are
        empty and can be removed.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformMac.cmake:
        * wtf/mac/AppKitCompatibilityDeclarations.h: Removed.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove HAVE_PASSKIT_GRANULAR_ERRORS conditional
        https://bugs.webkit.org/show_bug.cgi?id=201278
        <rdar://problem/54821052>

        Reviewed by Alex Christensen.

        HAVE_PASSKIT_GRANULAR_ERRORS is always True, so remove the conditional
        tests, keeping the True branches and removing the False branches.

        * wtf/FeatureDefines.h:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove 32-bit macOS support
        https://bugs.webkit.org/show_bug.cgi?id=201282
        <rdar://problem/54821667>

        Reviewed by Anders Carlsson.

        WebKit doesn’t support 32-bit Mac any more, so remove checks and code
        for that platform.

        * wtf/Platform.h:

2019-08-29  Chris Dumez  <cdumez@apple.com>

        CompletionHandler default constructor does not initialize `m_wasConstructedOnMainThread`
        https://bugs.webkit.org/show_bug.cgi?id=201249

        Reviewed by Joseph Pecoraro and Alex Christensen.

        * wtf/CompletionHandler.h:
        (WTF::CompletionHandler<Out):

2019-08-29  Chris Dumez  <cdumez@apple.com>

        Crash when mach_port_deallocate() returns KERN_INVALID_NAME
        https://bugs.webkit.org/show_bug.cgi?id=201248
        <rdar://problem/54813890>

        Reviewed by Alex Christensen.

        * wtf/cocoa/MachSendRight.cpp:
        (WTF::deallocateSendRightSafely):

2019-08-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Regression(r248533) Assertion hit in isMainThread() for some clients using WTF because the main thread is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=201083
        <rdar://problem/54651993>

        Unreviewed build fox for Windows.

        * wtf/win/MainThreadWin.cpp:
        (WTF::isMainThreadInitialized): Added.

2019-08-23  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r249059

        * wtf/Platform.h:
        Make HAVE_NEAR_FIELD available only on iOS 13+ and macOS Catalina+.

2019-08-23  Chris Dumez  <cdumez@apple.com>

        Regression(r248533) Assertion hit in isMainThread() for some clients using WTF because the main thread is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=201083

        Reviewed by Alex Christensen.

        An assertion is hit in isMainThread() for some clients using WTF because the main thread is not initialized, since r248533.
        Clients can work around this by calling WTF::initializeMainThread() before using WTF but it seems unfortunate to force them
        to do so. I propose we disable the assertion until the main thread is initialized.

        * wtf/MainThread.h:
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::applyRefDerefThreadingCheck const):
        * wtf/cocoa/MainThreadCocoa.mm:
        (WTF::isMainThreadInitialized):
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::isMainThreadInitialized):

2019-08-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support NFC authenticators for iOS
        https://bugs.webkit.org/show_bug.cgi?id=188624
        <rdar://problem/43354214>

        Reviewed by Chris Dumez.

        * wtf/Platform.h:
        Add a feature flag for NearField.

2019-08-22  Andy Estes  <aestes@apple.com>

        [watchOS] Disable Content Filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=201047

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2019-08-22  Keith Rollin  <krollin@apple.com>

        Remove support for tvOS < 13.0
        https://bugs.webkit.org/show_bug.cgi?id=200963
        <rdar://problem/54541355>

        Reviewed by Tim Horton.

        Update conditionals that reference __TV_OS_VERSION_MIN_REQUIRED and
        __TV_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        130000. This means that expressions like "__TV_OS_VERSION_MIN_REQUIRED
        < 130000" are always False and "__TV_OS_VERSION_MIN_REQUIRED >=
        130000" are always True.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2019-08-22  Kate Cheney  <katherine_cheney@apple.com>

        Logging in FileSystem::deleteFile should avoid logging unsurprising errors
        https://bugs.webkit.org/show_bug.cgi?id=200831

        Reviewed by Chris Dumez.

        To avoid overlogging unnecessary information, added a check to avoid logging
        ENOENT (file not found) errors.

        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::deleteFile):

2019-08-22  Alex Christensen  <achristensen@webkit.org>

        Disable legacy TLS versions and add a temporary default to re-enable it
        https://bugs.webkit.org/show_bug.cgi?id=200945

        Reviewed by Brady Eidson.

        * wtf/Platform.h:

2019-08-22  Darin Adler  <darin@apple.com>

        Rename StringBuilder functions to avoid unclear "append uninitialized" terminology
        https://bugs.webkit.org/show_bug.cgi?id=201020

        Reviewed by Alex Christensen.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::allocateBuffer): Use std::memcpy instead of just memcpy.
        (WTF::StringBuilder::extendBufferForAppending): Renamed.
        (WTF::StringBuilder::extendBufferForAppendingWithoutOverflowCheck): Ditto.
        (WTF::StringBuilder::extendBufferForAppending8): Ditto.
        (WTF::StringBuilder::extendBufferForAppending16): Ditto.
        (WTF::StringBuilder::extendBufferForAppendingSlowPath): Ditto.
        (WTF::StringBuilder::appendCharacters): Updated for new names.
        * wtf/text/StringBuilder.h: Updated for new names.

2019-08-17  Darin Adler  <darin@apple.com>

        Use makeString and multi-argument StringBuilder::append instead of less efficient multiple appends
        https://bugs.webkit.org/show_bug.cgi?id=200862

        Reviewed by Ryosuke Niwa.

        * wtf/DateMath.cpp:
        (WTF::makeRFC2822DateString): Use one append instead of multiple.
        * wtf/JSONValues.cpp:
        (WTF::appendDoubleQuotedString): Ditto.

2019-08-21  Mark Lam  <mark.lam@apple.com>

        Fix infinite recursion in WTFCrashWithInfo() after r248930.
        https://bugs.webkit.org/show_bug.cgi?id=201022

        Reviewed by Saam Barati.

        * wtf/Assertions.cpp:
        (WTFCrashWithInfoImpl):
        (WTFCrashWithInfo): Deleted.
        * wtf/Assertions.h:
        (WTFCrashWithInfo):

2019-08-21  Chris Dumez  <cdumez@apple.com>

        registrableDomainsToRemoveWebsiteDataFor() does not need to return a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=200985

        Reviewed by John Wilander.

        Allow calling crossThreadCopy() on a std::pair<>.

        * wtf/CrossThreadCopier.h:

2019-08-21  Keith Rollin  <krollin@apple.com>

        Remove support for watchOS < 6.0
        https://bugs.webkit.org/show_bug.cgi?id=200937
        <rdar://problem/54524009>

        Reviewed by Darin Adler.

        Update conditionals that reference __WATCH_OS_VERSION_MIN_REQUIRED and
        __WATCH_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        60000. This means that expressions like
        "__WATCH_OS_VERSION_MIN_REQUIRED < 60000" are always False and
        "__WATCH_OS_VERSION_MIN_REQUIRED >= 60000" are always True.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2019-08-20  Mark Lam  <mark.lam@apple.com>

        Make it easier to pass pointers to WTFCrashWithInfo.
        https://bugs.webkit.org/show_bug.cgi?id=200960

        Reviewed by Saam Barati and Yusuke Suzuki.

        Now, we don't have to explicitly cast them to uint64_ts first.  The template
        wrappers will take care of it for us.

        * wtf/Assertions.h:
        (wtfCrashArg):
        (WTFCrashWithInfo):
        (WTF::isIntegralOrPointerType):
        (WTF::isIntegralType): Deleted.

2019-08-20  Saam Barati  <sbarati@apple.com>

        Unreviewed. Followup to r248903. It's not valid to remove
        hasOverflowed() checks from appendCharacters.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendCharacters):

2019-08-20  Darin Adler  <darin@apple.com>

        Variadic StringBuilder::append does not handle upconverting from 8-bit to 16-bit correctly
        https://bugs.webkit.org/show_bug.cgi?id=200921

        Reviewed by Saam Barati.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendUninitialized8): Renamed from
        appendUninitializedWithoutOverflowCheckForLChar and moved the length overflow
        check in here to cut down on unnecessary inlining and code size.
        (WTF::StringBuilder::appendUninitialized16): Renamed from
        appendUninitializedWithoutOverflowCheckForUChar, moved the length overflow check
        in here, and moved the necessary upconversion code from the const UChar* overload of
        the appendCharacters function.
        (WTF::StringBuilder::appendCharacters): Removed unneeded "length has already overflowed"
        check at the start of the function since the code in the function already handles that
        case correctly. Refactored the const UChar* overload to use the new appendCharacters16
        function so it can share more code with StringBuilder::appendFromAdapters.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendFromAdapters): Updated the function names for the
        two appendUninitialized functions, which now do a bit more than before. Removed the
        overflow check since the appendUninitialized8/16 functions now handle that; better to
        not make the inlined code larger to handle a failure case.

2019-08-19  Sam Weinig  <weinig@apple.com>

        [WHLSL] Make generated Metal code should be indented properly to ease reading while debugging
        https://bugs.webkit.org/show_bug.cgi?id=200870

        Reviewed by Saam Barati.

        Adds simple Indentation class to allow programatic indenting compatible with StringTypeAdapter
        aware functions/class (e.g. makeString and StringBuilder). Templatized on the number of spaces
        to indent.
        
        Also adds IndentationScope, which uses RAII to increment/decrement the indentation value.

        * wtf/text/StringConcatenate.h:
        (WTF::Indentation::operator++):
        (WTF::Indentation::operator--):
        (WTF::IndentationScope::IndentationScope):
        (WTF::IndentationScope::~IndentationScope):

2019-08-19  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix for macOS 10.14 after r248832.

        * wtf/Platform.h:

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, actual static_assert part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoff Garen.

        This is the last part of the split patch from https://bugs.webkit.org/show_bug.cgi?id=200620.
        Expose T::webkitFastMalloced type to perform static_assert in makeUnique.
        makeUnique and makeUniqueRef start performing static_assert check to ensure that the type T is FastMalloced / IsoHeaped.

        * wtf/FastMalloc.h:
        * wtf/StdLibExtras.h:
        (WTF::makeUnique):
        * wtf/UniqueRef.h:
        (WTF::makeUniqueRef):

2019-08-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoff Garen.

        This patch is second part of bug 200620 patch. I split I split it into three pieces to make roll-out easy.
        his part, we convert std::make_unique to WTF::makeUnique or WTF::makeUniqueWithoutFastMallocCheck.
        In the third patch, we will add a static_assert to makeUnique, which ensures the given class T is FastMalloced or IsoHeaped.

        This patch adds `WTF::makeUnique<T>` and `WTF::makeUniqueWithoutFastMallocCheck<T>` as drop-in replacement for `std::make_unique<T>`.
        `WTF::makeUnique<T>` has one additional `static_assert` check which ensures `T` FastMalloc / IsoHeap annotated. If it is not, the
        compile error happens.

        In this patch, I tried using this everywhere in WebKit as much as possible. And we found that surprisingly many classes are missing
        FastMalloc annotation and allocated from system-malloc. Using WTF::makeUnique enforces classes / structs to use FastMalloc.

        WTF::makeUniqueWithoutFastMallocCheck is offered for the corner cases. This is identical to std::make_unique. We use this for classes
        that are offered by non-WebKit code base, like, zlib. This clear name can make us easily find this allocation is intentionally done
        by system-malloc.

        We do not take the following direction, `WTF::makeUnique` automatically allocates FastMalloc even if FastMalloc annotation is not attached.
        Since default deleter is performing `delete` and this is not what we want for FastMalloced ones, we need to return
        std::unique_ptr<T, FastFreeDeleter> for T if T does not have FastMalloc-annotation. Automatically doing this sounds a bit dangerous.

            auto pointer = WTF::makeUnique<T>();
            // Super dangerous, but sometimes it is required...
            auto* rawPointer = pointer.release();
            // Passing rawPointer to somewhere, and
            delete rawPointer;

        The above one becomes invalid because pointer may start requiring non `delete` destroying function.
        In the above case, the correct way becomes the following.

            rawPointer->~T();
            fastFree(rawPointer);

        This looks non-intuitive. And having two ways to destroying objects (`delete` or the above one) can be error-prone.
        If we have WTF_MAKE_FAST_ALLOCATED for T, we do not need to care about this. "new" and "delete" operators are defined, and C++ way works.
        The simple invariant, "makeUnique just does `new` internally. And `delete` operator does `delete`. default deleter is just doing `delete`", is kept.

        While we need to annotate many classes with WTF_MAKE_FAST_ALLOCATED, it is one time cost when we add a class.
        And, by introducing `WTF::makeUnique<>`, we no longer forget adding this.

            makeUnique(...)
            static_assert(T is FastMalloced or IsoHeaped);
            return make_unique<T>(...)

        * benchmarks/LockFairnessTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * wtf/ConcurrentVector.h:
        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::taskRunLoop):
        * wtf/FilePrintStream.cpp:
        (WTF::FilePrintStream::open):
        * wtf/Function.h:
        (WTF::Function<Out):
        * wtf/HashTable.h:
        (WTF::KeyTraits>::HashTable):
        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        * wtf/StdLibExtras.h:
        (WTF::makeUnique):
        (WTF::makeUniqueWithoutFastMallocCheck):
        * wtf/StreamBuffer.h:
        (WTF::StreamBuffer::append):
        * wtf/UniqueRef.h:
        (WTF::makeUniqueRefWithoutFastMallocCheck):
        (WTF::makeUniqueRef):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::dispatchAfter):
        * wtf/text/StringView.cpp:
        (WTF::StringView::GraphemeClusters::Iterator::Iterator):

2019-08-18  Per Arne Vollan  <pvollan@apple.com>

        [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=200543
        <rdar://problem/49394015>

        Reviewed by Brent Fulgham.

        Add new SPI.
        
        * wtf/Platform.h:
        * wtf/spi/darwin/SandboxSPI.h:

2019-08-17  Darin Adler  <darin@apple.com>

        Tidy up checks to see if a character is in the Latin-1 range by using isLatin1 consistently
        https://bugs.webkit.org/show_bug.cgi?id=200861

        Reviewed by Ross Kirsling.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendCharacters): Use isLatin1 and also call append rather than
        calling appendCharacters, since it's the same thing, inlined, and removes the need for
        a local variable. Also tweaked the idiom of the code using memcpy.
        (WTF::StringBuilder::canShrink const): Reworded a comment.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append): Use isLatin1.

        * wtf/text/StringCommon.h:
        (WTF::isLatin1): Moved this function template here so it can be used here.
        (WTF::find): Use isLatin1.

        * wtf/text/StringImpl.h:
        (WTF::isLatin1): Deleted. Moved to StringCommon.h.
        (WTF::reverseFind): Use isLatin1.
        (WTF::isSpaceOrNewline): Ditto.

2019-08-17  Eric Liang  <ericliang@apple.com>

        Added HAVE_ACCESSIBILITY_BUNDLES_PATH
        https://bugs.webkit.org/show_bug.cgi?id=200367

        Reviewed by Darin Adler.

        * wtf/Platform.h:

2019-08-17  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::flexibleAppend(...) to StringBuilder::append(...)
        https://bugs.webkit.org/show_bug.cgi?id=200756

        Reviewed by Darin Adler.

        Now that there are no remaining multi-parameter or behavior changing overloads
        of StringBuilder::append(...), we can rename StringBuilder::flexibleAppend(...)
        to StringBuilder::append(...).
        
        This change leaves the existing single parameter overloads StringBuilder::append(...)
        for now, and since they have specify specific types, they will continue to be prefered
        in overload resolution. Once we have concluded the variadic StringBuilder::append(...)
        can provide the same performance as the single parameter variant, we can remove the
        single parameter variant.

        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::pathByAppendingComponents):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendFromAdapters):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::flexibleAppendFromAdapters): Deleted.
        (WTF::StringBuilder::flexibleAppend): Deleted.
        Update for rename from StringBuilder::flexibleAppend(...) to StringBuilder::append(...).

2019-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Don't use union to store NodeRareData* and RenderObject*
        https://bugs.webkit.org/show_bug.cgi?id=200744

        Reviewed by Antti Koivisto.

        Moved the static assert which requires the type of the object to which the pointer type points
        into setPointer so that we can use CompactPointerTuple<T*, U> as a member variable
        with just a forward declaration of T.

        * wtf/CompactPointerTuple.h:
        (WTF::CompactPointerTuple::setPointer):

2019-08-15  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Keep track of all the visibility candidates.
        https://bugs.webkit.org/show_bug.cgi?id=200777
        <rdar://problem/54356331>

        Reviewed by Simon Fraser.

        * wtf/WeakHashSet.h:

2019-08-15  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Enable CoreFoundation use if building for Apple target
        https://bugs.webkit.org/show_bug.cgi?id=200799

        Reviewed by Alex Christensen.

        * wtf/PlatformFTW.cmake: Add missing files.

2019-08-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r248440.
        https://bugs.webkit.org/show_bug.cgi?id=200772

        Introduced regressions related to loading of local files.
        (Requested by perarne on #webkit).

        Reverted changeset:

        "[Mac] Use the PID of the WebContent process when issuing
        local file read sandbox extensions"
        https://bugs.webkit.org/show_bug.cgi?id=200543
        https://trac.webkit.org/changeset/248440

2019-08-14  Kate Cheney  <katherine_cheney@apple.com>

        FileSystem::deleteFile should log error status (178347)
        https://bugs.webkit.org/show_bug.cgi?id=178347

        Reviewed by Brent Fulgham.

        I added logging to the FileSystem::deleteFile function so that the debugger will
        be able to see the associated errno string and better understand the reason for an
        unlink failure or will know if the fileSystemRepresentation call was not
        successful (or returned null).

        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::deleteFile):

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:
        * wtf/mac/AppKitCompatibilityDeclarations.h:
        * wtf/spi/darwin/SandboxSPI.h:

2019-08-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Less contended MetaAllocator
        https://bugs.webkit.org/show_bug.cgi?id=200278

        Reviewed by Mark Lam.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/MetaAllocator.h:

2019-08-14  Samuel Groß  <saelo@google.com>

        [JSCOnly] JSCOnly port doesn't build on macOS
        https://bugs.webkit.org/show_bug.cgi?id=200667

        spi/darwin/ProcessMemoryFootprint.h is required by jsc.cpp so we add it to the WTF_PUBLIC_HEADERS.

        Reviewed by Alex Christensen.

        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:

2019-08-13  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32) to avoid accidental change in behavior when replacing append with flexibleAppend
        https://bugs.webkit.org/show_bug.cgi?id=200675

        Reviewed by Darin Adler.

        When we switch StringBuilder::append(...) to be based on the StringConcatenate/makeString flexibleAppend 
        implementation, if we don't change anything, the behavior of StringBuilder::append(UChar32) will go from 
        appending a character to appending a stringified number.

        To work around this, we can rename StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32) 
        and update all the call sites.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendCharacter):
        Renamed StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32).

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::decodeFromFilename):
        Update for new name.

2019-08-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for Windows
        https://bugs.webkit.org/show_bug.cgi?id=200611

        * wtf/win/GDIObject.h:

2019-08-12  Takashi Komori  <Takashi.Komori@sony.com>

        [WTF] Thread::removeFromThreadGroup leaks weak pointers.
        https://bugs.webkit.org/show_bug.cgi?id=199857

        Reviewed by Yusuke Suzuki.

        Fix leaking of ThreadGroup's weak pointers.

        Tests: WTF.ThreadGroupRemove API tests

        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        (WTF::Thread::addToThreadGroup):
        (WTF::Thread::removeFromThreadGroup):
        (WTF::Thread::numberOfThreadGroups):
        * wtf/Threading.h:

2019-08-12  Sam Weinig  <weinig@apple.com>

        Replace multiparameter overloads of append() in StringBuilder as a first step toward standardizinging on the flexibleAppend() implementation
        https://bugs.webkit.org/show_bug.cgi?id=200614

        Reviewed by Darin Adler.

        Renames StringBuilder::append(const LChar*, unsigned), StringBuilder::append(const UChar*, unsigned) and 
        StringBuilder::append(const char*, unsigned) to StringBuilder::appendCharacters(...).
        
        Renames StringBuilder::append(const String& string, unsigned offset, unsigned length) to 
        StringBuilder::appendSubstring(...).

        * wtf/HexNumber.h:
        (WTF::appendUnsignedAsHexFixedSize):
        Add overload that explicitly takes a StringBuilder to work around rename from append to appendCharacters.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendCharacters):
        (WTF::StringBuilder::append):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendCharacters):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::appendSubstring):
        (WTF::StringBuilder::appendLiteral):
        (WTF::IntegerToStringConversionTrait<StringBuilder>::flush):
        Update for renames.

2019-08-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF][JSC] Make JSC and WTF aggressively-fast-malloced
        https://bugs.webkit.org/show_bug.cgi?id=200611

        Reviewed by Saam Barati.

        WTF has many data structures, in particular, containers. And these containers can be allocated like `std::make_unique<Container>()`.
        Without WTF_MAKE_FAST_ALLOCATED, this container itself is allocated from the system malloc. This patch attaches WTF_MAKE_FAST_ALLOCATED
        more aggressively not to allocate them from the system malloc. And we add some `final` to containers and classes that would be never inherited.

        * wtf/Assertions.cpp:
        * wtf/Atomics.h:
        * wtf/AutodrainedPool.h:
        * wtf/Bag.h:
        (WTF::Bag::Bag): Deleted.
        (WTF::Bag::~Bag): Deleted.
        (WTF::Bag::clear): Deleted.
        (WTF::Bag::add): Deleted.
        (WTF::Bag::iterator::iterator): Deleted.
        (WTF::Bag::iterator::operator! const): Deleted.
        (WTF::Bag::iterator::operator* const): Deleted.
        (WTF::Bag::iterator::operator++): Deleted.
        (WTF::Bag::iterator::operator== const): Deleted.
        (WTF::Bag::iterator::operator!= const): Deleted.
        (WTF::Bag::begin): Deleted.
        (WTF::Bag::begin const): Deleted.
        (WTF::Bag::end const): Deleted.
        (WTF::Bag::isEmpty const): Deleted.
        (WTF::Bag::unwrappedHead const): Deleted.
        * wtf/BitVector.h:
        (WTF::BitVector::BitVector): Deleted.
        (WTF::BitVector::~BitVector): Deleted.
        (WTF::BitVector::operator=): Deleted.
        (WTF::BitVector::size const): Deleted.
        (WTF::BitVector::ensureSize): Deleted.
        (WTF::BitVector::quickGet const): Deleted.
        (WTF::BitVector::quickSet): Deleted.
        (WTF::BitVector::quickClear): Deleted.
        (WTF::BitVector::get const): Deleted.
        (WTF::BitVector::contains const): Deleted.
        (WTF::BitVector::set): Deleted.
        (WTF::BitVector::add): Deleted.
        (WTF::BitVector::ensureSizeAndSet): Deleted.
        (WTF::BitVector::clear): Deleted.
        (WTF::BitVector::remove): Deleted.
        (WTF::BitVector::merge): Deleted.
        (WTF::BitVector::filter): Deleted.
        (WTF::BitVector::exclude): Deleted.
        (WTF::BitVector::bitCount const): Deleted.
        (WTF::BitVector::isEmpty const): Deleted.
        (WTF::BitVector::findBit const): Deleted.
        (WTF::BitVector::isEmptyValue const): Deleted.
        (WTF::BitVector::isDeletedValue const): Deleted.
        (WTF::BitVector::isEmptyOrDeletedValue const): Deleted.
        (WTF::BitVector::operator== const): Deleted.
        (WTF::BitVector::hash const): Deleted.
        (WTF::BitVector::iterator::iterator): Deleted.
        (WTF::BitVector::iterator::operator* const): Deleted.
        (WTF::BitVector::iterator::operator++): Deleted.
        (WTF::BitVector::iterator::isAtEnd const): Deleted.
        (WTF::BitVector::iterator::operator== const): Deleted.
        (WTF::BitVector::iterator::operator!= const): Deleted.
        (WTF::BitVector::begin const): Deleted.
        (WTF::BitVector::end const): Deleted.
        (WTF::BitVector::bitsInPointer): Deleted.
        (WTF::BitVector::maxInlineBits): Deleted.
        (WTF::BitVector::byteCount): Deleted.
        (WTF::BitVector::makeInlineBits): Deleted.
        (WTF::BitVector::cleanseInlineBits): Deleted.
        (WTF::BitVector::bitCount): Deleted.
        (WTF::BitVector::findBitFast const): Deleted.
        (WTF::BitVector::findBitSimple const): Deleted.
        (WTF::BitVector::OutOfLineBits::numBits const): Deleted.
        (WTF::BitVector::OutOfLineBits::numWords const): Deleted.
        (WTF::BitVector::OutOfLineBits::bits): Deleted.
        (WTF::BitVector::OutOfLineBits::bits const): Deleted.
        (WTF::BitVector::OutOfLineBits::OutOfLineBits): Deleted.
        (WTF::BitVector::isInline const): Deleted.
        (WTF::BitVector::outOfLineBits const): Deleted.
        (WTF::BitVector::outOfLineBits): Deleted.
        (WTF::BitVector::bits): Deleted.
        (WTF::BitVector::bits const): Deleted.
        * wtf/Bitmap.h:
        (WTF::Bitmap::size): Deleted.
        (WTF::Bitmap::iterator::iterator): Deleted.
        (WTF::Bitmap::iterator::operator* const): Deleted.
        (WTF::Bitmap::iterator::operator++): Deleted.
        (WTF::Bitmap::iterator::operator== const): Deleted.
        (WTF::Bitmap::iterator::operator!= const): Deleted.
        (WTF::Bitmap::begin const): Deleted.
        (WTF::Bitmap::end const): Deleted.
        * wtf/Box.h:
        * wtf/BumpPointerAllocator.h:
        * wtf/CPUTime.h:
        * wtf/CheckedBoolean.h:
        * wtf/CommaPrinter.h:
        (WTF::CommaPrinter::CommaPrinter): Deleted.
        (WTF::CommaPrinter::dump const): Deleted.
        (WTF::CommaPrinter::didPrint const): Deleted.
        * wtf/CompactPointerTuple.h:
        (WTF::CompactPointerTuple::encodeType): Deleted.
        (WTF::CompactPointerTuple::decodeType): Deleted.
        (WTF::CompactPointerTuple::CompactPointerTuple): Deleted.
        (WTF::CompactPointerTuple::pointer const): Deleted.
        (WTF::CompactPointerTuple::setPointer): Deleted.
        (WTF::CompactPointerTuple::type const): Deleted.
        (WTF::CompactPointerTuple::setType): Deleted.
        * wtf/CompilationThread.h:
        (WTF::CompilationScope::CompilationScope): Deleted.
        (WTF::CompilationScope::~CompilationScope): Deleted.
        (WTF::CompilationScope::leaveEarly): Deleted.
        * wtf/CompletionHandler.h:
        (WTF::CompletionHandler<Out):
        (WTF::Detail::CallableWrapper<CompletionHandler<Out):
        (WTF::CompletionHandlerCallingScope::CompletionHandlerCallingScope): Deleted.
        (WTF::CompletionHandlerCallingScope::~CompletionHandlerCallingScope): Deleted.
        (WTF::CompletionHandlerCallingScope::CompletionHandler<void): Deleted.
        * wtf/ConcurrentBuffer.h:
        (WTF::ConcurrentBuffer::ConcurrentBuffer): Deleted.
        (WTF::ConcurrentBuffer::~ConcurrentBuffer): Deleted.
        (WTF::ConcurrentBuffer::growExact): Deleted.
        (WTF::ConcurrentBuffer::grow): Deleted.
        (WTF::ConcurrentBuffer::array const): Deleted.
        (WTF::ConcurrentBuffer::operator[]): Deleted.
        (WTF::ConcurrentBuffer::operator[] const): Deleted.
        (WTF::ConcurrentBuffer::createArray): Deleted.
        * wtf/ConcurrentPtrHashSet.h:
        (WTF::ConcurrentPtrHashSet::contains): Deleted.
        (WTF::ConcurrentPtrHashSet::add): Deleted.
        (WTF::ConcurrentPtrHashSet::size const): Deleted.
        (WTF::ConcurrentPtrHashSet::Table::maxLoad const): Deleted.
        (WTF::ConcurrentPtrHashSet::hash): Deleted.
        (WTF::ConcurrentPtrHashSet::cast): Deleted.
        (WTF::ConcurrentPtrHashSet::containsImpl const): Deleted.
        (WTF::ConcurrentPtrHashSet::addImpl): Deleted.
        * wtf/ConcurrentVector.h:
        (WTF::ConcurrentVector::~ConcurrentVector): Deleted.
        (WTF::ConcurrentVector::size const): Deleted.
        (WTF::ConcurrentVector::isEmpty const): Deleted.
        (WTF::ConcurrentVector::at): Deleted.
        (WTF::ConcurrentVector::at const): Deleted.
        (WTF::ConcurrentVector::operator[]): Deleted.
        (WTF::ConcurrentVector::operator[] const): Deleted.
        (WTF::ConcurrentVector::first): Deleted.
        (WTF::ConcurrentVector::first const): Deleted.
        (WTF::ConcurrentVector::last): Deleted.
        (WTF::ConcurrentVector::last const): Deleted.
        (WTF::ConcurrentVector::takeLast): Deleted.
        (WTF::ConcurrentVector::append): Deleted.
        (WTF::ConcurrentVector::alloc): Deleted.
        (WTF::ConcurrentVector::removeLast): Deleted.
        (WTF::ConcurrentVector::grow): Deleted.
        (WTF::ConcurrentVector::begin): Deleted.
        (WTF::ConcurrentVector::end): Deleted.
        (WTF::ConcurrentVector::segmentExistsFor): Deleted.
        (WTF::ConcurrentVector::segmentFor): Deleted.
        (WTF::ConcurrentVector::subscriptFor): Deleted.
        (WTF::ConcurrentVector::ensureSegmentsFor): Deleted.
        (WTF::ConcurrentVector::ensureSegment): Deleted.
        (WTF::ConcurrentVector::allocateSegment): Deleted.
        * wtf/Condition.h:
        (WTF::Condition::waitUntil): Deleted.
        (WTF::Condition::waitFor): Deleted.
        (WTF::Condition::wait): Deleted.
        (WTF::Condition::notifyOne): Deleted.
        (WTF::Condition::notifyAll): Deleted.
        * wtf/CountingLock.h:
        (WTF::CountingLock::LockHooks::lockHook): Deleted.
        (WTF::CountingLock::LockHooks::unlockHook): Deleted.
        (WTF::CountingLock::LockHooks::parkHook): Deleted.
        (WTF::CountingLock::LockHooks::handoffHook): Deleted.
        (WTF::CountingLock::tryLock): Deleted.
        (WTF::CountingLock::lock): Deleted.
        (WTF::CountingLock::unlock): Deleted.
        (WTF::CountingLock::isHeld const): Deleted.
        (WTF::CountingLock::isLocked const): Deleted.
        (WTF::CountingLock::Count::operator bool const): Deleted.
        (WTF::CountingLock::Count::operator== const): Deleted.
        (WTF::CountingLock::Count::operator!= const): Deleted.
        (WTF::CountingLock::tryOptimisticRead): Deleted.
        (WTF::CountingLock::validate): Deleted.
        (WTF::CountingLock::doOptimizedRead): Deleted.
        (WTF::CountingLock::tryOptimisticFencelessRead): Deleted.
        (WTF::CountingLock::fencelessValidate): Deleted.
        (WTF::CountingLock::doOptimizedFencelessRead): Deleted.
        (WTF::CountingLock::getCount): Deleted.
        * wtf/CrossThreadQueue.h:
        * wtf/CrossThreadTask.h:
        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/DataMutex.h:
        * wtf/DateMath.h:
        * wtf/Deque.h:
        (WTF::Deque::size const): Deleted.
        (WTF::Deque::isEmpty const): Deleted.
        (WTF::Deque::begin): Deleted.
        (WTF::Deque::end): Deleted.
        (WTF::Deque::begin const): Deleted.
        (WTF::Deque::end const): Deleted.
        (WTF::Deque::rbegin): Deleted.
        (WTF::Deque::rend): Deleted.
        (WTF::Deque::rbegin const): Deleted.
        (WTF::Deque::rend const): Deleted.
        (WTF::Deque::first): Deleted.
        (WTF::Deque::first const): Deleted.
        (WTF::Deque::last): Deleted.
        (WTF::Deque::last const): Deleted.
        (WTF::Deque::append): Deleted.
        * wtf/Dominators.h:
        * wtf/DoublyLinkedList.h:
        * wtf/Expected.h:
        * wtf/FastBitVector.h:
        * wtf/FileMetadata.h:
        * wtf/FileSystem.h:
        * wtf/GraphNodeWorklist.h:
        * wtf/GregorianDateTime.h:
        (WTF::GregorianDateTime::GregorianDateTime): Deleted.
        (WTF::GregorianDateTime::year const): Deleted.
        (WTF::GregorianDateTime::month const): Deleted.
        (WTF::GregorianDateTime::yearDay const): Deleted.
        (WTF::GregorianDateTime::monthDay const): Deleted.
        (WTF::GregorianDateTime::weekDay const): Deleted.
        (WTF::GregorianDateTime::hour const): Deleted.
        (WTF::GregorianDateTime::minute const): Deleted.
        (WTF::GregorianDateTime::second const): Deleted.
        (WTF::GregorianDateTime::utcOffset const): Deleted.
        (WTF::GregorianDateTime::isDST const): Deleted.
        (WTF::GregorianDateTime::setYear): Deleted.
        (WTF::GregorianDateTime::setMonth): Deleted.
        (WTF::GregorianDateTime::setYearDay): Deleted.
        (WTF::GregorianDateTime::setMonthDay): Deleted.
        (WTF::GregorianDateTime::setWeekDay): Deleted.
        (WTF::GregorianDateTime::setHour): Deleted.
        (WTF::GregorianDateTime::setMinute): Deleted.
        (WTF::GregorianDateTime::setSecond): Deleted.
        (WTF::GregorianDateTime::setUtcOffset): Deleted.
        (WTF::GregorianDateTime::setIsDST): Deleted.
        (WTF::GregorianDateTime::operator tm const): Deleted.
        (WTF::GregorianDateTime::copyFrom): Deleted.
        * wtf/HashTable.h:
        * wtf/Hasher.h:
        * wtf/HexNumber.h:
        * wtf/Indenter.h:
        * wtf/IndexMap.h:
        * wtf/IndexSet.h:
        * wtf/IndexSparseSet.h:
        * wtf/IndexedContainerIterator.h:
        * wtf/Insertion.h:
        * wtf/IteratorAdaptors.h:
        * wtf/IteratorRange.h:
        * wtf/KeyValuePair.h:
        * wtf/ListHashSet.h:
        (WTF::ListHashSet::begin): Deleted.
        (WTF::ListHashSet::end): Deleted.
        (WTF::ListHashSet::begin const): Deleted.
        (WTF::ListHashSet::end const): Deleted.
        (WTF::ListHashSet::random): Deleted.
        (WTF::ListHashSet::random const): Deleted.
        (WTF::ListHashSet::rbegin): Deleted.
        (WTF::ListHashSet::rend): Deleted.
        (WTF::ListHashSet::rbegin const): Deleted.
        (WTF::ListHashSet::rend const): Deleted.
        * wtf/Liveness.h:
        * wtf/LocklessBag.h:
        (WTF::LocklessBag::LocklessBag): Deleted.
        (WTF::LocklessBag::add): Deleted.
        (WTF::LocklessBag::iterate): Deleted.
        (WTF::LocklessBag::consumeAll): Deleted.
        (WTF::LocklessBag::consumeAllWithNode): Deleted.
        (WTF::LocklessBag::~LocklessBag): Deleted.
        * wtf/LoggingHashID.h:
        * wtf/MD5.h:
        * wtf/MachSendRight.h:
        * wtf/MainThreadData.h:
        * wtf/Markable.h:
        * wtf/MediaTime.h:
        * wtf/MemoryPressureHandler.h:
        * wtf/MessageQueue.h:
        (WTF::MessageQueue::MessageQueue): Deleted.
        * wtf/MetaAllocator.h:
        * wtf/MonotonicTime.h:
        (WTF::MonotonicTime::MonotonicTime): Deleted.
        (WTF::MonotonicTime::fromRawSeconds): Deleted.
        (WTF::MonotonicTime::infinity): Deleted.
        (WTF::MonotonicTime::nan): Deleted.
        (WTF::MonotonicTime::secondsSinceEpoch const): Deleted.
        (WTF::MonotonicTime::approximateMonotonicTime const): Deleted.
        (WTF::MonotonicTime::operator bool const): Deleted.
        (WTF::MonotonicTime::operator+ const): Deleted.
        (WTF::MonotonicTime::operator- const): Deleted.
        (WTF::MonotonicTime::operator% const): Deleted.
        (WTF::MonotonicTime::operator+=): Deleted.
        (WTF::MonotonicTime::operator-=): Deleted.
        (WTF::MonotonicTime::operator== const): Deleted.
        (WTF::MonotonicTime::operator!= const): Deleted.
        (WTF::MonotonicTime::operator< const): Deleted.
        (WTF::MonotonicTime::operator> const): Deleted.
        (WTF::MonotonicTime::operator<= const): Deleted.
        (WTF::MonotonicTime::operator>= const): Deleted.
        (WTF::MonotonicTime::isolatedCopy const): Deleted.
        (WTF::MonotonicTime::encode const): Deleted.
        (WTF::MonotonicTime::decode): Deleted.
        * wtf/NaturalLoops.h:
        * wtf/NoLock.h:
        * wtf/OSAllocator.h:
        * wtf/OptionSet.h:
        * wtf/Optional.h:
        * wtf/OrderMaker.h:
        * wtf/Packed.h:
        (WTF::alignof):
        * wtf/PackedIntVector.h:
        (WTF::PackedIntVector::PackedIntVector): Deleted.
        (WTF::PackedIntVector::operator=): Deleted.
        (WTF::PackedIntVector::size const): Deleted.
        (WTF::PackedIntVector::ensureSize): Deleted.
        (WTF::PackedIntVector::resize): Deleted.
        (WTF::PackedIntVector::clearAll): Deleted.
        (WTF::PackedIntVector::get const): Deleted.
        (WTF::PackedIntVector::set): Deleted.
        (WTF::PackedIntVector::mask): Deleted.
        * wtf/PageBlock.h:
        * wtf/ParallelJobsOpenMP.h:
        * wtf/ParkingLot.h:
        * wtf/PriorityQueue.h:
        (WTF::PriorityQueue::size const): Deleted.
        (WTF::PriorityQueue::isEmpty const): Deleted.
        (WTF::PriorityQueue::enqueue): Deleted.
        (WTF::PriorityQueue::peek const): Deleted.
        (WTF::PriorityQueue::dequeue): Deleted.
        (WTF::PriorityQueue::decreaseKey): Deleted.
        (WTF::PriorityQueue::increaseKey): Deleted.
        (WTF::PriorityQueue::begin const): Deleted.
        (WTF::PriorityQueue::end const): Deleted.
        (WTF::PriorityQueue::isValidHeap const): Deleted.
        (WTF::PriorityQueue::parentOf): Deleted.
        (WTF::PriorityQueue::leftChildOf): Deleted.
        (WTF::PriorityQueue::rightChildOf): Deleted.
        (WTF::PriorityQueue::siftUp): Deleted.
        (WTF::PriorityQueue::siftDown): Deleted.
        * wtf/RandomDevice.h:
        * wtf/Range.h:
        * wtf/RangeSet.h:
        (WTF::RangeSet::RangeSet): Deleted.
        (WTF::RangeSet::~RangeSet): Deleted.
        (WTF::RangeSet::add): Deleted.
        (WTF::RangeSet::contains const): Deleted.
        (WTF::RangeSet::overlaps const): Deleted.
        (WTF::RangeSet::clear): Deleted.
        (WTF::RangeSet::dump const): Deleted.
        (WTF::RangeSet::dumpRaw const): Deleted.
        (WTF::RangeSet::begin const): Deleted.
        (WTF::RangeSet::end const): Deleted.
        (WTF::RangeSet::addAll): Deleted.
        (WTF::RangeSet::compact): Deleted.
        (WTF::RangeSet::overlapsNonEmpty): Deleted.
        (WTF::RangeSet::subsumesNonEmpty): Deleted.
        (WTF::RangeSet::findRange const): Deleted.
        * wtf/RecursableLambda.h:
        * wtf/RedBlackTree.h:
        (WTF::RedBlackTree::Node::successor const): Deleted.
        (WTF::RedBlackTree::Node::predecessor const): Deleted.
        (WTF::RedBlackTree::Node::successor): Deleted.
        (WTF::RedBlackTree::Node::predecessor): Deleted.
        (WTF::RedBlackTree::Node::reset): Deleted.
        (WTF::RedBlackTree::Node::parent const): Deleted.
        (WTF::RedBlackTree::Node::setParent): Deleted.
        (WTF::RedBlackTree::Node::left const): Deleted.
        (WTF::RedBlackTree::Node::setLeft): Deleted.
        (WTF::RedBlackTree::Node::right const): Deleted.
        (WTF::RedBlackTree::Node::setRight): Deleted.
        (WTF::RedBlackTree::Node::color const): Deleted.
        (WTF::RedBlackTree::Node::setColor): Deleted.
        (WTF::RedBlackTree::RedBlackTree): Deleted.
        (WTF::RedBlackTree::insert): Deleted.
        (WTF::RedBlackTree::remove): Deleted.
        (WTF::RedBlackTree::findExact const): Deleted.
        (WTF::RedBlackTree::findLeastGreaterThanOrEqual const): Deleted.
        (WTF::RedBlackTree::findGreatestLessThanOrEqual const): Deleted.
        (WTF::RedBlackTree::first const): Deleted.
        (WTF::RedBlackTree::last const): Deleted.
        (WTF::RedBlackTree::size): Deleted.
        (WTF::RedBlackTree::isEmpty): Deleted.
        (WTF::RedBlackTree::treeMinimum): Deleted.
        (WTF::RedBlackTree::treeMaximum): Deleted.
        (WTF::RedBlackTree::treeInsert): Deleted.
        (WTF::RedBlackTree::leftRotate): Deleted.
        (WTF::RedBlackTree::rightRotate): Deleted.
        (WTF::RedBlackTree::removeFixup): Deleted.
        * wtf/ResourceUsage.h:
        * wtf/RunLoop.cpp:
        * wtf/RunLoopTimer.h:
        * wtf/SHA1.h:
        * wtf/Seconds.h:
        (WTF::Seconds::Seconds): Deleted.
        (WTF::Seconds::value const): Deleted.
        (WTF::Seconds::minutes const): Deleted.
        (WTF::Seconds::seconds const): Deleted.
        (WTF::Seconds::milliseconds const): Deleted.
        (WTF::Seconds::microseconds const): Deleted.
        (WTF::Seconds::nanoseconds const): Deleted.
        (WTF::Seconds::minutesAs const): Deleted.
        (WTF::Seconds::secondsAs const): Deleted.
        (WTF::Seconds::millisecondsAs const): Deleted.
        (WTF::Seconds::microsecondsAs const): Deleted.
        (WTF::Seconds::nanosecondsAs const): Deleted.
        (WTF::Seconds::fromMinutes): Deleted.
        (WTF::Seconds::fromHours): Deleted.
        (WTF::Seconds::fromMilliseconds): Deleted.
        (WTF::Seconds::fromMicroseconds): Deleted.
        (WTF::Seconds::fromNanoseconds): Deleted.
        (WTF::Seconds::infinity): Deleted.
        (WTF::Seconds::nan): Deleted.
        (WTF::Seconds::operator bool const): Deleted.
        (WTF::Seconds::operator+ const): Deleted.
        (WTF::Seconds::operator- const): Deleted.
        (WTF::Seconds::operator* const): Deleted.
        (WTF::Seconds::operator/ const): Deleted.
        (WTF::Seconds::operator% const): Deleted.
        (WTF::Seconds::operator+=): Deleted.
        (WTF::Seconds::operator-=): Deleted.
        (WTF::Seconds::operator*=): Deleted.
        (WTF::Seconds::operator/=): Deleted.
        (WTF::Seconds::operator%=): Deleted.
        (WTF::Seconds::operator== const): Deleted.
        (WTF::Seconds::operator!= const): Deleted.
        (WTF::Seconds::operator< const): Deleted.
        (WTF::Seconds::operator> const): Deleted.
        (WTF::Seconds::operator<= const): Deleted.
        (WTF::Seconds::operator>= const): Deleted.
        (WTF::Seconds::isolatedCopy const): Deleted.
        (WTF::Seconds::encode const): Deleted.
        (WTF::Seconds::decode): Deleted.
        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::~SegmentedVector): Deleted.
        (WTF::SegmentedVector::size const): Deleted.
        (WTF::SegmentedVector::isEmpty const): Deleted.
        (WTF::SegmentedVector::at): Deleted.
        (WTF::SegmentedVector::at const): Deleted.
        (WTF::SegmentedVector::operator[]): Deleted.
        (WTF::SegmentedVector::operator[] const): Deleted.
        (WTF::SegmentedVector::first): Deleted.
        (WTF::SegmentedVector::first const): Deleted.
        (WTF::SegmentedVector::last): Deleted.
        (WTF::SegmentedVector::last const): Deleted.
        (WTF::SegmentedVector::takeLast): Deleted.
        (WTF::SegmentedVector::append): Deleted.
        (WTF::SegmentedVector::alloc): Deleted.
        (WTF::SegmentedVector::removeLast): Deleted.
        (WTF::SegmentedVector::grow): Deleted.
        (WTF::SegmentedVector::clear): Deleted.
        (WTF::SegmentedVector::begin): Deleted.
        (WTF::SegmentedVector::end): Deleted.
        (WTF::SegmentedVector::shrinkToFit): Deleted.
        (WTF::SegmentedVector::deleteAllSegments): Deleted.
        (WTF::SegmentedVector::segmentExistsFor): Deleted.
        (WTF::SegmentedVector::segmentFor): Deleted.
        (WTF::SegmentedVector::subscriptFor): Deleted.
        (WTF::SegmentedVector::ensureSegmentsFor): Deleted.
        (WTF::SegmentedVector::ensureSegment): Deleted.
        (WTF::SegmentedVector::allocateSegment): Deleted.
        * wtf/SetForScope.h:
        * wtf/SingleRootGraph.h:
        * wtf/SinglyLinkedList.h:
        * wtf/SmallPtrSet.h:
        * wtf/SpanningTree.h:
        * wtf/Spectrum.h:
        * wtf/StackBounds.h:
        * wtf/StackShot.h:
        * wtf/StackShotProfiler.h:
        * wtf/StackStats.h:
        * wtf/StackTrace.h:
        * wtf/StreamBuffer.h:
        * wtf/SynchronizedFixedQueue.h:
        (WTF::SynchronizedFixedQueue::create): Deleted.
        (WTF::SynchronizedFixedQueue::open): Deleted.
        (WTF::SynchronizedFixedQueue::close): Deleted.
        (WTF::SynchronizedFixedQueue::isOpen): Deleted.
        (WTF::SynchronizedFixedQueue::enqueue): Deleted.
        (WTF::SynchronizedFixedQueue::dequeue): Deleted.
        (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue): Deleted.
        * wtf/SystemTracing.h:
        * wtf/ThreadGroup.h:
        (WTF::ThreadGroup::create): Deleted.
        (WTF::ThreadGroup::threads const): Deleted.
        (WTF::ThreadGroup::getLock): Deleted.
        (WTF::ThreadGroup::weakFromThis): Deleted.
        * wtf/ThreadSpecific.h:
        * wtf/ThreadingPrimitives.h:
        (WTF::Mutex::impl): Deleted.
        * wtf/TimeWithDynamicClockType.h:
        (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType): Deleted.
        (WTF::TimeWithDynamicClockType::fromRawSeconds): Deleted.
        (WTF::TimeWithDynamicClockType::secondsSinceEpoch const): Deleted.
        (WTF::TimeWithDynamicClockType::clockType const): Deleted.
        (WTF::TimeWithDynamicClockType::withSameClockAndRawSeconds const): Deleted.
        (WTF::TimeWithDynamicClockType::operator bool const): Deleted.
        (WTF::TimeWithDynamicClockType::operator+ const): Deleted.
        (WTF::TimeWithDynamicClockType::operator- const): Deleted.
        (WTF::TimeWithDynamicClockType::operator+=): Deleted.
        (WTF::TimeWithDynamicClockType::operator-=): Deleted.
        (WTF::TimeWithDynamicClockType::operator== const): Deleted.
        (WTF::TimeWithDynamicClockType::operator!= const): Deleted.
        * wtf/TimingScope.h:
        * wtf/TinyLRUCache.h:
        * wtf/TinyPtrSet.h:
        * wtf/URLParser.cpp:
        * wtf/URLParser.h:
        * wtf/Unexpected.h:
        * wtf/Variant.h:
        * wtf/WTFSemaphore.h:
        (WTF::Semaphore::Semaphore): Deleted.
        (WTF::Semaphore::signal): Deleted.
        (WTF::Semaphore::waitUntil): Deleted.
        (WTF::Semaphore::waitFor): Deleted.
        (WTF::Semaphore::wait): Deleted.
        * wtf/WallTime.h:
        (WTF::WallTime::WallTime): Deleted.
        (WTF::WallTime::fromRawSeconds): Deleted.
        (WTF::WallTime::infinity): Deleted.
        (WTF::WallTime::nan): Deleted.
        (WTF::WallTime::secondsSinceEpoch const): Deleted.
        (WTF::WallTime::approximateWallTime const): Deleted.
        (WTF::WallTime::operator bool const): Deleted.
        (WTF::WallTime::operator+ const): Deleted.
        (WTF::WallTime::operator- const): Deleted.
        (WTF::WallTime::operator+=): Deleted.
        (WTF::WallTime::operator-=): Deleted.
        (WTF::WallTime::operator== const): Deleted.
        (WTF::WallTime::operator!= const): Deleted.
        (WTF::WallTime::operator< const): Deleted.
        (WTF::WallTime::operator> const): Deleted.
        (WTF::WallTime::operator<= const): Deleted.
        (WTF::WallTime::operator>= const): Deleted.
        (WTF::WallTime::isolatedCopy const): Deleted.
        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::get const): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator* const): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator-> const): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator++): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator== const): Deleted.
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator!= const): Deleted.
        (WTF::WeakHashSet::WeakHashSet): Deleted.
        (WTF::WeakHashSet::begin const): Deleted.
        (WTF::WeakHashSet::end const): Deleted.
        (WTF::WeakHashSet::add): Deleted.
        (WTF::WeakHashSet::remove): Deleted.
        (WTF::WeakHashSet::contains const): Deleted.
        (WTF::WeakHashSet::capacity const): Deleted.
        (WTF::WeakHashSet::computesEmpty const): Deleted.
        (WTF::WeakHashSet::hasNullReferences const): Deleted.
        (WTF::WeakHashSet::computeSize const): Deleted.
        (WTF::WeakHashSet::checkConsistency const): Deleted.
        * wtf/WeakRandom.h:
        (WTF::WeakRandom::WeakRandom): Deleted.
        (WTF::WeakRandom::setSeed): Deleted.
        (WTF::WeakRandom::seed const): Deleted.
        (WTF::WeakRandom::get): Deleted.
        (WTF::WeakRandom::getUint32): Deleted.
        (WTF::WeakRandom::lowOffset): Deleted.
        (WTF::WeakRandom::highOffset): Deleted.
        (WTF::WeakRandom::nextState): Deleted.
        (WTF::WeakRandom::generate): Deleted.
        (WTF::WeakRandom::advance): Deleted.
        * wtf/WordLock.h:
        (WTF::WordLock::lock): Deleted.
        (WTF::WordLock::unlock): Deleted.
        (WTF::WordLock::isHeld const): Deleted.
        (WTF::WordLock::isLocked const): Deleted.
        (WTF::WordLock::isFullyReset const): Deleted.
        * wtf/generic/MainThreadGeneric.cpp:
        * wtf/glib/GMutexLocker.h:
        * wtf/linux/CurrentProcessMemoryStatus.h:
        * wtf/posix/ThreadingPOSIX.cpp:
        (WTF::Semaphore::Semaphore): Deleted.
        (WTF::Semaphore::~Semaphore): Deleted.
        (WTF::Semaphore::wait): Deleted.
        (WTF::Semaphore::post): Deleted.
        * wtf/text/ASCIILiteral.h:
        (WTF::ASCIILiteral::operator const char* const): Deleted.
        (WTF::ASCIILiteral::fromLiteralUnsafe): Deleted.
        (WTF::ASCIILiteral::null): Deleted.
        (WTF::ASCIILiteral::characters const): Deleted.
        (WTF::ASCIILiteral::ASCIILiteral): Deleted.
        * wtf/text/AtomString.h:
        (WTF::AtomString::operator=): Deleted.
        (WTF::AtomString::isHashTableDeletedValue const): Deleted.
        (WTF::AtomString::existingHash const): Deleted.
        (WTF::AtomString::operator const String& const): Deleted.
        (WTF::AtomString::string const): Deleted.
        (WTF::AtomString::impl const): Deleted.
        (WTF::AtomString::is8Bit const): Deleted.
        (WTF::AtomString::characters8 const): Deleted.
        (WTF::AtomString::characters16 const): Deleted.
        (WTF::AtomString::length const): Deleted.
        (WTF::AtomString::operator[] const): Deleted.
        (WTF::AtomString::contains const): Deleted.
        (WTF::AtomString::containsIgnoringASCIICase const): Deleted.
        (WTF::AtomString::find const): Deleted.
        (WTF::AtomString::findIgnoringASCIICase const): Deleted.
        (WTF::AtomString::startsWith const): Deleted.
        (WTF::AtomString::startsWithIgnoringASCIICase const): Deleted.
        (WTF::AtomString::endsWith const): Deleted.
        (WTF::AtomString::endsWithIgnoringASCIICase const): Deleted.
        (WTF::AtomString::toInt const): Deleted.
        (WTF::AtomString::toDouble const): Deleted.
        (WTF::AtomString::toFloat const): Deleted.
        (WTF::AtomString::percentage const): Deleted.
        (WTF::AtomString::isNull const): Deleted.
        (WTF::AtomString::isEmpty const): Deleted.
        (WTF::AtomString::operator NSString * const): Deleted.
        * wtf/text/AtomStringImpl.h:
        (WTF::AtomStringImpl::lookUp): Deleted.
        (WTF::AtomStringImpl::add): Deleted.
        (WTF::AtomStringImpl::addWithStringTableProvider): Deleted.
        * wtf/text/CString.h:
        (WTF::CStringBuffer::data): Deleted.
        (WTF::CStringBuffer::length const): Deleted.
        (WTF::CStringBuffer::CStringBuffer): Deleted.
        (WTF::CStringBuffer::mutableData): Deleted.
        (WTF::CString::CString): Deleted.
        (WTF::CString::data const): Deleted.
        (WTF::CString::length const): Deleted.
        (WTF::CString::isNull const): Deleted.
        (WTF::CString::buffer const): Deleted.
        (WTF::CString::isHashTableDeletedValue const): Deleted.
        * wtf/text/ExternalStringImpl.h:
        (WTF::ExternalStringImpl::freeExternalBuffer): Deleted.
        * wtf/text/LineBreakIteratorPoolICU.h:
        * wtf/text/NullTextBreakIterator.h:
        * wtf/text/OrdinalNumber.h:
        * wtf/text/StringBuffer.h:
        * wtf/text/StringBuilder.h:
        * wtf/text/StringConcatenateNumbers.h:
        * wtf/text/StringHasher.h:
        * wtf/text/StringImpl.h:
        * wtf/text/StringView.cpp:
        * wtf/text/StringView.h:
        (WTF::StringView::left const): Deleted.
        (WTF::StringView::right const): Deleted.
        (WTF::StringView::underlyingStringIsValid const): Deleted.
        (WTF::StringView::setUnderlyingString): Deleted.
        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl): Deleted.
        (WTF::SymbolImpl::StaticSymbolImpl::operator SymbolImpl&): Deleted.
        (WTF::PrivateSymbolImpl::PrivateSymbolImpl): Deleted.
        (WTF::RegisteredSymbolImpl::symbolRegistry const): Deleted.
        (WTF::RegisteredSymbolImpl::clearSymbolRegistry): Deleted.
        (WTF::RegisteredSymbolImpl::RegisteredSymbolImpl): Deleted.
        * wtf/text/SymbolRegistry.h:
        * wtf/text/TextBreakIterator.h:
        * wtf/text/TextPosition.h:
        * wtf/text/TextStream.h:
        * wtf/text/WTFString.h:
        (WTF::String::swap): Deleted.
        (WTF::String::adopt): Deleted.
        (WTF::String::isNull const): Deleted.
        (WTF::String::isEmpty const): Deleted.
        (WTF::String::impl const): Deleted.
        (WTF::String::releaseImpl): Deleted.
        (WTF::String::length const): Deleted.
        (WTF::String::characters8 const): Deleted.
        (WTF::String::characters16 const): Deleted.
        (WTF::String::is8Bit const): Deleted.
        (WTF::String::sizeInBytes const): Deleted.
        (WTF::String::operator[] const): Deleted.
        (WTF::String::find const): Deleted.
        (WTF::String::findIgnoringASCIICase const): Deleted.
        (WTF::String::reverseFind const): Deleted.
        (WTF::String::contains const): Deleted.
        (WTF::String::containsIgnoringASCIICase const): Deleted.
        (WTF::String::startsWith const): Deleted.
        (WTF::String::startsWithIgnoringASCIICase const): Deleted.
        (WTF::String::hasInfixStartingAt const): Deleted.
        (WTF::String::endsWith const): Deleted.
        (WTF::String::endsWithIgnoringASCIICase const): Deleted.
        (WTF::String::hasInfixEndingAt const): Deleted.
        (WTF::String::append): Deleted.
        (WTF::String::left const): Deleted.
        (WTF::String::right const): Deleted.
        (WTF::String::createUninitialized): Deleted.
        (WTF::String::fromUTF8WithLatin1Fallback): Deleted.
        (WTF::String::isAllASCII const): Deleted.
        (WTF::String::isAllLatin1 const): Deleted.
        (WTF::String::isSpecialCharacter const): Deleted.
        (WTF::String::isHashTableDeletedValue const): Deleted.
        (WTF::String::hash const): Deleted.
        (WTF::String::existingHash const): Deleted.
        * wtf/text/cf/TextBreakIteratorCF.h:
        * wtf/text/icu/TextBreakIteratorICU.h:
        * wtf/text/icu/UTextProviderLatin1.h:
        * wtf/threads/BinarySemaphore.h:
        (WTF::BinarySemaphore::waitFor): Deleted.
        (WTF::BinarySemaphore::wait): Deleted.
        * wtf/unicode/Collator.h:
        * wtf/win/GDIObject.h:
        * wtf/win/PathWalker.h:
        * wtf/win/Win32Handle.h:

2019-08-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix post landing review comments for r248533 from Darin.

        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref const):
        (WTF::RefCountedBase::applyRefDerefThreadingCheck const):
        (WTF::RefCountedBase::derefBase const):
        (WTF::RefCountedBase::areThreadingCheckedEnabled const): Deleted.

2019-08-12  Chris Dumez  <cdumez@apple.com>

        Add threading assertions to RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200507

        Reviewed by Ryosuke Niwa.

        Add threading assertions to RefCounted to try and catch unsafe concurrent ref'ing / derefing of
        RefCounted objects from several threads. If you hit these new assertions, it likely means you either
        need to:
        1. Have your class subclass ThreadSafeRefCounted instead of RefCounted
        or
        2. Make sure your objects always gets ref'd / deref'd from the same thread.

        These assertions already found several thread safety bugs in our code base, which I fixed via
        dependency bugs.

        These assertions are currently enabled in WebKit (UIProcess, child processes and
        WebKitLegacy), they do not apply other JavascriptCore API clients.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/RefCounted.cpp: Added.
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref const):
        (WTF::RefCountedBase::disableThreadingChecks):
        (WTF::RefCountedBase::enableThreadingChecksGlobally):
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::areThreadingCheckedEnabled const):
        (WTF::RefCountedBase::derefBase const):
        * wtf/SizeLimits.cpp:

2019-08-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r248525.

        Revert new threading assertions while I work on fixing the
        issues they exposed

        Reverted changeset:

        "Add threading assertions to RefCounted"
        https://bugs.webkit.org/show_bug.cgi?id=200507
        https://trac.webkit.org/changeset/248525

2019-08-11  Chris Dumez  <cdumez@apple.com>

        Add threading assertions to RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200507

        Reviewed by Ryosuke Niwa.

        Add threading assertions to RefCounted to try and catch unsafe concurrent ref'ing / derefing of
        RefCounted objects from several threads. If you hit these new assertions, it likely means you either
        need to:
        1. Have your class subclass ThreadSafeRefCounted instead of RefCounted
        or
        2. Make sure your objects always gets ref'd / deref'd from the same thread.

        These assertions already found several thread safety bugs in our code base, which I fixed via
        dependency bugs.

        These assertions are currently enabled in WebKit (UIProcess, child processes and
        WebKitLegacy), they do not apply other JavascriptCore API clients.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/RefCounted.cpp: Added.
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref const):
        (WTF::RefCountedBase::disableThreadingChecks):
        (WTF::RefCountedBase::enableThreadingChecksGlobally):
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::areThreadingCheckedEnabled const):
        (WTF::RefCountedBase::derefBase const):
        * wtf/SizeLimits.cpp:

2019-08-09  Saam Barati  <sbarati@apple.com>

        [WHLSL] Devirtualize the AST
        https://bugs.webkit.org/show_bug.cgi?id=200522

        Reviewed by Robin Morisset.

        Make RefCounted use std::default_delete instead of explicitly calling delete.
        This allows uses of RefCounted to define their own custom deleter.

        * wtf/RefCounted.h:
        (WTF::RefCounted::deref const):
        * wtf/UniqueRef.h:
        (WTF::UniqueRef::UniqueRef):

2019-08-08  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issue in AudioSampleDataSource() constructor
        https://bugs.webkit.org/show_bug.cgi?id=200547

        Reviewed by Alex Christensen.

        Make Logger ThreadSafeRefCounted as it is ref'd / deref'd from various
        threads (including the main thread and the WebKitWebRTCAudioModule thread).

        * wtf/Logger.h:

2019-08-08  Michael Saboff  <msaboff@apple.com>

        OpenSource MemoryFootprint API for JSC command line tool
        https://bugs.webkit.org/show_bug.cgi?id=200541

        Reviewed by Saam Barati.

        OpenSource version of WebKitAdditions/MemoryFootprint.h.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/spi/darwin/ProcessMemoryFootprint.h: Added.
        (ProcessMemoryFootprint::now):
        (ProcessMemoryFootprint::resetPeak):

2019-08-08  Per Arne Vollan  <pvollan@apple.com>

        [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=200543
        <rdar://problem/49394015>

        Reviewed by Brent Fulgham.

        Add new SPI.

        * wtf/Platform.h:
        * wtf/spi/darwin/SandboxSPI.h:

2019-08-07  Chris Dumez  <cdumez@apple.com>

        Tighten WeakPtr threading assertions for GC threads
        https://bugs.webkit.org/show_bug.cgi?id=200451

        Reviewed by Youenn Fablet.

        Make sure our GC threads do not dereference WeakPtr for main thread
        objects by tightening our threading assertions in WeakPtr. They are
        still allowed to call WeakPtr::get() for now though.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrImpl::get):
        (WTF::WeakPtrImpl::wasConstructedOnMainThread const):
        (WTF::WeakPtr::get const):
        (WTF::WeakPtr::operator-> const):
        (WTF::WeakPtr::operator* const):

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248308

        Use kSecUseDataProtectionKeychain for iOS 13 and macOS Catalina or newer.

        * wtf/Platform.h:

2019-08-06  Chris Dumez  <cdumez@apple.com>

        Fix inefficiency in HTTPHeaderMap::set(CFStringRef, const String&)
        https://bugs.webkit.org/show_bug.cgi?id=200475

        Reviewed by Darin Adler.

        Add convenience constuctor to StringView which takes in a const char*
        and an unsigned length, similarly to what we already have for String.

        * wtf/URL.cpp:
        (WTF::URL::protocolIs const):
        (WTF::protocolIsInternal):
        * wtf/text/StringView.h:
        (WTF::StringView::StringView):
        (WTF::StringView::empty):

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Enable LocalAuthenticator for macOS
        https://bugs.webkit.org/show_bug.cgi?id=182772
        <rdar://problem/43347920>

        Reviewed by Brent Fulgham.

        * wtf/Platform.h:
        Adds HAVE_DEVICE_IDENTITY.
        * wtf/spi/cocoa/SecuritySPI.h:
        Adds a SPI for telling macOS keychain to use the modern one.

2019-08-06  Claudio Saavedra  <csaavedra@igalia.com>

        FileSystem: silent build warning

        Unreviewed compilation warning fix.

        Remove unused parameter in empty method
        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::createTemporaryZipArchive):

2019-08-05  Youenn Fablet  <youenn@apple.com>

        Make Logger::log thread safe so that it can be used from background threads
        https://bugs.webkit.org/show_bug.cgi?id=200448

        Reviewed by Eric Carlson.

        Add a lock to ensure calling log is thread-safe.

        * wtf/Logger.h:
        (WTF::Logger::addObserver):
        (WTF::Logger::removeObserver):
        (WTF::Logger::log):
        (WTF::Logger::observerLock):

2019-08-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] implement CertificateInfo::summaryInfo
        https://bugs.webkit.org/show_bug.cgi?id=191498

        Reviewed by Alex Christensen.

        Fixed function template for encoding vector.

        * wtf/persistence/PersistentCoders.h:

2019-08-02  Mark Lam  <mark.lam@apple.com>

        [ARM64E] Harden the diversity of the DOMJIT::Signature::unsafeFunction pointer.
        https://bugs.webkit.org/show_bug.cgi?id=200292
        <rdar://problem/53706881>

        Reviewed by Geoffrey Garen.

        * wtf/PtrTag.h:
        - Introducing WTF_VTBL_FUNCPTR_PTRAUTH and WTF_VTBL_FUNCPTR_PTRAUTH_STR macros for
          defining vtbl function pointer style pointer signing modifier.

2019-08-02  Eric Carlson  <eric.carlson@apple.com>

        uniqueLogIdentifier() should generate a 64-bit identifier
        https://bugs.webkit.org/show_bug.cgi?id=200403
        <rdar://problem/53878447>

        Reviewed by Youenn Fablet.

        * wtf/LoggerHelper.h:
        (WTF::LoggerHelper::childLogIdentifier const): Use uint64_t masks.
        (WTF::LoggerHelper::uniqueLogIdentifier): cryptographicallyRandomNumber returns a
        uint32_t so use two to generate a 64-bit identifier.

2019-08-02  Alex Christensen  <achristensen@webkit.org>

        Fix an internal build after r248139
        https://bugs.webkit.org/show_bug.cgi?id=200102

        * wtf/cocoa/FileSystemCocoa.mm:
        Some internal builds couldn't find BOM framework headers.
        No problem.  They're not needed.  Just remove references to them.

2019-08-01  Alex Christensen  <achristensen@webkit.org>

        Move FormData zip file generation to NetworkProcess and enable it for all WebKit clients for uploading directories
        https://bugs.webkit.org/show_bug.cgi?id=200102
        <rdar://problem/53275114>

        Reviewed by Darin Adler.

        Move code from BlobDataFileReference::generateReplacementFile to FileSystem::createZipArchive.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::createZipArchive):
        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::createZipArchive):

2019-08-01  Per Arne Vollan  <pvollan@apple.com>

        Initialize memory pressure flag in MemoryPressureHandler
        https://bugs.webkit.org/show_bug.cgi?id=200353

        Reviewed by Geoffrey Garen.

        The flag 'm_underMemoryPressure' in MemoryPressureHandler should be initialized to 'false'.

        * wtf/MemoryPressureHandler.h:

2019-08-01  Chris Dumez  <cdumez@apple.com>

        Add threading assertion to WeakPtr's operator->()
        https://bugs.webkit.org/show_bug.cgi?id=199922

        Reviewed by Ryosuke Niwa.

        Add threading assertion to WeakPtr's operator->() to make sure that the WeakPtr
        always gets dereferenced on the same thread it was constructed on.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrImpl::get):
        (WTF::WeakPtrImpl::WeakPtrImpl):

2019-07-31  Youenn Fablet  <youenn@apple.com>

        Use CTFontCreateForCharactersWithLanguageAndOption if available instead of CTFontCreateForCharactersWithLanguage
        https://bugs.webkit.org/show_bug.cgi?id=200241

        Reviewed by Myles C. Maxfield.

        * wtf/Platform.h: Add macro to enable/disable new SPI.

2019-07-31  Keith Rollin  <krollin@apple.com>

        Fix 64-bit vs 32-bit mismatch in PersistentCoders.h
        https://bugs.webkit.org/show_bug.cgi?id=200288
        <rdar://problem/53734203>

        Reviewed by Chris Dumez.

        hashMapSize is declared as a uint64_t. It is passed to
        HashMapType::reserveInitialCapacity, which takes an unsigned int. This
        is a 32-bit value on 32-bit platforms, leading to a compile time
        error. Fix his by casting hashMapSize to the expected type.

        * wtf/persistence/PersistentCoders.h:

2019-07-31  Keith Rollin  <krollin@apple.com>

        Fix 64-bit vs 32-bit mismatch in LogArgument
        https://bugs.webkit.org/show_bug.cgi?id=200286
        <rdar://problem/53733671>

        Reviewed by Darin Adler.

        LogArgument is a utility for converting scalars into strings. It has a
        number of versions of a toString() method that is specialized for each
        type and converts the value to a string in a manner appropriate for
        that type. However, the versions of toString() for "long long" and
        "unsigned long long" are actually declared to take an "long" or
        "unsigned long" as a parameter. This difference leads to a 64-bit vs
        32-bit build error on 32-bit systems. Fix this by specifying
        correct/matching types.

        * wtf/Logger.h:
        (WTF::LogArgument::toString):

2019-07-30  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r241288): Text on Yahoo Japan mobile looks too bold
        https://bugs.webkit.org/show_bug.cgi?id=200065
        <rdar://problem/50912757>

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2019-07-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix CRASH_WITH_INFO() so that it doesn't complain about unused parameters on non Clang / MSVC compilers.
        https://bugs.webkit.org/show_bug.cgi?id=200243

        Reviewed by Mark Lam.

        For GCC, we'll implement WTFCrashWithInfo as a function rather than a macro. To use
        ##__VA_ARGS we would need to enable GNU extensions, and don't want to do that. The proper
        solution, format __VA_OPT__(,) __VA_ARGS__, requires C++20. So just use an inline function
        for now as a workaround.

        * wtf/Assertions.h:
        (CRASH_WITH_INFO):
        (CRASH_WITH_SECURITY_IMPLICATION_AND_INFO):

2019-07-25  Dean Jackson  <dino@apple.com>

        Add helper for ignoring deprecated implementation warnings
        https://bugs.webkit.org/show_bug.cgi?id=200135

        Reviewed by Wenson Hsieh.

        Add ALLOW_DEPRECATED_IMPLEMENTATIONS_BEGIN/END macro which
        is IGNORE_WARNINGS_BEGIN("deprecated-implementations")

        * wtf/Compiler.h:

2019-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] Add IsoHeap test to ensure that IsoHeap pages are not allocating too large VA
        https://bugs.webkit.org/show_bug.cgi?id=200103

        Reviewed by Mark Lam.

        We move VMTag page investigation code from PAL to WTF to use it in TestWTF.
        And we also accumulate allocated VA size in `reserved` field of `TagInfo`.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PlatformMac.cmake:
        * wtf/ResourceUsage.h: Added.
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        * wtf/cocoa/ResourceUsageCocoa.cpp: Added.
        (WTF::vmPageSize):
        (WTF::logFootprintComparison):
        (WTF::displayNameForVMTag):
        (WTF::pagesPerVMTag):
        * wtf/spi/cocoa/MachVMSPI.h: Added.

2019-07-23  Keith Miller  <keith_miller@apple.com>

        Add cheat sheet comment for HashMap/Set iterator/AddResult
        https://bugs.webkit.org/show_bug.cgi?id=200061

        Reviewed by Saam Barati.

        * wtf/HashMap.h:
        * wtf/HashSet.h:

2019-07-23  Keith Rollin  <krollin@apple.com>

        Remove rest of NavigatorContentUtils support
        https://bugs.webkit.org/show_bug.cgi?id=200052
        <rdar://problem/53467357>

        Reviewed by Alex Christensen.

        Bug 196070 removes most of the support for the never-used
        NavigatorContentUtils facility. However, there were still a couple of
        left-over references after that change. This patch sweeps those up.

        * wtf/FeatureDefines.h:

2019-07-23  Keith Rollin  <krollin@apple.com>

        Enable HAVE_APP_LINKS_WITH_ISENABLED for entire iOS family
        https://bugs.webkit.org/show_bug.cgi?id=200040
        <rdar://problem/53457670>

        Reviewed by Tim Horton.

        This feature was enabled for just iOS, but should be enabled for tvOS
        and watchOS, too.

        * wtf/Platform.h:

2019-07-23  Alicia Boya García  <aboya@igalia.com>

        [WTF] Add DataMutex and MainThreadData wrappers
        https://bugs.webkit.org/show_bug.cgi?id=199831

        Reviewed by Alex Christensen.

        This patch adds two new wrapper classes:

        DataMutex<T> stores an instance of T in a private member along with a
        mutex. In order to use its fields, users need to instantiate a
        DataMutex<T>::LockedWrapper instance in the stack. This class uses
        RAII to lock and unlock the mutex in construction and destruction
        respectively, and by using the arrow operator lets the user access T's
        members.

        This way, DataMutex<T> prevents most instances of accidental access to
        data fields that should only be read and modified in an atomic matter.

        Still, both the Lock and the LockHolder are exposed once the user has
        taken the lock so that special cases such as waiting for a condition
        variable or performing an early unlock are doable.

        MainThreadData<T> is another wrapper class, in this case for data
        fields that should only be accessed from the main thread. In this
        case, it works similar to a smart pointer, except that (1) there is no
        actual memory indirection, T is stored directly inside
        MainThreadData<T> and (2) attempts to use the -> or * operator have an
        isMainThread() assertion.

        Together, these two wrapper classes make it easier to write
        multi-threaded code in a safer, more self-documented way by letting
        the author group data into structures that have certain access safety
        requirements.

        These structures were originally part of the new GStreamer
        WebKitMediaSrc rework patch: https://bugs.webkit.org/show_bug.cgi?id=199719

        * wtf/CMakeLists.txt:
        * wtf/DataMutex.h: Added.
        (WTF::DataMutex::DataMutex):
        (WTF::DataMutex::LockedWrapper::LockedWrapper):
        (WTF::DataMutex::LockedWrapper::operator->):
        (WTF::DataMutex::LockedWrapper::operator*):
        (WTF::DataMutex::LockedWrapper::mutex):
        (WTF::DataMutex::LockedWrapper::lockHolder):
        * wtf/MainThreadData.h: Added.
        (WTF::MainThreadData::MainThreadData):
        (WTF::MainThreadData::operator->):
        (WTF::MainThreadData::operator*):

2019-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] Each IsoPage gets 1MB VA because VMHeap::tryAllocateLargeChunk rounds up
        https://bugs.webkit.org/show_bug.cgi?id=200024

        Reviewed by Saam Barati.

        Start using a VM tag for IsoHeap instead of CLoop Stack.

        * wtf/OSAllocator.h:
        * wtf/VMTags.h:

2019-07-20  Chris Dumez  <cdumez@apple.com>

        Speed up HashTable decoding by reserving capacity and avoiding rehashing
        https://bugs.webkit.org/show_bug.cgi?id=199982

        Reviewed by Saam Barati.

        Introduce reserveInitialCapacity() on HashMap to reserve capacity on a
        HashMap and cut down on rehashing cost when possible.

        * wtf/HashMap.h:
        * wtf/HashTable.h:
        (WTF::HashTable::reserveInitialCapacity):

        * wtf/persistence/PersistentCoders.h:
        Use HashMap::reserveInitialCapacity() in the HashMap persistent decoder for
        performance.

2019-07-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        REGRESSION(r246033/r246496): [GTK] Kinetic scrolling doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=199322

        Reviewed by Michael Catanzaro.

        Introduce ENABLE_KINETIC_SCROLLING to explicitly always have kinetic scrolling on GTK.

        * wtf/Platform.h:

2019-07-18  Youenn Fablet  <youenn@apple.com>

        Make sure to set kCTFontFallbackOptionAttribute to kCTFontFallbackOptionSystem for system fonts
        https://bugs.webkit.org/show_bug.cgi?id=199769
        <rdar://problem/49390297>

        Reviewed by Myles C. Maxfield.

        * wtf/Platform.h:

2019-07-17  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * wtf/FileSystem.cpp:
        * wtf/FileSystem.h:
        Add support for creating MappedFileData from a preexisting file handle
        for use with locked files. Also support creating MappedFileData
        with either private or shared mappings.

        * wtf/UUID.cpp:
        Avoid ASSERT with returning a LazyNeverDestroyed object that hasn't been created.

        * wtf/glib/FileSystemGlib.cpp:
        * wtf/win/FileSystemWin.cpp:
        Add truncateFile implementations.

2019-07-17  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        Adds new StringBuilder::flexibleAppend(...) member function which allows passing one or more 
        string-adaptable (in the sense that there is StringTypeAdapter specialization for the 
        type) parameters. This re-ususes the variadic template infrastructure in StringConcatenate.h
        that is used for makeString(...) allowing for improvements in one to benefit the other.

        The advantage of StringBuilder::flexibleAppend(...) over calling StringBuilder::append(...)
        multiple times (beyond the code sharing with makeString(...) is that it can avoid unnecessary
        additional re-allocations when the StringBuilder needs to expand it's capacity. It does this
        by computing the complete required length for all the passed arguments and then ensuring enough
        capacity is available. It also reduces the allocation overhead versus the anti-pattern of
        builder.append(makeString(...)).

        Ideally, this member function should eventually just be called StringBuilder::append(...), but
        the current overload set for StringBuilder::append(...) makes this complicated due to overloads
        that take two arguments such as StringBuilder::append(const UChar*, unsigned). Going forward, we
        should rename or remove those overloads and move to a standard interface. 

        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::pathByAppendingComponents):
        Adopt StringBuilder::flexibleAppend, using to combine the append of '/' and component.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheck):
        Extract the part of appendUnitialized that doesn't do the overflow check
        into it's own member function to allow callers that have already done the
        overflow check to bypass it.

        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheckForUChar):
        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheckForLChar):
        Added to allow template member function flexibleAppendFromAdapters to call
        appendUninitializedWithoutOverflowCheck without moving it to the header.
        
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::flexibleAppendFromAdapters):
        (WTF::StringBuilder::flexibleAppend):
        Modeled on tryMakeStringFromAdapters in StringConcatenate.h, these
        eagerly compute the required length, expand the buffer and then use
        the existing string type adaptor accumulation functions used by makeString. 

        * wtf/text/StringConcatenate.h:
        (WTF::stringTypeAdapterAccumulator):
        (WTF::tryMakeStringFromAdapters):
        (WTF::makeStringAccumulator): Deleted.
        Renames makeStringAccumulator to stringTypeAdapterAccumulator now that it is used
        by more than just makeString.

2019-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r247505.
        https://bugs.webkit.org/show_bug.cgi?id=199871

        "Caused failed ASSERT in stress test" (Requested by creid on
        #webkit).

        Reverted changeset:

        "Bytecode cache should use FileSystem"
        https://bugs.webkit.org/show_bug.cgi?id=199759
        https://trac.webkit.org/changeset/247505

2019-07-16  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * wtf/FileSystem.cpp:
        * wtf/FileSystem.h:
        Add support for creating MappedFileData from a preexisting file handle
        for use with locked files. Also support creating MappedFileData
        with either private or shared mappings.

        * wtf/UUID.cpp:
        Avoid ASSERT with returning a LazyNeverDestroyed object that hasn't been created.

        * wtf/glib/FileSystemGlib.cpp:
        * wtf/win/FileSystemWin.cpp:
        Add truncateFile implementations.

2019-07-16  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653

        Unreviewed MacCatalyst build fix.

        * wtf/Platform.h:

2019-07-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Improvements and fixes in FileSystemGlib.cpp
        https://bugs.webkit.org/show_bug.cgi?id=199800

        Reviewed by Carlos Garcia Campos.

        Use nullptr.

        Fix a GFileInfo leak in getFileSize.

        Use GRefPtr to clarify ownership of the GFileIOStream in openFile.

        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::getFileSize):
        (WTF::FileSystemImpl::getVolumeFreeSpace):
        (WTF::FileSystemImpl::openTemporaryFile):
        (WTF::FileSystemImpl::openFile):
        (WTF::FileSystemImpl::seekFile):
        (WTF::FileSystemImpl::writeToFile):
        (WTF::FileSystemImpl::readFromFile):

2019-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653

        Unreviewed watchOS build fix.

        * wtf/Platform.h:

2019-07-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r247462.
        https://bugs.webkit.org/show_bug.cgi?id=199816

        completely messed up the patch (Requested by litherum on
        #webkit).

        Reverted changeset:

        "New York font erroneously gets synthetic bold"
        https://bugs.webkit.org/show_bug.cgi?id=199653
        https://trac.webkit.org/changeset/247462

2019-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653
        <rdar://problem/51692592>

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2019-07-15  Brady Eidson  <beidson@apple.com>

        Make WKURLSchemeTask thread safe.
        <rdar://problem/50471863> and https://bugs.webkit.org/show_bug.cgi?id=199764

        Reviewed by Alex Christensen.

        * wtf/MainThread.cpp:
        (WTF::callOnMainAndWait):
        (WTF::callOnMainRunLoopAndWait):
        (WTF::callOnMainThreadAndWait):
        * wtf/MainThread.h:

2019-07-15  Dean Jackson  <dino@apple.com>

        MacCatalyst asserts when command key is raised
        https://bugs.webkit.org/show_bug.cgi?id=199805
        <rdar://problem/53120393>

        Reviewed by Tim Horton.

        Add USE_UIKIT_KEYBOARD_ADDITIONS for iOS 13+ and macCatalyst.

        * wtf/FeatureDefines.h:

2019-07-14  Chris Dumez  <cdumez@apple.com>

        Add threading assertion to WeakPtrFactory::createWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=199639

        Reviewed by Ryosuke Niwa.

        Add threading assertion to WeakPtrFactory::createWeakPtr() to make sure it
        is called on the same thread where the WeakPtrFactory wad constructed.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrFactory::WeakPtrFactory):
        (WTF::WeakPtrFactory::createWeakPtr const):

2019-07-14  Dean Jackson  <dino@apple.com>

        WebGL not supported on WKWebView on UIKit for Mac
        https://bugs.webkit.org/show_bug.cgi?id=199785
        <rdar://problem/52911449>

        Reviewed by Antoine Quint.

        MacCatalyst has Apple Graphics Control, although
        this area is very messy, see <rdar://53062794>.

        * wtf/Platform.h:

2019-07-11  Myles C. Maxfield  <mmaxfield@apple.com>

        New York font erroneously gets synthetic bold
        https://bugs.webkit.org/show_bug.cgi?id=199653
        <rdar://problem/51692592>

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2019-07-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build failure with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=199625

        Added ENABLE(ACCESSIBILITY) and replaced HAVE(ACCESSIBILITY)
        with ENABLE(ACCESSIBILITY) in the code.

        Additionally, the TestRunner code generator now honors the
        Conditional IDL format.

        Reviewed by Konstantin Tokarev.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2019-07-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r247286.

        Caused TestWTF.WTF.StringOperators to fail on debug bots

        Reverted changeset:

        "Add StringBuilder member function which allows makeString()
        style variadic argument construction"
        https://bugs.webkit.org/show_bug.cgi?id=198997
        https://trac.webkit.org/changeset/247286

2019-07-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] GUniqueOutPtr::release should return a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=199579

        Reviewed by Carlos Garcia Campos.

        GUniqueOutPtr::release should release to a raw pointer, rather than a GUniquePtr. If a
        GUniquePtr is desired, it's trivial to construct one from the raw pointer, but all existing
        callsites under Source/ would rather have a raw pointer. Currently they have to call
        release().release() to get the raw pointer, which is annoying.

        * wtf/glib/GUniquePtr.h:
        (WTF::GUniqueOutPtr::release):

2019-07-09  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        Adds new StringBuilder::flexibleAppend(...) member function which allows passing one or more 
        string-adaptable (in the sense that there is StringTypeAdapter specialization for the 
        type) parameters. This re-ususes the variadic template infrastructure in StringConcatenate.h
        that is used for makeString(...) allowing for improvements in one to benefit the other.

        The advantage of StringBuilder::flexibleAppend(...) over calling StringBuilder::append(...)
        multiple times (beyond the code sharing with makeString(...) is that it can avoid unnecessary
        additional re-allocations when the StringBuilder needs to expand it's capacity. It does this
        by computing the complete required length for all the passed arguments and then ensuring enough
        capacity is available. It also reduces the allocation overhead versus the anti-pattern of
        builder.append(makeString(...)).

        Ideally, this member function should eventually just be called StringBuilder::append(...), but
        the current overload set for StringBuilder::append(...) makes this complicated due to overloads
        that take two arguments such as StringBuilder::append(const UChar*, unsigned). Going forward, we
        should rename or remove those overloads and move to a standard interface. 

        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::pathByAppendingComponents):
        Adopt StringBuilder::flexibleAppend, using to combine the append of '/' and component.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheck):
        Extract the part of appendUnitialized that doesn't do the overflow check
        into it's own member function to allow callers that have already done the
        overflow check to bypass it.

        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheckForUChar):
        (WTF::StringBuilder::appendUninitializedWithoutOverflowCheckForLChar):
        Added to allow template member function flexibleAppendFromAdapters to call
        appendUninitializedWithoutOverflowCheck without moving it to the header.
        
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::flexibleAppendFromAdapters):
        (WTF::StringBuilder::flexibleAppend):
        Modeled on tryMakeStringFromAdapters in StringConcatenate.h, these
        eagerly compute the required length, expand the buffer and then use
        the existing string type adaptor accumulation functions used by makeString. 

        * wtf/text/StringConcatenate.h:
        (WTF::stringTypeAdapterAccumulator):
        (WTF::tryMakeStringFromAdapters):
        (WTF::makeStringAccumulator): Deleted.
        Renames makeStringAccumulator to stringTypeAdapterAccumulator now that it is used
        by more than just makeString.

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        When parsing an IPv4 address, wait until after deciding it is indeed an IPv4 address before reporting syntax violations
        https://bugs.webkit.org/show_bug.cgi?id=199628

        Reviewed by Brady Eidson.

        Otherwise, we sometimes report syntax violations on things that are not IPv4 addresses and don't have syntax violations.
        I added a unit test with one such URL that used to cause an assertion.

        * wtf/URLParser.cpp:
        (WTF::URLParser::parseIPv4Host):

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        Remove invalid assertion in URLParser::domainToASCII
        https://bugs.webkit.org/show_bug.cgi?id=199624

        Reviewed by Brady Eidson.

        When a non-ASCII domain's punycode encoding is longer than 63 characters,
        the URL is supposed to fail to parse, according to https://www.unicode.org/reports/tr46/#ToASCII
        We and all other browsers do this.  When uidna_nameToASCII tries to punycode encode such a domain,
        it can return a number larger than 63.  In this case, processingDetails.errors is UIDNA_ERROR_LABEL_TOO_LONG
        and we fail to parse as desired and uidna_nameToASCII did not write out of bounds, so it was just the assertion
        that was wrong.  I added some unit tests that would have hit the assertion and verify that we fail at the correct length.

        * wtf/URLParser.cpp:
        (WTF::URLParser::domainToASCII):

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should reserialize IPv6 addresses that end with a colon
        https://bugs.webkit.org/show_bug.cgi?id=199627

        Reviewed by Brady Eidson.

        When an IPv6 address ends in a colon, the colon should be removed which means the
        serialized output is different than the input, which the URLParser calls a syntax violation.
        This matches the URL specification, and I added a unit test that used to assert.

        * wtf/URLParser.cpp:
        (WTF::URLParser::parseIPv6Host):

2019-07-08  Chris Dumez  <cdumez@apple.com>

        Use WeakHashSet for WebUserContentControllerProxy::m_processes
        https://bugs.webkit.org/show_bug.cgi?id=199591
        <rdar://problem/52798721>

        Reviewed by Youenn Fablet.

        Update WeakHashSet::add() to return an AddResult type, similarly to our other containers.

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

2019-07-08  Christopher Reid  <chris.reid@sony.com>

        Implement MappedFileData for Windows
        https://bugs.webkit.org/show_bug.cgi?id=198269

        Reviewed by Darin Adler.

        Original patch by Fujii Hironori.

        Add Windows implementations for MappedFileData constructor and destructor.

        * wtf/FileSystem.cpp:
        * wtf/FileSystem.h:
        * wtf/win/FileSystemWin.cpp:

2019-07-08  Chris Dumez  <cdumez@apple.com>

        Add threading assertion to WTF::CompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=199516

        Reviewed by Alex Christensen.

        Add threading assertion to WTF::CompletionHandler to try and catch common cases
        of unsafe usage (completion handler constructed on one thread but called on
        another).

        * wtf/CompletionHandler.h:
        (WTF::CompletionHandler<Out):

2019-07-08  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Enable only on the most recent version of the supported iOS family
        https://bugs.webkit.org/show_bug.cgi?id=199562
        <rdar://problem/52766511>

        Reviewed by Dean Jackson.

        We really don't need HAVE_UI_WEB_TOUCH_EVENTS_GESTURE_RECOGNIZER_WITH_ACTIVE_TOUCHES_BY_ID since the UIKit SPI
        that was added in iOS 13 that it's checking for is really required for all parts of the implementation of Pointer
        Events, including dispatch of the "pointercancel" event and support for the "touch-action" CSS property.

        * wtf/Platform.h:

2019-07-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r247115.

        Breaks lldbWebKitTester (and by extension, test-webkitpy)

        Reverted changeset:

        "[WHLSL] Standard library is too big to directly include in
        WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=198186
        https://trac.webkit.org/changeset/247115

2019-07-03  Jonathan Bedard  <jbedard@apple.com>

        [Catalina] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199209

        Reviewed by Darin Adler.

        * wtf/spi/cocoa/SecuritySPI.h: Declare SecTrustedApplicationCreateFromPath(...).

2019-07-03  Keith Miller  <keith_miller@apple.com>

        PACCage should first cage leaving PAC bits intact then authenticate
        https://bugs.webkit.org/show_bug.cgi?id=199372

        Reviewed by Saam Barati.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::mergePointers):

2019-07-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r246616.

        Caused http/tests/inspector/network/har/har-page.html to fail
        on Catalina.

        Reverted changeset:

        "Web Inspector: Network: replace CFNetwork SPI with new API
        where able"
        https://bugs.webkit.org/show_bug.cgi?id=198762
        https://trac.webkit.org/changeset/246616

2019-07-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r247041.
        https://bugs.webkit.org/show_bug.cgi?id=199425

        broke some iOS arm64e tests (Requested by keith_miller on
        #webkit).

        Reverted changeset:

        "PACCage should first cage leaving PAC bits intact then
        authenticate"
        https://bugs.webkit.org/show_bug.cgi?id=199372
        https://trac.webkit.org/changeset/247041

2019-07-02  Chris Dumez  <cdumez@apple.com>

        ThreadSafeRefCounted<DestructionThread::Main> is not safe to use in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=199420
        <rdar://problem/52289717>

        Reviewed by Ryosuke Niwa.

        * wtf/MainThread.cpp:
        (WTF::isMainRunLoop):
        (WTF::callOnMainRunLoop):
        * wtf/MainThread.h:
        Add some function to MainThread.h to be used by ThreadSafeRefCounted to interact with the
        main RunLoop. This is used to avoid a circular dependency between RunLoop (which is
        ThreadSafeRefCounted) and ThreadSafeReCounted.

        * wtf/ThreadSafeRefCounted.h:
        (WTF::ThreadSafeRefCounted::deref const):
        Add a new DestructionThread::MainRunLoop enum value to be used by classes that need to
        be destroyed on the main RunLoop rather than the main thread (which may be different
        when WK1 is invoved)

2019-07-02  Robin Morisset  <rmorisset@apple.com>

        [WHLSL] the initializer in VariableDeclaration should be a std::unique_ptr, not Optional<UniqueRef<..>>
        https://bugs.webkit.org/show_bug.cgi?id=199389

        Reviewed by Sam Weinig.

        * wtf/UniqueRef.h:
        (WTF::UniqueRef::moveToUniquePtr): Added.

2019-07-02  Keith Miller  <keith_miller@apple.com>

        PACCage should first cage leaving PAC bits intact then authenticate
        https://bugs.webkit.org/show_bug.cgi?id=199372

        Reviewed by Saam Barati.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::mergePointers):

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Cannot play Bert's Bytes radio stream from http://radio.dos.nl/
        https://bugs.webkit.org/show_bug.cgi?id=198376

        Reviewed by Xabier Rodriguez-Calvar.

        * wtf/glib/GLibUtilities.h:
        (enumToString): Utility function to get a string representation of of a GLib enum.

2019-06-22  Darin Adler  <darin@apple.com>

        Streamline some string code, focusing on functions that were using substringSharingImpl
        https://bugs.webkit.org/show_bug.cgi?id=198898

        Reviewed by Daniel Bates.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::applyHostNameFunctionToURLString): Change code using
        substringSharingImpl so it could call String::find to call StringView::contains
        instead. Also rewrote lambdas to be simpler and likely more efficient.
        Rewrote another case using substringSharingImpl so it could call String::find
        to call StringView::find instead.

        * wtf/text/StringView.cpp:
        (WTF::StringView::startsWith const): Added.

        * wtf/text/StringView.h: Tweaked style a bit, and added an overload of
        StringView::contains that takes a CodeUnitMatchFunction and an overload
        of startsWith that cakes a UChar.

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * wtf/FeatureDefines.h:

2019-06-27  Konstantin Tokarev  <annulen@yandex.ru>

        Avoid using WTF::Function for passing local function pointers and closures in URLHelpers.cpp
        https://bugs.webkit.org/show_bug.cgi?id=199271

        Reviewed by Yusuke Suzuki.

        WTF::Function allocates memory on heap, which is totally redundant in this
        case.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::isSecondLevelDomainNameAllowedByTLDRules):

2019-06-27  Timothy Hatcher  <timothy@apple.com>

        Move WebKitLegacy off of a couple AppKit ivars.
        https://bugs.webkit.org/show_bug.cgi?id=199279
        rdar://problem/34983438

        Reviewed by Tim Horton.

        * wtf/Platform.h: Added HAVE_SUBVIEWS_IVAR_SPI.

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig:
        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2019-06-27  Don Olmstead  <don.olmstead@sony.com>

        [FTW] Build JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=199254

        Reviewed by Brent Fulgham.

        * wtf/PlatformFTW.cmake: Added.

2019-06-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Bump cmake_minimum_required version to 3.10
        https://bugs.webkit.org/show_bug.cgi?id=199181

        Reviewed by Don Olmstead.

        * CMakeLists.txt:

2019-06-26  Konstantin Tokarev  <annulen@yandex.ru>

        Remove unneeded #include <wtf/glib/GRefPtr.h>
        https://bugs.webkit.org/show_bug.cgi?id=199228

        Reviewed by Michael Catanzaro.

        * wtf/MemoryPressureHandler.h:

2019-06-26  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION: ( r246394 ) webgpu/whlsl-buffer-fragment.html and webgpu/whlsl-buffer-vertex.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=199012

        Reviewed by Saam Barati.

        * wtf/Platform.h:

2019-06-25  Keith Miller  <keith_miller@apple.com>

        CagedPtr doesn't merge PAC bits back into the resulting caged pointer.
        https://bugs.webkit.org/show_bug.cgi?id=199214

        Reviewed by Yusuke Suzuki.

        The current code means that caging will just strip the any failed
        authentication bits. Adding this code doesn't appear to be a
        regression on iPhone Xs.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::getUnsafe const):
        (WTF::CagedPtr::mergePointers):

2019-06-25  Sam Weinig  <weinig@apple.com>

        Experiment with simple structured bindings use
        https://bugs.webkit.org/show_bug.cgi?id=198905

        Reviewed by Darin Adler.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::mapHostNames):
        Simplify code using c++ structured bindings (https://en.cppreference.com/w/cpp/language/structured_binding)
        to see if all the platforms will work with it.

2019-06-25  Adam Barth  <abarth@webkit.org>

        [fuchsia] Update to newer zx_clock_get syscall
        https://bugs.webkit.org/show_bug.cgi?id=199191

        Reviewed by Sam Weinig.

        Fuchsia has changed the zx_clock_get syscall to return the clock value
        via an out parameter rather than via its return value. This change
        makes zx_clock_get consistent with all the other syscalls.

        This patch updates our use of zx_clock_get to use the new syscall. The
        old syscall is no longer supported by Fuchsia.

        * wtf/fuchsia/CPUTimeFuchsia.cpp:
        (WTF::CPUTime::get): Switch to using the out parameter.
        (WTF::CPUTime::forCurrentThread): Switch to using the out parameter.

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully rename WebKitGTK+ -> WebKitGTK everywhere
        https://bugs.webkit.org/show_bug.cgi?id=199159

        Reviewed by Carlos Garcia Campos.

        * wtf/URLParser.cpp:
        (WTF::URLParser::internationalDomainNameTranscoder):

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Require GCC 7
        https://bugs.webkit.org/show_bug.cgi?id=198914

        Reviewed by Darin Adler.

        Remove now-stale GCC version check.

        * wtf/Compiler.h:

2019-06-23  Simon Fraser  <simon.fraser@apple.com>

        Add OverflowScrollProxyNodes to the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=199132

        Reviewed by Antti Koivisto.
        
        Setting indent is useful if you want to make a new stream with the indent of an
        existing stream.

        * wtf/text/TextStream.h:
        (WTF::TextStream::setIndent):

2019-06-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        Try to use C++14 std::enable_if_t in CheckedArithmetic.h again
        https://bugs.webkit.org/show_bug.cgi?id=199099

        Reviewed by Ross Kirsling.

        r242235 changed CheckedArithmetic to not use C++14. Let's try
        C++14 again.

        * wtf/CheckedArithmetic.h: Use C++14 std::make_unsigned_t and std::enable_if_t.

2019-06-18  Darin Adler  <darin@apple.com>

        Tidy up the remaining bits of the AtomicString to AtomString rename
        https://bugs.webkit.org/show_bug.cgi?id=198990

        Reviewed by Michael Catanzaro.

        * wtf/text/AtomString.cpp: Fix a comment.
        * wtf/text/AtomString.h: Tweak formatting a bit. Use nullptr instead of 0.
        Removed "using AtomicString = AtomString".
        * wtf/text/AtomStringImpl.cpp:
        (WTF::CStringTranslator::translate): Use setIsAtom instead of setIsAtomic.
        (WTF::UCharBufferTranslator::translate): Ditto.
        (WTF::HashAndUTF8CharactersTranslator::translate): Ditto.
        (WTF::SubstringTranslator::translate): Ditto.
        (WTF::LCharBufferTranslator::translate): Ditto.
        (WTF::BufferFromStaticDataTranslator::translate): Ditto.
        (WTF::AtomStringImpl::addSlowCase): Ditto.
        (WTF::AtomStringImpl::lookUpSlowCase): Updated assertion message.

        * wtf/text/AtomStringImpl.h: Tweaked the implementation of add.
        Updated comments to say AtomString.

        * wtf/text/AtomStringTable.cpp:
        (WTF::AtomStringTable::~AtomStringTable): Use setIsAtom.

        * wtf/text/StringImpl.h: Updated name of StringAtomic and
        s_hashFlagStringKindIsAtom. Renamed to flagIsAtom and setIsAtom.

        * wtf/text/WTFString.cpp:
        (WTF::String::isSafeToSendToAnotherThread const): Updated comment.

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * wtf/Platform.h:
        * wtf/glib/GTypedefs.h:

2019-06-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] IsoHeap's initialization is racy with IsoHeap::isInitialized
        https://bugs.webkit.org/show_bug.cgi?id=199053

        Reviewed by Saam Barati.

        Add constexpr static functions to generate pseudo random numbers from __LINE__.

        * wtf/WeakRandom.h:
        (WTF::WeakRandom::nextState):
        (WTF::WeakRandom::generate):
        (WTF::WeakRandom::advance):

2019-06-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add WTF::crossThreadCopy(T&&) to utilize String::isolatedCopy() &&
        https://bugs.webkit.org/show_bug.cgi?id=198957

        Reviewed by Alex Christensen.

        &&-qualified String::isolatedCopy() has a optimization path which
        does just WTFMove if it isSafeToSendToAnotherThread which means
        the object hasOneRef.

        However, WTF::crossThreadCopy was using only &-qualified
        isolatedCopy. To use the optimization, added
        WTF::crossThreadCopy(T&&) overloading.

        * wtf/CrossThreadCopier.h:
        (WTF::crossThreadCopy): Added a overload of (T&&).
        * wtf/CrossThreadTask.h:
        (WTF::createCrossThreadTask): Removed explicit template arguments of crossThreadCopy.

2019-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: replace CFNetwork SPI with new API where able
        https://bugs.webkit.org/show_bug.cgi?id=198762

        Reviewed by Timothy Hatcher.

        * wtf/Platform.h:

2019-06-19  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        * wtf/spi/cocoa/SecuritySPI.h:
        Move declarations from ArgumentCodersCF.cpp so they can be shared.

2019-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Fix build with unified sources disabled
        https://bugs.webkit.org/show_bug.cgi?id=198752

        Reviewed by Michael Catanzaro.

        * wtf/text/StringBuilder.h: Add missing include of StringConcatenateNumbers.h

2019-06-19  Zan Dobersek  <zdobersek@igalia.com>

        USE_ANGLE macro can be evaluated without being defined
        https://bugs.webkit.org/show_bug.cgi?id=198991

        Reviewed by Carlos Garcia Campos.

        * wtf/Platform.h: On platforms not yet defining USE_ANGLE, the
        incompatibility check with some other flags leads to the macro being
        evaluated even when it was not defined, producing compiler warnings.
        To avoid this, the macro should be defined to 0 before the check in
        case it was not defined already.

2019-06-18  Dean Jackson  <dino@apple.com>

        UIContextMenuInteraction implementation for WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=198986
        <rdar://problem/51875189>

        Reviewed by Andy Estes.

        Add USE_UICONTEXTMENU for iOS 13+.

        * wtf/Platform.h:

2019-06-18  Kenneth Russell  <kbr@chromium.org>

        Add preliminary ANGLE backend to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add a USE_ANGLE definition to wtf/Platform.h (currently disabled)
        which, when enabled, uses ANGLE instead of the OpenGL or OpenGL ES
        backend.

        * wtf/Platform.h:

2019-06-17  Jiewen Tan  <jiewen_tan@apple.com>

        Move SOAuthorization from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=198874
        <rdar://problem/47573431>

        Reviewed by Brent Fulgham.

        * wtf/Platform.h:
        Adds a feature flag to detect AppSSO framework.

2019-06-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r246501.

        Breaks Apple internal builds.

        Reverted changeset:

        "Support using ANGLE as the backend for the WebGL
        implementation"
        https://bugs.webkit.org/show_bug.cgi?id=197755
        https://trac.webkit.org/changeset/246501

2019-06-17  Kenneth Russell  <kbr@chromium.org>

        Support using ANGLE as the backend for the WebGL implementation
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add a USE_ANGLE definition to wtf/Platform.h (currently disabled)
        which, when enabled, uses ANGLE instead of the OpenGL or OpenGL ES
        backend.

        * wtf/Platform.h:

2019-06-16  Darin Adler  <darin@apple.com>

        Rename AtomicString to AtomString
        https://bugs.webkit.org/show_bug.cgi?id=195276

        Reviewed by Michael Catanzaro.

        * many files: Let do-webcore-rename do the renaming.

        * wtf/text/AtomString.h: After renaming, added AtomicString as a synonym for
        now; helps smooth things over with a tiny bit of Apple internal software so
        we don't have to do this all at once. Can remove it soon.

2019-06-16  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Avoid roundoff error when setting AVCapture min/max frame rate
        https://bugs.webkit.org/show_bug.cgi?id=198875
        <rdar://problem/51768374>

        Reviewed by Youenn Fablet.

        * wtf/MediaTime.h:
        (WTF::LogArgument<MediaTime>::toString):
        (WTF::LogArgument<MediaTimeRange>::toString):

2019-06-12  Antoine Quint  <graouts@apple.com>

        Show the web page URL when sharing an AR model
        https://bugs.webkit.org/show_bug.cgi?id=198812
        <rdar://problem/48689498>

        Reviewed by Dean Jackson.

        * wtf/Platform.h:

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

        Use NSURLSession for WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=198568

        Reviewed by Geoffrey Garen.

        * wtf/Platform.h:
        Introduce compile flag for WebSocket NSURLSession

2019-06-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r246322.
        https://bugs.webkit.org/show_bug.cgi?id=198796

        "It's a huge page load regression on iOS" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "Roll out PAC cage"
        https://bugs.webkit.org/show_bug.cgi?id=198726
        https://trac.webkit.org/changeset/246322

2019-06-10  Simon Fraser  <simon.fraser@apple.com>

        Add logging for UI-side compositing hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=198739

        Reviewed by Antti Koivisto.

        Make it possible to output an Objective-C object to TextStream, which will
        log its -description.

        Also add a template for OptionSet<> printing.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/text/TextStream.h:
        (WTF::operator<<):
        * wtf/text/cocoa/TextStreamCocoa.mm: Added.
        (WTF::TextStream::operator<<):

2019-06-11  Saam Barati  <sbarati@apple.com>

        Roll out PAC cage
        https://bugs.webkit.org/show_bug.cgi?id=198726

        Reviewed by Keith Miller.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CagedPtr.h:
        (WTF::CagedPtr::CagedPtr):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::operator=):
        (WTF::CagedPtr::operator== const):
        (WTF::CagedPtr::operator!= const):
        (WTF::CagedPtr::operator bool const):
        (WTF::CagedPtr::operator* const):
        (WTF::CagedPtr::operator-> const):
        (WTF::CagedPtr::operator[] const):
        (WTF::CagedPtr::getUnsafe const): Deleted.
        (WTF::CagedPtr::at const): Deleted.
        (WTF::CagedPtr::recage): Deleted.
        * wtf/CagedUniquePtr.h:
        (WTF::CagedUniquePtr::CagedUniquePtr):
        (WTF::CagedUniquePtr::create):
        (WTF::CagedUniquePtr::operator=):
        (WTF::CagedUniquePtr::~CagedUniquePtr):
        (WTF::CagedUniquePtr::destroy):
        * wtf/Gigacage.h:
        (Gigacage::caged):
        (Gigacage::cagedMayBeNull): Deleted.
        * wtf/PtrTag.h:
        (WTF::tagArrayPtr): Deleted.
        (WTF::untagArrayPtr): Deleted.
        (WTF::removeArrayPtrTag): Deleted.
        (WTF::retagArrayPtr): Deleted.
        * wtf/TaggedArrayStoragePtr.h:
        (WTF::TaggedArrayStoragePtr::TaggedArrayStoragePtr): Deleted.
        (WTF::TaggedArrayStoragePtr::get const): Deleted.
        (WTF::TaggedArrayStoragePtr::getUnsafe const): Deleted.
        (WTF::TaggedArrayStoragePtr::resize): Deleted.
        (WTF::TaggedArrayStoragePtr::operator bool const): Deleted.

2019-06-10  Andy Estes  <aestes@apple.com>

        [iOS] Use PDFKit SPI for taking snapshots when the hosting app is not entitled for global capture
        https://bugs.webkit.org/show_bug.cgi?id=198731
        <rdar://problem/46215174>

        Reviewed by Tim Horton.

        * wtf/FeatureDefines.h:

2019-06-10  Sam Weinig  <weinig@apple.com>

        Remove Dashboard support
        https://bugs.webkit.org/show_bug.cgi?id=198615

        Reviewed by Ryosuke Niwa.

        * wtf/FeatureDefines.h:

2019-06-10  Timothy Hatcher  <timothy@apple.com>

        Integrate dark mode support for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198687
        rdar://problem/51545643

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2019-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] If we have a bound interface identifier, set it on new PKPaymentRequests
        https://bugs.webkit.org/show_bug.cgi?id=198690
        <rdar://problem/48041803>

        Reviewed by Tim Horton.

        * wtf/FeatureDefines.h: Defined HAVE_PASSKIT_BOUND_INTERFACE_IDENTIFIER, and cleaned up some
        other PassKit HAVEs.

2019-06-06  Caio Lima  <ticaiolima@gmail.com>

        [JSCOnly] JSCOnly port is not building on macOS
        https://bugs.webkit.org/show_bug.cgi?id=198563

        Reviewed by Don Olmstead.

        We are adding `<mach/vm_types.h>` to fix build issues when compiling
        JSCOnly port on macOS.

        * wtf/WTFAssertions.cpp:

2019-06-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r246022.
        https://bugs.webkit.org/show_bug.cgi?id=198486

        Causing Internal build failures and JSC test failures
        (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "Reenable Gigacage on ARM64."
        https://bugs.webkit.org/show_bug.cgi?id=198453
        https://trac.webkit.org/changeset/246022

2019-06-03  Darin Adler  <darin@apple.com>

        Finish cleanup of String::number for floating point
        https://bugs.webkit.org/show_bug.cgi?id=198471

        Reviewed by Yusuke Suzuki.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::writeJSON const): Use appendNumber instead of
        appendECMAScriptNumber, since that's now the default.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendNumber): Renamed from appendShortestFormNumber.
        * wtf/text/StringBuilder.h: Removed appendShortestFormNumber and
        appendECMAScriptNumber, replacing both with overload of appendNumber.

        * wtf/text/WTFString.cpp:
        (WTF::String::number): Renamed from numberToStringShortest.
        * wtf/text/WTFString.h: Removed numberToStringShortest and
        numberToStringECMAScript, replacing both with overload of number.

2019-06-02  Keith Miller  <keith_miller@apple.com>

        Reenable Gigacage on ARM64.
        https://bugs.webkit.org/show_bug.cgi?id=198453

        Reviewed by Filip Pizlo.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::authenticatingLoad):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):

2019-05-31  Alex Christensen  <achristensen@webkit.org>

        URLParser::parseIPv6Host should properly parse 0's around compression
        https://bugs.webkit.org/show_bug.cgi?id=198424

        Reviewed by Tim Horton.

        * wtf/URLParser.cpp:
        (WTF::URLParser::parseIPv6Host):

2019-05-31  Alex Christensen  <achristensen@webkit.org>

        URLParser::parseHostAndPort should not allow non-port characters after an ipv6 host
        https://bugs.webkit.org/show_bug.cgi?id=198428
        <rdar://problem/51209196>

        Reviewed by Tim Horton.

        This matches Chrome and Firefox.

        * wtf/URLParser.cpp:
        (WTF::URLParser::parseHostAndPort):

2019-05-31  Tim Horton  <timothy_horton@apple.com>

        Optionally respect device management restrictions when loading from the network
        https://bugs.webkit.org/show_bug.cgi?id=198318
        <rdar://problem/44263806>

        Reviewed by Alex Christensen.

        * wtf/Platform.h:
        Add a HAVE flag for DeviceManagement.framework.
        It does exist in the simulator, but does not function; pretend it doesn't exist.

2019-05-31  Geoffrey Garen  <ggaren@apple.com>

        Some WeakPtr cleanup
        https://bugs.webkit.org/show_bug.cgi?id=198390

        Reviewed by Chris Dumez.

        * wtf/WeakHashSet.h:
        (WTF::HashTraits<Ref<WeakPtrImpl>>::isReleasedWeakValue):
        (WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator):
        Updated for rename to WeakPtrImpl.

        (WTF::WeakHashSet::WeakHashSetConstIterator::get const): Updated for new
        get() interface. Also, switched to iterator operator* to help clarify
        the double dereference here.

        (WTF::WeakHashSet::add):
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computeSize const):
        (WTF::HashTraits<Ref<WeakReference>>::isReleasedWeakValue): Deleted.
        Updated for rename to WeakPtrImpl.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrImpl::create):
        (WTF::WeakPtrImpl::~WeakPtrImpl): Renamed WeakReference to WeakPtrImpl.
        Now we don't need a comment explaining that this class is the backing
        implementation of WeakPtr.

        (WTF::WeakPtrImpl::get): Return the pointer type we stored, rather than
        the pointer type requested by our client. It's a little too surprising
        for a field to store one pointer type and load another.

        (WTF::WeakPtrImpl::WeakPtrImpl): Fixed a theoretical type safety bug.
        Make sure to store T::WeakValueType* instead of T*, since they might
        not be the same pointer value. (In practice, T and T::WeakValueType*
        are always the same type in this constructor because WeakPtrFactory
        makes them so, but it's best not to depend on implementation details
        across classes.)

        (WTF::WeakPtr::get const): Updated for new get() interface.

        (WTF::WeakPtr::operator bool const):
        (WTF::WeakPtr::operator=):
        (WTF::WeakPtr::clear):
        (WTF::WeakPtr::WeakPtr): Updated for WeakPtrImpl rename.

        (WTF::WeakPtrFactory::~WeakPtrFactory): Updated for WeakPtrImpl rename.

        (WTF::WeakPtrFactory::createWeakPtr const): ASSERT that the passed-in
        pointer is equal to the stored pointer. As a space optimization, we
        require our client to remind us what we point to each time a weak
        pointer is created -- but nothing guarantees that our client will do
        this correctly.

        (WTF::WeakPtrFactory::revokeAll): Updated for WeakPtrImpl rename.

        (WTF::CanMakeWeakPtr::weakPtrFactory const):
        (WTF::CanMakeWeakPtr::weakPtrFactory): Use idiomatic accessor naming.

        (WTF::weak_ptr_impl_cast): Fixed a theoretical type safety bug.
        Previously, if Base and Derived both inherited CanMakeWeakPtr, and
        you casted WeakPtr<Base> to WeakPtr<Derived> (or vice versa), and
        casting Base <-> Derived required pointer fixup, the previous
        compile-time check would accept the cast, even though the stored pointer
        would be wrong.

        (WTF::WeakPtr<T>::WeakPtr):
        (WTF::=):
        (WTF::makeWeakPtr):
        (WTF::WeakReference::create): Deleted.
        (WTF::WeakReference::~WeakReference): Deleted.
        (WTF::WeakReference::get const): Deleted.
        (WTF::WeakReference::operator bool const): Deleted.
        (WTF::WeakReference::clear): Deleted.
        (WTF::WeakReference::WeakReference): Deleted.
        (WTF::weak_reference_cast): Deleted. Updated for rename to WeakPtrImpl.

        Don't export WeakPtrImpl because it's an implmenetation detail and
        it shouldn't be easy to use outside WTF.

2019-05-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::WTF target
        https://bugs.webkit.org/show_bug.cgi?id=198400

        Reviewed by Konstantin Tokarev.

        Create the WebKit::WTF target and use that to propagate headers. Use
        WEBKIT_COPY_FILES instead of WEBKIT_MAKE_FORWARDING_HEADERS.

        * wtf/CMakeLists.txt:

2019-05-30  Saam Barati  <sbarati@apple.com>

        [WHLSL] Enforce variable lifetimes
        https://bugs.webkit.org/show_bug.cgi?id=195794
        <rdar://problem/50746293>

        Reviewed by Myles C. Maxfield.

        * wtf/PrintStream.h:

2019-05-30  Keith Rollin  <krollin@apple.com>

        Fix yet more deprecated uses of -[UIApplication interfaceOrientation]
        https://bugs.webkit.org/show_bug.cgi?id=198381
        <rdar://problem/51265846>

        Reviewed by Wenson Hsieh.

        r245267, r245272, and r245874 fixed many instances of this issue; this
        change fixes the issue for tvOS.

        * wtf/FeatureDefines.h:

2019-05-29  David Kilzer  <ddkilzer@apple.com>

        Clean up a few #include statements in WTF
        <https://webkit.org/b/198351>

        Reviewed by Alex Christensen.

        * benchmarks/HashSetDFGReplay.cpp:
        - Add missing "config.h" include.
        * wtf/ParallelJobsGeneric.cpp:
        - Replace include of ParallelJobs.h with
          ParallelJobsGeneric.h.
        * wtf/StackBounds.cpp:
        - Fix include ordering of StackBounds.h.

2019-05-29  Keith Rollin  <krollin@apple.com>

        Followup to r245267 and r245272: fix even more deprecated uses of -[UIApplication interfaceOrientation]
        https://bugs.webkit.org/show_bug.cgi?id=198348
        <rdar://problem/51234077>

        Reviewed by Wenson Hsieh.

        r245267 and r245272 fixed many instances of this issue; this change
        fixes the issue for watchOS.

        * wtf/FeatureDefines.h:

2019-05-29  David Kilzer  <ddkilzer@apple.com>

        IndexedDatabase Server thread in com.apple.WebKit.Networking process leaks objects into an autoreleasePool that's never cleared
        <https://webkit.org/b/198346>
        <rdar://problem/50895658>

        Reviewed by Brent Fulgham.

        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler):
        - Add optional second argument to enable use of an
          AutodrainedPool when running the runloop.
        (WTF::CrossThreadTaskHandler::taskRunLoop):
        - Create an AutodrainedPool if requested when
          CrossThreadTaskHandler was created.
        * wtf/CrossThreadTaskHandler.h:
        (WTF::CrossThreadTaskHandler::AutodrainedPoolForRunLoop):
        - Add enum class for enabling an AutodrainedPool for
          CrossThreadTaskHandler::taskRunLoop().
        (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler):
        - Add optional second argument to enable use of an
          AutodrainedPool when running the runloop.

2019-05-29  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr breaks vtables when upcasting to base classes
        https://bugs.webkit.org/show_bug.cgi?id=188799

        Reviewed by Youenn Fablet.

        This patch switches from reinterpret_cast to static_cast when loading
        from WeakReference storage.

        We know which type to cast *to* because it's specified by the type of
        the calling WeakPtr.

        We know which type to cast *from* because it's specified by a typedef
        in CanMakeWeakPtr.

        (Our convention is that we store a pointer to the class that derives
        from CanMakeWeakPtr. We cast from that pointer to derived pointers when
        we get(). This means that #include of the derived type header is now
        required in order to get() the pointer.)

        * wtf/WeakHashSet.h:
        (WTF::HashTraits<Ref<WeakReference>>::isReleasedWeakValue): Definition
        is now eagerly required because WeakReference is not a template anymore.

        (WTF::WeakHashSet::WeakHashSetConstIterator::get const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets):
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computesEmpty const):
        (WTF::WeakHashSet::hasNullReferences const):
        (WTF::WeakHashSet::computeSize const):
        (WTF::HashTraits<Ref<WeakReference<T>>>::isReleasedWeakValue): Deleted.
        Updated for new WeakReference get() API.

        * wtf/WeakPtr.h: Use a macro for TestAPI support. We can't use template
        specialization because WeakReference is not a class template anymore.
        (Or maybe we could have kept it working with a dummy template argument?
        Felt weird, so I switched.)

        (WTF::WeakReference::create):
        (WTF::WeakReference::~WeakReference):
        (WTF::WeakReference::get const):
        (WTF::WeakReference::operator bool const):
        (WTF::WeakReference::WeakReference): WeakReference is just a void* now.
        It's the caller's responsibility, when creating and getting, to use
        a consistent storage type. We ensure a canonical storage type using a
        typedef inside CanMakeWeakPtr.

        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtr::get const):
        (WTF::WeakPtr::operator bool const):
        (WTF::WeakPtr::operator-> const):
        (WTF::WeakPtr::operator* const): Adopted new WeakReference API.

        (WTF::WeakPtrFactory::createWeakPtr const): No need for reinterpret_cast.

        (WTF::weak_reference_cast): This isn't required for correctness, but it's
        nice to show a complier error at WeakPtr construction sites when you know
        that the types won't work. Otherwise, you get compiler errors at
        dereference sites, which are slightly more mysterious ways of saying that
        you constructed your WeakPtr incorrectly.

        (WTF::WeakPtr<T>::WeakPtr):
        (WTF::=):
        (WTF::makeWeakPtr):
        (WTF::weak_reference_upcast): Deleted.
        (WTF::weak_reference_downcast): Deleted.

2019-05-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245857.

        Breaks internal builds.

        Reverted changeset:

        "WeakPtr breaks vtables when upcasting to base classes"
        https://bugs.webkit.org/show_bug.cgi?id=188799
        https://trac.webkit.org/changeset/245857

2019-05-28  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr breaks vtables when upcasting to base classes
        https://bugs.webkit.org/show_bug.cgi?id=188799

        Reviewed by Youenn Fablet.

        This patch switches from reinterpret_cast to static_cast when loading
        from WeakReference storage.

        We know which type to cast *to* because it's specified by the type of
        the calling WeakPtr.

        We know which type to cast *from* because it's specified by a typedef
        in CanMakeWeakPtr.

        (Our convention is that we store a pointer to the class that derives
        from CanMakeWeakPtr. We cast from that pointer to derived pointers when
        we get(). This means that #include of the derived type header is now
        required in order to get() the pointer.)

        * wtf/WeakHashSet.h:
        (WTF::HashTraits<Ref<WeakReference>>::isReleasedWeakValue): Definition
        is now eagerly required because WeakReference is not a template anymore.

        (WTF::WeakHashSet::WeakHashSetConstIterator::get const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets):
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computesEmpty const):
        (WTF::WeakHashSet::hasNullReferences const):
        (WTF::WeakHashSet::computeSize const):
        (WTF::HashTraits<Ref<WeakReference<T>>>::isReleasedWeakValue): Deleted.
        Updated for new WeakReference get() API.

        * wtf/WeakPtr.h: Use a macro for TestAPI support. We can't use template
        specialization because WeakReference is not a class template anymore.
        (Or maybe we could have kept it working with a dummy template argument?
        Felt weird, so I switched.)

        (WTF::WeakReference::create):
        (WTF::WeakReference::~WeakReference):
        (WTF::WeakReference::get const):
        (WTF::WeakReference::operator bool const):
        (WTF::WeakReference::WeakReference): WeakReference is just a void* now.
        It's the caller's responsibility, when creating and getting, to use
        a consistent storage type. We ensure a canonical storage type using a
        typedef inside CanMakeWeakPtr.

        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtr::get const):
        (WTF::WeakPtr::operator bool const):
        (WTF::WeakPtr::operator-> const):
        (WTF::WeakPtr::operator* const): Adopted new WeakReference API.

        (WTF::WeakPtrFactory::createWeakPtr const): No need for reinterpret_cast.

        (WTF::weak_reference_cast): This isn't required for correctness, but it's
        nice to show a complier error at WeakPtr construction sites when you know
        that the types won't work. Otherwise, you get compiler errors at
        dereference sites, which are slightly more mysterious ways of saying that
        you constructed your WeakPtr incorrectly.

        (WTF::WeakPtr<T>::WeakPtr):
        (WTF::=):
        (WTF::makeWeakPtr):
        (WTF::weak_reference_upcast): Deleted.
        (WTF::weak_reference_downcast): Deleted.

2019-05-27  Chris Dumez  <cdumez@apple.com>

        Use a strongly-typed identifier for pages
        https://bugs.webkit.org/show_bug.cgi?id=198206

        Reviewed by Youenn Fablet.

        * wtf/ObjectIdentifier.h:
        (WTF::operator<<):

2019-05-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use target oriented design for bmalloc
        https://bugs.webkit.org/show_bug.cgi?id=198046

        Reviewed by Konstantin Tokarev.

        Use WebKit::bmalloc target.

        * wtf/CMakeLists.txt:

2019-05-23  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Implement platformUserPreferredLanguages.
        https://bugs.webkit.org/show_bug.cgi?id=198149

        Reviewed by Fujii Hironori.

        * wtf/PlatformPlayStation.cmake:
        * wtf/playstation/LanguagePlayStation.cpp: Added.
        (WTF::platformUserPreferredLanguages):

2019-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        font-optical-sizing applies the wrong variation value
        https://bugs.webkit.org/show_bug.cgi?id=197528
        <rdar://problem/50152854>

        Reviewed by Antti Koivisto.

        * wtf/Platform.h:

2019-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245598.

        Breaks watchOS build.

        Reverted changeset:

        "font-optical-sizing applies the wrong variation value"
        https://bugs.webkit.org/show_bug.cgi?id=197528
        https://trac.webkit.org/changeset/245598

2019-05-21  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Don't call fcntl.
        https://bugs.webkit.org/show_bug.cgi?id=197961

        Reviewed by Fujii Hironori.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/UniStdExtras.h:
        * wtf/playstation/UniStdExtrasPlayStation.cpp: Added.
        (WTF::setCloseOnExec):
        (WTF::dupCloseOnExec):
        (WTF::setNonBlock):
        * wtf/unix/UniStdExtrasUnix.cpp: Renamed from Source/WTF/wtf/UniStdExtras.cpp.
        (WTF::setNonBlock):
        Move UniStdExtras to unix/, add a PlayStation version that doesn't use fcntl, add an abstraction for O_NONBLOCK.

2019-05-20  Tadeu Zagallo  <tzagallo@apple.com>

        Only cache bytecode for API clients in data vaults
        https://bugs.webkit.org/show_bug.cgi?id=197898

        Reviewed by Keith Miller.

        Add SPI to check if a filesystem path is restricted as a data vault.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/spi/darwin/DataVaultSPI.h: Added.

2019-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Repeating timer is not stopped when stop is called from the callback
        https://bugs.webkit.org/show_bug.cgi?id=197986

        Reviewed by Michael Catanzaro.

        In case of repeating timers we always update the ready time to fire interval after the user callback is called.

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::stop): Reset m_fireInterval and m_isRepeating.

2019-05-19  Darin Adler  <darin@apple.com>

        Change String::number to use "shortest" instead of "fixed precision 6 digits"
        https://bugs.webkit.org/show_bug.cgi?id=178319

        Reviewed by Sam Weinig.

        * wtf/text/StringBuilder.h: Delete appendNumber for floating point and
        appendECMAScriptNumber for single-precision.

        * wtf/text/WTFString.h: Delete String::number for floating point and
        numberToStringECMAScript for single-precision.

2019-05-18  Tadeu Zagallo  <tzagallo@apple.com>

        Add extra information to dumpJITMemory
        https://bugs.webkit.org/show_bug.cgi?id=197998

        Reviewed by Saam Barati.

        Add a new trace point code for JSC::dumpJITMemory

        * wtf/SystemTracing.h:

2019-05-17  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use builtin FindICU
        https://bugs.webkit.org/show_bug.cgi?id=197934

        Reviewed by Michael Catanzaro.

        Remove uses of ICU_INCLUDE_DIRS and ICU_LIBRARIES. Use ICU:: targets which end
        up propagating to all consumers of WTF.

        * wtf/CMakeLists.txt:
        * wtf/PlatformPlayStation.cmake:

2019-05-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r245418.
        https://bugs.webkit.org/show_bug.cgi?id=197989

        New API test causing crashes on Mojave testers (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245418

2019-05-16  Keith Miller  <keith_miller@apple.com>

        Wasm should cage the memory base pointers in structs
        https://bugs.webkit.org/show_bug.cgi?id=197620

        Reviewed by Saam Barati.

        Rename reauthenticate to recage.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::recage):
        (WTF::CagedPtr::reauthenticate): Deleted.

2019-05-16  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        * wtf/spi/cocoa/SecuritySPI.h:
        Move declarations from ArgumentCodersCF.cpp so they can be shared.

2019-05-16  Eike Rathke  <erack@redhat.com>

        Fix memcpy() call for big endian
        https://bugs.webkit.org/show_bug.cgi?id=197945

        Reviewed by Michael Catanzaro.

        * wtf/Packed.h:
        (WTF::alignof):

2019-05-15  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] WTFCrash should preserve register state.
        https://bugs.webkit.org/show_bug.cgi?id=197932

        Reviewed by Don Olmstead.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        Let r196397 apply to PlayStation port as well.

2019-05-15  Simon Fraser  <simon.fraser@apple.com>

        Make LOG_WITH_STREAM more efficient
        https://bugs.webkit.org/show_bug.cgi?id=197905

        Reviewed by Alex Christensen.

        Add a streamable repeat() class that can be used to output a series of characters.
        This is useful for indenting output.

        * wtf/text/TextStream.h:
        (WTF::TextStream::repeat::repeat):
        (WTF::TextStream::operator<<):

2019-05-15  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        compilation failure with clang 9
        https://bugs.webkit.org/show_bug.cgi?id=197911

        Reviewed by Alex Christensen.

        Use std namespace for nullptr_t in tagArrayPtr templates.

        * wtf/PtrTag.h:
        (WTF::tagArrayPtr):

2019-05-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r245281.
        https://bugs.webkit.org/show_bug.cgi?id=197887

        Broke API Test TestWebKitAPI.Challenge.ClientCertificate
        (Requested by aakashjain on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245281

2019-05-14  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        * wtf/spi/cocoa/SecuritySPI.h:
        Move declarations from ArgumentCodersCF.cpp so they can be shared.

2019-05-13  Robin Morisset  <rmorisset@apple.com>

        IndexSet::isEmpty should use BitVector::isEmpty() instead of size()
        https://bugs.webkit.org/show_bug.cgi?id=197857

        Reviewed by Darin Adler.

        * wtf/IndexSet.h:
        (WTF::IndexSet::isEmpty const):

2019-05-13  Youenn Fablet  <youenn@apple.com>

        [Mac] Use realpath for dlopen_preflight
        https://bugs.webkit.org/show_bug.cgi?id=197803

        Reviewed by Eric Carlson.

        * wtf/cocoa/SoftLinking.h:

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, wrokaround for MACH_VM_MAX_ADDRESS in ARM32_64
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Interestingly, MACH_VM_MAX_ADDRESS is larger than 32bit in ARM32_64, I think this is a bug.
        But for now, we workaround for this case by using `CPU(ADDRESS64)`.

        * wtf/WTFAssertions.cpp:

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Remove Threading workaround for support libraries in Windows
        https://bugs.webkit.org/show_bug.cgi?id=197350

        Reviewed by Darin Adler.

        We kept old APIs for some support libraries at 2017. This patch removes them.

        * wtf/Threading.h:
        * wtf/win/ThreadingWin.cpp:
        (WTF::createThread): Deleted.
        (WTF::waitForThreadCompletion): Deleted.

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Simplify GCThread and CompilationThread flags by adding them to WTF::Thread
        https://bugs.webkit.org/show_bug.cgi?id=197146

        Reviewed by Saam Barati.

        Since GCThread and CompilationThread flags exist in WTF, we put these flags into WTF::Thread directly instead of holding them in ThreadSpecific<>.
        And this patch removes dependency from Threading.h to ThreadSpecific.h. ThreadSpecific.h's OS threading primitives are moved to ThreadingPrimitives.h,
        and Threading.h relies on it instead.

        * wtf/CompilationThread.cpp:
        (WTF::isCompilationThread):
        (WTF::initializeCompilationThreads): Deleted.
        (WTF::exchangeIsCompilationThread): Deleted.
        * wtf/CompilationThread.h:
        (WTF::CompilationScope::CompilationScope):
        (WTF::CompilationScope::~CompilationScope):
        (WTF::CompilationScope::leaveEarly):
        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        (WTF::initializeMainThreadToProcessMainThread):
        (WTF::isMainThreadOrGCThread):
        (WTF::initializeGCThreads): Deleted.
        (WTF::registerGCThread): Deleted.
        (WTF::mayBeGCThread): Deleted.
        * wtf/MainThread.h:
        * wtf/ThreadSpecific.h:
        (WTF::canBeGCThread>::ThreadSpecific):
        (WTF::canBeGCThread>::set):
        (WTF::threadSpecificKeyCreate): Deleted.
        (WTF::threadSpecificKeyDelete): Deleted.
        (WTF::threadSpecificSet): Deleted.
        (WTF::threadSpecificGet): Deleted.
        * wtf/Threading.cpp:
        (WTF::Thread::exchangeIsCompilationThread):
        (WTF::Thread::registerGCThread):
        (WTF::Thread::mayBeGCThread):
        * wtf/Threading.h:
        (WTF::Thread::isCompilationThread const):
        (WTF::Thread::gcThreadType const):
        (WTF::Thread::joinableState const):
        (WTF::Thread::hasExited const):
        (WTF::Thread::Thread):
        (WTF::Thread::joinableState): Deleted.
        (WTF::Thread::hasExited): Deleted.
        * wtf/ThreadingPrimitives.h:
        (WTF::threadSpecificKeyCreate):
        (WTF::threadSpecificKeyDelete):
        (WTF::threadSpecificSet):
        (WTF::threadSpecificGet):
        * wtf/win/ThreadSpecificWin.cpp:
        (WTF::flsKeys):

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r245214
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Suggested by Sam. We should have static_assert with MACH_VM_MAX_ADDRESS.

        * wtf/WTFAssertions.cpp:

2019-05-13  Youenn Fablet  <youenn@apple.com>

        Use kDNSServiceFlagsKnownUnique for DNSServiceRegisterRecord only on platforms supporting it
        https://bugs.webkit.org/show_bug.cgi?id=197802

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress miscelaneous JIT related data structures with Packed<>
        https://bugs.webkit.org/show_bug.cgi?id=197830

        Reviewed by Saam Barati.

        * wtf/Packed.h:
        (WTF::alignof):

2019-05-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused variable warnings in release builds

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::escapeUnsafeCharacters):

2019-05-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress Watchpoint size by using enum type and Packed<> data structure
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Reviewed by Filip Pizlo.

        This patch introduces a new data structures, WTF::Packed, WTF::PackedPtr, and WTF::PackedAlignedPtr.

        - WTF::Packed

            WTF::Packed is data storage. We can read and write trivial (in C++ term [1]) data to this storage. The difference to
            the usual storage is that the alignment of this storage is always 1. We access the underlying data by using unalignedLoad/unalignedStore.
            This class offers alignment = 1 data structure instead of missing the following characteristics.

                1. Load / Store are non atomic even if the data size is within a pointer width. We should not use this for a member which can be accessed
                   in a racy way. (e.g. fields accessed optimistically from the concurrent compilers).

                2. We cannot take reference / pointer to the underlying storage since they are unaligned.

                3. Access to this storage is unaligned access. The code is using memcpy, and the compiler will convert to an appropriate unaligned access
                   in certain architectures (x86_64 / ARM64). It could be slow. So use it for non performance sensitive & memory sensitive places.

        - WTF::PackedPtr

            WTF::PackedPtr is a specialization of WTF::Packed<T*>. And it is basically WTF::PackedAlignedPtr with alignment = 1. We further compact
            the pointer by leveraging the platform specific knowledge. In 64bit architectures, the effective width of pointers are less than 64 bit.
            In x86_64, it is 48 bits. And Darwin ARM64 is further smaller, 36 bits. This information allows us to compact the pointer to 6 bytes in
            x86_64 and 5 bytes in Darwin ARM64.

        - WTF::PackedAlignedPtr

            WTF::PackedAlignedPtr is the WTF::PackedPtr with alignment information of the T. If we use this alignment information, we could reduce the
            size of packed pointer further in some cases. For example, since we guarantee that JSCells are 16 byte aligned, low 4 bits are empty. Leveraging
            this information in Darwin ARM64 platform allows us to make packed JSCell pointer 4 bytes (36 - 4 bits). We do not use passed alignment
            information if it is not profitable.

        We also have PackedPtrTraits. This is new PtrTraits and use it for various data structures such as Bag<>.

        [1]: https://en.cppreference.com/w/cpp/types/is_trivial

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Bag.h:
        (WTF::Bag::clear):
        (WTF::Bag::iterator::operator++):
        * wtf/CMakeLists.txt:
        * wtf/DumbPtrTraits.h:
        * wtf/DumbValueTraits.h:
        * wtf/MathExtras.h:
        (WTF::clzConstexpr):
        (WTF::clz):
        (WTF::ctzConstexpr):
        (WTF::ctz):
        (WTF::getLSBSetConstexpr):
        (WTF::getMSBSetConstexpr):
        * wtf/Packed.h: Added.
        (WTF::Packed::Packed):
        (WTF::Packed::get const):
        (WTF::Packed::set):
        (WTF::Packed::operator=):
        (WTF::Packed::exchange):
        (WTF::Packed::swap):
        (WTF::alignof):
        (WTF::PackedPtrTraits::exchange):
        (WTF::PackedPtrTraits::swap):
        (WTF::PackedPtrTraits::unwrap):
        * wtf/Platform.h:
        * wtf/SentinelLinkedList.h:
        (WTF::BasicRawSentinelNode::BasicRawSentinelNode):
        (WTF::BasicRawSentinelNode::prev):
        (WTF::BasicRawSentinelNode::next):
        (WTF::PtrTraits>::remove):
        (WTF::PtrTraits>::prepend):
        (WTF::PtrTraits>::append):
        (WTF::RawNode>::SentinelLinkedList):
        (WTF::RawNode>::remove):
        (WTF::BasicRawSentinelNode<T>::remove): Deleted.
        (WTF::BasicRawSentinelNode<T>::prepend): Deleted.
        (WTF::BasicRawSentinelNode<T>::append): Deleted.
        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOfImpl):
        (WTF::roundUpToMultipleOfImpl0): Deleted.
        * wtf/UnalignedAccess.h:
        (WTF::unalignedLoad):
        (WTF::unalignedStore):

2019-05-10  Saam barati  <sbarati@apple.com>

        Bag's move operator= leaks memory
        https://bugs.webkit.org/show_bug.cgi?id=197757

        Reviewed by Keith Miller.

        It was unused. So I'm just removing it. We can implement it properly
        if we ever need it.

        * wtf/Bag.h:
        (WTF::Bag::operator=): Deleted.

2019-05-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] storage/indexeddb tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=196289

        Reviewed by Alex Christensen.

        * wtf/FileSystem.h: Added hardLink.
        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::hardLink):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::hardLink):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::hardLink):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        Added hardLink. Let hardLinkOrCopyFile use the hardLink.

2019-05-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Remove "private:" from Noncopyable and Nonmovable macros
        https://bugs.webkit.org/show_bug.cgi?id=197767

        Reviewed by Saam Barati.

        We no longer need "private:".

        * wtf/Noncopyable.h:
        * wtf/Nonmovable.h:

2019-05-08  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Rework WPE RunLoopSourcePriority values
        https://bugs.webkit.org/show_bug.cgi?id=197167

        Reviewed by Carlos Garcia Campos.

        The GLib priorities for the WPE port were initially aligned on the -70
        value, theory being that this would help avoid any default-priority
        GSources spawned in different dependency libraries affecting our
        scheduling. Today it seems that extra caution might not be really
        necessary.

        This change aligns the base priority value with GLib's default priority
        value of 0. We maintain the relativity of priority values by effectively
        increasing each priority by 70.

        * wtf/glib/RunLoopSourcePriority.h:

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set HSTS storage directory
        https://bugs.webkit.org/show_bug.cgi?id=197259

        Reviewed by Brady Eidson.

        * wtf/Platform.h:

2019-05-08  Keith Miller  <keith_miller@apple.com>

        Remove Gigacage from arm64 and use PAC for arm64e instead
        https://bugs.webkit.org/show_bug.cgi?id=197110

        Reviewed by Saam Barati.

        This patch changes the Gigacage to use PAC on arm64e. As part of
        this process all platforms must provide their length when
        materializing the caged pointer. Since it would be somewhat
        confusing to have two parameters for an operator [] those methods
        have been removed. Lastly, this patch removes the specializations
        for void* caged pointers, instead opting to use enable_if on the
        methods that would normally fail on void* e.g. anything that
        returns a T&.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CagedPtr.h:
        (WTF::CagedPtr::CagedPtr):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::getUnsafe const):
        (WTF::CagedPtr::at const):
        (WTF::CagedPtr::reauthenticate):
        (WTF::CagedPtr::operator=):
        (WTF::CagedPtr::operator== const):
        (WTF::CagedPtr::operator bool const):
        (WTF::CagedPtr::operator* const): Deleted.
        (WTF::CagedPtr::operator-> const): Deleted.
        (WTF::CagedPtr::operator[] const): Deleted.
        (): Deleted.
        * wtf/CagedUniquePtr.h:
        (WTF::CagedUniquePtr::CagedUniquePtr):
        (WTF::CagedUniquePtr::create):
        (WTF::CagedUniquePtr::~CagedUniquePtr):
        (WTF::CagedUniquePtr::destroy):
        (): Deleted.
        * wtf/Gigacage.h:
        (Gigacage::cagedMayBeNull):
        * wtf/PtrTag.h:
        (WTF::tagArrayPtr):
        (WTF::untagArrayPtr):
        (WTF::removeArrayPtrTag):
        (WTF::retagArrayPtr):
        * wtf/TaggedArrayStoragePtr.h: Copied from Source/JavaScriptCore/runtime/ArrayBufferView.cpp.
        (WTF::TaggedArrayStoragePtr::TaggedArrayStoragePtr):
        (WTF::TaggedArrayStoragePtr::get const):
        (WTF::TaggedArrayStoragePtr::getUnsafe const):
        (WTF::TaggedArrayStoragePtr::resize):
        (WTF::TaggedArrayStoragePtr::operator bool const):

2019-05-08  Robin Morisset  <rmorisset@apple.com>

        WTF::TimingScope should show the total duration and not just the mean
        https://bugs.webkit.org/show_bug.cgi?id=197672

        Reviewed by Alex Christensen.

        * wtf/TimingScope.cpp:
        (WTF::TimingScope::scopeDidEnd):

2019-05-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] LLIntPrototypeLoadAdaptiveStructureWatchpoint does not require Bag<>
        https://bugs.webkit.org/show_bug.cgi?id=197645

        Reviewed by Saam Barati.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Nonmovable.h: Copied from Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h.
        * wtf/Vector.h:
        (WTF::minCapacity>::uncheckedConstructAndAppend):

2019-05-07  Eric Carlson  <eric.carlson@apple.com>

        Define media buffering policy
        https://bugs.webkit.org/show_bug.cgi?id=196979
        <rdar://problem/28383861>

        Reviewed by Jer Noble.

        * wtf/Platform.h:

2019-05-07  Robin Morisset  <rmorisset@apple.com>

        WTF::BitVector should have an isEmpty() method
        https://bugs.webkit.org/show_bug.cgi?id=197637

        Reviewed by Keith Miller.

        * wtf/BitVector.cpp:
        (WTF::BitVector::isEmptySlow const):
        * wtf/BitVector.h:
        (WTF::BitVector::isEmpty const):

2019-05-07  Brent Fulgham  <bfulgham@apple.com>

        Correct JSON parser to address unterminated escape character
        https://bugs.webkit.org/show_bug.cgi?id=197582
        <rdar://problem/50459177>

        Reviewed by Alex Christensen.

        Correct JSON parser code to properly deal with unterminated escape
        characters.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::decodeString):
        (WTF::JSONImpl::parseStringToken):

2019-05-07  Alex Christensen  <achristensen@webkit.org>

        Add a release assertion that Functions can only be constructed from non-null CompletionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=197641

        Reviewed by Chris Dumez.

        This will help us find the cause of rdar://problem/48679972 by seeing the crash when the Function is dispatched,
        not when it's called with no interesting stack trace.  I manually verified this assertion is hit in such a case.
        We should also have no legitimate use of creating a Function out of a null CompletionHandler then never calling it.

        * wtf/CompletionHandler.h:
        (WTF::Detail::CallableWrapper<CompletionHandler<Out):
        * wtf/Function.h:
        (WTF::Detail::CallableWrapperBase::~CallableWrapperBase):
        (WTF::Detail::CallableWrapper::CallableWrapper):
        (WTF::Function<Out):

2019-05-06  Christopher Reid  <chris.reid@sony.com>

        [JSC] Respect already defined USE_LLINT_EMBEDDED_OPCODE_ID compiler variable.
        https://bugs.webkit.org/show_bug.cgi?id=197633

        Reviewed by Don Olmstead.

        When the variable `USE_LLINT_EMBEDDED_OPCODE_ID` is defined, stop defining
        its value with platform default one.

        * wtf/Platform.h:

2019-05-03  Sihui Liu  <sihui_liu@apple.com>

        Add assertion to check whether shm files have maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197390
        <rdar://problem/42685773>

        Reviewed by Geoffrey Garen.

        * wtf/FileSystem.cpp:
        (WTF::FileSystemImpl::isSafeToUseMemoryMapForPath):
        (WTF::FileSystemImpl::makeSafeToUseMemoryMapForPath):
        * wtf/FileSystem.h:
        * wtf/cocoa/FileSystemCocoa.mm:
        (WTF::FileSystemImpl::isSafeToUseMemoryMapForPath):
        (WTF::FileSystemImpl::makeSafeToUseMemoryMapForPath):

2019-05-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244881.
        https://bugs.webkit.org/show_bug.cgi?id=197559

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Mark U+01C0 as a homograph of U+006C
        https://bugs.webkit.org/show_bug.cgi?id=197526
        <rdar://problem/50301904>

        Reviewed by Tim Horton.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::isLookalikeCharacter):

2019-05-02  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Replace WEBKIT_MAKE_FORWARDING_HEADERS with WEBKIT_COPY_FILES.

        * wtf/CMakeLists.txt:

2019-05-01  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8Internal): Added code to compute string length when the
        end is nullptr; this behavior used to be implemented inside the
        calculateStringHashAndLengthFromUTF8MaskingTop8Bits function.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::HashAndUTF8CharactersTranslator::translate): Updated for change to
        convertUTF8ToUTF16.

        * wtf/text/AtomicStringImpl.h: Took the WTF_EXPORT_PRIVATE off of the
        AtomicStringImpl::addUTF8 function. This is used only inside a non-inlined function in
        the AtomicString class and its behavior changed subtly in this patch; it's helpful
        to document that it's not exported.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::utf8Impl): Don't pass "true" for strictness to convertUTF16ToUTF8
        since strict is the default. Also updated for changes to ConversionResult.
        (WTF::StringImpl::utf8ForCharacters): Updated for change to convertLatin1ToUTF8.
        (WTF::StringImpl::tryGetUtf8ForRange const): Ditto.

        * wtf/text/StringView.cpp: Removed uneeded include of UTF8Conversion.h.

        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8): Updated for change to convertUTF8ToUTF16.

        * wtf/unicode/UTF8Conversion.cpp:
        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII): Deleted.
        (WTF::Unicode::inlineUTF8SequenceLength): Deleted.
        (WTF::Unicode::UTF8SequenceLength): Deleted.
        (WTF::Unicode::decodeUTF8Sequence): Deleted.
        (WTF::Unicode::convertLatin1ToUTF8): Use U8_APPEND, enabling us to remove
        almost everything in the function. Also changed resturn value to be a boolean
        to indicate success since there is only one possible failure (target exhausted).
        There is room for further simplification, since most callers have lengths rather
        than end pointers for the source buffer, and all but one caller supplies a buffer
        size known to be sufficient, so those don't need a return value, nor do they need
        to pass an end of buffer pointer.
        (WTF::Unicode::convertUTF16ToUTF8): Use U_IS_LEAD, U_IS_TRAIL,
        U16_GET_SUPPLEMENTARY, U_IS_SURROGATE, and U8_APPEND. Also changed behavior
        for non-strict mode so that unpaired surrogates will be turned into the
        replacement character instead of invalid UTF-8 sequences, because U8_APPEND
        won't create an invalid UTF-8 sequence, and because we don't need to do that
        for any good reason at any call site.
        (WTF::Unicode::isLegalUTF8): Deleted.
        (WTF::Unicode::readUTF8Sequence): Deleted.
        (WTF::Unicode::convertUTF8ToUTF16): Use U8_NEXT instead of
        inlineUTF8SequenceLength, isLegalUTF8, and readUTF8Sequence. Use
        U16_APPEND instead of lots of code that does the same thing. There is
        room for further simplification since most callers don't need the "all ASCII"
        feature and could probably pass the arguments in a more natural way.
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8MaskingTop8Bits):
        Use U8_NEXT instead of isLegalUTF8, readUTF8Sequence, and various
        error handling checks for things that are handled by U8_NEXT. Also removed
        support for passing nullptr for end to specify a null-terminated string.
        (WTF::Unicode::equalUTF16WithUTF8): Ditto.

        * wtf/unicode/UTF8Conversion.h: Removed UTF8SequenceLength and
        decodeUTF8Sequence. Changed the ConversionResult to match WebKit coding
        style, with an eye toward perhaps removing it in the future. Changed
        the convertUTF8ToUTF16 return value to a boolean and removed the "strict"
        argument since no caller was passing false. Changed the convertLatin1ToUTF8
        return value to a boolean. Tweaked comments.

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244821.

        Causing

        Reverted changeset:

        "WebKit has too much of its own UTF-8 code and should rely
        more on ICU's UTF-8 support"
        https://bugs.webkit.org/show_bug.cgi?id=195535
        https://trac.webkit.org/changeset/244821

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244822.

        Causing 4 Test262 failures on JSC Release and Debug

        Reverted changeset:

        https://trac.webkit.org/changeset/244822 https://trac.webkit.org/changeset/244821

2019-04-29  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8Internal): Added code to compute string length when the
        end is nullptr; this behavior used to be implemented inside the
        calculateStringHashAndLengthFromUTF8MaskingTop8Bits function.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::HashAndUTF8CharactersTranslator::translate): Updated for change to
        convertUTF8ToUTF16.

        * wtf/text/AtomicStringImpl.h: Took the WTF_EXPORT_PRIVATE off of the
        AtomicStringImpl::addUTF8 function. This is used only inside a non-inlined function in
        the AtomicString class and its behavior changed subtly in this patch; it's helpful
        to document that it's not exported.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::utf8Impl): Don't pass "true" for strictness to convertUTF16ToUTF8
        since strict is the default. Also updated for changes to ConversionResult.
        (WTF::StringImpl::utf8ForCharacters): Updated for change to convertLatin1ToUTF8.
        (WTF::StringImpl::tryGetUtf8ForRange const): Ditto.

        * wtf/text/StringView.cpp: Removed uneeded include of UTF8Conversion.h.

        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8): Updated for change to convertUTF8ToUTF16.

        * wtf/unicode/UTF8Conversion.cpp:
        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII): Deleted.
        (WTF::Unicode::inlineUTF8SequenceLength): Deleted.
        (WTF::Unicode::UTF8SequenceLength): Deleted.
        (WTF::Unicode::decodeUTF8Sequence): Deleted.
        (WTF::Unicode::convertLatin1ToUTF8): Use U8_APPEND, enabling us to remove
        almost everything in the function. Also changed resturn value to be a boolean
        to indicate success since there is only one possible failure (target exhausted).
        There is room for further simplification, since most callers have lengths rather
        than end pointers for the source buffer, and all but one caller supplies a buffer
        size known to be sufficient, so those don't need a return value, nor do they need
        to pass an end of buffer pointer.
        (WTF::Unicode::convertUTF16ToUTF8): Use U_IS_LEAD, U_IS_TRAIL,
        U16_GET_SUPPLEMENTARY, U_IS_SURROGATE, and U8_APPEND. Also changed behavior
        for non-strict mode so that unpaired surrogates will be turned into the
        replacement character instead of invalid UTF-8 sequences, because U8_APPEND
        won't create an invalid UTF-8 sequence, and because we don't need to do that
        for any good reason at any call site.
        (WTF::Unicode::isLegalUTF8): Deleted.
        (WTF::Unicode::readUTF8Sequence): Deleted.
        (WTF::Unicode::convertUTF8ToUTF16): Use U8_NEXT instead of
        inlineUTF8SequenceLength, isLegalUTF8, and readUTF8Sequence. Use
        U16_APPEND instead of lots of code that does the same thing. There is
        room for further simplification since most callers don't need the "all ASCII"
        feature and could probably pass the arguments in a more natural way.
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8MaskingTop8Bits):
        Use U8_NEXT instead of isLegalUTF8, readUTF8Sequence, and various
        error handling checks for things that are handled by U8_NEXT. Also removed
        support for passing nullptr for end to specify a null-terminated string.
        (WTF::Unicode::equalUTF16WithUTF8): Ditto.

        * wtf/unicode/UTF8Conversion.h: Removed UTF8SequenceLength and
        decodeUTF8Sequence. Changed the ConversionResult to match WebKit coding
        style, with an eye toward perhaps removing it in the future. Changed
        the convertUTF8ToUTF16 return value to a boolean and removed the "strict"
        argument since no caller was passing false. Changed the convertLatin1ToUTF8
        return value to a boolean. Tweaked comments.

2019-04-30  John Wilander  <wilander@apple.com>

        Add logging of Ad Click Attribution errors and events to a dedicated channel
        https://bugs.webkit.org/show_bug.cgi?id=197332
        <rdar://problem/49918800>

        Reviewed by Youenn Fablet.

        Added missing RELEASE_LOG_INFO and RELEASE_LOG_INFO_IF dummies
        for RELEASE_LOG_DISABLED.

        * wtf/Assertions.h:

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Make Document audio producers use WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=197382

        Reviewed by Eric Carlson.

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::hasNullReferences const):

2019-04-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244773.
        https://bugs.webkit.org/show_bug.cgi?id=197436

        Causing assertion failures on debug queues (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Make Document audio producers use WeakPtr"
        https://bugs.webkit.org/show_bug.cgi?id=197382
        https://trac.webkit.org/changeset/244773

2019-04-30  Youenn Fablet  <youenn@apple.com>

        Make Document audio producers use WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=197382

        Reviewed by Eric Carlson.

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::hasNullReferences const):

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-29  Yusuke Suzuki  <ysuzuki@apple.com>

        JITStubRoutineSet wastes 180KB of HashTable capacity on can.com
        https://bugs.webkit.org/show_bug.cgi?id=186732

        Reviewed by Saam Barati.

        * wtf/Range.h:
        (WTF::Range::contains const):

2019-04-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Add flag to enable version information stamping and disable by default.
        https://bugs.webkit.org/show_bug.cgi?id=197249
        <rdar://problem/50224412>

        Reviewed by Ross Kirsling.

        This feature is only used in AppleWin port. Add flag for this task and make it OFF by default.
        Then enable it by default on AppleWin.

        * wtf/CMakeLists.txt:

2019-04-26  Don Olmstead  <don.olmstead@sony.com>

        Add WTF::findIgnoringASCIICaseWithoutLength to replace strcasestr
        https://bugs.webkit.org/show_bug.cgi?id=197291

        Reviewed by Konstantin Tokarev.

        Adds an implementation of strcasestr within WTF.

        * wtf/text/StringCommon.h:
        (WTF::findIgnoringASCIICaseWithoutLength):

2019-04-26  Sihui Liu  <sihui_liu@apple.com>

        Stop IDB transactions to release locked database files when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=196372
        <rdar://problem/48930116>

        Reviewed by Brady Eidson.

        Provide a method to suspend the thread and block main thread until the thread is suspended.

        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::taskRunLoop):
        (WTF::CrossThreadTaskHandler::suspendAndWait):
        (WTF::CrossThreadTaskHandler::resume):
        * wtf/CrossThreadTaskHandler.h:

2019-04-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r244669.

        Windows ports can't clean build.

        Reverted changeset:

        "[Win] Add flag to enable version information stamping and
        disable by default."
        https://bugs.webkit.org/show_bug.cgi?id=197249
        https://trac.webkit.org/changeset/244669

2019-04-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Add flag to enable version information stamping and disable by default.
        https://bugs.webkit.org/show_bug.cgi?id=197249

        Reviewed by Ross Kirsling.

        This feature is only used in AppleWin port. Add flag for this task and make it OFF by default.
        Then enable it by default on AppleWin.

        * wtf/CMakeLists.txt:

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * wtf/FeatureDefines.h:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix High Sierra build after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * wtf/StdLibExtras.h:
        High Sierra thinks __cplusplus is 201406 even when using C++17.
        Removing the __cplusplus check resolves the build failure on High Sierra.
        We can clean up StdLibExtras more later.

2019-04-25  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        * wtf/CMakeLists.txt:
        * wtf/Variant.h:
        (WTF::switchOn):

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Remove DeprecatedOptional
        https://bugs.webkit.org/show_bug.cgi?id=197161

        Reviewed by Darin Adler.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DeprecatedOptional.h: Removed.

2019-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Michael Catanzaro.

        Define HAVE_OS_DARK_MODE_SUPPORT for GTK port.

        * wtf/Platform.h:

2019-04-24  Tim Horton  <timothy_horton@apple.com>

        Clean up WKActionSheetAssistant's use of LaunchServices
        https://bugs.webkit.org/show_bug.cgi?id=194645
        <rdar://problem/47707952>

        Reviewed by Andy Estes.

        * wtf/Platform.h:

2019-04-24  chris fleizach  <cfleizach@apple.com>

        AX: Remove deprecated Accessibility Object Model events
        https://bugs.webkit.org/show_bug.cgi?id=197073
        <rdar://problem/50027819>

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h:

2019-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244558.
        https://bugs.webkit.org/show_bug.cgi?id=197219

        Causing crashes on iOS Sim Release and Debug (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Remove DeprecatedOptional"
        https://bugs.webkit.org/show_bug.cgi?id=197161
        https://trac.webkit.org/changeset/244558

2019-04-23  Alex Christensen  <achristensen@webkit.org>

        Remove DeprecatedOptional
        https://bugs.webkit.org/show_bug.cgi?id=197161

        Reviewed by Darin Adler.

        This was added in r209326 to be compatible with a shipping version of Safari.
        We have released several versions of Safari since then, so do what the comments say and remove it.
        The existence of this std::optional makes migrating to C++17 harder, and there's no reason to keep it.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DeprecatedOptional.h: Removed.

2019-04-21  Zan Dobersek  <zdobersek@igalia.com>

        [WTF] Generic memoryFootprint() implementation should use bmalloc on Linux
        https://bugs.webkit.org/show_bug.cgi?id=196963

        Reviewed by Don Olmstead.

        Have the generic memoryFootprint() implementation use bmalloc's
        memoryFootprint() API on Linux, whenever the system malloc option is
        not enabled. Limitation to Linux platforms is due to the bmalloc
        implementation being limited to those configurations (excluding iOS
        which doesn't use MemoryFootprintGeneric.cpp).

        * wtf/PlatformWPE.cmake: Switch to building MemoryFootprintGeneric.cpp.
        * wtf/generic/MemoryFootprintGeneric.cpp:
        (WTF::memoryFootprint):

2019-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        HashTable::removeIf always shrinks the hash table by half even if there is nothing left
        https://bugs.webkit.org/show_bug.cgi?id=196681
        <rdar://problem/49917764>

        Reviewed by Darin Adler.

        Address Darin's comments by removing the explicit type from std::max.

        * wtf/HashTable.h:
        (WTF::KeyTraits>::computeBestTableSize):
        (WTF::KeyTraits>::shrinkToBestSize):

2019-04-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Improve detection of when web views go to background / foreground
        https://bugs.webkit.org/show_bug.cgi?id=197035
        <rdar://problem/45281182>

        Reviewed by Tim Horton.

        Add build time flag.

        * wtf/FeatureDefines.h:

2019-04-18  Jer Noble  <jer.noble@apple.com>

        Add support for parsing FairPlayStreaming PSSH boxes.
        https://bugs.webkit.org/show_bug.cgi?id=197064

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2019-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] StringBuilder should set correct m_is8Bit flag when merging
        https://bugs.webkit.org/show_bug.cgi?id=197053

        Reviewed by Saam Barati.

        When appending StringBuilder to the other StringBuilder, we have a path that does not set m_is8Bit flag correctly.
        This patch correctly sets this flag. And we also change 0 to nullptr when we are using 0 as a pointer.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::appendUninitializedSlow):
        (WTF::StringBuilder::append):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::characters8 const):
        (WTF::StringBuilder::characters16 const):
        (WTF::StringBuilder::clear):

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        Adopt different scroll view flashing SPI
        https://bugs.webkit.org/show_bug.cgi?id=197043
        <rdar://problem/49996476>

        Reviewed by Wenson Hsieh.

        * wtf/Platform.h:

2019-04-17  Jer Noble  <jer.noble@apple.com>

        Enable HAVE_AVFOUNDATION_VIDEO_OUTPUT on PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=196994
        <rdar://problem/44158331>

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2019-04-16  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Update port for system library changes
        https://bugs.webkit.org/show_bug.cgi?id=196978

        Reviewed by Ross Kirsling.

        * wtf/PlatformPlayStation.cmake:
        Remove reference to deleted system library

2019-04-16  Jer Noble  <jer.noble@apple.com>

        Enable HAVE_AVKIT on PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=196987

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2019-04-16  Robin Morisset  <rmorisset@apple.com>

        [WTF] holdLock should be marked WARN_UNUSED_RETURN
        https://bugs.webkit.org/show_bug.cgi?id=196922

        Reviewed by Keith Miller.

        * wtf/Locker.h:

2019-04-16  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Set WTF_SCRIPTS_DIR
        https://bugs.webkit.org/show_bug.cgi?id=196917

        Reviewed by Konstantin Tokarev.

        Use WTF_SCRIPTS_DIR for copying the unified sources script.

        * wtf/CMakeLists.txt:

2019-04-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] FontPlatformData objects aren't cached at all when using font-family:system-ui
        https://bugs.webkit.org/show_bug.cgi?id=196846
        <rdar://problem/49499971>

        Reviewed by Simon Fraser and Darin Adler.

        * wtf/RetainPtr.h:
        (WTF::safeCFEqual):
        (WTF::safeCFHash):

2019-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        HashTable::removeIf always shrinks the hash table by half even if there is nothing left
        https://bugs.webkit.org/show_bug.cgi?id=196681

        Reviewed by Darin Adler.

        Made HashTable::removeIf shrink to the "best size", which is the least power of two bigger
        than twice the key count as already used in the copy constructor.

        * wtf/HashTable.h:
        (WTF::HashTable::computeBestTableSize): Extracted from the copy constructor.
        (WTF::HashTable::shrinkToBestSize): Added.
        (WTF::HashTable::removeIf): Use shrinkToBestSize instead of shrink.
        (WTF::HashTable::HashTable):

2019-04-12  Eric Carlson  <eric.carlson@apple.com>

        Update AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=196776
        <rdar://problem/46501611>

        Reviewed by Jer Noble.

        * wtf/Platform.h: Define HAVE_ROUTE_SHARING_POLICY_LONG_FORM_VIDEO.

2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * wtf/SystemTracing.h:

2019-04-10  Claudio Saavedra  <csaavedra@igalia.com>

        Do not generate empty unified sources when unified builds are disabled
        https://bugs.webkit.org/show_bug.cgi?id=196767

        Reviewed by Konstantin Tokarev.

        If unified builds are disabled, the ruby script to generate them
        is still used to list the sources that need to be
        compiled. Currently, the script always generates bundled unified
        sources, even if it's being used just to list all the sources. So
        when the unified builds are disabled and no files are going to be
        bundled, the script generates one empty file per bundle manager
        (that is, one C++ and one ObjectiveC), that gets added to the
        sources to be compiled.

        * Scripts/generate-unified-source-bundles.rb: Only go through the
        bundle managers file generation when not running in
        PrintAllSources mode, to avoid generating empty bundle files.

2019-04-10  Enrique Ocaña González  <eocanha@igalia.com>

        [WPE] Avoid async IO starving timers
        https://bugs.webkit.org/show_bug.cgi?id=196733

        Reviewed by Carlos Garcia Campos.

        If AsyncIONetwork and DiskCacheRead priorities are higher than
        MainThreadSharedTimer the timers get starved. This causes the NetworkProcess
        to accumulate MB of data instead of handing it down to the WebProcess (done
        using a Timer). This eventually causes an Out Of Memory kill on the
        NetworkProcess on some embedded platforms with low memory limits.

        This patch levels the three priorities to the same value, while still leaving
        DiskCacheWrite with less priority than DiskCacheRead.

        * wtf/glib/RunLoopSourcePriority.h: Changed RunLoopSourcePriority values for WPE.

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] WTF derived sources should only be referenced inside WTF
        https://bugs.webkit.org/show_bug.cgi?id=196706

        Reviewed by Konstantin Tokarev.

        Use ${WTF_DERIVED_SOURCES_DIR} instead of ${DERIVED_SOURCES_DIR} within WTF.

        * wtf/CMakeLists.txt:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        Copy ICU headers for Apple builds into ICU_INCLUDE_DIRS.

        * CMakeLists.txt:
        * wtf/PlatformMac.cmake:

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * wtf/CMakeLists.txt:

2019-04-08  Guillaume Emont  <guijemont@igalia.com>

        Enable DFG on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=196689

        Reviewed by Žan Doberšek.

        Since the bytecode change, we enabled the baseline JIT on mips in
        r240432, but DFG is still missing. With this change, all tests are
        passing on a ci20 board.

        * wtf/Platform.h: Enable DFG on MIPS by default.

2019-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Added tests for WeakHashSet::computesEmpty and WeakHashSet::computeSize
        https://bugs.webkit.org/show_bug.cgi?id=196669

        Reviewed by Geoffrey Garen.

        Removed the superflous type names from forward declarations, and made WeakHashSet::add
        take a const object to match other container types in WTF.

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::add):
        * wtf/WeakPtr.h:

2019-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Make WeakPtr<Element> possible and deploy it in form associated elements code
        https://bugs.webkit.org/show_bug.cgi?id=196626

        Reviewed by Antti Koivisto.

        Make it possible to call WeakHashSet::remove and WeakHashSet::contains with
        a subclass type U of a type T used to define WeakReference<T>.

        Also added computesEmpty, which is slightly more efficient than computeSize
        when m_set is either empty or when there are non-released weak references in the set.

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computesEmpty const): Added.
        * wtf/WeakPtr.h: Added an explicit forward declaration of WeakHashSet to avoid
        build failures in GTK+ and WPE ports.

2019-04-05  Eric Carlson  <eric.carlson@apple.com>

        Remove AUDIO_TOOLBOX_AUDIO_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=196653
        <rdar://problem/49652098>

        Reviewed by Jer Noble.

        * wtf/Platform.h:

2019-04-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r243929
        https://bugs.webkit.org/show_bug.cgi?id=196626

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computesEmpty const): Deleted.

2019-04-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243833.
        https://bugs.webkit.org/show_bug.cgi?id=196645

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

2019-04-05  Ryosuke Niwa  <rniwa@webkit.org>

        Make WeakPtr<Element> possible and deploy it in form associated elements code
        https://bugs.webkit.org/show_bug.cgi?id=196626

        Reviewed by Antti Koivisto.

        Make it possible to call WeakHashSet::remove and WeakHashSet::contains with
        a subclass type U of a type T used to define WeakReference<T>.

        Also added computesEmpty, which is slightly more efficient than computeSize
        when m_set is either empty or when there are non-released weak references in the set.

        * wtf/WeakHashSet.h:
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::computesEmpty const): Added.

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [WebCore] Put most of derived classes of ScriptWrappable into IsoHeap
        https://bugs.webkit.org/show_bug.cgi?id=196475

        Reviewed by Saam Barati.

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

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Rename WTF forwarding header target to WTFFramework and update the install location
        to WTF_FRAMEWORK_HEADERS_DIR.

        * wtf/CMakeLists.txt:

2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remote Inspector indicate callback should always happen on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=196513
        <rdar://problem/49498284>

        Reviewed by Devin Rousso.

        * wtf/MainThread.h:
        * wtf/cocoa/MainThreadCocoa.mm:
        (WTF::dispatchAsyncOnMainThreadWithWebThreadLockIfNeeded):
        * wtf/ios/WebCoreThread.cpp:
        * wtf/ios/WebCoreThread.h:

2019-04-02  Keith Rollin  <krollin@apple.com>

        Inhibit CFNetwork logging in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=196268
        <rdar://problem/48210793>

        Fix a conditional in Platform.h where IOS should have been used
        instead of IOS_FAMILY. The latter happened to work, but we really want
        to be using the proper symbol here.

        Reviewed by Alexey Proskuryakov.

        * wtf/Platform.h:

2019-04-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Stop trying to support building JSC with clang 3.8
        https://bugs.webkit.org/show_bug.cgi?id=195947
        <rdar://problem/49069219>

        Reviewed by Darin Adler.

        It seems WebKit hasn't built with clang 3.8 in a while, no devs are using this compiler, we
        don't know how much effort it would be to make JSC work again, and it's making the code
        worse. Remove my hacks to support clang 3.8 from WTF.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::allocate):
        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):

2019-03-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Butterfly allocation from LargeAllocation should try "realloc" behavior if collector thread is not active
        https://bugs.webkit.org/show_bug.cgi?id=196160

        Reviewed by Saam Barati.

        * wtf/FastMalloc.h:
        (WTF::FastMalloc::tryRealloc):
        * wtf/Gigacage.cpp:
        (Gigacage::tryRealloc):
        * wtf/Gigacage.h:

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        * wtf/NeverDestroyed.h:
        (WTF::NeverDestroyed::operator->):
        (WTF::NeverDestroyed::operator-> const):

2019-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix.

        * wtf/CMakeLists.txt: Added SpanningTree.h to WTF_PUBLIC_HEADERS.

2019-03-28  Saam Barati  <sbarati@apple.com>

        BackwardsGraph needs to consider back edges as the backward's root successor
        https://bugs.webkit.org/show_bug.cgi?id=195991

        Reviewed by Filip Pizlo.

        Previously, our backwards graph analysis was slightly wrong. The idea of
        backwards graph is that the root of the graph has edges to terminals in
        the original graph. And then the original directed edges in the graph are flipped.
        
        However, we weren't considering loops as a form of terminality. For example,
        we wouldn't consider an infinite loop as a terminal. So there were no edges
        from the root to a node in the infinite loop. This lead us to make mistakes
        when we used backwards dominators to compute control flow equivalence.
        
        This is better understood in an example:
        
        ```
        preheader:
        while (1) {
            if (!isCell(v))
                continue;
            load structure ID
            if (cond)
               continue;
            return
        }
        ```
        
        In the previous version of this algorithm, the only edge from the backwards
        root would be to the block containing the return. This would lead us to
        believe that the loading of the structureID backwards dominates the preheader,
        leading us to believe it's control flow equivalent to preheader. This is
        obviously wrong, since we can loop forever if "v" isn't a cell.
        
        The solution here is to treat any backedge in the graph as a "terminal" node.
        Since a backedge implies the existence of a loop.
        
        In the above example, the backwards root now has an edge to both blocks with
        "continue". This prevents us from falsely claiming that the return is control
        flow equivalent with the preheader.
        
        This patch uses DFS spanning trees to compute back edges. An edge
        u->v is a back edge when u is a descendent of v in the DFS spanning
        tree of the Graph.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BackwardsGraph.h:
        (WTF::BackwardsGraph::BackwardsGraph):
        * wtf/SpanningTree.h: Added.
        (SpanningTree::SpanningTree):
        (SpanningTree::isDescendent):

2019-03-28  Tim Horton  <timothy_horton@apple.com>

        Un-fix the build

        * wtf/Platform.h:
        It is no longer necessary to exclude this from PLATFORM(IOSMAC).

2019-03-27  Per Arne Vollan  <pvollan@apple.com>

        Layout Test js/math-clz32.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=196209

        Reviewed by Ross Kirsling.

        Use the correct number of loop iterations when counting leading zeros. Also, the
        count was off by one for the Win64 case.

        * wtf/MathExtras.h:
        (WTF::clz):

2019-03-26  Keith Rollin  <krollin@apple.com>

        Inhibit CFNetwork logging in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=196268
        <rdar://problem/48210793>

        Reviewed by Alex Christensen.

        Before performing any logging, the NetworkProcess checks to see if
        it's performing an operation associated with a private (ephemeral)
        browsing session. If so, it skips the logging. However, networking
        layers below the NetworkProcess don't know about private browsing, so
        they would still perform their own logging. CFNetwork now has a flag
        that lets us control that, so set it to False if private browsing.

        * wtf/Platform.h:

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Expected shouldn't assume its contained types are copyable
        https://bugs.webkit.org/show_bug.cgi?id=195986

        Reviewed by JF Bastien.

        * wtf/Expected.h:
        (std::experimental::fundamentals_v3::__expected_detail::constexpr_base::constexpr_base):
        (std::experimental::fundamentals_v3::operator==):
        (std::experimental::fundamentals_v3::operator!=):
        * wtf/Unexpected.h:
        (std::experimental::fundamentals_v3::unexpected::unexpected):

2019-03-24  Keith Miller  <keith_miller@apple.com>

        Unreviewed, forgot to refactor variable name for windows build in
        r243418.

        * wtf/MathExtras.h:
        (WTF::clz):
        (WTF::ctz):

2019-03-24  Andy Estes  <aestes@apple.com>

        [watchOS] Remove unused Proximity Networking code
        https://bugs.webkit.org/show_bug.cgi?id=196188

        Reviewed by Tim Horton.

        * wtf/FeatureDefines.h:

2019-03-23  Keith Miller  <keith_miller@apple.com>

        Refactor clz/ctz and fix getLSBSet.
        https://bugs.webkit.org/show_bug.cgi?id=196162

        Reviewed by Saam Barati.

        This patch makes clz32/64 and ctz32 generic so they work on any
        numeric type. Since these methods work on any type we don't need
        to have a separate implementation of getLSBSet, which also
        happened to be getMSBSet. This patch also adds getMSBSet as there
        may be users who want that in the future.

        * wtf/MathExtras.h:
        (WTF::clz):
        (WTF::ctz):
        (WTF::getLSBSet):
        (WTF::getMSBSet):
        (getLSBSet): Deleted.
        (WTF::clz32): Deleted.
        (WTF::clz64): Deleted.
        (WTF::ctz32): Deleted.

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Enable building with Thin LTO in Production when using Xcode 10.2 or
        later. This change results in a 1.45% progression in PLT5. Full
        Production build times increase about 2-3%. Incremental build times
        are more severely affected, and so LTO is not enabled for local
        engineering builds.

        LTO is enabled only on macOS for now, until rdar://problem/49013399,
        which affects ARM builds, is fixed.

        To change the LTO setting when building locally:

        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
          command line.
        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
          on the command line.
        - If building with `build-root`, specify --lto={none,thin,full} on the
          command line.
        - If building with Xcode, create a LocalOverrides.xcconfig file at the
          top level of your repository directory (if needed) and define
          WK_LTO_MODE to full, thin, or none.

        * Configurations/Base.xcconfig:

2019-03-22  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r243354

        * wtf/Platform.h:

2019-03-22  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r243354
        https://bugs.webkit.org/show_bug.cgi?id=196138
        <rdar://problem/49145951>

        * wtf/Platform.h:

2019-03-21  Eric Carlson  <eric.carlson@apple.com>

        Add UI process WebRTC runtime logging.
        https://bugs.webkit.org/show_bug.cgi?id=196020
        <rdar://problem/49071443>

        Reviewed by Youenn Fablet.

        * wtf/Logger.h:
        (WTF::LogArgument::toString): Add long long and unsigned long long variants.

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * wtf/FeatureDefines.h:

2019-03-20  Mark Lam  <mark.lam@apple.com>

        Open source arm64e code.
        https://bugs.webkit.org/show_bug.cgi?id=196012
        <rdar://problem/49066237>

        Reviewed by Keith Miller.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BlockPtr.h:
        * wtf/Platform.h:
        * wtf/PlatformRegisters.cpp: Added.
        (WTF::threadStateLRInternal):
        (WTF::threadStatePCInternal):
        * wtf/PlatformRegisters.h:
        * wtf/PointerPreparations.h:
        * wtf/PtrTag.cpp: Added.
        (WTF::tagForPtr):
        (WTF::ptrTagName):
        (WTF::registerPtrTagLookup):
        (WTF::reportBadTag):
        * wtf/PtrTag.h:
        (WTF::removeCodePtrTag):
        (WTF::tagCodePtrImpl):
        (WTF::tagCodePtr):
        (WTF::untagCodePtrImplHelper):
        (WTF::untagCodePtrImpl):
        (WTF::untagCodePtr):
        (WTF::retagCodePtrImplHelper):
        (WTF::retagCodePtrImpl):
        (WTF::retagCodePtr):
        (WTF::tagCFunctionPtrImpl):
        (WTF::tagCFunctionPtr):
        (WTF::untagCFunctionPtrImpl):
        (WTF::untagCFunctionPtr):
        (WTF::tagInt):
        (WTF::assertIsCFunctionPtr):
        (WTF::assertIsNullOrCFunctionPtr):
        (WTF::assertIsNotTagged):
        (WTF::assertIsTagged):
        (WTF::assertIsNullOrTagged):
        (WTF::isTaggedWith):
        (WTF::assertIsTaggedWith):
        (WTF::assertIsNullOrTaggedWith):
        (WTF::usesPointerTagging):
        (WTF::registerPtrTagLookup):
        (WTF::reportBadTag):
        (WTF::tagForPtr): Deleted.

2019-03-20  Keith Rollin  <krollin@apple.com>

        Update checks that determine if WebKit is system WebKit
        https://bugs.webkit.org/show_bug.cgi?id=195756

        Reviewed by Alexey Proskuryakov.

        The system WebKit can be installed in additional locations, so check
        for and allow those, too.

        * wtf/Platform.h:

2019-03-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, further attempt to fix clang 3.8 build
        https://bugs.webkit.org/show_bug.cgi?id=195947

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::allocate):

2019-03-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r243115) breaks build for clang 3.8
        https://bugs.webkit.org/show_bug.cgi?id=195947

        Reviewed by Chris Dumez.

        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):

2019-03-20  Tim Horton  <timothy_horton@apple.com>

        Add an platform-driven spell-checking mechanism
        https://bugs.webkit.org/show_bug.cgi?id=195795

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h:
        Add an ENABLE flag.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Build cleanly with GCC 9
        https://bugs.webkit.org/show_bug.cgi?id=195920

        Reviewed by Chris Dumez.

        WebKit triggers three new GCC 9 warnings:

        """
        -Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly
        declared copy constructor and assignment operator if one of them is user-provided.
        """

        Solution is to either add a copy constructor or copy assignment operator, if required, or
        else remove one if it is redundant.

        """
        -Wredundant-move, implied by -Wextra, warns about redundant calls to std::move.
        -Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision.
        """

        These account for most of this patch. Solution is to just remove the bad WTFMove().

        Additionally, -Wclass-memaccess has been enhanced to catch a few cases that GCC 8 didn't.
        These are solved by casting nontrivial types to void* before using memcpy. (Of course, it
        would be safer to not use memcpy on nontrivial types, but that's too complex for this
        patch. Searching for memcpy used with static_cast<void*> will reveal other cases to fix.)

        * wtf/CheckedArithmetic.h:
        (WTF::Checked::Checked):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::allocate):
        * wtf/URLParser.cpp:
        (WTF::CodePointIterator::operator!= const):
        (WTF::CodePointIterator::operator=): Deleted.
        * wtf/text/StringView.h:
        (WTF::StringView::CodePoints::Iterator::operator=): Deleted.

2019-03-19  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Logger.h:
        (WTF::Logger::logAlways const):
        (WTF::Logger::error const):
        (WTF::Logger::warning const):
        (WTF::Logger::info const):
        (WTF::Logger::debug const):
        (WTF::Logger::willLog const):
        (WTF::Logger::log):
        * wtf/MemoryPressureHandler.cpp:
        * wtf/RefCountedLeakCounter.cpp:

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Logger.h:
        (WTF::Logger::logAlways const):
        (WTF::Logger::error const):
        (WTF::Logger::warning const):
        (WTF::Logger::info const):
        (WTF::Logger::debug const):
        (WTF::Logger::willLog const):
        (WTF::Logger::log):
        * wtf/MemoryPressureHandler.cpp:
        * wtf/RefCountedLeakCounter.cpp:

2019-03-18  Darin Adler  <darin@apple.com>

        Cut down on use of StringBuffer, possibly leading toward removing it entirely
        https://bugs.webkit.org/show_bug.cgi?id=195870

        Reviewed by Daniel Bates.

        * wtf/URL.cpp: Remove a now-inaccurate comment mentioning StringBuffer.

        * wtf/text/StringView.cpp:
        (WTF::convertASCIICase): Use createUninitialized instead of StringBuffer.

2019-03-18  Xan Lopez  <xan@igalia.com>

        [WTF] Remove redundant std::move in StringConcatenate
        https://bugs.webkit.org/show_bug.cgi?id=195798

        Reviewed by Darin Adler.

        Remove redundant calls to WTFMove in return values for this
        method. C++ will already do an implicit move here since we are
        returning a local value where copy/move elision is not applicable.

        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):

2019-03-16  Darin Adler  <darin@apple.com>

        Improve normalization code, including moving from unorm.h to unorm2.h
        https://bugs.webkit.org/show_bug.cgi?id=195330

        Reviewed by Michael Catanzaro.

        * wtf/URLHelpers.cpp: Removed unneeded include of unorm.h since the
        normalization code is now in StringView.cpp.
        (WTF::URLHelpers::escapeUnsafeCharacters): Renamed from
        createStringWithEscapedUnsafeCharacters since it now only creates
        a new string if one is needed. Use unsigned for string lengths, since
        that's what WTF::String uses, not size_t. Added a first loop so that
        we can return the string unmodified if no lookalike characters are
        found. Removed unnecessary round trip from UTF-16 and then back in
        the case where the character is not a lookalike.
        (WTF::URLHelpers::toNormalizationFormC): Deleted. Moved this logic
        into the WTF::normalizedNFC function in StringView.cpp.
        (WTF::URLHelpers::userVisibleURL): Call escapeUnsafeCharacters and
        normalizedNFC. The normalizedNFC function is better in multiple ways,
        but primarily it handles 8-bit strings and other already-normalized
        strings much more efficiently.

        * wtf/text/StringView.cpp:
        (WTF::normalizedNFC): Added. This has two overloads. One is for when
        we already have a String, and want to re-use it if no normalization
        is needed, and another is when we only have a StringView, and may need
        to allocate a String to hold the result. Includes a fast special case
        for 8-bit and already-normalized strings, and uses the same strategy
        that JSC::normalize was already using: calls unorm2_normalize twice,
        first just to determine the length.

        * wtf/text/StringView.h: Added normalizedNFC, which can be called with
        either a StringView or a String. Also moved StringViewWithUnderlyingString
        here from JSString.h, here for use as the return value of normalizedNFC;
        it is used for a similar purpose in the JavaScriptCore rope implementation.
        Also removed an inaccurate comment.

2019-03-16  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] [WPE] Fix compilation errors due to undefined ALWAYS_LOG_IF
        https://bugs.webkit.org/show_bug.cgi?id=195850

        Unreviewed build fix after r243033. 

        * wtf/LoggerHelper.h:

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block the accessibility server when accessibility is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=195342

        Reviewed by Brent Fulgham.

        Add SPI to issue a mach extension to a process by pid. Also, add a macro for
        the availability of this SPI.

        * wtf/Platform.h:
        * wtf/spi/darwin/SandboxSPI.h:

2019-03-15  Eric Carlson  <eric.carlson@apple.com>

        Add media stream release logging
        https://bugs.webkit.org/show_bug.cgi?id=195823

        Reviewed by Youenn Fablet.

        * wtf/LoggerHelper.h: Add LOG_IF variants that check a condition before logging.

2019-03-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r243008.

        This revision broke High Sierra builders

        Reverted changeset:

        "[iOS] Block the accessibility server when accessibility is
        not enabled."
        https://bugs.webkit.org/show_bug.cgi?id=195342
        https://trac.webkit.org/changeset/243008

2019-03-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block the accessibility server when accessibility is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=195342

        Reviewed by Brent Fulgham.

        Add SPI to issue a mach extension to a process by pid.

        * wtf/spi/darwin/SandboxSPI.h:

2019-03-13  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        Add functions to create an IteratorRange<T> that will iterate a container backwards. It
        works with any container that is compatible with std::rbegin() and std::rend(). It is
        expected to be used in conjunction with range-based for-loops like so:

        for (auto& value : WTF::makeReversedRange(myContainer)) 
            ...

        * wtf/IteratorRange.h:
        (WTF::makeReversedRange):

2019-03-13  Keith Rollin  <krollin@apple.com>

        Add support for new StagedFrameworks layout
        https://bugs.webkit.org/show_bug.cgi?id=195543

        Reviewed by Alexey Proskuryakov.

        Opportunistic cleanup: remove unused JAVASCRIPTCORE_FRAMEWORKS_DIR
        variable.

        * Configurations/Base.xcconfig:

2019-03-13  Dominik Infuehr  <dinfuehr@igalia.com>

        String overflow when using StringBuilder in JSC::createError
        https://bugs.webkit.org/show_bug.cgi?id=194957

        Reviewed by Mark Lam.

        When calculating the new capacity of a StringBuilder object,
        use a limit of MaxLength instead of MaxLength+1.  Allocating
        a string of size MaxLength+1 always fails. This means that expanding
        a StringBuilder only worked when the newly doubled capacity is less or
        equal to MaxLength.

        * wtf/text/StringBuilder.cpp:

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Better build fix after r242901.

        Reviewed by Jer Noble.

        * wtf/Logger.h:
        (WTF::LogArgument::toString):

2019-03-13  Jer Noble  <jer.noble@apple.com>

        Add AggregateLogger, a Logger specialization for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=195644

        Reviewed by Eric Carlson.

        Add a new class, AggregateLogger, which will log messages to each of its aggregated loggers.

        Drive-by fixes: allow "const void*" to be directly logged by converting the pointer to a hex string.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/AggregateLogger.h: Added.
        (WTF::AggregateLogger::create):
        (WTF::AggregateLogger::addLogger):
        (WTF::AggregateLogger::removeLogger):
        (WTF::AggregateLogger::logAlways const):
        (WTF::AggregateLogger::error const):
        (WTF::AggregateLogger::warning const):
        (WTF::AggregateLogger::info const):
        (WTF::AggregateLogger::debug const):
        (WTF::AggregateLogger::willLog const):
        (WTF::AggregateLogger::AggregateLogger):
        (WTF::AggregateLogger::log const):
        * wtf/CMakeLists.h:
        * wtf/Logger.cpp:
        (WTF::>::toString):
        * wtf/Logger.h:

2019-03-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242747.
        https://bugs.webkit.org/show_bug.cgi?id=195641

        Performance measurement is difficult in this period, rolling
        out it and rolling in later to isolate it from the other
        sensitive patches (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "[JSC] Make StaticStringImpl & StaticSymbolImpl actually
        static"
        https://bugs.webkit.org/show_bug.cgi?id=194212
        https://trac.webkit.org/changeset/242747

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        A lot more classes have padding that can be reduced by reordering their fields
        https://bugs.webkit.org/show_bug.cgi?id=195579

        Reviewed by Mark Lam.

        * wtf/CrossThreadQueue.h:
        * wtf/Logger.h:
        * wtf/MemoryPressureHandler.h:
        * wtf/MetaAllocator.h:
        * wtf/Threading.cpp:

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        WTF::Expected should use std::addressof instead of operator&
        https://bugs.webkit.org/show_bug.cgi?id=195604

        Reviewed by Myles Maxfield.

        The latter was causing problems with types that do tricky things with constructors and operator&,
        specifically UniqueRef but I made a reduced test case.  When it used operator&, it would get the contained
        type and call the constructor that takes a contained type instead of the move constructor.

        * wtf/Expected.h:
        (std::experimental::fundamentals_v3::__expected_detail::base::base):
        (std::experimental::fundamentals_v3::expected::swap):

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * wtf/Forward.h:
        Add forward declaration for Optional.

        * wtf/CPUTime.h:
        * wtf/Expected.h:
        * wtf/MainThread.h:
        * wtf/MemoryFootprint.h:
        * wtf/URLHelpers.cpp:
        * wtf/URLHelpers.h:
        * wtf/cocoa/CPUTimeCocoa.cpp:
        * wtf/fuchsia/CPUTimeFuchsia.cpp:
        * wtf/unix/CPUTimeUnix.cpp:
        * wtf/win/CPUTimeWin.cpp:
        Remove unnecessary includes from headers.

2019-03-11  Andy Estes  <aestes@apple.com>

        [Apple Pay] Use PKPaymentAuthorizationController to present the Apple Pay UI remotely from the Networking service on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195530
        <rdar://problem/48747164>

        Reviewed by Alex Christensen.

        * wtf/FeatureDefines.h: Defined ENABLE_APPLE_PAY_REMOTE_UI.

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

        [JSC] Make StaticStringImpl & StaticSymbolImpl actually static
        https://bugs.webkit.org/show_bug.cgi?id=194212

        Reviewed by Mark Lam.

        Avoid mutation onto refcounts if `isStatic()` returns true so that the content of StaticStringImpl never gets modified.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::ref):
        (WTF::StringImpl::deref):

2019-03-11  Sihui Liu  <sihui_liu@apple.com>

        Crash under WebCore::IDBDatabase::connectionToServerLost
        https://bugs.webkit.org/show_bug.cgi?id=195563
        <rdar://problem/37193655>

        CrossThreadTask should protect callee if it is ThreadSafeRefCounted.

        Reviewed by Geoffrey Garen.

        * wtf/CrossThreadTask.h:
        (WTF::createCrossThreadTask):

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * wtf/SystemTracing.h:

2019-03-11  Darin Adler  <darin@apple.com>

        Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
        https://bugs.webkit.org/show_bug.cgi?id=195533

        Reviewed by Brent Fulgham.

        Soon, we will change String::number and StringBuilder::appendNumber for floating
        point to use "shortest form" serialization instead of the current default, which is
        "6-digit fixed precision stripping trailing zeros". To prepare to do this safely
        without accidentally changing any behavior, changing callers to call the explicit
        versions. Later, we may want to return and change many of them to use shortest form
        instead, but that may require rebaselining tests, and in some extreme cases, getting
        rid of flawed logic that converts between different single and double precision
        floating point; such problems may be hidden by fixed precision serialization.

        Since "shortest form" is already the behavior for AtomicString::number and
        for makeString, no changes required for clients of either of those.

        * wtf/Logger.h:
        (WTF::LogArgument::toString): Use numberToStringFixedPrecision.
        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toString const): Use appendFixedPrecisionNumber.
        * wtf/text/ValueToString.h:
        (WTF::ValueToString<float>::string): Use numberToStringFixedPrecision.
        (WTF::ValueToString<double>::string): Ditto.

2019-03-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242702.

        Broke High Sierra builders.

        Reverted changeset:

        "Add utility function to allow easy reverse range-based
        iteration of a container"
        https://bugs.webkit.org/show_bug.cgi?id=195542
        https://trac.webkit.org/changeset/242702

2019-03-11  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        Add functions to create an IteratorRange<T> that will iterate a container backwards. It
        works with any container that is compatible with std::rbegin() and std::rend(). It is
        expected to be used in conjunction with range-based for-loops like so:

        for (auto& value : WTF::makeReversedRange(myContainer)) 
            ...

        * wtf/IteratorRange.h:
        (WTF::makeReversedRange):

2019-03-10  Yusuke Suzuki <utatane.tea@gmail.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF] Align assumption in RunLoopWin to the other platform's RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=181151

        Reviewed by Don Olmstead.

        This patch fixes RunLoop in Windows to align it to the implementations in the other platforms
        to use RunLoop more aggressively.

        * wtf/RunLoop.h:
        (WTF::RunLoop::Timer::Timer):
        * wtf/win/MainThreadWin.cpp:
        (initializeMainThreadPlatform): Call RunLoop::registerRunLoopMessageWindowClass.
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::wndProc):
        (WTF::RunLoop::iterate):
        (WTF::RunLoop::stop):
        PostQuitMessage is only available in the RunLoop's thread. We should post a message and call
        it inside this task.

        (WTF::RunLoop::registerRunLoopMessageWindowClass):
        Changed the return type from bool to void, and added RELEASE_ASSERT to check the return value of RegisterClass.

        (WTF::RunLoop::~RunLoop):
        When the RunLoop's thread is freed, its associated window is freed. We do not need to do here.

        (WTF::RunLoop::TimerBase::timerFired):
        (WTF::RunLoop::TimerBase::TimerBase):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::stop):
        (WTF::RunLoop::TimerBase::isActive const):
        (WTF::RunLoop::TimerBase::secondsUntilFire const):
        (WTF::generateTimerID): Deleted.
        We can use TimerBase's pointer as ID since it is uintptr_t.

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * wtf/SystemTracing.h:

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * wtf/PlatformWin.cmake:
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        * wtf/text/WTFString.h:
        (WTF::String::String):
        * wtf/text/win/StringWin.cpp: Added.
        (WTF::String::wideCharacters const): Renamed from WTF::stringToNullTerminatedWChar.
        * wtf/text/win/WCharStringExtras.h:
        (WTF::ucharFrom):
        (WTF::wcharFrom):
        (WTF::stringToNullTerminatedWChar): Deleted.
        (WTF::wcharToString): Deleted.
        (WTF::nullTerminatedWCharToString): Deleted.
        Add static_assert-guarded reinterpret_cast wrappers for going between UChar* and wchar_t*.
        Move existing to/from-String helpers into the String (and AtomicString) class(es).

        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::getFindData):
        (WTF::FileSystemImpl::getFinalPathName):
        (WTF::FileSystemImpl::createSymbolicLink):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::deleteEmptyDirectory):
        (WTF::FileSystemImpl::moveFile):
        (WTF::FileSystemImpl::pathByAppendingComponent):
        (WTF::FileSystemImpl::fileSystemRepresentation):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::pathGetFileName):
        (WTF::FileSystemImpl::storageDirectory):
        (WTF::FileSystemImpl::generateTemporaryPath):
        (WTF::FileSystemImpl::openTemporaryFile):
        (WTF::FileSystemImpl::openFile):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        (WTF::FileSystemImpl::deleteNonEmptyDirectory):
        * wtf/win/LanguageWin.cpp:
        (WTF::localeInfo):
        * wtf/win/PathWalker.cpp:
        (WTF::PathWalker::PathWalker):
        Use wchar helpers as needed.

2019-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=195152

        Reviewed by Antti Koivisto.

        Added WeakHashSet which is a HashSet of WeakPtr. When the object pointed by WeakPtr is deleted,
        WeakHashSet treats the key to be no longer in the set. That is, WeakHashSet::contains returns false
        and const_iterator skips such a WeakPtr in the set.

        We decided not to make HashSet<WeahPtr<T>> work because it involves weird semantics such as making
        find(X) delete the table entry as remove(find(X)) would be a no-op otherwise as find(X) would return
        necessarily need to return HashSet<WeakPtr<T>>::end().

        Furthermore, we cannot determine the true size of this set in O(1) because the objected pointed by
        some of WeakPtr in the set may have already been deleted. This has implications that we can't have
        size(), isEmpty(), random(), etc... as O(1) operation.

        WeakHashSet is implemented as HashSet<WeakReference<T>>. HashTable::rehash has been updated to delete
        WeakReference<T>'s whose m_ptr has become null, and HashTable::expand first deletes any such entry
        before deciding an actual expansion is needed. This is accomplished via newly added hash trait,
        hasIsReleasedWeakValueFunction, and HashTraits<Ref<WeakReference<T>>>::isReleasedWeakValue which
        returns true for when WeakReference<T> pointed by Ref<WeakReference<T>> has null m_ptr, not to be
        confused with Ref<WeakReference<T>> itself pointing to a null WeakReference<T>.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Forward.h:
        * wtf/HashSet.h:
        (WTF::HashSet<T, U, V>::checkConsistency const): Added.
        * wtf/HashTable.h:
        (WTF::HashTable::isReleasedWeakBucket): Added.
        (WTF::HashTable::expand): Delete WeakReference<T> with null m_ptr first. This updates m_keyCount
        and may make mustRehashInPlace() return true.
        (WTF::HashTable::deleteReleasedWeakBuckets): Added.
        (WTF::HashTable::rehash): Delete WeakReference<T> with null m_ptr. Also refactored the code a bit
        to avoid keep repeating oldTable[i].
        * wtf/HashTraits.h:
        (WTF::HashTraits<T>::isHashTraitsReleasedWeakValue): Added.
        (WTF::RefHashTraits<T>): Extracted from HashTraits<Ref<P>> to share code with
        HashTraits<Ref<WeakReference<T>>>.
        (WTF::HashTraitsReleasedWeakValueChecker<Traits, hasIsReleasedWeakValueFunction>): Added.
        (WTF::isHashTraitsReleasedWeakValue<Traits, hasIsReleasedWeakValueFunction>): Added.
        * wtf/WeakHashSet.h: Added.
        (WTF::WeakHashSet): Added.
        (WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator):
        (WTF::WeakHashSet::WeakHashSetConstIterator::get const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator* const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator-> const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator++):
        (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets):
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator== const):
        (WTF::WeakHashSet::WeakHashSetConstIterator::operator!= const):
        (WTF::WeakHashSet::WeakHashSet):
        (WTF::WeakHashSet::begin const):
        (WTF::WeakHashSet::end const):
        (WTF::WeakHashSet::add):
        (WTF::WeakHashSet::remove):
        (WTF::WeakHashSet::contains const):
        (WTF::WeakHashSet::capacity const):
        (WTF::WeakHashSet::computeSize const): Deletes any WeakReference<T> with null m_ptr first.
        (WTF::WeakHashSet::checkConsistency const):
        (WTF::HashTraits<Ref<WeakReference<T>>>): Added. This hash traits triggers the new code in HashTable's
        expand and rehash methods to delete WeakReference<T> with null m_ptr.
        (WTF::HashTraits<Ref<WeakReference<T>>>::isReleasedWeakValue):
        * wtf/WeakPtr.h:
        (WTF::WeakReference::~WeakReference): Added so that we can keep track the number of live WeakReference
        in API tests by template specializations.

2019-03-03  Darin Adler  <darin@apple.com>

        Prepare to improve handling of conversion of float to strings
        https://bugs.webkit.org/show_bug.cgi?id=195262

        Reviewed by Daniel Bates.

        * wtf/dtoa.cpp:
        (WTF::truncateTrailingZeros): Renamed from
        formatStringTruncatingTrailingZerosIfNeeded and removed the calls
        to double_conversion::StringBuilder::Finalizer, since the caller
        already does that.
        (WTF::numberToFixedPrecisionString): Added an overload for float
        and updated to use the new truncateTrailingZeros.
        (WTF::numberToFixedWidthString): Added an overload for float.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::number): Added float overload. This is a
        behavior change, but in all cases for the better. The old behavior
        was to convert to double first and then do "shortest form"
        conversion, and it's always better to just do that as float.
        * wtf/text/AtomicString.h: Added float overload of AtomicString::number.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendFixedPrecisionNumber): Added float
        overload.
        (WTF::StringBuilder::appendShortestFormNumber): Renamed from
        appendECMAScriptNumber and did the above.
        (WTF::StringBuilder::appendFixedWidthNumber): Ditto.
        * wtf/text/StringBuilder.h: Added overloads for float and
        appendShortestFormNumber. The appendNumber and appendECMAScriptNumber
        functions are now inlines in the header, since they are expressed
        entirely in terms of the other functions.

        * wtf/text/WTFString.cpp:
        (WTF::String::numberToStringFixedPrecision): Added float overload.
        Removed unnecessary explicit conversion to String.
        (WTF::String::numberToStringShortest): Renamed from
        numberToStringECMAScript and did the above.
        (WTF::String::numberToStringFixedWidth): Ditto.

        * wtf/text/WTFString.h: Added overloads for float and
        numberToStringShortest. The number and numberToStringECMAScript
        functions are now inlines in the header, since they are expressed
        entirely in terms of the other functions.

2019-03-04  Andy Estes  <aestes@apple.com>

        [Apple Pay] Move WebPaymentCoordinatorProxy from Source/WebKit/UIProcess to Source/WebKit/Shared
        https://bugs.webkit.org/show_bug.cgi?id=195080
        <rdar://problem/48421558>

        Reviewed by Antti Koivisto.

        * wtf/FeatureDefines.h:

2019-03-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        URLHelpers should use unorm2_quickCheck before converting to NFC
        https://bugs.webkit.org/show_bug.cgi?id=194272

        Reviewed by Darin Adler.

        If the string is already in normalization form C, don't try to normalize it.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::toNormalizationFormC):

2019-03-02  Darin Adler  <darin@apple.com>

        Retire legacy dtoa function and DecimalNumber class
        https://bugs.webkit.org/show_bug.cgi?id=195253

        Reviewed by Daniel Bates.

        * WTF.xcodeproj/project.pbxproj: Removed DecimalNumber.cpp/h.
        * wtf/CMakeLists.txt: Ditto.

        * wtf/DecimalNumber.cpp: Removed.
        * wtf/DecimalNumber.h: Removed.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::writeJSON const): Use
        StringBuilder::appendECMAScriptNumber instead of custom logic
        using the DecimalNumber class.

        * wtf/dtoa.cpp:
        (WTF::storeInc): Deleted.
        (WTF::BigInt): Deleted.
        (WTF::multadd): Deleted.
        (WTF::hi0bits): Deleted.
        (WTF::lo0bits): Deleted.
        (WTF::i2b): Deleted.
        (WTF::mult): Deleted.
        (WTF::P5Node::P5Node): Deleted.
        (WTF::pow5mult): Deleted.
        (WTF::lshift): Deleted.
        (WTF::cmp): Deleted.
        (WTF::diff): Deleted.
        (WTF::d2b): Deleted.
        (WTF::quorem): Deleted.
        (WTF::dtoa): Deleted.

        * wtf/dtoa.h: Removed DtoaBuffer, dtoa, and NumberToStringBufferLength.

2019-02-27  Darin Adler  <darin@apple.com>

        Fixed makeString(float) to do shortest-form serialization without first converting to double
        https://bugs.webkit.org/show_bug.cgi?id=195142

        Reviewed by Daniel Bates.

        * wtf/DecimalNumber.cpp: Removed unneeded includes.

        * wtf/DecimalNumber.h: Removed unused constructors; over time we will be
        deprecating DecimalNumber, so we should removed the unused parts. Also
        marked the constructor explicit, removed types used only for arguments for
        the constructors, and removed the sign, exponent, significand, and precision
        member functions.

        * wtf/JSONValues.cpp:
        (WTF::JSONImpl::Value::writeJSON const): Updated for changes to DecimalNumber
        switched from NumberToLStringBuffer to NumberToStringBuffer, and for use of
        std::array instead of C arrays.

        * wtf/dtoa.cpp: Removed unused dtoaRoundSF and dtoaRoundDP functions.
        (WTF::dtoa): Updated to use std::array instead of C arrays.
        (WTF::dtoaRoundSF): Removed.
        (WTF::dtoaRoundDP): Removed.
        (WTF::numberToString): Added an overload for float and updated to use std::array.
        (WTF::formatStringTruncatingTrailingZerosIfNeeded): Updated to use std::array.
        (WTF::numberToFixedPrecisionString): Ditto.
        (WTF::numberToFixedWidthString): Ditto.

        * wtf/dtoa.h: Changed arrays to be std::array instead of C arrays so the
        array types will be checked. Removed dtoaRoundSF and dtoaRoundDP.
        Added float overloads for numberToString, numberToFixedPrecisionString,
        and numberToFixedWidthString. The only one of these that is called at this
        time is numberToString, called by the floating point StringTypeAdapter in
        StringConcatenateNummbers.h.

        * wtf/text/StringConcatenateNumbers.h: Updated for std::array.

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * wtf/Assertions.cpp:
        (WTF::createWithFormatAndArguments): Moved this here from WTFString.cpp.
        (WTFLog): Use WTF::createWithFormatAndArguments instead of String::format.

        * wtf/HexNumber.h: Deleted unneeded toString function.

        * wtf/text/StringConcatenate.h: Got rid of unneeded forward declaration of
        StringTypeAdapter, since that's now in Forward.h. Tweaked formatting of templates
        a bit. Use function templates for writeTo functions rather than having two of each.
        Removed unused toString functions. Optimized case where we use have a UChar* and
        a length of zero to not force the result to be 16-bit. Also gets rid of a small
        NO_RETURN_DUE_TO_CRASH mess that we don't need. Refactored constructors to use some
        static member helper functions to compute string lengths. Added the pad function
        and the PaddingSpecification struct template, so we can add padding to anything
        we can turn into a string. Got rid of the special case overload for single
        arguments, since it only worked for things that the String constructor can handle.
        Instead we will now use StringTypeAdapter, which works for more types. Possibly
        less optimal for some special cases, which we could specialize for later if we like.
        * wtf/text/StringConcatenateNumbers.h: Ditto.
        * wtf/text/StringOperators.h: Ditto.
        * wtf/text/StringView.h: Ditto.

        * wtf/text/WTFString.cpp:
        (WTF::createWithFormatAndArguments): Deleted.
        (WTF::String::format): Deleted.
        * wtf/text/WTFString.h: Deleted declaration of String::format.

2019-03-01  Alex Christensen  <achristensen@webkit.org>

        Revert r241223, r241235, and r241287
        https://bugs.webkit.org/show_bug.cgi?id=194427
        <rdar://48045861>

        * wtf/spi/darwin/XPCSPI.h:

2019-03-01  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace scope for event region building
        https://bugs.webkit.org/show_bug.cgi?id=195226

        Reviewed by Jon Lee.

        This trace scope measures the time spend converting element rects into Region objects,
        which can be large on some pages.

        The value for "Display Refresh Dispatch to main thread" was wrong and I fixed it.

        * wtf/SystemTracing.h:

2019-02-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] sizeof(JSString) should be 16
        https://bugs.webkit.org/show_bug.cgi?id=194375

        Reviewed by Saam Barati.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::flagIs8Bit):
        (WTF::StringImpl::flagIsAtomic):
        (WTF::StringImpl::flagIsSymbol):
        (WTF::StringImpl::maskStringKind):
        * wtf/text/WTFString.cpp:
        (WTF::nullString):
        * wtf/text/WTFString.h:

2019-02-28  Mark Lam  <mark.lam@apple.com>

        Change CheckedArithmetic to not use std::enable_if_t.
        https://bugs.webkit.org/show_bug.cgi?id=195187
        <rdar://problem/48464665>

        Reviewed by Keith Miller.

        Because C++11 does not like std::enable_if_t and there's a need to use this file with C++11.

        * wtf/CheckedArithmetic.h:

2019-02-27  Simon Fraser  <simon.fraser@apple.com>

        Roll out r242014; it caused crashes in compositing logging (webkit.org/b/195141)

        * wtf/Assertions.cpp:
        (WTF::createWithFormatAndArguments): Deleted.
        * wtf/HexNumber.h:
        (WTF::StringTypeAdapter<HexNumberBuffer>::toString const):
        * wtf/text/StringConcatenate.h:
        (WTF::makeString):
        (WTF::pad): Deleted.
        (WTF::StringTypeAdapter<PaddingSpecification<UnderlyingAdapterType>>::StringTypeAdapter): Deleted.
        (WTF::StringTypeAdapter<PaddingSpecification<UnderlyingAdapterType>>::length const): Deleted.
        (WTF::StringTypeAdapter<PaddingSpecification<UnderlyingAdapterType>>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<PaddingSpecification<UnderlyingAdapterType>>::writeTo const): Deleted.
        * wtf/text/StringConcatenateNumbers.h:
        (WTF::FormattedNumber::fixedPrecision):
        (WTF::FormattedNumber::fixedWidth):
        (WTF::StringTypeAdapter<FormattedNumber>::toString const):
        * wtf/text/StringOperators.h:
        (WTF::StringAppend::StringAppend):
        * wtf/text/StringView.h:
        (WTF::StringView::invalidate):
        * wtf/text/WTFString.cpp:
        (WTF::createWithFormatAndArguments):
        (WTF::String::format):
        * wtf/text/WTFString.h:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Remove remaining poisoning code.
        https://bugs.webkit.org/show_bug.cgi?id=194138

        Reviewed by Saam Barati.

        This patch removes the instantiation of Poisoned variants of the various containers
        but retains the ability of those containers to work with pointer traits.  This
        allows us to use them with smart pointers in the future (just like we used to with
        Poisoned values).  At minimum, this ability will be useful when we want to insert
        an observer into the container storage type for debugging purposes, or to collect
        statistics for profiling.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Bag.h:
        * wtf/CMakeLists.txt:
        * wtf/Platform.h:
        * wtf/Poisoned.cpp: Removed.
        * wtf/Poisoned.h: Removed.
        * wtf/PoisonedUniquePtr.h: Removed.
        * wtf/Ref.h:
        * wtf/RefCountedArray.h:
        * wtf/RefPtr.h:
        * wtf/WTFAssertions.cpp:

2019-02-26  Keith Miller  <keith_miller@apple.com>

        Code quality cleanup in NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=194824

        Reviewed by Yusuke Suzuki.

        First, move data members to the end of the class per WebKit
        style. Also, add forbid heap allocation since we expect the
        NeverDestroyed classes to be static.

        * wtf/NeverDestroyed.h:

2019-02-25  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Fix WTFLogVerbose variadic parameters forwarding
        https://bugs.webkit.org/show_bug.cgi?id=194920

        Reviewed by Alex Christensen.

        WTFLogVerbose was passing the va_list to WTFLog but this function
        also used variadic parameters and this is not allowed in C (that
        part of the code is extern "C").

        * wtf/Assertions.cpp:
        (WTF::WTFLogVaList): Created to take a va_list argument instead of
        variadic parameters.
        (WTF::WTFLog): Kept with variadic parameters, which are
        transformed to va_list and passed to WTFLogVaList.
        (WTF::WTFLogVerbose): Use WTFLogVaList instead of WTFLog.

2019-02-25  Sam Weinig  <sam@webkit.org>

        Update double-conversion to the latest version
        https://bugs.webkit.org/show_bug.cgi?id=194994

        Import the latest version of the double-conversion library based on
        https://github.com/google/double-conversion/commit/990c44707c70832dc1ce1578048c2198bafd3307

        In additon to importing the code, the following changes were applied (or re-applied) to maintain 
        parity with what we had previously:
             - Add #include "config.h" to each cpp file.
             - Put everything inside the WTF namespace.
             - Changed all in library includes to be of the form #include <wtf/dtoa/FILE.h>.
             - Renamed double_conversion::Vector<> to double_conversion::BufferReference<>.
             - Replaced duplicated functions with ASCIICType.h variants
             - Made CachedPower table a constexpr.
             - Exported (via WTF_EXPORT_PRIVATE) several functions in double-conversion.h.
             - Made substantial changes to StringToDoubleConverter to avoid unnecessary overhead of 
               parameterization, as we only ever want one configuration. Instead of constructing a
               configured class and calling StringToDouble on it, StringToDouble is now a static
               function. This allows a bunch of now dead code (hex support, octal support, etc.) to
               be eliminated. As StringToDoubleConverter now supports single precision floats, some
               additional templating of StringToIeee was added to avoid extra unnecessary branching.
             - Added RemoveCharacters function to double_conversion::StringBuilder.

        Reviewed by Darin Adler.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/dtoa/AUTHORS: Added.
        * wtf/dtoa/README: Removed.
        * wtf/dtoa/README.md: Added.
        * wtf/dtoa/bignum-dtoa.cc:
        * wtf/dtoa/bignum-dtoa.h:
        * wtf/dtoa/bignum.cc:
        * wtf/dtoa/bignum.h:
        (WTF::double_conversion::Bignum::Times10):
        (WTF::double_conversion::Bignum::Equal):
        (WTF::double_conversion::Bignum::LessEqual):
        (WTF::double_conversion::Bignum::Less):
        (WTF::double_conversion::Bignum::PlusEqual):
        (WTF::double_conversion::Bignum::PlusLessEqual):
        (WTF::double_conversion::Bignum::PlusLess):
        (WTF::double_conversion::Bignum::EnsureCapacity):
        (WTF::double_conversion::Bignum::BigitLength const):
        * wtf/dtoa/cached-powers.cc:
        * wtf/dtoa/cached-powers.h:
        * wtf/dtoa/diy-fp.cc:
        * wtf/dtoa/diy-fp.h:
        (WTF::double_conversion::DiyFp::DiyFp):
        (WTF::double_conversion::DiyFp::Subtract):
        (WTF::double_conversion::DiyFp::Minus):
        (WTF::double_conversion::DiyFp::Times):
        (WTF::double_conversion::DiyFp::Normalize):
        (WTF::double_conversion::DiyFp::f const):
        (WTF::double_conversion::DiyFp::e const):
        (WTF::double_conversion::DiyFp::set_f):
        (WTF::double_conversion::DiyFp::set_e):
        * wtf/dtoa/double-conversion.cc:
        * wtf/dtoa/double-conversion.h:
        (WTF::double_conversion::DoubleToStringConverter::DoubleToStringConverter):
        (WTF::double_conversion::DoubleToStringConverter::ToShortest const):
        (WTF::double_conversion::DoubleToStringConverter::ToShortestSingle const):
        (WTF::double_conversion::StringToDoubleConverter::StringToDoubleConverter):
        * wtf/dtoa/double.h: Removed.
        * wtf/dtoa/fast-dtoa.cc:
        * wtf/dtoa/fast-dtoa.h:
        * wtf/dtoa/fixed-dtoa.cc:
        * wtf/dtoa/fixed-dtoa.h:
        * wtf/dtoa/ieee.h: Added.
        (WTF::double_conversion::double_to_uint64):
        (WTF::double_conversion::uint64_to_double):
        (WTF::double_conversion::float_to_uint32):
        (WTF::double_conversion::uint32_to_float):
        (WTF::double_conversion::Double::Double):
        (WTF::double_conversion::Double::AsDiyFp const):
        (WTF::double_conversion::Double::AsNormalizedDiyFp const):
        (WTF::double_conversion::Double::AsUint64 const):
        (WTF::double_conversion::Double::NextDouble const):
        (WTF::double_conversion::Double::PreviousDouble const):
        (WTF::double_conversion::Double::Exponent const):
        (WTF::double_conversion::Double::Significand const):
        (WTF::double_conversion::Double::IsDenormal const):
        (WTF::double_conversion::Double::IsSpecial const):
        (WTF::double_conversion::Double::IsNan const):
        (WTF::double_conversion::Double::IsInfinite const):
        (WTF::double_conversion::Double::Sign const):
        (WTF::double_conversion::Double::UpperBoundary const):
        (WTF::double_conversion::Double::NormalizedBoundaries const):
        (WTF::double_conversion::Double::LowerBoundaryIsCloser const):
        (WTF::double_conversion::Double::value const):
        (WTF::double_conversion::Double::SignificandSizeForOrderOfMagnitude):
        (WTF::double_conversion::Double::Infinity):
        (WTF::double_conversion::Double::NaN):
        (WTF::double_conversion::Double::DiyFpToUint64):
        (WTF::double_conversion::Single::Single):
        (WTF::double_conversion::Single::AsDiyFp const):
        (WTF::double_conversion::Single::AsUint32 const):
        (WTF::double_conversion::Single::Exponent const):
        (WTF::double_conversion::Single::Significand const):
        (WTF::double_conversion::Single::IsDenormal const):
        (WTF::double_conversion::Single::IsSpecial const):
        (WTF::double_conversion::Single::IsNan const):
        (WTF::double_conversion::Single::IsInfinite const):
        (WTF::double_conversion::Single::Sign const):
        (WTF::double_conversion::Single::NormalizedBoundaries const):
        (WTF::double_conversion::Single::UpperBoundary const):
        (WTF::double_conversion::Single::LowerBoundaryIsCloser const):
        (WTF::double_conversion::Single::value const):
        (WTF::double_conversion::Single::Infinity):
        (WTF::double_conversion::Single::NaN):
        * wtf/dtoa/strtod.cc:
        * wtf/dtoa/strtod.h:
        * wtf/dtoa/utils.h:
        (abort_noreturn):
        (WTF::double_conversion::Max):
        (WTF::double_conversion::Min):
        (WTF::double_conversion::StrLength):
        (WTF::double_conversion::BufferReference::BufferReference):
        (WTF::double_conversion::BufferReference::SubVector):
        (WTF::double_conversion::BufferReference::length const):
        (WTF::double_conversion::BufferReference::is_empty const):
        (WTF::double_conversion::BufferReference::start const):
        (WTF::double_conversion::BufferReference::operator[] const):
        (WTF::double_conversion::BufferReference::first):
        (WTF::double_conversion::BufferReference::last):
        (WTF::double_conversion::StringBuilder::StringBuilder):
        (WTF::double_conversion::StringBuilder::~StringBuilder):
        (WTF::double_conversion::StringBuilder::size const):
        (WTF::double_conversion::StringBuilder::position const):
        (WTF::double_conversion::StringBuilder::Reset):
        (WTF::double_conversion::StringBuilder::AddCharacter):
        (WTF::double_conversion::StringBuilder::AddString):
        (WTF::double_conversion::StringBuilder::AddSubstring):
        (WTF::double_conversion::StringBuilder::AddPadding):
        (WTF::double_conversion::StringBuilder::RemoveCharacters):
        (WTF::double_conversion::StringBuilder::Finalize):
        (WTF::double_conversion::StringBuilder::is_finalized const):
        (WTF::double_conversion::BitCast):
        (WTF::double_conversion::BufferReference::SubBufferReference): Deleted.
        (WTF::double_conversion::StringBuilder::SetPosition): Deleted.

2019-02-20  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * wtf/Assertions.cpp:
        (WTF::createWithFormatAndArguments): Moved this here from WTFString.cpp.
        (WTFLog): Use WTF::createWithFormatAndArguments instead of String::format.

        * wtf/HexNumber.h: Deleted unneeded toString function.

        * wtf/text/StringConcatenate.h: Got rid of unneeded forward declaration of
        StringTypeAdapter, since that's now in Forward.h. Tweaked formatting of templates
        a bit. Use function templates for writeTo functions rather than having two of each.
        Removed unused toString functions. Optimized case where we use have a UChar* and
        a length of zero to not force the result to be 16-bit. Also gets rid of a small
        NO_RETURN_DUE_TO_CRASH mess that we don't need. Refactored constructors to use some
        static member helper functions to compute string lengths. Added the pad function
        and the PaddingSpecification struct template, so we can add padding to anything
        we can turn into a string. Got rid of the special case overload for single
        arguments, since it only worked for things that the String constructor can handle.
        Instead we will now use StringTypeAdapter, which works for more types. Possibly
        less optimal for some special cases, which we could specialize for later if we like.
        * wtf/text/StringConcatenateNumbers.h: Ditto.
        * wtf/text/StringOperators.h: Ditto.
        * wtf/text/StringView.h: Ditto.

        * wtf/text/WTFString.cpp:
        (WTF::createWithFormatAndArguments): Deleted.
        (WTF::String::format): Deleted.
        * wtf/text/WTFString.h: Deleted declaration of String::format.

2019-02-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix find/replace error from r232178

        Looks like this was the only such error in that commit.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::isLookalikeCharacter):

2019-02-23  Mark Lam  <mark.lam@apple.com>

        Add an exception check and some assertions in StringPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=194962
        <rdar://problem/48013416>

        Reviewed by Yusuke Suzuki and Saam Barati.

        Add an AssertNoOverflow overflow handler which allows us to do CheckedArithmetic
        for assertion purpose only on debug builds but sacrifices no performance on
        release builds.

        * wtf/CheckedArithmetic.h:
        (WTF::AssertNoOverflow::overflowed):
        (WTF::AssertNoOverflow::clearOverflow):
        (WTF::AssertNoOverflow::crash):
        (WTF::AssertNoOverflow::hasOverflowed const):
        (WTF::observesOverflow):
        (WTF::observesOverflow<AssertNoOverflow>):
        (WTF::safeAdd):
        (WTF::safeSub):
        (WTF::safeMultiply):
        (WTF::Checked::operator+=):
        (WTF::Checked::operator-=):
        (WTF::Checked::operator*=):
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator*):

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-21  Antoine Quint  <graouts@apple.com>

        Move UIWebTouchEventsGestureRecognizer.activeTouchesByIdentifier to SPI
        https://bugs.webkit.org/show_bug.cgi?id=194531
        <rdar://problem/47714562>

        Reviewed by Tim Horton.

        Follow-up commit to ensure this SPI is only called on newer versions of iOS.

        * wtf/Platform.h:

2019-02-21  Dean Jackson  <dino@apple.com>

        Rotation animations sometimes use the wrong origin (affects apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=194878
        <rdar://problem/43908047>

        Follow-up commit to ensure this change only affects newer versions
        of iOS.

        * wtf/Platform.h: Add a version check.

2019-02-20  Alex Christensen  <achristensen@webkit.org>

        URL percent-encode operations should use checked arithmetic for buffer allocation length
        https://bugs.webkit.org/show_bug.cgi?id=194877
        <rdar://problem/48212062>

        Reviewed by Tim Horton.

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::userVisibleURL):
        * wtf/cocoa/NSURLExtras.mm:
        (WTF::dataWithUserTypedString):

2019-02-20  Dean Jackson  <dino@apple.com>

        Rotation animations sometimes use the wrong origin (affects apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=194878
        <rdar://problem/43908047>

        Reviewed by Simon Fraser.

        * wtf/Platform.h: Add HAVE(CA_WHERE_ADDITIVE_TRANSFORMS_ARE_REVERSED).

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * WTF.xcodeproj/project.pbxproj:

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        Add specialization of the refGPtr() and derefGPtr() templates for GMappedFile.

        * wtf/glib/GRefPtr.cpp:
        (WTF::refGPtr): Added.
        (WTF::derefGPtr): Added.
        * wtf/glib/GRefPtr.h: Declare template specializations.

2019-02-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241770.
        https://bugs.webkit.org/show_bug.cgi?id=194833

        Caused crashes (Requested by smfr on #webkit).

        Reverted changeset:

        "Code quality cleanup in NeverDestroyed"
        https://bugs.webkit.org/show_bug.cgi?id=194824
        https://trac.webkit.org/changeset/241770

2019-02-19  Keith Miller  <keith_miller@apple.com>

        Code quality cleanup in NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=194824

        Reviewed by Yusuke Suzuki.

        First, move data members to the end of the class per WebKit
        style. Also, add forbid heap allocation since we expect the
        NeverDestroyed classes to be static.

        * wtf/NeverDestroyed.h:

2019-02-16  Darin Adler  <darin@apple.com>

        Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
        https://bugs.webkit.org/show_bug.cgi?id=194752

        Reviewed by Daniel Bates.

        * WTF.xcodeproj/project.pbxproj: Added HexNumber.cpp and Logger.cpp.
        * wtf/CMakeLists.txt: Ditto.

        * wtf/HexNumber.cpp: Added.
        (WTF::Internal::appendHex): Non-inline, non-template hex formatting logic.

        * wtf/HexNumber.h:
        (WTF::Internal::appendHex): Refactored main logic of appendUnsignedAsHex and
        appendUnsignedAsHexFixedSize so they can be reused in a function named hex for
        use with StringTypeAdapter.
        (WTF::appendUnsignedAsHex): Ditto.
        (WTF::appendUnsignedAsHexFixedSize): Ditto.
        (WTF::hex): Added.
        (WTF::StringTypeAdapter<HexNumberBuffer>): Added.

        * wtf/Logger.cpp: Added.
        (WTF::Logger::LogSiteIdentifier::toString const): Made this a non-template
        function and moved it here so that we don't need to include HexNumber.h
        in Logger.h. Since HexNumber.h has substantial code in it, it's good if we
        don't include it in any other headers.

        * wtf/Logger.h:
        (WTF::LogArgument<Logger::LogSiteIdentifier>::toString): Changed to call
        a non-template function, LogSiteIdentifier::toString.

        * wtf/text/StringConcatenateNumbers.h: Replaced overloaded writeTo functions
        with function templates and used StringImpl::copyCharacters instead of
        hand-written loops.

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Reviewed by Devin Rousso.

        * wtf/Threading.h:
        * wtf/Threading.cpp:
        (WTF::Thread::allThreadsMutex):
        (WTF::Thread::create):
        (WTF::Thread::didExit):
        Add a set of all WTF::Thread created threads.

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should a have a boot-specific validation
        https://bugs.webkit.org/show_bug.cgi?id=194769
        <rdar://problem/48149509>

        Reviewed by Keith Miller.

        Add helper to get kern.bootsessionuuid from sysctl

        * wtf/UUID.cpp:
        (WTF::bootSessionUUIDString):
        * wtf/UUID.h:

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        Create a new Environment API as a platform-independent, thread-safe(r)
        way to get and set environment variables.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Environment.h: Added.
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/posix/EnvironmentPOSIX.cpp: Added.
        * wtf/win/EnvironmentWin.cpp: Added.
        Introduce WTF::Environment.

        * wtf/Threading.cpp:
        (WTF::threadingIsInitialized):
        (WTF::initializeThreading):
        * wtf/Threading.h:
        Introduce WTF::threadingIsInitialized() so that we can ASSERT that it's
        false before setting an environment variable through the new API.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::openTemporaryFile):
        Utilize WTF::Environment where possible.

2019-02-15  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        * wtf/cocoa/SoftLinking.h:
        Remove macro that now has no uses.

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241564.

        Caused 50+ Timeouts on Mac WK2, mostly in the http/ directory

        Reverted changeset:

        "[Mac] WebInspectorUI.framework does not need to be soft-
        linked anymore"
        https://bugs.webkit.org/show_bug.cgi?id=194411
        https://trac.webkit.org/changeset/241564

2019-02-15  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix deadlock on Linux/x64 between SamplingProfiler and VMTraps
        https://bugs.webkit.org/show_bug.cgi?id=194014

        Reviewed by Michael Catanzaro.

        Do not block SIGUSR1 when installing signal handlers, since this signal
        is used to suspend/resume machine threads on Linux.

        ftl-ai-filter-phantoms-should-clear-clear-value.js deadlocked with
        enabled watchdog and sampling.

        Deadlock happened in the following situation:

        Thread 1 (Sampling): SamplingProfiler.cpp:takeSample takes all needed locks
        and then tries to suspend the main thread.

        Thread 2 (Watchdog/VMTraps): Before the Sampling-Thread suspends the main thread
        a signal is caught and the signal handler is invoked (VMTraps.cpp:SignalSender).
        SignalSender tries to lock codeBlockSet, but this is already locked by the
        SamplingProfiler.

        The SamplingProfiler can only give up the lock when it suspends
        the thread. However since the VMTraps signal handler is active, all other signals blocked,
        therefore the SamplingProfiler also waits until its signal handler is invoked.

        This patch fixes this by not blocking SIGUSR1 in installSignalHandler, since
        it is used to suspend/resume threads on Linux.

        * wtf/Threading.h:
        * wtf/posix/ThreadingPOSIX.cpp:
        * wtf/threads/Signals.cpp:
        (WTF::installSignalHandler):

2019-02-15  Saam barati  <sbarati@apple.com>

        [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
        https://bugs.webkit.org/show_bug.cgi?id=194036

        Reviewed by Yusuke Suzuki.

        * wtf/IndexMap.h:
        (WTF::IndexMap::at):
        (WTF::IndexMap::at const):
        (WTF::IndexMap::operator[]):
        (WTF::IndexMap::operator[] const):

2019-02-14  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        * wtf/cocoa/SoftLinking.h:
        Remove macro that now has no uses.

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        Create a new Environment API as a platform-independent, thread-safe(r)
        way to get and set environment variables.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Environment.h: Added.
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/posix/EnvironmentPOSIX.cpp: Added.
        * wtf/win/EnvironmentWin.cpp: Added.
        Introduce WTF::Environment.

        * wtf/Threading.cpp:
        (WTF::threadingIsInitialized):
        (WTF::initializeThreading):
        * wtf/Threading.h:
        Introduce WTF::threadingIsInitialized() so that we can ASSERT that it's
        false before setting an environment variable through the new API.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores):
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::openTemporaryFile):
        Utilize WTF::Environment where possible.

2019-02-13  Yusuke Suzuki  <ysuzuki@apple.com>

        We should only make rope strings when concatenating strings long enough.
        https://bugs.webkit.org/show_bug.cgi?id=194465

        Reviewed by Mark Lam.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::headerSize):

2019-02-12  Tim Horton  <timothy_horton@apple.com>

        Remove WKLegacyPDFView
        https://bugs.webkit.org/show_bug.cgi?id=194559

        Reviewed by Andy Estes.

        * wtf/FeatureDefines.h:

2019-02-12  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r238955, r240494): Soft-linking optional Lookup.framework triggers release assertion when missing
        <https://webkit.org/b/194529>
        <rdar://problem/47924449>

        Reviewed by Eric Carlson.

        * wtf/cocoa/SoftLinking.h:
        (SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT_AND_IS_OPTIONAL): Rename
        SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT_AND_ASSERTION() to this
        and change `assertion` argument to `isOptional`.  Pass
        `isOptional` to framework##Library() method to control assertion
        behavior.  Only check RELEASE_ASSERT() if `!isOptional`, else
        that code should be optimized out by the compiler.  This fixes
        the crash.
        (NO_ASSERT): Remove macro since it's no longer used.
        (SOFT_LINK_IS_OPTIONAL): Add macro to use for soft-linking
        optional classes.
        (SOFT_LINK_IS_NOT_OPTIONAL): Add macro to use for soft-linking
        non-optional classes.
        (SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT): Update to use new
        SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT_AND_IS_OPTIONAL() macro.
        (SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT): Ditto.
        (SOFT_LINK_CLASS_FOR_SOURCE): Ditto.
        (SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL): Ditto.

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2019-02-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Add an ENABLE in Platform.

        * wtf/Platform.h:

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241229.

        Revision broke internal builds for watchOS.

        Reverted changeset:

        "[Cocoa] Ask platform for generic font family mappings"
        https://bugs.webkit.org/show_bug.cgi?id=187723
        https://trac.webkit.org/changeset/241229

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * wtf/HexNumber.h: Removed unused functions placeByteAsHexCompressIfPossible and
        placeByteAsHex. Can always bring them back if someone needs them. Updated
        appendUnsignedAsHex to be a template so we can use it on any integer type,
        got rid of unnecessary use of Vector and unnecessary reversing, and got rid of
        appendUnsigned64AsHex since callers can now just use appendUnsignedAsHex.
        Rewrote appendUnsignedAsHexFixedSize to share mode code rather than replicating.

        * wtf/Logger.h: Use appendUnsignedAsHex instead of appendUnsigned64AsHex.

        * wtf/URL.cpp: Removed unnecessary include of HexNumber.h.

        * wtf/cocoa/NSURLExtras.h: Added missing include of Foundation.h that was
        worked around in NSURLExtras.mm.
        * wtf/cocoa/NSURLExtras.mm: Removed unnecessary includes of HexNumber.h
        and Foundation.h.

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * wtf/URL.cpp:
        (WTF::URL::setPort): Remove String::number and let makeString do the conversion
        without allocating/destroying a String. Added a cast to "unsigned" to sidestep the
        ambiguity with 16-bit unsigned types that are sometimes used for numbers (uint16_t)
        and sometimes used for UTF-16 code units (UChar) and can be the same type.

        * wtf/text/StringConcatenateNumbers.h:
        Changed FormattedNumber::fixedPrecision to more closely match String::number and
        StringBuilder::appendNumber by defaulting to truncating trailing zeros and using
        a named enumeration for the truncation policy rather than a boolean.


2019-02-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, rolling in r241237 again
        https://bugs.webkit.org/show_bug.cgi?id=194469

        After the measurement, this patch was unrelated to recent regression.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::isSubString const):
        (WTF::StringImpl::createSubstringSharingImpl):

2019-02-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241237.
        https://bugs.webkit.org/show_bug.cgi?id=194474

        Shows significant memory increase in WSL (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "[WTF] Use BufferInternal StringImpl if substring StringImpl
        takes more memory"
        https://bugs.webkit.org/show_bug.cgi?id=194469
        https://trac.webkit.org/changeset/241237

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Use BufferInternal StringImpl if substring StringImpl takes more memory
        https://bugs.webkit.org/show_bug.cgi?id=194469

        Reviewed by Geoffrey Garen.

        Because pointer is large and aligned in 64bit in 64bit architecture, BufferSubstring StringImpl
        implementation takes more memory than BufferInternal StringImpl implementation for small strings.
        And BufferInternal StringImpl does not have a problem like, small substring StringImpl keeps super
        large owner StringImpl. This patch calculates the required size of memory and selects the more efficient one.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::isSubString const):
        (WTF::StringImpl::createSubstringSharingImpl):

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen.

        * wtf/spi/darwin/XPCSPI.h:
        Instead of using XPC bootstrap SPI, we just send a separate message.
        xpc_copy_bootstrap does not seem to work in  daemons.

2019-02-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241197.

        Broke iOS Simulator Debug build and casued 1 API failure on
        High Sierra

        Reverted changeset:

        "Add SPI to use networking daemon instead of XPC service"
        https://bugs.webkit.org/show_bug.cgi?id=194427
        https://trac.webkit.org/changeset/241197

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen.

        * wtf/spi/darwin/XPCSPI.h:
        Instead of using XPC bootstrap SPI, we just send a separate message.
        xpc_copy_bootstrap does not seem to work in  daemons.

2019-02-08  Benjamin Poulain  <benjamin@webkit.org>

        clampTo(): do not convert the input to double when dealing with integers
        https://bugs.webkit.org/show_bug.cgi?id=194263
        <rdar://problem/47692312>

        Reviewed by Darin Adler.

        Previously, every use of clampTo() was converting the input to double,
        doing the comparison in double, then casting back to whatever type was needed.

        In many case, that was very wasteful. WebKit has many cases of clampTo() with
        the same type as input/output, or with integer types of different size/sign.

        This patch adds a few versions of clampTo() for the common cases seen in WebKit.
        In each case, I tried to minimize the amount of conversion needed at runtime.

        * wtf/MathExtras.h:
        (clampTo):

2019-02-07  Chris Dumez  <cdumez@apple.com>

        Mark more heap-allocated classes as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=194422

        Reviewed by Ryosuke Niwa.

        * wtf/Function.h:
        (WTF::Function<Out):
        * wtf/RefCounter.h:
        * wtf/URL.h:
        * wtf/text/StringView.cpp:

2019-02-07  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Block coreservicesd in sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=192670

        Reviewed by Alexey Proskuryakov.

        Add HAVE_CSCHECKFIXDISABLE define.

        * wtf/Platform.h:

2019-02-07  Eric Carlson  <eric.carlson@apple.com>

        [MSE] Convert debug-only logging to runtime logging
        https://bugs.webkit.org/show_bug.cgi?id=194348
        <rdar://problem/47566449>

        Reviewed by Jer Noble.

        * wtf/LoggerHelper.h:
        (WTF::LoggerHelper::childLogIdentifier const): Helper to generate a log identifier for an
        object that is associated with another logging object.
        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toJSONObject const):
        (WTF::MediaTime::toJSONString const):
        (WTF::MediaTimeRange::toJSONString const):
        (WTF::toJSONStringInternal): Deleted.
        * wtf/MediaTime.h:

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * Scripts/generate-unified-source-bundles.rb:

2019-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(UnlinkedCodeBlock)
        https://bugs.webkit.org/show_bug.cgi?id=194281

        Reviewed by Michael Saboff.

        * wtf/TriState.h:

2019-02-05  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Stop URI-escaping file system representations
        https://bugs.webkit.org/show_bug.cgi?id=194213

        Reviewed by Carlos Garcia Campos.

        Stop URI-escaping of file representation strings in
        FileSystem::stringFromFileSystemRepresentation(), and URI-unescaping
        of strings in FileSystem::fileSystemRepresentation().

        This behavior deviates from POSIX and CF implementations and is
        currently breaking IndexedDB-specific calculation of database sizes due
        to directory components used in that process that are URL-based and are
        as such URI-escaped. When unescaped, those single directory components
        explode into multiple directory components, leading to incorrect total
        database size calculation when iterating the database directory.

        FileSystem::stringFromFileSystemRepresentation() now retrieves GLib's
        filename charsets and in worst case converts the filesystem
        representation to UTF-8 before String::fromUTF8() is used.
        FileSystem::fileSystemRepresentation() reverses that process, taking
        String's UTF-8 data and converting it to target charset if necessary.

        Other FileSystem functions are adjusted to convert passed-in String
        objects to filesystem representations.

        * wtf/glib/FileSystemGlib.cpp:
        (WTF::FileSystemImpl::stringFromFileSystemRepresentation):
        (WTF::FileSystemImpl::fileSystemRepresentation):
        (WTF::FileSystemImpl::validRepresentation):
        (WTF::FileSystemImpl::filenameForDisplay):
        (WTF::FileSystemImpl::fileExists):
        (WTF::FileSystemImpl::deleteFile):
        (WTF::FileSystemImpl::deleteEmptyDirectory):
        (WTF::FileSystemImpl::getFileStat):
        (WTF::FileSystemImpl::getFileLStat):
        (WTF::FileSystemImpl::makeAllDirectories):
        (WTF::FileSystemImpl::createSymbolicLink):
        (WTF::FileSystemImpl::pathGetFileName):
        (WTF::FileSystemImpl::getVolumeFreeSpace):
        (WTF::FileSystemImpl::directoryName):
        (WTF::FileSystemImpl::listDirectory):
        (WTF::FileSystemImpl::openFile):
        (WTF::FileSystemImpl::moveFile):
        (WTF::FileSystemImpl::hardLinkOrCopyFile):
        (WTF::FileSystemImpl::getFileDeviceId): Align with POSIX implementation
        and treat input CString as an existing filesystem representation.
        (WTF::FileSystemImpl::unescapedFilename): Deleted.

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Translate userVisibleString and dependent code into platform-neutral C++
        in wtf/URLHelpers.{h,cpp}.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/URLHelpers.cpp: Added.
        (WTF::URLHelpers::loadIDNScriptWhiteList):
        (WTF::URLHelpers::isArmenianLookalikeCharacter):
        (WTF::URLHelpers::isArmenianScriptCharacter):
        (WTF::URLHelpers::isASCIIDigitOrValidHostCharacter):
        (WTF::URLHelpers::isLookalikeCharacter):
        (WTF::URLHelpers::whiteListIDNScript):
        (WTF::URLHelpers::initializeDefaultIDNScriptWhiteList):
        (WTF::URLHelpers::allCharactersInIDNScriptWhiteList):
        (WTF::URLHelpers::isSecondLevelDomainNameAllowedByTLDRules):
        (WTF::URLHelpers::isRussianDomainNameCharacter):
        (WTF::URLHelpers::allCharactersAllowedByTLDRules):
        (WTF::URLHelpers::mapHostName):
        (WTF::URLHelpers::collectRangesThatNeedMapping):
        (WTF::URLHelpers::applyHostNameFunctionToMailToURLString):
        (WTF::URLHelpers::applyHostNameFunctionToURLString):
        (WTF::URLHelpers::mapHostNames):
        (WTF::URLHelpers::createStringWithEscapedUnsafeCharacters):
        (WTF::URLHelpers::toNormalizationFormC):
        (WTF::URLHelpers::userVisibleURL):
        * wtf/URLHelpers.h: Added.
        * wtf/cocoa/NSURLExtras.mm:
        (WTF::URLHelpers::loadIDNScriptWhiteList):
        (WTF::decodePercentEscapes):
        (WTF::decodeHostName):
        (WTF::encodeHostName):
        (WTF::URLWithUserTypedString):
        (WTF::userVisibleString):

2019-02-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r240896.
        https://bugs.webkit.org/show_bug.cgi?id=194202

        "Fixes leaks, but is probably not the correct fix." (Requested
        by ddkilzer on #webkit).

        Reverted changeset:

        "Leak of WTF::StringImpl under SymbolImpl::createNullSymbol()
        (48 bytes) in com.apple.WebKit.WebContent running layout
        tests"
        https://bugs.webkit.org/show_bug.cgi?id=193291
        https://trac.webkit.org/changeset/240896

2019-02-02  David Kilzer  <ddkilzer@apple.com>

        Leak of WTF::StringImpl under SymbolImpl::createNullSymbol() (48 bytes) in com.apple.WebKit.WebContent running layout tests
        <https://webkit.org/b/193291>
        <rdar://problem/46655953>

        Reviewed by Keith Miller.

        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::~SymbolImpl): Fix the leak by implementing the
        class destructor that calls StringImpl::deref() on `m_owner`.
        Two of the three constructors leak the StringImpl when setting
        `m_owner`, so we need to balance that by manually calling
        deref().

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * wtf/JSONValues.cpp:
        (WTF::appendDoubleQuotedStringEscapedCharacter): Renamed from
        escapeChar and reordered arguments to make sense as an append function.
        (WTF::appendDoubleQuotedString): Renamed from doubleQuoteString,
        reordered arguments to make sense as an append function, take a
        StringView instead of a String, used early exit to make the code
        a bit easier to read. Use the ASCIIHexDigit functions to construct
        a hex number a nibble at a time rather than using String::format.
        (WTF::JSONImpl::Value::writeJSON const): Update for name change.
        (WTF::JSONImpl::ObjectBase::writeJSON const): Ditto.

2019-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WPE compile warnings due to deprecated glib API.

        * wtf/Platform.h:

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Make sure WTF::generateObjectIdentifier() internal counter does not get duplicated
        https://bugs.webkit.org/show_bug.cgi?id=193848

        Reviewed by Youenn Fablet.

        Move WTF::generateObjectIdentifier()'s internal counter out-of-line so make sure it never gets
        duplicated at each call site. This has caused some hard-to-debug issues with duplicate
        identifiers such as Bug 193761.

        Also move it to ObjectIdentifier and rename it to generate() as this make call sites nicer
        when they have a typedef for the ObjectIdentifier<T> type.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ObjectIdentifier.cpp: Copied from Source/WebCore/platform/Process.cpp.
        (WTF::ObjectIdentifierBase::generateIdentifierInternal):
        (WTF::ObjectIdentifierBase::generateThreadSafeIdentifierInternal):
        * wtf/ObjectIdentifier.h:
        (WTF::ObjectIdentifier::generate):
        (WTF::ObjectIdentifier::generateThreadSafe):

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Move platform-specific files out of WTF root directory.
        https://bugs.webkit.org/show_bug.cgi?id=193929

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cf/RunLoopTimerCF.cpp: Renamed from Source/WTF/wtf/RunLoopTimerCF.cpp.
        * wtf/cf/SchedulePairCF.cpp: Renamed from Source/WTF/wtf/SchedulePairCF.cpp.
        * wtf/mac/SchedulePairMac.mm: Renamed from Source/WTF/wtf/SchedulePairMac.mm.
        * wtf/posix/OSAllocatorPOSIX.cpp: Renamed from Source/WTF/wtf/OSAllocatorPosix.cpp.
        * wtf/posix/ThreadingPOSIX.cpp: Renamed from Source/WTF/wtf/ThreadingPthreads.cpp.
        * wtf/win/CONTRIBUTORS.pthreads-win32: Renamed from Source/WTF/wtf/CONTRIBUTORS.pthreads-win32.
        * wtf/win/OSAllocatorWin.cpp: Renamed from Source/WTF/wtf/OSAllocatorWin.cpp.
        * wtf/win/ThreadSpecificWin.cpp: Renamed from Source/WTF/wtf/ThreadSpecificWin.cpp.
        * wtf/win/ThreadingWin.cpp: Renamed from Source/WTF/wtf/ThreadingWin.cpp.

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h:

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        [JSCOnly][WTF] Expose FileSystem.
        https://bugs.webkit.org/show_bug.cgi?id=193789

        Reviewed by Don Olmstead.

        * wtf/FileSystem.h:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/posix/FileSystemPOSIX.cpp:
        (WTF::FileSystemImpl::getVolumeFreeSpace):
        * wtf/win/FileSystemWin.cpp:
        (WTF::FileSystemImpl::fileSystemRepresentation):

2019-01-28  Eric Carlson  <eric.carlson@apple.com>

        AVStreamSession isn't always available, make a HAVE compile flag for it
        https://bugs.webkit.org/show_bug.cgi?id=193889
        <rdar://problem/47452863>

        Reviewed by Jer Noble.

        * wtf/FeatureDefines.h:

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

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply): Use makeString.

        * wtf/dtoa.cpp:
        (WTF::dtoa): Use sprintf instead of String::format in the comments,
        since these functions have nothing to do with WTF::String.

2019-01-25  Chris Dumez  <cdumez@apple.com>

        [iOS] Add support for the download attribute
        https://bugs.webkit.org/show_bug.cgi?id=167341
        <rdar://problem/30296281>

        Reviewed by Geoffrey Garen.

        Turn on HTML download attribute support on iOS.

        * wtf/FeatureDefines.h:

2019-01-25  David Kilzer  <ddkilzer@apple.com>

        Move soft-linking of Lookup.framework out of LookupSPI.h
        <https://webkit.org/b/193815>

        Reviewed by Tim Horton.

        * wtf/cocoa/SoftLinking.h:
        (SOFT_LINK_CONSTANT_FOR_HEADER):
        (SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT):
        (SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER):
        - Remove local declaration of constant.  This should be handled
          by including *SPI.h or "real" headers.
        (SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT):
        - Remove local declaration of constant.
        - Rename from SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE() and add
          `export` argument to support exporting of functions.
        (SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE):
        - Redefine in terms of
          SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT().

2019-01-24  Youenn Fablet  <youenn@apple.com>

        Use MonotonicTime in WorkerRunLoop
        https://bugs.webkit.org/show_bug.cgi?id=193417

        Reviewed by Saam Barati.

        * wtf/MessageQueue.h:
        (WTF::MessageQueue<DataType>::waitForMessage):
        (WTF::MessageQueue<DataType>::waitForMessageFilteredWithTimeout):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FileMetadata.h: Renamed from Source/WebCore/platform/FileMetadata.h.
        * wtf/FileSystem.cpp: Renamed from Source/WebCore/platform/FileSystem.cpp.
        * wtf/FileSystem.h: Renamed from Source/WebCore/platform/FileSystem.h.
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformPlayStation.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cf/FileSystemCF.cpp: Renamed from Source/WebCore/platform/cf/FileSystemCF.cpp.
        * wtf/cocoa/FileSystemCocoa.mm: Renamed from Source/WebCore/platform/cocoa/FileSystemCocoa.mm.
        * wtf/glib/FileSystemGlib.cpp: Renamed from Source/WebCore/platform/glib/FileSystemGlib.cpp.
        * wtf/mac/FileSystemMac.mm: Renamed from Source/WebCore/platform/mac/FileSystemMac.mm.
        * wtf/posix/FileSystemPOSIX.cpp: Renamed from Source/WebCore/platform/posix/FileSystemPOSIX.cpp.
        * wtf/spi/mac/MetadataSPI.h: Renamed from Source/WebCore/PAL/pal/spi/mac/MetadataSPI.h.
        * wtf/win/FileSystemWin.cpp: Renamed from Source/WebCore/platform/win/FileSystemWin.cpp.
        * wtf/win/PathWalker.cpp: Renamed from Source/WebCore/platform/win/PathWalker.cpp.
        * wtf/win/PathWalker.h: Renamed from Source/WebCore/platform/win/PathWalker.h.

2019-01-24  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Reenable baseline JIT on mips
        https://bugs.webkit.org/show_bug.cgi?id=192983

        Reviewed by Mark Lam.

        Use baseline JIT by default on MIPS.

        * wtf/Platform.h:

2019-01-24  David Kilzer  <ddkilzer@apple.com>

        Duplicate global variables: WTF::asciiCaseFoldTable
        <https://webkit.org/b/193726>
        <rdar://problem/47334622>

        Reviewed by Michael Catanzaro.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        - Add ASCIICType.cpp to build systems.

        * wtf/ASCIICType.cpp: Added.
        (WTF::asciiCaseFoldTable): Move table to here so there is only
        one copy.  Mark as exported for other frameworks to use.
        * wtf/ASCIICType.h:
        (WTF::asciiCaseFoldTable): Change to extern declaration, and
        mark as exported for other frameworks to use.

2019-01-23  Mark Lam  <mark.lam@apple.com>

        ARM64E should not ENABLE(SEPARATED_WX_HEAP).
        https://bugs.webkit.org/show_bug.cgi?id=193744
        <rdar://problem/46262952>

        Reviewed by Saam Barati.

        * wtf/Platform.h:

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        Switch remaining CoreMedia soft-linking in WebKit over to CoreMediaSoftLink.{cpp,h}
        <https://webkit.org/b/193694>
        <rdar://problem/47464025>

        Reviewed by Tim Horton.

        * wtf/win/SoftLinking.h:
        (SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT):
        - Implement for Windows.
        (SOFT_LINK_CONSTANT_FOR_SOURCE):
        - Define using SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT().

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        BitVectors have to be friends with JSC::CacheBitVector to allow
        serializing its buffer as part of the bytecode cache encoding.

        * wtf/BitVector.h:

2019-01-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Speculative build fix for Ubuntu LTS
        https://bugs.webkit.org/show_bug.cgi?id=193651

        Unreviewed build fix.

        * wtf/Assertions.h: Add missing <cstdlib> include.

2019-01-20  Saam Barati  <sbarati@apple.com>

        Rollout r240210: It broke tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193640

        Unreviewed.

        * wtf/BitVector.h:

2019-01-20  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        BitVectors have to be friends with JSC::CacheBitVector to allow
        serializing its buffer as part of the bytecode cache encoding.

        * wtf/BitVector.h:

2019-01-18  Tim Horton  <timothy_horton@apple.com>

        Get rid of ADVANCED_SPELL_CHECKING
        https://bugs.webkit.org/show_bug.cgi?id=193592

        Reviewed by Wenson Hsieh.

        * wtf/Platform.h:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-18  Keith Miller  <keith_miller@apple.com>

        Gigacages should start allocations from a slide
        https://bugs.webkit.org/show_bug.cgi?id=193523

        Reviewed by Mark Lam.

        This patch changes some macros into constants since macros are the
        devil.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:

2019-01-18  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r240160.

        This broke multiple internal builds.

        Reverted changeset:

        "Gigacages should start allocations from a slide"
        https://bugs.webkit.org/show_bug.cgi?id=193523
        https://trac.webkit.org/changeset/240160

2019-01-18  Keith Miller  <keith_miller@apple.com>

        Gigacages should start allocations from a slide
        https://bugs.webkit.org/show_bug.cgi?id=193523

        Reviewed by Mark Lam.

        This patch changes some macros into constants since macros are the
        devil.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-16  Keith Miller  <keith_miller@apple.com>

        bmalloc should use JSC VM tag for gigacage
        https://bugs.webkit.org/show_bug.cgi?id=193496

        Reviewed by Mark Lam.

        Move most of the macros for vm tagging to bmalloc.

        * wtf/VMTags.h:

2019-01-16  Alberto Garcia  <berto@igalia.com>

        [WTF] Compilation fails with system malloc
        https://bugs.webkit.org/show_bug.cgi?id=172445

        Reviewed by Michael Catanzaro.

        Follow-up to r217270. The sysinfo() system call is specific to
        Linux so update the #ifdef checks accordingly.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):

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

        Unreviewed, revert part of r239997 as it is not needed to fix the build.

        * wtf/RefCounter.h:

2019-01-15  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build after r239993
        https://bugs.webkit.org/show_bug.cgi?id=193361

        * wtf/RefCounter.h:

2019-01-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        Use unorm2_normalize instead of precomposedStringWithCanonicalMapping in userVisibleString
        https://bugs.webkit.org/show_bug.cgi?id=192945

        Reviewed by Alex Christensen.

        Replace use of the nice NSString function precomposedStringWithCanonicalMapping with the ICU
        API unorm2_normalize. This is to prep the code for translation to cross-platform C++. Of
        course this is much worse than the preexisting code, but this is just a transitional
        measure and not the final state of the code. It wouldn't make sense to do this if the code
        were to remain Objective C++.

        * wtf/cocoa/NSURLExtras.mm:
        (WTF::toNormalizationFormC):
        (WTF::userVisibleString):

2019-01-14  Alex Christensen  <achristensen@webkit.org>

        Bulgarian TLD should not punycode-encode URLs with Bulgarian Cyrillic characters
        https://bugs.webkit.org/show_bug.cgi?id=193411
        <rdar://problem/47215929>

        Reviewed by Alexey Proskuryakov.

        * wtf/cocoa/NSURLExtras.mm:
        (WTF::allCharactersAllowedByTLDRules):

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * wtf/Platform.h: Define HAVE_OS_DARK_MODE_SUPPORT on macOS 10.14.

2019-01-11  David Kilzer  <ddkilzer@apple.com>

        Follow-up: WorkQueue::concurrentApply() passes a raw pointer to a temporary String to Thread::create().
        https://bugs.webkit.org/show_bug.cgi?id=191350

        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply): Fix whitespace.

2019-01-11  Devin Rousso  <drousso@apple.com>

        Fix style CFNetworkSPI style checker warnings from r239698
        https://bugs.webkit.org/show_bug.cgi?id=193369

        Reviewed by Joseph Pecoraro.

        * wtf/Platform.h:

2019-01-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        WorkQueue::concurrentApply() passes a raw pointer to a temporary String to Thread::create().
        https://bugs.webkit.org/show_bug.cgi?id=191350

        Reviewed by Brent Fulgham.

        The non COCOA version of WorkQueue::concurrentApply() creates a temporary
        String for the threadName and passes the raw pointer of this String to
        Thread::create(). After freeing this String, Thread::entryPoint() uses
        the raw char pointer to internally initialize the thread.

        The fix is to use a single literal string for all the threads' names since
        they are created for a thread-pool.

        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply):

2019-01-11  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux.

        * wtf/Platform.h:

2019-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239825.
        https://bugs.webkit.org/show_bug.cgi?id=193330

        Broke tests on armv7/linux bots (Requested by guijemont on
        #webkit).

        Reverted changeset:

        "Enable DFG on ARM/Linux again"
        https://bugs.webkit.org/show_bug.cgi?id=192496
        https://trac.webkit.org/changeset/239825

2019-01-10  John Wilander  <wilander@apple.com>

        Override the session configuration for cookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=190925
        <rdar://problem/45497382>

        Reviewed by Alexey Proskuryakov and Alex Christensen.

        * wtf/Platform.h:
            Definition of HAVE_CFNETWORK_OVERRIDE_SESSION_COOKIE_ACCEPT_POLICY.

2019-01-10  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux.

        * wtf/Platform.h:

2019-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Color emoji not properly supported
        https://bugs.webkit.org/show_bug.cgi?id=191976

        Reviewed by Michael Catanzaro.

        Add a name for combining enclosing keycap character.

        * wtf/unicode/CharacterNames.h:

2019-01-09  Carlos Eduardo Ramalho  <cadubentzen@gmail.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        Use directory local sequential numbers for Unified Sources filenames instead of global sequential numbers for CMake
        https://bugs.webkit.org/show_bug.cgi?id=192391

        Reviewed by Don Olmstead.

        Unified Source Builds are using global sequential numbers for
        bundle filenames UnifiedSource{sequential-number}.cpp. As the
        result, every new source file added would shift the next ones and
        prevent compiler caches from speeding up consecutive builds e.g.
        in git-bisect sessions.

        Changed it to directory local sequential numbers,
        UnifiedSource-{hash-of-dir-name}-{sequential-number-within-the-dir}.cpp.

        This is affecting only CMake builds which is where no
        '--max-cpp-bundle-count' nor '--max-obj-c-bundle-count' options
        are set. Xcode builds still use the old convention.

        * Scripts/generate-unified-source-bundles.rb: Add new instance
        variables @currentDirectory and @extraFiles to BundleManager.
        Still use global sequential numbers if --max-cpp-bundle-count or
        --max-obj-c-bundle-count is given.

2019-01-09  Alex Christensen  <achristensen@webkit.org>

        Expand use of sourceApplicationAuditData
        https://bugs.webkit.org/show_bug.cgi?id=192995
        <rdar://problem/46627875>

        Reviewed by Brady Eidson.

        * wtf/Platform.h:

2019-01-09  Mark Lam  <mark.lam@apple.com>

        Gigacage disabling checks should handle the GIGACAGE_ALLOCATION_CAN_FAIL case properly.
        https://bugs.webkit.org/show_bug.cgi?id=193292
        <rdar://problem/46485450>

        Reviewed by Yusuke Suzuki.

        Update the USE_SYSTEM_MALLOC version of Gigacage.h to match the bmalloc version.

        * wtf/Gigacage.h:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr<T>::HelperPtrType):
        - Use C++ template metaprogramming to define a shared return
          type for adoptNS() and retainPtr() that uses
          RetainPtr<NSObject> instead of RetainPtr<NSObject *>.  The
          non-Objective-C typedef is used with retainPtr() for CFTypeRef
          objects.
        (WTF::adoptNS):
        - Only make declarations available when compilng with
          Objective-C.  The inline implementation is only available for
          Objective-C, so this makes the declarations consistent.
        - Change return type to remove '*' from NS types using
          RetainPtr<T>::HelperPtrType.
        (WTF::retainPtr):
        - Change return type to remove '*' from NS types using
          RetainPtr<T>::HelperPtrType.

        * wtf/SchedulePair.h:
        - Remove '*' from RetainPtr<> type.

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        A MediaTime timescale must never be zero
        https://bugs.webkit.org/show_bug.cgi?id=193156
        <rdar://problem/32504501>

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:
        (WTF::greatestCommonDivisor): ASSERT if either parameter or return value is zero.
        (WTF::MediaTime::MediaTime): Create +/- infinity if passed zero timescale.
        (WTF::MediaTime::createWithFloat): Ditto.
        (WTF::MediaTime::createWithDouble): Ditto.
        (WTF::MediaTime::setTimeScale): Ditto.

2019-01-02  Alex Christensen  <achristensen@webkit.org>

        Homograph with LATIN SMALL LETTER R WITH FISHHOOK
        https://bugs.webkit.org/show_bug.cgi?id=192944

        Reviewed by Tim Horton.

        * wtf/cocoa/NSURLExtras.mm:
        (WTF::isLookalikeCharacter):

2019-01-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239524.
        https://bugs.webkit.org/show_bug.cgi?id=193083

        basic browsing seems not to work (Requested by thorton on
        #webkit).

        Reverted changeset:

        "Expand use of sourceApplicationAuditData"
        https://bugs.webkit.org/show_bug.cgi?id=192995
        https://trac.webkit.org/changeset/239524

2018-12-28  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Add ENABLE_UNIFIED_BUILDS option to cmake ports
        https://bugs.webkit.org/show_bug.cgi?id=193045

        Reviewed by Don Olmstead.

        * Scripts/generate-unified-source-bundles.rb:

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformMac.cmake:
        * wtf/cf/CFURLExtras.cpp:
        * wtf/cf/CFURLExtras.h:
        * wtf/cf/URLCF.cpp:
        * wtf/cocoa/NSURLExtras.h:
        * wtf/cocoa/NSURLExtras.mm:
        * wtf/cocoa/URLCocoa.mm:

2018-12-21  Dan Bernstein  <mitz@apple.com>

        Fixed building for macOS 10.13 using the macOS 10.14 SDK.

        * wtf/Platform.h: Changed HAVE_AUTHORIZATION_STATUS_FOR_MEDIA_TYPE to depend on the
          deployment target, not the SDK.

2018-12-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Implement "well-formed JSON.stringify" proposal
        https://bugs.webkit.org/show_bug.cgi?id=191677

        Reviewed by Darin Adler.

        This patch implements "well-formed JSON.stringify" proposal[1], which is now stage 3.
        JSON.stringify appended surrogate pair codes even if it is not paired appropriately.
        The proposal requires that broken surrogate pairs are unicode-escaped.

        [1]: https://github.com/tc39/proposal-well-formed-stringify

        * wtf/text/StringBuilderJSON.cpp:
        (WTF::appendQuotedJSONStringInternal):

2018-12-21  Alex Christensen  <achristensen@webkit.org>

        Expand use of sourceApplicationAuditData
        https://bugs.webkit.org/show_bug.cgi?id=192995
        <rdar://problem/46627875>

        Reviewed by Brady Eidson.

        * wtf/Platform.h:

2018-12-21  Alex Christensen  <achristensen@webkit.org>

        Revert r239503.
        https://bugs.webkit.org/show_bug.cgi?id=192944

        * wtf/cocoa/NSURLExtras.mm:
        (WTF::isLookalikeCharacter):

2018-12-20  Brent Fulgham  <bfulgham@apple.com>

        Show punycode if URL contains Latin small letter dotless i
        https://bugs.webkit.org/show_bug.cgi?id=192944
        <rdar://problem/46103047>

        Reviewed by Andy Estes.

        Revise our "lookalike character" logic to include the small Latin
        dotless i character.

        Test: fast/url/host.html

        * wtf/cocoa/NSURLExtras.mm:
        (WTF::isLookalikeCharacter):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

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

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * wtf/Optional.h:
        (WTF::Optional<T::valueOr const):

2018-12-20  Tadeu Zagallo  <tzagallo@apple.com>

        Consistently use MaxLength for all WTF strings
        https://bugs.webkit.org/show_bug.cgi?id=192853
        <rdar://problem/45726906>

        Reviewed by Mark Lam.

        MaxLength was introduced to be INT_MAX for WTF::String and StringImpl,
        but all the assertions were still done using UINT_MAX. Change it to
        use MaxLength for all checks.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createUninitializedInternalNonEmpty):
        (WTF::StringImpl::reallocateInternal):
        (WTF::StringImpl::create):
        (WTF::StringImpl::convertToLowercaseWithoutLocale):
        (WTF::StringImpl::convertToUppercaseWithoutLocale):
        (WTF::StringImpl::convertToLowercaseWithLocale):
        (WTF::StringImpl::convertToUppercaseWithLocale):
        (WTF::StringImpl::foldCase):
        (WTF::StringImpl::find):
        (WTF::StringImpl::replace):
        (WTF::StringImpl::utf8ForCharacters):
        (WTF::StringImpl::tryGetUtf8ForRange const):
        * wtf/text/StringImpl.h:
        (WTF::lengthOfNullTerminatedString):
        (WTF::StringImpl::tryCreateUninitialized):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::maxInternalLength):
        * wtf/text/WTFString.cpp:
        (WTF::String::append):
        (WTF::String::insert):
        (WTF::String::fromUTF8):
        * wtf/text/WTFString.h:
        (WTF::String::reverseFind const):

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        Update optional's move-constructor and move-assignment operator to disengage the value being moved from.
        Rename to optional to Optional, make_optional() to makeOptional(), and move class from std to WTF namespace.

        Based on patch by David Kilzer.

        * wtf/*:

2018-12-19  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Force system camera/microphone TCC prompt if necessary
        https://bugs.webkit.org/show_bug.cgi?id=192820
        <rdar://problem/42680098>

        Reviewed by Jer Noble.

        * wtf/Platform.h: Define HAVE_AUTHORIZATION_STATUS_FOR_MEDIA_TYPE.

2018-12-17  Chris Fleizach  <cfleizach@apple.com>

        Some builds are broken after r239262
        https://bugs.webkit.org/show_bug.cgi?id=192777

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2018-12-17  Daniel Bates  <dabates@apple.com>

        Support concatenating StringView with other string types
        https://bugs.webkit.org/show_bug.cgi?id=177566

        Reviewed by Darin Adler.

        Add operator+ overloads to StringOperators.h to support concatenating a StringView with
        other string types (e.g. String). This lets a person write more naturally looking code:

        stringView + string

        Instead of:

        makeString(stringView, string)

        * wtf/text/StringOperators.h:
        (WTF::operator+): Added various operator+ overloads.

2018-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal Mac build with a newer SDK

        * wtf/URLHelpers.cpp:
        (WTF::URLHelpers::userVisibleURL):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Translate userVisibleString and dependent code into platform-neutral C++
        in wtf/URLHelpers.{h,cpp}.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/URLHelpers.cpp: Added.
        (WTF::URLHelpers::loadIDNScriptWhiteList):
        (WTF::URLHelpers::isArmenianLookalikeCharacter):
        (WTF::URLHelpers::isArmenianScriptCharacter):
        (WTF::URLHelpers::isASCIIDigitOrValidHostCharacter):
        (WTF::URLHelpers::isLookalikeCharacter):
        (WTF::URLHelpers::whiteListIDNScript):
        (WTF::URLHelpers::initializeDefaultIDNScriptWhiteList):
        (WTF::URLHelpers::allCharactersInIDNScriptWhiteList):
        (WTF::URLHelpers::isSecondLevelDomainNameAllowedByTLDRules):
        (WTF::URLHelpers::isRussianDomainNameCharacter):
        (WTF::URLHelpers::allCharactersAllowedByTLDRules):
        (WTF::URLHelpers::mapHostName):
        (WTF::URLHelpers::collectRangesThatNeedMapping):
        (WTF::URLHelpers::applyHostNameFunctionToMailToURLString):
        (WTF::URLHelpers::applyHostNameFunctionToURLString):
        (WTF::URLHelpers::mapHostNames):
        (WTF::URLHelpers::createStringWithEscapedUnsafeCharacters):
        (WTF::URLHelpers::userVisibleURL):
        * wtf/URLHelpers.h: Added.
        * wtf/cocoa/NSURLExtras.mm:
        (WTF::URLHelpers::loadIDNScriptWhiteList):
        (WTF::decodePercentEscapes):
        (WTF::decodeHostName):
        (WTF::encodeHostName):
        (WTF::URLWithUserTypedString):
        (WTF::userVisibleString):

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

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * wtf/Assertions.h: Use IGNORE_WARNINGS_BEGIN rather than
        IGNORE_CLANG_WARNINGS_BEGIN since we don't need special handling for
        non-clang compilers, in part since the code is already inside
        #if COMPILER(CLANG), but also because it would be harmless to ignore this
        warning on non-clang; we should almost never use IGNORE_CLANG_WARNINGS_BEGIN.

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

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply): Use makeString.

        * wtf/dtoa.cpp:
        (WTF::dtoa): Use sprintf instead of String::format in the comments,
        since these functions have nothing to do with WTF::String.

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

        Verify size is valid in USE_SYSTEM_MALLOC version of tryAllocateZeroedVirtualPages
        https://bugs.webkit.org/show_bug.cgi?id=192738
        rdar://problem/37502342

        Reviewed by Mark Lam.

        * wtf/Gigacage.cpp:
        (Gigacage::tryAllocateZeroedVirtualPages): Added a RELEASE_ASSERT just
        like the one in tryLargeZeroedMemalignVirtual in bmalloc.

2018-12-14  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy of AtomicString each time one is logged
        <https://webkit.org/b/192710>
        <rdar://problem/46738962>

        Reviewed by Eric Carlson.

        * wtf/Logger.h:
        (WTF::LogArgument::toString): Make argument a const reference to
        avoid the copy.

2018-12-14  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] RunLoop::dispatchAfter() GSource requires microsecond precision
        https://bugs.webkit.org/show_bug.cgi?id=192696

        Reviewed by Michael Catanzaro.

        The GSource we set up in GLib's RunLoop::dispatchAfter() implementation
        should support microsecond-precision delays. Such delays are common in
        JSC's Watchdog implementation and missing support for them has been
        causing test failures in the `testapi` program as well as some JSC
        tests that depend on the termination determination functionality of the
        JSC::Watchdog class.

        RunLoop::dispatchAfter() is changed to spawn a raw GSource that uses the
        existing GSourceFuncs implementation used elsewhere in GLib's RunLoop.
        The GSource's ready time is set manually, now with the necessary
        microsecond precision.

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::dispatchAfter):

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

        The JSC shell should listen for memory pressure events and respond to them
        https://bugs.webkit.org/show_bug.cgi?id=192647

        Reviewed by Keith Miller.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::MemoryPressureHandler):
        (WTF::MemoryPressureHandler::setDispatchQueue):
        Make it so that we can customize which dispatch queue memory pressure
        events get handled on.

        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setShouldLogMemoryMemoryPressureEvents):
        Make it so that we can disable logging that happens on each memory
        pressure event.

        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):
        (WTF::MemoryPressureHandler::uninstall):
        (WTF::MemoryPressureHandler::holdOff):

2018-12-13  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary parameter copies in ParallelHelperPool.cpp
        <https://webkit.org/b/192666>
        <rdar://problem/46697952>

        Reviewed by Alex Christensen.

        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::ParallelHelperClient): Use rvalue
        reference and WTFMove().
        (WTF::ParallelHelperClient::setTask): Ditto.
        (WTF::ParallelHelperClient::runTaskInParallel): Ditto.
        (WTF::ParallelHelperClient::runTask): Use const reference.
        * wtf/ParallelHelperPool.h: Update declarations to match
        implementations.

2018-12-12  Alex Christensen  <achristensen@webkit.org>

        Implement safe browsing in WebKit on WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=192641
        <rdar://problem/46376188>

        Reviewed by Geoff Garen.

        * wtf/Platform.h:
        WatchOS has safe browsing, too!

2018-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings of WTF
        https://bugs.webkit.org/show_bug.cgi?id=192583

        Reviewed by Alex Christensen.

        clang-cl reports the following warnings.

        > [92/206] Building CXX object Source\WTF\wtf\CMakeFiles\WTF.dir\StackBounds.cpp.obj
        > ..\..\Source\WTF\wtf\StackBounds.cpp(163,48):  warning: missing field 'AllocationBase' initializer [-Wmissing-field-initializers]
        >     MEMORY_BASIC_INFORMATION stackOrigin = { 0 };
        >                                                ^
        > 1 warning generated.
        > [160/206] Building CXX object Source\WTF\wtf\CMakeFiles\WTF.dir\win\RunLoopWin.cpp.obj
        > ..\..\Source\WTF\wtf\win\RunLoopWin.cpp(34,54):  warning: ISO C++11 does not allow conversion from string literal to 'const LPWSTR' (aka 'wchar_t *const') [-Wwritable-strings]
        > static const LPWSTR kRunLoopMessageWindowClassName = L"RunLoopMessageWindow";
        >                                                      ^
        > ..\..\Source\WTF\wtf\win\RunLoopWin.cpp(86,32):  warning: missing field 'lpfnWndProc' initializer [-Wmissing-field-initializers]
        >     WNDCLASS windowClass = { 0 };
        >                                ^
        > 2 warnings generated.
        > [175/206] Building CXX object Source\WTF\wtf\CMakeFiles\WTF.dir\DateMath.cpp.obj
        > ..\..\Source\WTF\wtf\DateMath.cpp(125,20):  warning: unused function 'getLocalTime' [-Wunused-function]
        > static inline void getLocalTime(const time_t* localTime, struct tm* localTM)
        >                    ^
        > 1 warning generated.

        * wtf/DateMath.cpp:
        (WTF::getLocalTime): Defined only if used.
        * wtf/StackBounds.cpp:
        (WTF::StackBounds::currentThreadStackBoundsInternal): Initialize stackOrigin with '{ }'.
        * wtf/win/RunLoopWin.cpp: Change the type of kRunLoopMessageWindowClassName to LPCWSTR.
        (WTF::RunLoop::registerRunLoopMessageWindowClass): Initialize windowClass with '{ }'.

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        BlockPtr<...>::fromCallable is cumbersome because it requires repeating the callable's
        signature as a class template argument. This patch introduces an overload of makeBlockPtr
        that deduces the correct BlockPtr instantiation from a lambda's operator() signature.

        * wtf/BlockPtr.h:
        (WTF::makeBlockPtr):

        Adopted makeBlockPtr.

        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::dispatchAfter):
        (WTF::WorkQueue::concurrentApply):

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

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        Remove ENABLE_RESOURCE_LOAD_STATISTICS from Platform.h and instead rely
        on it being set in FeatureDefines.xcconfig.

        * wtf/Platform.h:

2018-12-10  Alexey Proskuryakov  <ap@apple.com>

        Move ENABLE_SEC_ITEM_SHIM out of WebKit's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192428

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-12-10  Alexey Proskuryakov  <ap@apple.com>

        Move more macros out of WebKit's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192430

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-12-09  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, fix build failure on GCC 8.2, part 2

        Add RefCountedArray::assign, and use it instead of operator= internally.
        We should have operator=(const RefCountedArray&) since it will be automatically generated
        if we do not have correct implementation here.

        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::operator=):
        (WTF::RefCountedArray::assign):

2018-12-09  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, fix build failure on GCC 8.2

        We remove operator=<PtrTraits> call since it is not necessary.
        This is a workaround. It seems that GCC 8.2 fails to parse this specialization.

        * wtf/RefCountedArray.h:

2018-12-08  Darin Adler  <darin@apple.com>

        Fix stray-semicolon warning seen with a new version of clang in Xcode
        https://bugs.webkit.org/show_bug.cgi?id=192534

        Reviewed by Alexey Proskuryakov.

        * wtf/Lock.h: Removed an unneeded semicolon.

2018-12-08  Adrian Perez de Castro  <aperez@igalia.com>

        [WTF] Debug build fails due conflicting abort() method
        https://bugs.webkit.org/show_bug.cgi?id=192491

        Reviewed by Michael Catanzaro.

        * wtf/Assertions.h: Use namespaced std::abort() insted of plain abort() to avoid clashes
        inside classes which have an ::abort() method, but only when __cplusplus is defined to
        allow inclusion of the header in plain C sources.

2018-12-07  Andy Estes  <aestes@apple.com>

        [Cocoa] Add optional variants of SOFT_LINK_CLASS_FOR_SOURCE
        https://bugs.webkit.org/show_bug.cgi?id=192498

        Reviewed by Tim Horton.

        Added SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL and SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT,
        which behave like their non-optional variants but do not require their classes to exist.

        * wtf/cocoa/SoftLinking.h:

2018-12-06  Alexey Proskuryakov  <ap@apple.com>

        Move USE_NEW_THEME out of WebCore's config.h
        https://bugs.webkit.org/show_bug.cgi?id=192426

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        In r238771 URL was moved from WebCore to WTF, including the soup implementation. Unfortunately that added
        libsoup as a new dependency of libjavascriptcoregtk.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/URL.h:
        * wtf/glib/URLGLib.cpp: Copied from Source/WTF/wtf/glib/URLSoup.cpp.

2018-12-03  Don Olmstead  <don.olmstead@sony.com>

        Fix some unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=192336

        Reviewed by Fujii Hironori.

        * wtf/StackTrace.cpp:
        (WTFGetBacktrace):
        (WTF::StackTrace::demangle):
        * wtf/generic/MemoryPressureHandlerGeneric.cpp:
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):

2018-12-01  Alexey Proskuryakov  <ap@apple.com>

        Modernize version check for _suppressedAutoAddedHTTPHeaders
        https://bugs.webkit.org/show_bug.cgi?id=192175

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r238771
        https://bugs.webkit.org/show_bug.cgi?id=190234

        * wtf/URLParser.h:
        Just make defaultPortForProtocol public so we don't have to worry about DLL linkage.

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Forward.h:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/URL.cpp: Renamed from Source/WebCore/platform/URL.cpp.
        (WTF::URL::protocolIs):
        * wtf/URL.h: Renamed from Source/WebCore/platform/URL.h.
        * wtf/URLHash.h: Renamed from Source/WebCore/platform/URLHash.h.
        (WTF::URLHash::hash):
        (WTF::URLHash::equal):
        * wtf/URLParser.cpp: Renamed from Source/WebCore/platform/URLParser.cpp.
        (WTF::URLParser::isInUserInfoEncodeSet):
        (WTF::URLParser::parseAuthority):
        * wtf/URLParser.h: Renamed from Source/WebCore/platform/URLParser.h.
        (WTF::URLParser::URLParser):
        (WTF::URLParser::result):
        * wtf/cf/CFURLExtras.cpp: Renamed from Source/WebCore/platform/cf/CFURLExtras.cpp.
        * wtf/cf/CFURLExtras.h: Renamed from Source/WebCore/platform/cf/CFURLExtras.h.
        * wtf/cf/URLCF.cpp: Renamed from Source/WebCore/platform/cf/URLCF.cpp.
        * wtf/cocoa/NSURLExtras.h: Copied from Source/WebCore/loader/archive/ArchiveResourceCollection.h.
        * wtf/cocoa/NSURLExtras.mm: Copied from Source/WebCore/platform/mac/WebCoreNSURLExtras.mm.
        (WTF::isArmenianLookalikeCharacter):
        (WTF::isArmenianScriptCharacter):
        (WTF::isASCIIDigitOrValidHostCharacter):
        (WTF::isLookalikeCharacter):
        (WTF::whiteListIDNScript):
        (WTF::readIDNScriptWhiteListFile):
        (WTF::allCharactersInIDNScriptWhiteList):
        (WTF::isSecondLevelDomainNameAllowedByTLDRules):
        (WTF::isRussianDomainNameCharacter):
        (WTF::allCharactersAllowedByTLDRules):
        (WTF::mapHostNameWithRange):
        (WTF::hostNameNeedsDecodingWithRange):
        (WTF::hostNameNeedsEncodingWithRange):
        (WTF::decodeHostNameWithRange):
        (WTF::encodeHostNameWithRange):
        (WTF::decodeHostName):
        (WTF::encodeHostName):
        (WTF::collectRangesThatNeedMapping):
        (WTF::collectRangesThatNeedEncoding):
        (WTF::collectRangesThatNeedDecoding):
        (WTF::applyHostNameFunctionToMailToURLString):
        (WTF::applyHostNameFunctionToURLString):
        (WTF::mapHostNames):
        (WTF::stringByTrimmingWhitespace):
        (WTF::URLByTruncatingOneCharacterBeforeComponent):
        (WTF::URLByRemovingResourceSpecifier):
        (WTF::URLWithData):
        (WTF::dataWithUserTypedString):
        (WTF::URLWithUserTypedString):
        (WTF::URLWithUserTypedStringDeprecated):
        (WTF::hasQuestionMarkOnlyQueryString):
        (WTF::dataForURLComponentType):
        (WTF::URLByRemovingComponentAndSubsequentCharacter):
        (WTF::URLByRemovingUserInfo):
        (WTF::originalURLData):
        (WTF::createStringWithEscapedUnsafeCharacters):
        (WTF::userVisibleString):
        (WTF::isUserVisibleURL):
        (WTF::rangeOfURLScheme):
        (WTF::looksLikeAbsoluteURL):
        * wtf/cocoa/URLCocoa.mm: Renamed from Source/WebCore/platform/mac/URLMac.mm.
        (WTF::URL::URL):
        (WTF::URL::createCFURL const):
        * wtf/glib/GUniquePtrSoup.h: Renamed from Source/WebCore/platform/network/soup/GUniquePtrSoup.h.
        * wtf/glib/URLSoup.cpp: Renamed from Source/WebCore/platform/soup/URLSoup.cpp.

2018-11-30  Alexey Proskuryakov  <ap@apple.com>

        Move USE_CFNETWORK_IGNORE_HSTS to its proper place
        https://bugs.webkit.org/show_bug.cgi?id=192173

        Reviewed by Tim Horton.

        * wtf/Platform.h: Also renamed it to better match other version checks.

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Modernize the check for kCFURLRequestContentDecoderSkipURLCheck existence
        https://bugs.webkit.org/show_bug.cgi?id=192041

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-11-28  Mark Lam  <mark.lam@apple.com>

        ENABLE_SEPARATED_WX_HEAP needs to be defined in Platform.h.
        https://bugs.webkit.org/show_bug.cgi?id=192110
        <rdar://problem/46317746>

        Reviewed by Saam Barati.

        Contrary my previous claim in r238564, ENABLE_SEPARATED_WX_HEAP needs to be
        defined in Platform.h because it is also needed in WebCore for the CSS JIT.  Also
        contrary to my previous claim, ENABLE(FAST_JIT_PERMISSIONS) is defined for WebCore
        (and other projects) as well as JSC.  Hence, there's no reason why
        ENABLE_SEPARATED_WX_HEAP cannot be defined in Platform.h.

        * wtf/Platform.h:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-unified-source-bundles.rb to generate .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192029
        <rdar://problem/46285918>

        Reviewed by Alex Christensen.

        Update generate-unified-source-bundles.rb to generate output for
        .xcfilelist files. These files are used to indicate the sets of input
        and output files to Run Script build phases in Xcode. By invoking
        generate-unified-source-bundles.rb with -generate-xcfilelists, the
        script generates these .xcfilelist files. These .xcfilelist files can
        then be used to specify the inputs and outputs of the Generate Unified
        Sources build phases.

        * Scripts/generate-unified-source-bundles.rb:

2018-11-28  Alexey Proskuryakov  <ap@apple.com>

        Remove another OS version check from NetworkDataTaskCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=192046

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2018-11-28  Alexey Proskuryakov  <ap@apple.com>

        Modernize version checks for same site cookie support
        https://bugs.webkit.org/show_bug.cgi?id=192054

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-11-27  Alexey Proskuryakov  <ap@apple.com>

        Modernize the check for async _saveCookies existence
        https://bugs.webkit.org/show_bug.cgi?id=191987

        Reviewed by Dean Jackson.

        * wtf/Platform.h: Added a specific macro for this. Not changing the behavior here,
        although it seems very likely that we want to do the same on other iOS family OSes.

2018-11-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] SOFT_LINK reports warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]
        https://bugs.webkit.org/show_bug.cgi?id=191960

        Reviewed by Alex Christensen.

        * wtf/win/SoftLinking.h: Do reinterpret_cast<void*> a function
        pointer argument of EncodePointer. Changed the type of stored
        function pointer returned by EncodePointer.

2018-11-26  Sam Weinig  <sam@webkit.org>

        Streamline ListHashSet use in floating object code
        https://bugs.webkit.org/show_bug.cgi?id=191957

        Reviewed by Alex Christensen.

        * wtf/ListHashSet.h:
        Reverses the order of the template arguments for the find() and contains()
        overload that allow specifying a hash translator to allow the compiler to
        deduce type T. This simplifies call sites and matches other WTF containers.

2018-11-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        CRASH() should call abort() except on Darwin and in developer builds
        https://bugs.webkit.org/show_bug.cgi?id=184408

        Reviewed by Daniel Bates.

        CRASH() should call abort() except on Darwin and in developer builds, as discussed on
        webkit-dev. This should be slightly nicer than dereferencing 0xbadbeef.

        On Darwin, CRASH() uses a breakpoint trap, which seems to corrupt the stack on Linux, so we
        can't do that.

        Continue to call WTFCrash() in developer mode, and make no changes to WTFCrash(), since it
        is reportedly useful in nightmare scenarios where core dumps are unavailable.

        We also have to define CRASH_UNDER_CONSTEXPR_CONTEXT(). It's a bit odd that it's possible to
        use a non-constexpr function here, but it works. Currently this macro uses WTFCrash(), which
        is also non-constexpr.

        * wtf/Assertions.h:

2018-11-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r238469.

        Broke the build

        Reverted changeset:

        "CRASH() should call abort() except on Darwin and in developer
        builds"
        https://bugs.webkit.org/show_bug.cgi?id=184408
        https://trac.webkit.org/changeset/238469

2018-11-24  Andy Estes  <aestes@apple.com>

        [Cocoa] SOFT_LINK_CLASS_FOR_{HEADER,SOURCE} should generate a more concise getter function
        https://bugs.webkit.org/show_bug.cgi?id=191899

        Reviewed by Dean Jackson.

        Currently, SOFT_LINK_CLASS_FOR_HEADER declares a class getter function that includes the
        framework name. For example, NSView would have a class getter named
        namespace::get_AppKit_NSViewClass().

        Including the framework name in the getter is unnecessary. Objective-C classes already exist
        in a global namespace, so there is no need to disambiguate class names by framework. This
        patch elides the framework name from the getter function. For example, NSView would now have
        a getter named namespace::getNSViewClass().

        * wtf/cocoa/SoftLinking.h:

2018-11-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        CRASH() should call abort() except on Darwin and in developer builds
        https://bugs.webkit.org/show_bug.cgi?id=184408

        Reviewed by Daniel Bates.

        CRASH() should call abort() except on Darwin and in developer builds, as discussed on
        webkit-dev. This should be slightly nicer than dereferencing 0xbadbeef.

        On Darwin, CRASH() uses a breakpoint trap, which seems to corrupt the stack on Linux, so we
        can't do that.

        Continue to call WTFCrash() in developer mode, and make no changes to WTFCrash(), since it
        is reportedly useful in nightmare scenarios where core dumps are unavailable.

        * wtf/Assertions.h:

2018-11-23  Sam Weinig  <sam@webkit.org>

        Add raw pointer overloads to ListHashSet via SmartPtr specialized functions
        https://bugs.webkit.org/show_bug.cgi?id=191936

        Reviewed by Zalan Bujtas.

        Adds overloads for find, contains, insertBefore and remove that take raw pointers
        when the value type V of a ListHashSet is true for the predicate IsSmartPtr<V>::value.
        This brings the interface to ListHashSet closer inline with HashSet, HashMap and HashCountedSet
        which already have this functionality. Like in the other collections, this is especially
        useful when using std::unique_ptr<> as the value, since there would be no way to pass it
        to these functions. One difference between this set of overloads is the inclusion of insertBefore,
        which is unique to ListHashSet. As would be expected, this specialization only changes the first
        parameter, the one that needs to be found, to support a raw pointer.  

        * wtf/ListHashSet.h:
        (WTF::U>::find):
        (WTF::U>::find const):
        (WTF::U>::contains const):
        (WTF::U>::insertBefore):
        (WTF::U>::remove):

2018-11-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Drop ARM_TRADITIONAL support in LLInt, baseline JIT, and DFG
        https://bugs.webkit.org/show_bug.cgi?id=191675

        Reviewed by Mark Lam.

        * wtf/InlineASM.h:
        * wtf/Platform.h:

2018-11-21  Andy Estes  <aestes@apple.com>

        [Cocoa] Create a soft-linking file for PassKit
        https://bugs.webkit.org/show_bug.cgi?id=191875
        <rdar://problem/46203215>

        Reviewed by Myles Maxfield.

        * wtf/Platform.h: Defined USE_PASSKIT.
        * wtf/cocoa/SoftLinking.h: Added _WITH_EXPORT variants of SOFT_LINK_FRAMEWORK_FOR_SOURCE,
        SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE, SOFT_LINK_CLASS_FOR_SOURCE,
        SOFT_LINK_FUNCTION_FOR_SOURCE, and SOFT_LINK_CONSTANT_FOR_SOURCE.

2018-11-21  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable JIT on ARM/Linux
        https://bugs.webkit.org/show_bug.cgi?id=191548

        Reviewed by Yusuke Suzuki.

        Enable JIT by default on ARMv7/Linux after it was disabled with
        recent bytcode format change.

        * wtf/Platform.h:

2018-11-14  Keith Rollin  <krollin@apple.com>

        Fix #end vs. #endif typo.
        https://bugs.webkit.org/show_bug.cgi?id=191668
        <rdar://problem/46081704>

        Reviewed by Alexey Proskuryakov.

        Source/WebCore/SourcesCocoa.txt had a #end that should have been a
        #endif. Fix this, an add a check to generate-unified-source-bundles.rb
        to detect similar typos.

        * Scripts/generate-unified-source-bundles.rb:

2018-11-12  Mark Lam  <mark.lam@apple.com>

        Add OOM detection to StringPrototype's substituteBackreferences().
        https://bugs.webkit.org/show_bug.cgi?id=191563
        <rdar://problem/45720428>

        Reviewed by Saam Barati.

        Enhanced StringBuilder::toString() to skip the shrinkToFit(), reifyString(), and
        the hasOverflowed() check if m_string is not null.  When m_string is not null,
        the StringBuilder either only has a single String in m_string (with m_buffer being 
        null), or reifyString() has already been called (resulting in a non-null m_string
        with a possibly non-null m_buffer).

        We can skip the overflow check because:
        1. if the StringBuilder only has a single String, then there cannot be an overflow.
        2. if reifyString() has already been called, then the hasOverflowed() checked has
           already been done because every code path that calls reifyString() first does
           the hasOverflowed() check.

        We can skip shrinkToFit() because it only applies to m_buffer.
        1. if the StringBuilder only has a single String, then there's no m_buffer to shrink.
        2. if reifyString() has already been called, then we either came down
           a. the toString() path with a null m_string previously, where we would have
              already called shrinkToFit() before reifyString(), or
           b. the toStringPreserveCapacity() path where we don't want to shrinkToFit().

        We can skip reifyString() because:
        1. if the StringBuilder only has a single String, then the string is already reified.
        2. if reifyString() has been already called, then the string is already reified.

        Note that if m_string is the null string and m_buffer is null, reifyString() will
        replace it with the empty string.  For this reason, we cannot solely check for
        !m_buffer because we need to reify the null string into the empty string.

        Note also that if m_string is null and m_buffer is non-null, reifyString() will
        create a String and set m_string to it.  However, m_buffer remains non-null.
        For this reason, we cannot assert !m_buffer alone when m_string is non-null.
        We add a m_isReified flag (only when assertions are enabled) to track the reified
        case where both m_buffer and m_string are non-null.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::reifyString const):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::toString):

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Because renaming ObjcRuntimeExtras.h to ObjCRuntimeExtras.h only changes
        the cases, some systems have issues with applying this patch.

        To work around the problem, the change is made is two patches, first rename to
        WTFObjCRuntimeExtras.h, then back to ObjCRuntimeExtras.h.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/WTFObjCRuntimeExtras.h: Renamed from Source/WTF/wtf/ObjcRuntimeExtras.h.
        (wtfObjCMsgSend):

2018-11-09  Keith Miller  <keith_miller@apple.com>

        LLInt VectorSizeOffset should be based on offset extraction
        https://bugs.webkit.org/show_bug.cgi?id=191468

        Reviewed by Yusuke Suzuki.

        Make things friends with LLIntOffsetsExtractor.

        * wtf/RefCountedArray.h:
        * wtf/Vector.h:

2018-11-09  Jim Mason  <jmason@ibinx.com>

        [WTF] Changes in bug 188867 break non-Linux Unix builds
        https://bugs.webkit.org/show_bug.cgi?id=191380

        The intention of 188867 was to split out platform-specific
        heap query/release code.  Any unsupported platform
        would use a generic, no-op stub.  However, wtf/PlatformGTK.cmake
        ended up sending all non-Linux platforms through the Linux
        implementation, which breaks the build for those platforms.
        This includes any user of the GTK target which is not Linux,
        such as the *BSDs, Solaris, etc.

        Reviewed by Yusuke Suzuki.

        * wtf/PlatformGTK.cmake: Updated to include Linux-specific
        code only for Linux; all other platforms use the generic stub.

2018-11-06  Geoffrey Garen  <ggaren@apple.com>

        Removed mbmalloc target from WTF
        https://bugs.webkit.org/show_bug.cgi?id=191313

        Reviewed by Saam Barati.

        For benchmarking, WTF::fastMalloc is no longer meaningfully different
        from bmalloc. (And bmalloc has its own mbmalloc target.)

        * Configurations/mbmalloc.xcconfig: Removed.
        * WTF.xcodeproj/project.pbxproj:
        * wtf/mbmalloc.cpp: Removed.

2018-11-08  Alexey Proskuryakov  <ap@apple.com>

        Re-add PLATFORM(IOS), now with the strict meaning
        https://bugs.webkit.org/show_bug.cgi?id=191281

        Reviewed by Tim Horton.

        * wtf/Platform.h: No change in behavior. Some of the macros look a bit weird
        when expanded, it might be that the values are incorrect for some flavors of iOS family.

2018-11-08  Dean Jackson  <dino@apple.com>

        Add a String literal that returns a String
        https://bugs.webkit.org/show_bug.cgi?id=191425
        <rdar://problem/45914556>

        Reviewed by Sam Weinig.

        Add a new String literal, _str, that will return a String type.
        This is useful when ""_s won't work, such as for things that
        don't take an ASCIILiteral directly e.g. ExceptionOr<String>
        or Variants.

        * wtf/text/WTFString.h:
        (WTF::StringLiterals::operator _str): Added.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * wtf/Platform.h:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cache glyph paths and share underline skipping code between all the ports
        https://bugs.webkit.org/show_bug.cgi?id=191239

        Reviewed by Alex Christensen.

        Remove CSS3_TEXT_DECORATION_SKIP_INK. It's now interoperable and part of the Web Platform.

        * wtf/Platform.h:

2018-11-05  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable LLInt on ARMv7/Linux
        https://bugs.webkit.org/show_bug.cgi?id=191190

        Reviewed by Yusuke Suzuki.

        After enabling the new bytecode format in r237547, C_LOOP was
        forced on all 32-bit platforms. Now enable LLInt again on
        ARMv7-Thumb2/Linux by default.

        * wtf/Platform.h:

2018-11-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use C++14, not C++17
        https://bugs.webkit.org/show_bug.cgi?id=191101

        Reviewed by Alex Christensen.

        * wtf/StdLibExtras.h: Use _MSVC_LANG to check C++ language version
        instead of _MSC_FULL_VER.

2018-11-02  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for MSL shaders
        https://bugs.webkit.org/show_bug.cgi?id=191084

        Reviewed by Dean Jackson.

        Disabling WebGPU on non-Cocoa platforms and iOS Simulator.

        * wtf/Platform.h:

2018-11-01  Jiewen Tan  <jiewen_tan@apple.com>

        Replace CommonRandom SPI with API
        https://bugs.webkit.org/show_bug.cgi?id=191178
        <rdar://problem/45722391>

        Reviewed by Brent Fulgham.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/RandomDevice.cpp:
        (WTF::RandomDevice::cryptographicallyRandomValues):
        * wtf/spi/darwin/CommonCryptoSPI.h: Removed.

2018-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename <wtf/unicode/UTF8.h> to <wtf/unicode/UTF8Conversion.h> in order to avoid conflicting with ICU's unicode/utf8.h
        https://bugs.webkit.org/show_bug.cgi?id=189693

        Reviewed by Yusuke Suzuki.

        * WTF.xcodeproj/project.pbxproj: Replaced unicode/UTF8.{cpp,h} with unicode/UTF8Conversion.{cpp,h}.
        * wtf/CMakeLists.txt: Ditto.
        * wtf/text/AtomicStringImpl.cpp: Replaced <wtf/unicode/UTF8.h> with <wtf/unicode/UTF8Conversion.h>.
        * wtf/text/StringImpl.cpp: Ditto.
        * wtf/text/StringView.cpp: Ditto.
        * wtf/text/WTFString.cpp: Ditto.
        * wtf/unicode/UTF8Conversion.cpp: Renamed from Source/WTF/wtf/unicode/UTF8.cpp.
        * wtf/unicode/UTF8Conversion.h: Renamed from Source/WTF/wtf/unicode/UTF8.h.

2018-10-30  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=191072

        Reviewed by Brent Fulgham.

        Add platform files for the PlayStation port.

        * wtf/PlatformPlayStation.cmake: Added.

2018-10-30  David Kilzer  <ddkilzer@apple.com>

        XSLTProcessor should limit max transform depth
        <https://webkit.org/b/191075>
        <rdar://problem/45531453>

        Reviewed by Alex Christensen.

        * wtf/cocoa/SoftLinking.h:
        (SOFT_LINK_VARIABLE_FOR_HEADER):
        (SOFT_LINK_VARIABLE_FOR_SOURCE):
        - Add macros for non-constant global variables.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/PlatformMac.cmake:
        * wtf/spi/cocoa/NSMapTableSPI.h: Removed. This was only needed for old SDKs.

2018-10-29  Mark Lam  <mark.lam@apple.com>

        Correctly detect string overflow when using the 'Function' constructor.
        https://bugs.webkit.org/show_bug.cgi?id=184883
        <rdar://problem/36320331>

        Reviewed by Saam Barati.

        1. Enhanced StringBuilder so that it supports 2 modes of behavior:
           a. StringBuilder::OverflowHandler::CrashOnOverflow.
           b. StringBuilder::OverflowHandler::RecordOverflow.

           CrashOnOverflow will crash the moment an overflow or failure to allocate
           memory is detected.

           RecordOverflow will make StringBuilder::hasOverflowed() return true when an
           overflow or failure to allocate memory is detected.  However, if the user
           invokes toString(), toStringPreserveCapacity(), toAtomicString(), length(),
           capacity(), isEmpty(), characters8(), or characters16(), then the StringBuilder
           will crash regardless because these methods can only meaningfully do their
           work and return a result if and only if the builder has not overflowed.

           By default, the StringBuilder crashes on overflow (the old behavior) unless it
           is explicitly constructed with the StringBuilder::OverflowHandler::RecordOverflow
           enum.

           Design note:

           The StringBuilder can only be put in 1 of the 2 modes at the time of
           construction.  This means that we could have implemented it as a template
           that is parameterized on an OverflowHandler class (like CheckedArithmetic)
           instead of using a runtime check in the ConditionalCrashOnOverflow handler.

           However, I was not able to get clang to export the explicitly instantiated
           instances (despite the methods having being decorated with WTF_EXPORT_PRIVATE).
           Since the StringBuilder is a transient object (not stored for a long time on
           the heap), and the runtime check of the boolean is not that costly compared
           to other work that StringBuilder routinely does (e.g. memcpy), using the
           new ConditionalCrashOnOverflow (which does a runtime check to determine to
           crash or not on overflow) is fine.

           When clang is able to export explicitly instantiated template methods, we can
           templatize StringBuilder and do away with ConditionalCrashOnOverflow.
           See https://bugs.webkit.org/show_bug.cgi?id=191050.

        To support the above, we also did:

        2. Enhanced all StringBuilder append and buffer allocation methods to be able to
           fail without crashing.  This also meant that ...

        3. Added tryReallocate() support to StringImpl.  tryRealloc() was added to
           FastMalloc, and bmalloc (and related peers) to enable this.

        4. Added ConditionalCrashOnOverflow, which can choose at runtime whether to behave
           like CrashOnOverflow or RecordOverflow.

        * wtf/CheckedArithmetic.h:
        (WTF::ConditionalCrashOnOverflow::overflowed):
        (WTF::ConditionalCrashOnOverflow::shouldCrashOnOverflow const):
        (WTF::ConditionalCrashOnOverflow::setShouldCrashOnOverflow):
        (WTF::ConditionalCrashOnOverflow::hasOverflowed const):
        (WTF::ConditionalCrashOnOverflow::clearOverflow):
        (WTF::ConditionalCrashOnOverflow::crash):
        (WTF::RecordOverflow::overflowed):
        (WTF::Checked::unsafeGet const):
        * wtf/FastMalloc.cpp:
        (WTF::tryFastRealloc):
        * wtf/FastMalloc.h:
        * wtf/text/StringBuilder.cpp:
        (WTF::expandedCapacity):
        (WTF::StringBuilder::reifyString const):
        (WTF::StringBuilder::resize):
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::allocateBufferUpConvert):
        (WTF::StringBuilder::reallocateBuffer<LChar>):
        (WTF::StringBuilder::reallocateBuffer<UChar>):
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::appendUninitializedSlow):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::canShrink const):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::StringBuilder):
        (WTF::StringBuilder::didOverflow):
        (WTF::StringBuilder::hasOverflowed const):
        (WTF::StringBuilder::crashesOnOverflow const):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::toString):
        (WTF::StringBuilder::toStringPreserveCapacity const):
        (WTF::StringBuilder::toAtomicString const):
        (WTF::StringBuilder::length const):
        (WTF::StringBuilder::capacity const):
        (WTF::StringBuilder::operator[] const):
        (WTF::StringBuilder::swap):
        (WTF::StringBuilder::getBufferCharacters<UChar>):
        * wtf/text/StringBuilderJSON.cpp:
        (WTF::StringBuilder::appendQuotedJSONString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::reallocateInternal):
        (WTF::StringImpl::reallocate):
        (WTF::StringImpl::tryReallocate):
        * wtf/text/StringImpl.h:

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * WTF.xcodeproj/project.pbxproj:
        English->en

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        * wtf/Forward.h: Fix WTF_LAZY_FOR_EACH_TERM on MSVC and add WTF_LAZY_HAS_REST to check whether
        a macro was passed multiple arguments
        * wtf/Platform.h: Force ENABLE_JIT=false on all 32-bit platforms
        * wtf/Vector.h:
        (WTF::minCapacity>::insertVector): Allow vectors with different overflow handlers to be passed to insertVector

2018-10-28  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Ryosuke Niwa.

        * wtf/HashTable.h:
        (WTF::HashTable::random):
        (WTF::HashTable::random const): Merge the empty and deleted checks, and
        use more idiomatic addressing.

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237479 and r237484.
        https://bugs.webkit.org/show_bug.cgi?id=190978

        broke JSC on iOS (Requested by tadeuzagallo on #webkit).

        Reverted changesets:

        "New bytecode format for JSC"
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237479

        "Gardening: Build fix after r237479."
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237484

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        * wtf/Forward.h: Fix WTF_LAZY_FOR_EACH_TERM on MSVC and add WTF_LAZY_HAS_REST to check whether
        a macro was passed multiple arguments
        * wtf/Platform.h: Force ENABLE_JIT=false on all 32-bit platforms
        * wtf/Vector.h:
        (WTF::minCapacity>::insertVector): Allow vectors with different overflow handlers to be passed to insertVector

2018-10-26  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        * wtf/HashTable.h:
        (WTF::HashTable::random):
        (WTF::HashTable::random const): Draw a new random bucket any time we
        have a miss, to avoid bias caused by lopsided tables.

2018-10-26  Antti Koivisto  <antti@apple.com>

        hashSet.remove(hashSet.random()) doesn't build
        https://bugs.webkit.org/show_bug.cgi?id=190953

        Reviewed by Chris Dumez.

        * wtf/HashSet.h:

        Remove non-const random(). HashSet only returns const iterators (it is immutable via iterator).

        * wtf/HashTable.h:
        (WTF::HashTable::random const):

        Invoke const_iterator() by using static_cast<> instead of trying to do it directly.

2018-10-26  Alicia Boya García  <aboya@igalia.com>

        [MSE][WTF][Media] Invalid MediaTime should be falsy
        https://bugs.webkit.org/show_bug.cgi?id=190893

        Reviewed by Jer Noble.

        This patch modifies the definition of MediaTime so that invalid times
        are evaluated to false in the context of a boolean expression.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::operator! const):
        (WTF::MediaTime::operator bool const):

2018-10-26  Keith Miller  <keith_miller@apple.com>

        Some internal projects include wtf headers and build with C++11
        https://bugs.webkit.org/show_bug.cgi?id=190791

        Reviewed by Alexey Proskuryakov.

        C++11 doesn't support constexpr functions that contain
        statements. This patch removes getLSBSet set from builds before
        C++14 to avoid this for now.

        * wtf/MathExtras.h:
        (getLSBSet):

2018-10-25  Ross Kirsling  <ross.kirsling@sony.com>

        Cleanup: inline constexpr is redundant as constexpr implies inline
        https://bugs.webkit.org/show_bug.cgi?id=190819

        Reviewed by Mark Lam.

        * wtf/Bitmap.h:
        (WTF::WordType>::Bitmap):
        * wtf/LEBDecoder.h:
        (WTF::LEBDecoder::maxByteLength):
        * wtf/MathExtras.h:
        (defaultMinimumForClamp):
        (defaultMaximumForClamp):
        (clampToAccepting64):
        (isLessThan):
        (isLessThanEqual):
        (isGreaterThan):
        (isGreaterThanEqual):
        (WTF::roundUpToPowerOfTwo):
        (WTF::maskForSize):
        * wtf/Optional.h:
        * wtf/PtrTag.h:
        (WTF::tagCodePtr):
        (WTF::untagCodePtr):
        (WTF::retagCodePtr):
        (WTF::removeCodePtrTag):
        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOf):
        * wtf/Variant.h:
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::operator>=):
        (WTF::operator<=):
        (WTF::operator>):
        (WTF::operator<):
        * wtf/text/StringImpl.h:
        (WTF::StringImplShape::StringImplShape):
        (WTF::StringImpl::StaticStringImpl::StaticStringImpl):

2018-10-25  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        In some cases, remove(begin()) is not quite good enough as a random
        eviction strategy. (See https://bugs.webkit.org/show_bug.cgi?id=190792.)
        So, let's support real random eviction.

        (And by "real" I mean "pseudo".)

        * wtf/HashCountedSet.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/ListHashSet.h:
        (WTF::ListHashSet::random):
        (WTF::ListHashSet::random const):
        * wtf/LoggingHashMap.h:
        * wtf/LoggingHashSet.h: Plumb through the random() iterator.

        * wtf/HashTable.h:
        (WTF::HashTable::random):
        (WTF::HashTable::random const): Implement the random() iterator.
        makeIterator() already supports starting from any bucket, so this is
        pretty easy.

        In the subtle case where we select end(), we choose to wrap around and
        return begin(). We expect that clients don't really think of the end()
        bucket as being in the domain of the random search. Also, we don't want
        to annoy clients who know their tables are non-empty with needless
        checks for end().

        * wtf/RandomNumber.cpp:
        (WTF::weakRandomUint32):
        * wtf/RandomNumber.h: Added a free function for weak random numbers so
        that clients that want cheap random numbers aren't required to allocate
        storage for a WeakRandom generator.

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        * wtf/FeatureDefines.h:

2018-10-24  Christopher Reid  <chris.reid@sony.com>

        [Win] Add function call name information to stack traces
        https://bugs.webkit.org/show_bug.cgi?id=190761

        Reviewed by Fujii Hironori.

        Add symbol information to stack traces using dbghelp.dll
        This library will use symbols files from these sources:
            - The current working directory
            - The directory containing the application's executable
            - _NT_SYMBOL_PATH environment variable
            - _NT_ALTERNATE_SYMBOL_PATH environment variable

        This functionality is currently only enabled in debug mode since dbghelp is not threadsafe.
        The DbgHelper class attempts to synchronize calls to dbghelp.dll but external code
        can still attempt to call the library at the same time as WebKit.

        * wtf/CMakeLists.txt:
        * wtf/PlatformWin.cmake:
        * wtf/StackTrace.cpp:
        * wtf/win/DbgHelperWin.cpp: Added.
        * wtf/win/DbgHelperWin.h: Added.

2018-10-22  Alexey Proskuryakov  <ap@apple.com>

        Really prevent PLATFORM(IOS) from being used
        https://bugs.webkit.org/show_bug.cgi?id=190813

        Reviewed by Tim Horton.

        * wtf/Platform.h: This relies on -Wundef, which we have enabled.

2018-10-22  Chris Dumez  <cdumez@apple.com>

        Deque's contains() and findIf() should be const
        https://bugs.webkit.org/show_bug.cgi?id=190796

        Reviewed by Antti Koivisto.

        Deque's contains() and findIf() should be const as they do not modify the container.

        * wtf/Deque.h:
        (WTF::inlineCapacity>::findIf):
        (WTF::inlineCapacity>::findIf const):
        (WTF::inlineCapacity>::contains const):
        (WTF::inlineCapacity>::contains): Deleted.

2018-10-18  Alicia Boya García  <aboya@igalia.com>

        [Media] Use nanoseconds as MaximumTimeScale
        https://bugs.webkit.org/show_bug.cgi?id=190631

        1e9 is a much more useful timescale than the previous one 2^31-1.
        Unlike 2^31-1, which is a prime number, nanosecond scale is pretty
        common among some formats like WebM and frameworks like GStreamer
        where base 10 timescale is common... and it's those big timescales the
        ones that are usually scaled up to MaximumTimeScale.

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Remove PLATFORM(IOS) for now
        https://bugs.webkit.org/show_bug.cgi?id=190737

        Reviewed by Tim Horton.

        * wtf/Platform.h:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * wtf/Assertions.h:
        * wtf/FeatureDefines.h:
        * wtf/InlineASM.h:
        * wtf/MemoryPressureHandler.cpp:
        (WTF::thresholdForPolicy):
        * wtf/Platform.h:
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        * wtf/spi/cocoa/NSMapTableSPI.h:
        * wtf/spi/darwin/XPCSPI.h:
        * wtf/text/StringCommon.h:
        * wtf/text/TextBreakIterator.cpp:
        * wtf/text/TextBreakIterator.h:
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::copyDefaultLocale):

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

        Clean up FrameLoader two-state enums
        https://bugs.webkit.org/show_bug.cgi?id=190731

        Reviewed by Chris Dumez.

        * wtf/EnumTraits.h:
        (WTF::isValidEnum):

2018-10-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237208.
        https://bugs.webkit.org/show_bug.cgi?id=190691

        Caused the API test that was changed to failure continuously
        (Requested by Truitt on #webkit).

        Reverted changeset:

        "[Media] Use nanoseconds as MaximumTimeScale"
        https://bugs.webkit.org/show_bug.cgi?id=190631
        https://trac.webkit.org/changeset/237208

2018-10-16  Alicia Boya García  <aboya@igalia.com>

        [Media] Use nanoseconds as MaximumTimeScale
        https://bugs.webkit.org/show_bug.cgi?id=190631

        1e9 is a much more useful timescale than the previous one 2^31-1.
        Unlike 2^31-1, which is a prime number, nanosecond scale is pretty
        common among some formats like WebM and frameworks like GStreamer
        where base 10 timescale is common... and it's those big timescales the
        ones that are usually scaled up to MaximumTimeScale.

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:

2018-10-15  Keith Miller  <keith_miller@apple.com>

        Support arm64 CPUs with a 32-bit address space
        https://bugs.webkit.org/show_bug.cgi?id=190273

        Reviewed by Michael Saboff.

        Use WTF_CPU_ADDRESS64/32 to decide if the system is running on arm64_32.

        * wtf/MathExtras.h:
        (getLSBSet):
        * wtf/Platform.h:

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * wtf/FeatureDefines.h: Added ENABLE_DARK_MODE_CSS.

2018-10-15  Saam barati  <sbarati@apple.com>

        Emit fjcvtzs on ARM64E on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=184023

        Reviewed by Yusuke Suzuki and Filip Pizlo.

        * wtf/Platform.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Use pragma once in WTF
        https://bugs.webkit.org/show_bug.cgi?id=190527

        Reviewed by Chris Dumez.

        We also need to consistently include wtf headers from within wtf so we can build wtf without
        symbol redefinition errors from including the copy in Source and the copy in the build directory.

        * wtf/ASCIICType.h:
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Atomics.h:
        * wtf/AutomaticThread.cpp:
        * wtf/AutomaticThread.h:
        * wtf/BackwardsGraph.h:
        * wtf/Bag.h:
        * wtf/BagToHashMap.h:
        * wtf/BitVector.cpp:
        * wtf/BitVector.h:
        * wtf/Bitmap.h:
        * wtf/BloomFilter.h:
        * wtf/Box.h:
        * wtf/BubbleSort.h:
        * wtf/BumpPointerAllocator.h:
        * wtf/ByteOrder.h:
        * wtf/CPUTime.cpp:
        * wtf/CallbackAggregator.h:
        * wtf/CheckedArithmetic.h:
        * wtf/CheckedBoolean.h:
        * wtf/ClockType.cpp:
        * wtf/ClockType.h:
        * wtf/CommaPrinter.h:
        * wtf/CompilationThread.cpp:
        * wtf/CompilationThread.h:
        * wtf/Compiler.h:
        * wtf/ConcurrentPtrHashSet.cpp:
        * wtf/ConcurrentVector.h:
        * wtf/Condition.h:
        * wtf/CountingLock.cpp:
        * wtf/CrossThreadTaskHandler.cpp:
        * wtf/CryptographicUtilities.cpp:
        * wtf/CryptographicUtilities.h:
        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/CryptographicallyRandomNumber.h:
        * wtf/CurrentTime.cpp:
        * wtf/DataLog.cpp:
        * wtf/DataLog.h:
        * wtf/DateMath.cpp:
        * wtf/DateMath.h:
        * wtf/DecimalNumber.cpp:
        * wtf/DecimalNumber.h:
        * wtf/Deque.h:
        * wtf/DisallowCType.h:
        * wtf/Dominators.h:
        * wtf/DoublyLinkedList.h:
        * wtf/FastBitVector.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/FeatureDefines.h:
        * wtf/FilePrintStream.cpp:
        * wtf/FilePrintStream.h:
        * wtf/FlipBytes.h:
        * wtf/FunctionDispatcher.cpp:
        * wtf/FunctionDispatcher.h:
        * wtf/GetPtr.h:
        * wtf/Gigacage.cpp:
        * wtf/GlobalVersion.cpp:
        * wtf/GraphNodeWorklist.h:
        * wtf/GregorianDateTime.cpp:
        * wtf/GregorianDateTime.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashMethod.h:
        * wtf/HashSet.h:
        * wtf/HashTable.cpp:
        * wtf/HashTraits.h:
        * wtf/Indenter.h:
        * wtf/IndexSparseSet.h:
        * wtf/InlineASM.h:
        * wtf/Insertion.h:
        * wtf/IteratorAdaptors.h:
        * wtf/IteratorRange.h:
        * wtf/JSONValues.cpp:
        * wtf/JSValueMalloc.cpp:
        * wtf/LEBDecoder.h:
        * wtf/Language.cpp:
        * wtf/ListDump.h:
        * wtf/Lock.cpp:
        * wtf/Lock.h:
        * wtf/LockAlgorithm.h:
        * wtf/LockedPrintStream.cpp:
        * wtf/Locker.h:
        * wtf/MD5.cpp:
        * wtf/MD5.h:
        * wtf/MainThread.cpp:
        * wtf/MainThread.h:
        * wtf/MallocPtr.h:
        * wtf/MathExtras.h:
        * wtf/MediaTime.cpp:
        * wtf/MediaTime.h:
        * wtf/MemoryPressureHandler.cpp:
        * wtf/MessageQueue.h:
        * wtf/MetaAllocator.cpp:
        * wtf/MetaAllocator.h:
        * wtf/MetaAllocatorHandle.h:
        * wtf/MonotonicTime.cpp:
        * wtf/MonotonicTime.h:
        * wtf/NakedPtr.h:
        * wtf/NoLock.h:
        * wtf/NoTailCalls.h:
        * wtf/Noncopyable.h:
        * wtf/NumberOfCores.cpp:
        * wtf/NumberOfCores.h:
        * wtf/OSAllocator.h:
        * wtf/OSAllocatorPosix.cpp:
        * wtf/OSRandomSource.cpp:
        * wtf/OSRandomSource.h:
        * wtf/ObjcRuntimeExtras.h:
        * wtf/OrderMaker.h:
        * wtf/PackedIntVector.h:
        * wtf/PageAllocation.h:
        * wtf/PageBlock.cpp:
        * wtf/PageBlock.h:
        * wtf/PageReservation.h:
        * wtf/ParallelHelperPool.cpp:
        * wtf/ParallelHelperPool.h:
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsLibdispatch.h:
        * wtf/ParallelVectorIterator.h:
        * wtf/ParkingLot.cpp:
        * wtf/ParkingLot.h:
        * wtf/Platform.h:
        * wtf/PointerComparison.h:
        * wtf/Poisoned.cpp:
        * wtf/PrintStream.cpp:
        * wtf/PrintStream.h:
        * wtf/ProcessID.h:
        * wtf/ProcessPrivilege.cpp:
        * wtf/RAMSize.cpp:
        * wtf/RAMSize.h:
        * wtf/RandomDevice.cpp:
        * wtf/RandomNumber.cpp:
        * wtf/RandomNumber.h:
        * wtf/RandomNumberSeed.h:
        * wtf/RangeSet.h:
        * wtf/RawPointer.h:
        * wtf/ReadWriteLock.cpp:
        * wtf/RedBlackTree.h:
        * wtf/Ref.h:
        * wtf/RefCountedArray.h:
        * wtf/RefCountedLeakCounter.cpp:
        * wtf/RefCountedLeakCounter.h:
        * wtf/RefCounter.h:
        * wtf/RefPtr.h:
        * wtf/RetainPtr.h:
        * wtf/RunLoop.cpp:
        * wtf/RunLoop.h:
        * wtf/RunLoopTimer.h:
        * wtf/RunLoopTimerCF.cpp:
        * wtf/SHA1.cpp:
        * wtf/SHA1.h:
        * wtf/SaturatedArithmetic.h:
        (saturatedSubtraction):
        * wtf/SchedulePair.h:
        * wtf/SchedulePairCF.cpp:
        * wtf/SchedulePairMac.mm:
        * wtf/ScopedLambda.h:
        * wtf/Seconds.cpp:
        * wtf/Seconds.h:
        * wtf/SegmentedVector.h:
        * wtf/SentinelLinkedList.h:
        * wtf/SharedTask.h:
        * wtf/SimpleStats.h:
        * wtf/SingleRootGraph.h:
        * wtf/SinglyLinkedList.h:
        * wtf/SixCharacterHash.cpp:
        * wtf/SixCharacterHash.h:
        * wtf/SmallPtrSet.h:
        * wtf/Spectrum.h:
        * wtf/StackBounds.cpp:
        * wtf/StackBounds.h:
        * wtf/StackStats.cpp:
        * wtf/StackStats.h:
        * wtf/StackTrace.cpp:
        * wtf/StdLibExtras.h:
        * wtf/StreamBuffer.h:
        * wtf/StringHashDumpContext.h:
        * wtf/StringPrintStream.cpp:
        * wtf/StringPrintStream.h:
        * wtf/ThreadGroup.cpp:
        * wtf/ThreadMessage.cpp:
        * wtf/ThreadSpecific.h:
        * wtf/Threading.cpp:
        * wtf/Threading.h:
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/TimeWithDynamicClockType.cpp:
        * wtf/TimeWithDynamicClockType.h:
        * wtf/TimingScope.cpp:
        * wtf/TinyLRUCache.h:
        * wtf/TinyPtrSet.h:
        * wtf/TriState.h:
        * wtf/TypeCasts.h:
        * wtf/UUID.cpp:
        * wtf/UnionFind.h:
        * wtf/VMTags.h:
        * wtf/ValueCheck.h:
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        * wtf/WallTime.cpp:
        * wtf/WallTime.h:
        * wtf/WeakPtr.h:
        * wtf/WeakRandom.h:
        * wtf/WordLock.cpp:
        * wtf/WordLock.h:
        * wtf/WorkQueue.cpp:
        * wtf/WorkQueue.h:
        * wtf/WorkerPool.cpp:
        * wtf/cf/LanguageCF.cpp:
        * wtf/cf/RunLoopCF.cpp:
        * wtf/cocoa/Entitlements.mm:
        * wtf/cocoa/MachSendRight.cpp:
        * wtf/cocoa/MainThreadCocoa.mm:
        * wtf/cocoa/MemoryFootprintCocoa.cpp:
        * wtf/cocoa/WorkQueueCocoa.cpp:
        * wtf/dtoa.cpp:
        * wtf/dtoa.h:
        * wtf/ios/WebCoreThread.cpp:
        * wtf/ios/WebCoreThread.h:
        * wtf/mac/AppKitCompatibilityDeclarations.h:
        * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
        * wtf/mbmalloc.cpp:
        * wtf/persistence/PersistentCoders.cpp:
        * wtf/persistence/PersistentDecoder.cpp:
        * wtf/persistence/PersistentEncoder.cpp:
        * wtf/spi/cf/CFBundleSPI.h:
        * wtf/spi/darwin/CommonCryptoSPI.h:
        * wtf/text/ASCIIFastPath.h:
        * wtf/text/ASCIILiteral.cpp:
        * wtf/text/AtomicString.cpp:
        * wtf/text/AtomicString.h:
        * wtf/text/AtomicStringHash.h:
        * wtf/text/AtomicStringImpl.cpp:
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/AtomicStringTable.cpp:
        * wtf/text/AtomicStringTable.h:
        * wtf/text/Base64.cpp:
        * wtf/text/CString.cpp:
        * wtf/text/CString.h:
        * wtf/text/ConversionMode.h:
        * wtf/text/ExternalStringImpl.cpp:
        * wtf/text/IntegerToStringConversion.h:
        * wtf/text/LChar.h:
        * wtf/text/LineEnding.cpp:
        * wtf/text/StringBuffer.h:
        * wtf/text/StringBuilder.cpp:
        * wtf/text/StringBuilder.h:
        * wtf/text/StringBuilderJSON.cpp:
        * wtf/text/StringCommon.h:
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringHash.h:
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        * wtf/text/StringOperators.h:
        * wtf/text/StringView.cpp:
        * wtf/text/StringView.h:
        * wtf/text/SymbolImpl.cpp:
        * wtf/text/SymbolRegistry.cpp:
        * wtf/text/SymbolRegistry.h:
        * wtf/text/TextBreakIterator.cpp:
        * wtf/text/TextBreakIterator.h:
        * wtf/text/TextBreakIteratorInternalICU.h:
        * wtf/text/TextPosition.h:
        * wtf/text/TextStream.cpp:
        * wtf/text/UniquedStringImpl.h:
        * wtf/text/WTFString.cpp:
        * wtf/text/WTFString.h:
        * wtf/text/cocoa/StringCocoa.mm:
        * wtf/text/cocoa/StringViewCocoa.mm:
        * wtf/text/cocoa/TextBreakIteratorInternalICUCocoa.cpp:
        * wtf/text/icu/UTextProvider.cpp:
        * wtf/text/icu/UTextProvider.h:
        * wtf/text/icu/UTextProviderLatin1.cpp:
        * wtf/text/icu/UTextProviderLatin1.h:
        * wtf/text/icu/UTextProviderUTF16.cpp:
        * wtf/text/icu/UTextProviderUTF16.h:
        * wtf/threads/BinarySemaphore.cpp:
        * wtf/threads/BinarySemaphore.h:
        * wtf/threads/Signals.cpp:
        * wtf/unicode/CharacterNames.h:
        * wtf/unicode/Collator.h:
        * wtf/unicode/CollatorDefault.cpp:
        * wtf/unicode/UTF8.cpp:
        * wtf/unicode/UTF8.h:

2018-10-12  Alex Christensen  <achristensen@webkit.org>

        Allow encoding of small enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190531

        Reviewed by Tim Horton.

        * wtf/Forward.h:

2018-10-11  Alexey Proskuryakov  <ap@apple.com>

        Add PLATFORM(IOS_FAMILY) and OS(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190477

        Reviewed by Tim Horton.

        Currently, PLATFORM(IOS) and OS(IOS) are true when building for any
        TARGET_OS_IPHONE target, which is quite confusing. Add a better named alternative,
        as a first step towards mass replacing PLATFORM(IOS). Can't so it all at once
        because of dependencies in other source repositories.

        * wtf/Platform.h: Changed to the new name in this file though. Kept a few
        instances that actually target iOS only, having a version check.

2018-10-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use currentStackPointer more
        https://bugs.webkit.org/show_bug.cgi?id=190503

        Reviewed by Saam Barati.

        Use WTF::currentStackPointer more in WebKit to adopt ASAN detect_stack_use_after_return option.

        * wtf/StackBounds.cpp:
        (WTF::testStackDirection2):
        (WTF::testStackDirection):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::getApproximateStackPointer): Deleted.

2018-10-11  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Semaphore.h conflicts with POSIX header
        https://bugs.webkit.org/show_bug.cgi?id=190486

        Reviewed by Yusuke Suzuki.

        Rename Semaphore.h to WTFSemaphore.h to avoid conflict with POSIX semaphore.h on case-insensitive file systems.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/WTFSemaphore.h: Renamed from wtf/Semaphore.h.

2018-10-10  Mark Lam  <mark.lam@apple.com>

        Changes towards allowing use of the ASAN detect_stack_use_after_return option.
        https://bugs.webkit.org/show_bug.cgi?id=190405
        <rdar://problem/45131464>

        Reviewed by Michael Saboff.

        Introduce WTF::currentStackPointer() which computes its caller's stack pointer value.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/StackBounds.h:
        (WTF::StackBounds::checkConsistency const):
        * wtf/StackPointer.cpp: Added.
        (WTF::currentStackPointer):
        * wtf/StackPointer.h: Added.

2018-10-09  Mark Lam  <mark.lam@apple.com>

        StringTypeAdapter constructor is not properly enforcing String::MaxLength.
        https://bugs.webkit.org/show_bug.cgi?id=190392
        <rdar://problem/45116210>

        Reviewed by Saam Barati.

        Previously, the StringTypeAdapter constructor for a UChar* string was summing the
        unsigned length of the source string without an overflow check.  We now make that
        length a size_t which removes this issue, and assert that it's within
        String::MaxLength thereafter.

        Also made the StringTypeAdapter constructor for a LChar* string behave in an
        equivalent manner for consistency.  In both cases, we'll crash in a RELEASE_ASSERT
        if the source string length exceeds String::MaxLength.

        * wtf/text/StringConcatenate.h:

2018-10-09  Mark Lam  <mark.lam@apple.com>

        Revert temporary asserts for debugging a mysterious ASAN bot crash.
        https://bugs.webkit.org/show_bug.cgi?id=190396

        Reviewed by Yusuke Suzuki.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::newThreadStackBounds):
        * wtf/StackBounds.h:
        (WTF::StackBounds::checkConsistency const):

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * wtf/FeatureDefines.h:

2018-10-06  Mark Lam  <mark.lam@apple.com>

        Adding some temporary asserts with data logging to debug a mysterious ASAN bot crash.
        https://bugs.webkit.org/show_bug.cgi?id=190334
        <rdar://problem/45071303>

        Reviewed by Yusuke Suzuki.

        These assertions are needed because we can't reproduce the issue locally.
        We'll remove these asserts after the needed data has been collected from the bot.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::newThreadStackBounds):
        * wtf/StackBounds.h:
        (WTF::StackBounds::checkConsistency const):

2018-10-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Name Heap threads
        https://bugs.webkit.org/show_bug.cgi?id=190337

        Reviewed by Mark Lam.

        Add a functionality naming threads of ParallelHelperPool.

        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperPool::ParallelHelperPool):
        * wtf/ParallelHelperPool.h:

2018-10-06  Mark Lam  <mark.lam@apple.com>

        Adding some temporary asserts to debug a mysterious ASAN bot crash.
        https://bugs.webkit.org/show_bug.cgi?id=190331

        Reviewed by Filip Pizlo.

        These assertions are needed because we can't reproduce the issue locally.
        We'll remove these asserts after the needed data has been collected from the bot.

        * wtf/StackBounds.h:
        (WTF::StackBounds::checkConsistency const):

2018-10-05  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC][Linux] Support Perf JITDump logging
        https://bugs.webkit.org/show_bug.cgi?id=189893

        Reviewed by Mark Lam.

        * wtf/PageReservation.h:
        (WTF::PageReservation::reserveAndCommitWithGuardPages):

2018-10-03  Dan Bernstein  <mitz@apple.com>

        WTF part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Alex Christensen.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          and CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * WTF.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * wtf/MathExtras.h:
        (WTF::fastLog2): Addressed newly-enabled CLANG_WARN_COMMA by splitting some comma-separated
          expressions into individual statements.

2018-10-03  Mark Lam  <mark.lam@apple.com>

        Make string MaxLength for all WTF and JS strings consistently equal to INT_MAX.
        https://bugs.webkit.org/show_bug.cgi?id=190187
        <rdar://problem/42512909>

        Reviewed by Michael Saboff.

        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeStringFromAdapters):
        (WTF::sumWithOverflow): Deleted.
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:

2018-10-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wunused-variable in RenderLayer::updateScrollableAreaSet
        https://bugs.webkit.org/show_bug.cgi?id=190200

        Reviewed by Yusuke Suzuki.

        Add a new UNUSED_VARIABLE() macro. It's the same as UNUSED_PARAM(), just named differently.

        * wtf/Compiler.h:

2018-10-01  Dean Jackson  <dino@apple.com>

        [macOS] Switching to discrete GPU should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189361
        <rdar://problem/43949622>

        Reviewed by Simon Fraser.

        Define GL_SILENCE_DEPRECATION to avoid deprecation warnings for OpenGL.

        * wtf/Platform.h:

2018-10-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236624 and r236671.
        https://bugs.webkit.org/show_bug.cgi?id=190207

        The change in r236624 introduced crashes on the bots
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236624

        "Unify implementation in VideoFullscreenInterfaceAVKit"
        https://bugs.webkit.org/show_bug.cgi?id=190091
        https://trac.webkit.org/changeset/236671

2018-10-02  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] BigInt.proptotype.toString is broken when radix is power of 2
        https://bugs.webkit.org/show_bug.cgi?id=190033

        Reviewed by Yusuke Suzuki.

        * wtf/MathExtras.h:
        (WTF::ctz32):

2018-10-01  Andy Estes  <aestes@apple.com>

        [watchOS] Adopt NSURLSessionCompanionProxyPreference
        https://bugs.webkit.org/show_bug.cgi?id=190177
        <rdar://problem/43402114>

        Reviewed by Wenson Hsieh.

        * wtf/FeatureDefines.h:

2018-10-01  Koby Boyango  <koby.b@mce-sys.com>

        [WTF][JSCONLY] Use MainThreadWin on Windows in the JSCOnly port
        https://bugs.webkit.org/show_bug.cgi?id=190121

        Reviewed by Yusuke Suzuki.

        This fixes JSCOnly build on Windows after r236617.

        * wtf/PlatformJSCOnly.cmake:

2018-10-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236647.
        https://bugs.webkit.org/show_bug.cgi?id=190124

        Breaking test stress/big-int-to-string.js (Requested by
        caiolima_ on #webkit).

        Reverted changeset:

        "[BigInt] BigInt.proptotype.toString is broken when radix is
        power of 2"
        https://bugs.webkit.org/show_bug.cgi?id=190033
        https://trac.webkit.org/changeset/236647

2018-09-30  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] BigInt.proptotype.toString is broken when radix is power of 2
        https://bugs.webkit.org/show_bug.cgi?id=190033

        Reviewed by Yusuke Suzuki.

        * wtf/MathExtras.h:
        (WTF::ctz32):

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/WeakPtrContainer.h: Added.

2018-09-28  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [WTF] Make isMainThread more reliable
        https://bugs.webkit.org/show_bug.cgi?id=189880

        Reviewed by Mark Lam.

        isMainThread() relied on Thread::current(). This API becomes broken in Windows
        when the Thread is about to be destroyed since TLS is already cleared. This causes
        a bug since `isMainThread()` is called in Thread::didExit in Windows.

        This patch makes this `isMainThread` more reliable in all the platforms. In Windows,
        we use `Thread::currentID()` instead of `Thread::current()` since `Thread::currentID`
        uses Win32 GetCurrentThreadId directly. In the other system, we use `pthread_main_np`
        or `pthread_self` instead.

        We also move `holdLock` code inside `if (shouldRemoveThreadFromThreadGroup())`. If
        the other thread takes a mutex and destroyed, this `holdLock` waits forever. This problem
        only happens in Windows since Windows calls TLS destructor for the main thread.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        (): Deleted.
        (WTF::isMainThread): Deleted.
        (WTF::isMainThreadIfInitialized): Deleted.
        * wtf/Platform.h:
        * wtf/PlatformMac.cmake:
        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        * wtf/cocoa/MainThreadCocoa.mm: Renamed from Source/WTF/wtf/mac/MainThreadMac.mm.
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::initializeMainThreadPlatform):
        (WTF::isMainThread):
        (WTF::isMainThreadIfInitialized):
        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):
        (WTF::isMainThread):
        (WTF::isMainThreadIfInitialized):

2018-09-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236605.
        https://bugs.webkit.org/show_bug.cgi?id=190087

        caused three API test timeouts (Requested by jernoble on
        #webkit).

        Reverted changeset:

        "Refactoring: eliminate raw pointer usage in Fullscreen code"
        https://bugs.webkit.org/show_bug.cgi?id=188747
        https://trac.webkit.org/changeset/236605

2018-09-28  Brian Burg  <bburg@apple.com>

        Replace recently added line comments in Compiler.h
        https://bugs.webkit.org/show_bug.cgi?id=190062
        <rdar://problem/44838618>

        Reviewed by Joseph Pecoraro.

        This breaks some Apple-internal tooling. For now, work around it by
        changing the comment style. On the other side, the issue will be fixed
        more permanently by adopting the approach from r230213.

        * wtf/Compiler.h: Use multiline comments.

2018-09-28  Jer Noble  <jer.noble@apple.com>

        Refactoring: eliminate raw pointer usage in Fullscreen code
        https://bugs.webkit.org/show_bug.cgi?id=188747
        <rdar://problem/43541164>

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/WeakPtrContainer.h: Added.

2018-09-28  Koby Boyango  <koby.b@mce.systems>

        [WTF] Add ExternalStringImpl, a StringImpl for user controlled buffers
        https://bugs.webkit.org/show_bug.cgi?id=189991

        Reviewed by Yusuke Suzuki.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/ExternalStringImpl.cpp: Added.
        * wtf/text/ExternalStringImpl.h: Added.
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:

2018-09-27  Saam barati  <sbarati@apple.com>

        Verify the contents of AssemblerBuffer on arm64e
        https://bugs.webkit.org/show_bug.cgi?id=190057
        <rdar://problem/38916630>

        Reviewed by Mark Lam.

        * wtf/PtrTag.h:
        (WTF::tagInt):

2018-09-27  Jer Noble  <jer.noble@apple.com>

        MediaPlayer should have mediaPlayerWaitingForKeyChanged() / bool waitingForKey() accessor
        https://bugs.webkit.org/show_bug.cgi?id=189951

        Reviewed by Eric Carlson.

        Templated functions should take r-value references, as they have perfect type deduction for
        all parameter types; references, l-value references, and r-value references in template function
        parameters have special type deduction semantics.
        See: <https://en.cppreference.com/w/cpp/language/reference#Forwarding_references>

        Previously, const reference parameters would be copied when passed into anyOf(), and containers
        of Ref<> would generate compile errors when passed into anyOf, as they cannot be copied. Now,
        with r-value reference types in template parameters, a const reference is mapped to a const reference,
        a non-const reference is mapped to a non-const reference, and a r-value reference is mapped to
        an r-value reference.

        * wtf/Algorithms.h:
        (WTF::forEach):
        (WTF::anyOf):
        (WTF::allOf):

2018-09-25  John Wilander  <wilander@apple.com>

        Change from HAVE(CFNETWORK_STORAGE_PARTITIONING) to ENABLE(RESOURCE_LOAD_STATISTICS)
        https://bugs.webkit.org/show_bug.cgi?id=189959
        <rdar://problem/44767642>

        Reviewed by Chris Dumez.

        * wtf/Platform.h:
            Enables RESOURCE_LOAD_STATISTICS for Cocoa platforms.

2018-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename WTF_COMPILER_GCC_OR_CLANG to WTF_COMPILER_GCC_COMPATIBLE
        https://bugs.webkit.org/show_bug.cgi?id=189733

        Reviewed by Michael Catanzaro.

        Clang for Windows build enables WTF_COMPILER_CLANG and
        WTF_COMPILER_MSVC, but disables WTF_COMPILER_GCC_OR_CLANG. It is
        strange WTF_COMPILER_GCC_OR_CLANG is not enabled even though
        WTF_COMPILER_CLANG is enabled. However, Clang for Windows imitates
        MSVC, and codes for COMPILER(GCC_OR_CLANG) are for non MSVC. At
        least at the moment, it is not feasible to define
        WTF_COMPILER_GCC_OR_CLANG for Clang for Windows.

        To solve the issue, this change renames WTF_COMPILER_GCC_OR_CLANG
        to WTF_COMPILER_GCC_COMPATIBLE.

        As an exception, I'd like to use IGNORE_WARNINGS_* macros even in
        Clang for Windows builds.

        * wtf/Assertions.cpp: Replaced COMPILER(GCC_OR_CLANG) with COMPILER(GCC_COMPATIBLE).
        * wtf/Assertions.h: Ditto.
        * wtf/Atomics.h: Ditto.
        * wtf/CheckedArithmetic.h: Ditto.
        * wtf/FastMalloc.h: Ditto.
        * wtf/MathExtras.h: Ditto.
        * wtf/Platform.h: Ditto.
        * wtf/StdLibExtras.h: Ditto.
        * wtf/Vector.h: Ditto.
        * wtf/text/ASCIIFastPath.h: Ditto.
        * wtf/Compiler.h:  Ditto. Replaced "COMPILER(GCC_OR_CLANG)" with "COMPILER(GCC) || COMPILER(CLANG)" of IGNORE_WARNINGS_* macros.

2018-09-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Enable LLInt ASM interpreter on X64 and ARM64 in non JIT configuration
        https://bugs.webkit.org/show_bug.cgi?id=189778

        Reviewed by Keith Miller.

        This patch adds ENABLE(C_LOOP) which indicates we use CLoop as the interpreter.
        Previously, we used !ENABLE(JIT) for this configuration. But now, we have
        a build configuration that has LLInt ASM interpreter (not CLoop) and !ENABLE(JIT).

        We enable LLInt ASM interpreter for non JIT environment in X86_64 and ARM64 architectures.
        And we enable ENABLE(ASSEMBLER) for non JIT environment since it offers machine register
        information which is used for LLInt and SamplingProfiler.

        * wtf/Platform.h:

2018-09-21  Keith Miller  <keith_miller@apple.com>

        Add Promise SPI
        https://bugs.webkit.org/show_bug.cgi?id=189809

        Reviewed by Saam Barati.

        Fix issue where creating a JSContextRef off the main thread before
        creating initializing the main thread would cause an assertion
        failure.

        * wtf/MainThread.cpp:
        (WTF::isMainThreadIfInitialized):
        * wtf/MainThread.h:
        * wtf/mac/MainThreadMac.mm:
        (WTF::isMainThreadIfInitialized):
        * wtf/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):

2018-09-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236359.

        Broke the Windows build.

        Reverted changeset:

        "Add Promise SPI"
        https://bugs.webkit.org/show_bug.cgi?id=189809
        https://trac.webkit.org/changeset/236359

2018-09-21  Keith Miller  <keith_miller@apple.com>

        Add Promise SPI
        https://bugs.webkit.org/show_bug.cgi?id=189809

        Reviewed by Saam Barati.

        Fix issue where creating a JSContextRef off the main thread before
        creating initializing the main thread would cause an assertion
        failure.

        * wtf/MainThread.cpp:
        (WTF::isMainThreadIfInitialized):
        * wtf/MainThread.h:
        * wtf/mac/MainThreadMac.mm:
        (WTF::isMainThreadIfInitialized):
        * wtf/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):

2018-09-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] UNUSED_PARAM(this) causes compilation error of "cannot take the address of an rvalue of type"
        https://bugs.webkit.org/show_bug.cgi?id=189732

        Reviewed by Per Arne Vollan.

        Clang for Windows can't compile the MSVC workaround of
        UNUSED_PARAM which has been introduced for Windows CE and Visual
        Studio 10. I think it's safe just to remove it.

        * wtf/Compiler.h: Removed the code for COMPILER(MSVC).

2018-09-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r235976.

        Broke ARM

        Reverted changeset:

        "Use a Variant instead of a union in CSSSelector"
        https://bugs.webkit.org/show_bug.cgi?id=188559
        https://trac.webkit.org/changeset/235976

2018-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        This patch adds WTF::Semaphore, which is based on WTF::Lock and WTF::Condition.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Semaphore.h: Added.
        (WTF::Semaphore::Semaphore):
        (WTF::Semaphore::signal):
        (WTF::Semaphore::waitUntil):
        (WTF::Semaphore::waitFor):
        (WTF::Semaphore::wait):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::platformInitialize):
        * wtf/threads/BinarySemaphore.cpp:
        (WTF::BinarySemaphore::waitUntil):
        (WTF::BinarySemaphore::wait): Deleted.
        * wtf/threads/BinarySemaphore.h:
        (WTF::BinarySemaphore::waitFor):
        (WTF::BinarySemaphore::wait):
        Align the names of the functions to WTF::Condition.
        Add BinarySemaphore::wait(), which is the same to waitUntil(WallTime::infinity()).

2018-09-17  Jer Noble  <jer.noble@apple.com>

        Add support for HEVC codec types in Media Capabilities
        https://bugs.webkit.org/show_bug.cgi?id=189565

        Reviewed by Eric Carlson.

        Extract the toIntegralType template into its own header.

        * wtf/CMakeLists.txt:
        * wtf/text/StringConversion.h: Added.
        (isCharacterAllowedInBase):
        (toIntegralType):
        * wtf/text/WTFString.cpp:

2018-09-17  Jer Noble  <jer.noble@apple.com>

        Enable USE_MEDIAREMOTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189096

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2018-09-17  Frederic Wang  <fwang@igalia.com>

        Build error in ImageBufferCG when compiled with IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=189579

        Reviewed by Tim Horton.

        IOSurface.h might be included with different value of IOSURFACE_CANVAS_BACKING_STORE, causing
        compilation errors when files in the same unified source do not agree on the definition.
        This patch moves the definition of IOSURFACE_CANVAS_BACKING_STORE from ImageBufferDataCG.h
        to Platform.h so that IOSURFACE_CANVAS_BACKING_STORE is set to the same value in all files.
        Finally some minors changes to explicitly declare/define ImageBuffer are performed in order
        to prevent future issues with Unified build rotating.

        * wtf/Platform.h: Move definition from ImageBufferDataCG.h.

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235990.

        Introduced TestWebKitAPI.NowPlayingTest timeouts on iOS

        Reverted changeset:

        "Enable USE_MEDIAREMOTE on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=189096
        https://trac.webkit.org/changeset/235990

2018-09-13  Jer Noble  <jer.noble@apple.com>

        Enable USE_MEDIAREMOTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=189096

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2018-09-13  Alex Christensen  <achristensen@webkit.org>

        Use a Variant instead of a union in CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=188559

        Reviewed by Antti Koivisto.

        * wtf/Variant.h:
        Add packing macros to make it so Variant-containing structures don't always have 7 bytes of padding per Variant.

2018-09-12  Guillaume Emont  <guijemont@igalia.com>

        Add IGNORE_WARNING_.* macros
        https://bugs.webkit.org/show_bug.cgi?id=188996

        Reviewed by Michael Catanzaro.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Compiler.h:
        * wtf/MD5.cpp:
        (WTF::MD5::MD5):
        (WTF::MD5::addBytes):
        (WTF::MD5::checksum):
        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):
        * wtf/SHA1.cpp:
        (WTF::SHA1::SHA1):
        (WTF::SHA1::addBytes):
        (WTF::SHA1::computeHash):
        * wtf/ThreadingPthreads.cpp:
        * wtf/Vector.h:
        (WTF::VectorBuffer::endOfBuffer):
        * wtf/text/WTFString.cpp:
        (WTF::createWithFormatAndArguments):

== Rolled over to ChangeLog-2018-09-11 ==
