2020-05-22  Alex Christensen  <achristensen@webkit.org>

        Make download resume workaround forgiving of changes in CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=212273

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

2020-05-22  Paulo Matos  <pmatos@igalia.com>

        Add support for [no-]use-ccache option in build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=212259

        Reviewed by Mark Lam.

        * Scripts/build-jsc:

2020-05-22  Alex Christensen  <achristensen@webkit.org>

        Add SPI to unblock third party cookies from WKWebViews with ResourceLoadStatistics turned on
        https://bugs.webkit.org/show_bug.cgi?id=212058
        <rdar://problem/60595539>

        Reviewed by John Wilander.

        I also add _test_waitForAlert to make tests less verbose.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::Connection::Connection):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::dataFromString):
        (TestWebKitAPI::nullTerminatedRequest):
        (TestWebKitAPI::HTTPServer::request const):
        (TestWebKitAPI::Connection::receive const):
        (TestWebKitAPI::Connection::send const):
        * TestWebKitAPI/cocoa/TestUIDelegate.h:
        * TestWebKitAPI/cocoa/TestUIDelegate.mm:
        (-[WKWebView _test_waitForAlert]):

2020-05-22  Chris Dumez  <cdumez@apple.com>

        [WKTR] Make TestController::resetStateToConsistentValues() more robust against failures to navigate to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=212268
        <rdar://problem/63493074>

        Reviewed by Geoffrey Garen.

        Make TestController::resetStateToConsistentValues() more robust against failures to navigate to about:blank.

        In <rdar://problem/63493074>, we have evidence that TestController::resetStateToConsistentValues() sometimes
        fails to load about:blank, likely due to an unresponsive WebProcess. When this happens, WebKitTestRunner
        reports the test as timing out and logs this on stderr:
        """
        <unknown> - TestController::run - Failed to reset state to consistent values
        #PROCESS UNRESPONSIVE - com.apple.WebKit.WebContent.Development (pid 57421)
        """

        This is unfortunate because this does not indicate that anything is particularly wrong with the test in
        question. Rather, it indicates that the WebProcess is unresponsive (likely due to a hang caused by a
        previous test), which prevents WebKitTestRunner to reset the state in order to run the test.

        I propose that if we fail to load about:blank once, we log an error message to stderr but then terminate
        the WebProcess and try once again, to make WebKitTestRunner more robust.
        I have verified the change locally, by injecting a script in resetStateToConsistentValues() that causes
        a WebProcess hang. Before my change, the test would time out and the same logging as in
        <rdar://problem/63493074> would show. After my change though, the test would pass successfully despite the
        WebProcess hang.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2020-05-22  ChangSeok Oh  <changseok@webkit.org>

        [GTK] jhbuild is broken with GCC 10.0
        https://bugs.webkit.org/show_bug.cgi?id=212256

        Reviewed by Carlos Alberto Lopez Perez.

        GCC 10.0 enables -fno-common as default, so many 'multiple definitions' failures occur
        in building dependencies via jhbuild. This patch addresses them by back-porting patches
        from corresponding source repositories.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/libsrtp-Fix-building-with-gcc-10.patch: Added.
        * gstreamer/patches/orc-satisfy-fno-common-under-gcc10.patch: Added.
        * gtk/jhbuild.modules:
        * gtk/patches/at-spi2-atk-tests-Replace-common-variable-with-usual-external.patch: Added.
        * gtk/patches/at-spi2-atk-tests-fix-child_pid-reference.patch: Added.
        * gtk/patches/mesa-gallium-build-fix-to-make-gcc-10-happy.patch: Added.
        * gtk/patches/xserver-Fix-building-with-fno-common.patch: Added.

2020-05-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add bubblewrap ... wrapper
        https://bugs.webkit.org/show_bug.cgi?id=212077

        Reviewed by Carlos Alberto Lopez Perez.

        The bind-mounts are now handled through webkit-bwrap.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.execute_command):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/webkit-bwrap: Added.

2020-05-22  Javier Fernandez  <jfernandez@igalia.com>

        [Flatpak SDK] CCACHE_ env vars are not forwarded to the sandbox environment
        https://bugs.webkit.org/show_bug.cgi?id=212257

        Reviewed by Philippe Normand.

        Added the "CCACHE" prefix to the ones the SDK should keep from the
        user's environment, and forwarded to the Flatpak sandbox.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-05-22  Tim Horton  <timothy_horton@apple.com>

        iOS: Pressing tab in the Mail subject field moves focus to the body, but pressing shift tab doesn't move it back
        https://bugs.webkit.org/show_bug.cgi?id=212243
        <rdar://problem/59127764>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[FocusDelegate _webView:takeFocus:]):
        (-[FocusDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2020-05-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        DataTransfer.files contains multiple files when pasting a single image with multiple representations
        https://bugs.webkit.org/show_bug.cgi?id=212245
        <rdar://problem/60240436>

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):
        (-[LocalPasteboard writeObjects:]):
        (-[LocalPasteboard pasteboardItems]):

        Adjust DumpRenderTree's LocalPasteboard so that it lazily populates the pasteboard when constructing
        NSPasteboardItems. To do this, we need to make a few adjustments:

        1.      When reifying NSPasteboardItems from LocalPasteboard, ask the owner (WebHTMLView) to provide pasteboard
                data for each pasteboard type that was promised by WebKit, but was not eagerly written to the pasteboard.

        2.      Cache pasteboard items that were created, so that we don't repeatedly ask WebHTMLView to provide
                pasteboard data. WebHTMLView doesn't currently support this, and suffers from a bug where TIFF data may
                only be provided once. This was fixed for WebKit2, but not for WebKit1.

        3.      Maintain a separate hash list of original pasteboard types (which may not be UTIs) that were handed to
                LocalPasteboard by WebKit. We use these original types in step (1).

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

        Add a new API test to verify that one file is exposed via the DataTranfer when the pasteboard contains a single
        image with two image representations, but two files are exposed when the pasteboard contains two images, each
        with a single representation.

        (writeImageDataToPasteboard):

        Overload this helper method with two additional variants: one that takes a dictionary of pasteboard types to
        data, and another that takes an array of dictionaries, each representing a single item's types and data.

2020-05-21  Robin Morisset  <rmorisset@apple.com>

        Various compile-time boolean flags could/should be marked constexpr
        https://bugs.webkit.org/show_bug.cgi?id=212244

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/Condition.cpp:

2020-05-21  Mark Lam  <mark.lam@apple.com>

        Rename some variables in Bitmap API test for consistency and better readability.
        https://bugs.webkit.org/show_bug.cgi?id=212235

        Reviewed by Saam Barati.

        This patch renames the following:
            bitmap0 => bitmapZeroes
            bitmapFilled => bitmapOnes
            bitmap3 => bitmap2Clone
            bitmapSmallZeroed => smallBitmapZeroes
            bitmapSmallFilled => smallBitmapOnes
            bitmapSmall1 => smallBitmap1
            bitmapSmall2 => smallBitmap2

        Apart from these renamings, there are no other code changes.

        * TestWebKitAPI/Tests/WTF/Bitmap.cpp:
        (TestWebKitAPI::testBitmapSize):
        (TestWebKitAPI::testBitmapConstructedEmpty):
        (TestWebKitAPI::testBitmapSetGet):
        (TestWebKitAPI::testBitmapTestAndSet):
        (TestWebKitAPI::testBitmapTestAndClear):
        (TestWebKitAPI::testBitmapConcurrentTestAndSet):
        (TestWebKitAPI::testBitmapConcurrentTestAndClear):
        (TestWebKitAPI::testBitmapClear):
        (TestWebKitAPI::testBitmapClearAll):
        (TestWebKitAPI::testBitmapInvert):
        (TestWebKitAPI::testBitmapFindRunOfZeros):
        (TestWebKitAPI::testBitmapCount):
        (TestWebKitAPI::testBitmapIsEmpty):
        (TestWebKitAPI::testBitmapIsFull):
        (TestWebKitAPI::testBitmapMerge):
        (TestWebKitAPI::testBitmapFilter):
        (TestWebKitAPI::testBitmapExclude):
        (TestWebKitAPI::testBitmapConcurrentFilter):
        (TestWebKitAPI::testBitmapSubsumes):
        (TestWebKitAPI::testBitmapForEachSetBit):
        (TestWebKitAPI::testBitmapFindBit):
        (TestWebKitAPI::testBitmapIteration):
        (TestWebKitAPI::testBitmapMergeAndClear):
        (TestWebKitAPI::testBitmapSetAndClear):
        (TestWebKitAPI::testBitmapSetEachNthBit):
        (TestWebKitAPI::testBitmapOperatorEqual):
        (TestWebKitAPI::testBitmapOperatorNotEqual):
        (TestWebKitAPI::testBitmapOperatorAssignment):
        (TestWebKitAPI::testBitmapOperatorBitOrAssignment):
        (TestWebKitAPI::testBitmapOperatorBitAndAssignment):
        (TestWebKitAPI::testBitmapOperatorBitXorAssignment):
        (TestWebKitAPI::testBitmapHash):

2020-05-20  Mark Lam  <mark.lam@apple.com>

        Add more Bitmap methods.
        https://bugs.webkit.org/show_bug.cgi?id=212190
        <rdar://problem/63481333>

        Reviewed by Robin Morisset.

        Added test coverage for the new WTF::Bitmap methods.

        * TestWebKitAPI/Tests/WTF/Bitmap.cpp:
        (TestWebKitAPI::testBitmapSetEachNthBit):
        (TestWebKitAPI::testBitmapOperatorAssignment):
        (TestWebKitAPI::testBitmapOperatorBitOrAssignment):
        (TestWebKitAPI::testBitmapOperatorBitAndAssignment):
        (TestWebKitAPI::testBitmapOperatorBitXorAssignment):
        (TestWebKitAPI::TEST):

2020-05-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Add minimal WKView API to enable TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=211868

        Reviewed by Alex Christensen.

        Enable TestWebKitAPI

        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/playstation/PlatformUtilitiesPlayStation.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        * TestWebKitAPI/playstation/PlatformWebViewPlayStation.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::page const):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateButtonClick):
        * TestWebKitAPI/playstation/main.cpp:
        (loadLibraryOrExit):
        (main):
        Add PlayStation Platform support.

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        Use the same expected default font preferences as GTK's.

2020-05-21  Alex Christensen  <achristensen@webkit.org>

        [macOS] TestWebKitAPI.WebKit.HTTPReferer is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=212180

        Reviewed by Darin Adler.

        Sometimes an HTTP request takes more than one call to nw_connection_receive to receive entirely.
        Add a new abstraction Connection that wraps an nw_connection_t and knows how to read an entire request.
        Use strnstr instead of null terminating and using strstr.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::Connection::receiveHTTPRequest):
        (TestWebKitAPI::Connection::Connection):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::dataFromString):
        (TestWebKitAPI::vectorFromData):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::HTTPServer::request const):
        (TestWebKitAPI::Connection::receiveHTTPRequest const):
        (TestWebKitAPI::Connection::send const):
        (TestWebKitAPI::Connection::terminate const):
        (TestWebKitAPI::nullTerminatedRequest): Deleted.

2020-05-21  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][GTK][WPE] Expose and honor the media content types requiring hardware support setting
        https://bugs.webkit.org/show_bug.cgi?id=211950

        Reviewed by Adrian Perez de Castro.

        Exercise the new mediaContentTypesRequiringHardwareSupport setting.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2020-05-20  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Scrolling synchronization part 1: Have the scrolling thread wait half a frame for the main thread to complete the rendering update
        https://bugs.webkit.org/show_bug.cgi?id=212168

        Reviewed by Tim Horton.

        Some new trace points for scrolling thread activity.

        * Tracing/SystemTracePoints.plist:

2020-05-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Layout tests in editing/pasteboard sporadically crash
        https://bugs.webkit.org/show_bug.cgi?id=212169
        <rdar://problem/63361966>

        Reviewed by Tim Horton.

        Add some missing entitlements.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp-iOS.entitlements:

2020-05-20  Sam Weinig  <weinig@apple.com>

        Replace Color::getHSL() with sRGBToHSL to ensure it at least gives somewhat sensible results for ExtendedColors and reduce code duplication
        https://bugs.webkit.org/show_bug.cgi?id=212143

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use sRGBToHSL instead of Color::getHSL() and add testing of WebCore::lightness() and 
        round tripping. Update results for hue to be 0->1 rather than 0->6 which allows the round tripping to succeed.

2020-05-20  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement connected and disconnected events of GAMEPAD API with libmanette
        https://bugs.webkit.org/show_bug.cgi?id=133854

        Reviewed by Carlos Garcia Campos.

        This patch brings initial GAMEPAD API support to the gtk port. We use libmanette,
        a simple GObject game controller library to handle gamepad connection and input.
        In particular, we use libmanette-0.2.4 which is the latest version and minimum
        version to build in c++.

        * gtk/jhbuild.modules:

2020-05-20  Kate Cheney  <katherine_cheney@apple.com>

        Support operating dates in ResourceLoadStatisticsDatabaseStore
        https://bugs.webkit.org/show_bug.cgi?id=212034
        <rdar://problem/63349242>

        Reviewed by Brent Fulgham.

        Add a testing function to insert an expired statistic.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsExpiredStatistic):
        (WTR::TestRunner::statisticsCallDidSetExpiredStatisticCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsExpiredStatistic):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetExpiredStatistic):
        * WebKitTestRunner/TestInvocation.h:

2020-05-20  Chris Dumez  <cdumez@apple.com>

        Deprecate WKBundlePageSetPolicyClient() Injected bundle C API
        https://bugs.webkit.org/show_bug.cgi?id=212166

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2020-05-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPadOS] -webkit-text-size-adjust:percentage doesn't work in native apps
        https://bugs.webkit.org/show_bug.cgi?id=212122
        <rdar://problem/54560875>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/idempotent-mode-autosizing-only-honors-percentages.html: Added.
        * TestWebKitAPI/ios/PreferredContentMode.mm:

2020-05-20  Lauro Moura  <lmoura@igalia.com>

        [WPE][WebDriver] Allow subviews to create new views
        https://bugs.webkit.org/show_bug.cgi?id=212118

        Reviewed by Carlos Garcia Campos.

        Required by some WebDriver tests.

        * MiniBrowser/wpe/main.cpp:
        (createWebView):

2020-05-20  Philippe Normand  <pnormand@igalia.com>

        [FlatPak SDK] Missing ruby gems json and highline
        https://bugs.webkit.org/show_bug.cgi?id=212086

        Reviewed by Žan Doberšek.

        Add the json and highline Ruby gems in the Flatpak SDK.

        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/ruby-highline.bst: Added.
        * buildstream/elements/sdk/ruby-json.bst: Added.
        * buildstream/project.conf:

2020-05-20  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, reverting r261909.

        Execution of LayoutTests returns syntax error in the bots (GTK, WPE)

        Reverted changeset:

        "[Flatpak SDK] Add bubblewrap ... wrapper"
        https://bugs.webkit.org/show_bug.cgi?id=212077
        https://trac.webkit.org/changeset/261909

2020-05-20  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Bump rr and bst
        https://bugs.webkit.org/show_bug.cgi?id=212074

        Reviewed by Adrian Perez de Castro.

        Update Buildstream to 1.4.3 which is their latest stable release. Also bump rr to their
        latest git master commit, which makes it usable in the Flatpak sandbox.

        * buildstream/Pipfile:
        * buildstream/Pipfile.lock:
        * buildstream/elements/sdk/rr.bst:

2020-05-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        update-test-expectations-from-bugzilla tool not working with new EWS
        https://bugs.webkit.org/show_bug.cgi?id=210975

        Reviewed by Youenn Fablet.

        With the new EWS, the layout test archive results are not longer
        posted to bugzilla as attachment. Now we need to inspect the EWS
        server to get the status of the runs for the patch id, and then
        query the EWS builbot server in order to get the details of each
        run to finally obtain the URL with the zip file for the results.

        The tool now automatically applies platform-specific and generic
        results automatically (its not longer needed to specify whether
        the result its generic or not). It uses mac-wk2 results as generic.

        Also now it updates the test results for tests where the result
        is MISSING.

        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py:
        (configure_logging):
        (argument_parser):
        (TestExpectationUpdater.__init__):
        (TestExpectationUpdater._platform_name):
        (TestExpectationUpdater):
        (TestExpectationUpdater._get_layout_tests_run):
        (TestExpectationUpdater._lookup_ews_results):
        (TestExpectationUpdater._tests_to_update):
        (TestExpectationUpdater._update_for_generic_bot):
        (TestExpectationUpdater._update_for_platform_specific_bot):
        (TestExpectationUpdater.do_update):
        (main):
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater_unittest.py:
        (MockAttachment.__init__):
        (MockAttachment.is_patch):
        (MockAttachment):
        (MockAttachment.is_obsolete):
        (MockBugzilla):
        (MockBugzilla.attachments):
        (MockRequests):
        (MockRequests.__init__):
        (MockRequests.get):
        (MockRequests.content):
        (MockRequests.text):
        (MockZip.__init__):
        (TestExpectationUpdaterTest.test_update_test_expectations):

2020-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build with GTK 3.98.4

        * MiniBrowser/gtk/BrowserTab.c:
        (loadChanged):
        (browserTabConstructed):
        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewClose):
        (browserWindowSetupToolbarItem):
        (browser_window_init):

2020-05-20  Sam Weinig  <weinig@apple.com>

        Remove unused Color::getHSV function
        https://bugs.webkit.org/show_bug.cgi?id=212119

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        Remove tests for Color::getHSV().

2020-05-20  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add bubblewrap ... wrapper
        https://bugs.webkit.org/show_bug.cgi?id=212077

        Reviewed by Carlos Alberto Lopez Perez.

        The bind-mounts are now handled through webkit-bwrap.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.execute_command):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/webkit-bwrap: Added.

2020-05-19  Darin Adler  <darin@apple.com>

        REGRESSION (r259930): Dictation marker at start of text is removed when added trailing whitespace is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=212093

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WebKitCocoa/InsertTextAlternatives.mm:
        (TestWebKitAPI::TEST): Expect success rather than failure.

2020-05-19  Alex Christensen  <achristensen@webkit.org>

        Add _WKDownloadDelegate callback including totalBytesWritten
        https://bugs.webkit.org/show_bug.cgi?id=212110
        <rdar://problem/63358981>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestDownloadDelegate.h:
        * TestWebKitAPI/cocoa/TestDownloadDelegate.mm:
        (-[TestDownloadDelegate _download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[TestDownloadDelegate _download:didReceiveData:]): Deleted.

2020-05-19  Daniel Bates  <dabates@apple.com>

        Blue dotted underline with alternatives only shown for last word, gets lost for previous insertions
        https://bugs.webkit.org/show_bug.cgi?id=212097
        <rdar://problem/61913405>

        Reviewed by Darin Adler.

        Add tests. As I was writing them I discovered a few bugs in the existing code:
                1. <https://webkit.org/b/212093> REGRESSION (r259930): Dictation marker at start of text is removed when added trailing whitespace is collapsed
                2. <https://webkit.org/b/212098> Inserting a no-break space before or after a marker removes the marker

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InsertTextAlternatives.mm: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeNSStringWithCharacter): Added.

2020-05-19  Sergio Villar Senin  <svillar@igalia.com>

        [WPE] Sync jhbuild to flatpak
        https://bugs.webkit.org/show_bug.cgi?id=212087

        Reviewed by Adrian Perez de Castro.

        * wpe/jhbuild.modules: Updated meson, libwpe and wpebackend-fdo.

2020-05-19  Chris Dumez  <cdumez@apple.com>

        Turn on ITP in TestController::resetStateToConsistentValues()
        https://bugs.webkit.org/show_bug.cgi?id=212076

        Reviewed by Darin Adler.

        Turn on ITP in TestController::resetStateToConsistentValues(), in a single place
        instead of doing it in different places depending on whether or not the session
        is ephemeral or not. It is also important to do it in resetStateToConsistentValues()
        instead of doing it on data store creation because there is a testRunner method
        that allows tests to turn off ITP.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformInitializeDataStore):

2020-05-19  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Use items instead of iteritems to make Python 3 happier.

        Rubber-stamped by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.pack_toolchain):

2020-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Drag and drop within a contenteditable area duplicates attachment-backed images
        https://bugs.webkit.org/show_bug.cgi?id=212075
        <rdar://problem/62434146>

        Reviewed by Andy Estes.

        Add a new API test to verify that starting a drag on an attachment-backed image in an editable container with
        queued mouse move events does not cause the selection to collapse. See Source/WebKit/ChangeLog for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView waitForPendingMouseEvents]):

        Move this method from DragAndDropSimulator into TestWKWebView.

        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropTestWKWebView waitForPendingMouseEvents]): Deleted.

2020-05-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [buildbot][GTK][WPE] Pass --verbose flag when running JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=212088

        Reviewed by Philippe Normand.

        Pass the "--verbose" flag to run-javascriptcore-tests also for GTK and WPE.
        Also change the way we are currently passing "--memory-limited" to make
        it more obvious that this is needed for all Linux bots (GTK+WPE+JSCOnly).

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.start):
        (RunRemoteJavaScriptCoreTests.start):

2020-05-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fixups for r261689 "stress/array-buffer-view-watchpoint-can-be-fired-in-really-add-in-dfg.js failing on ppc64le and s390x"
        https://bugs.webkit.org/show_bug.cgi?id=211724
        <rdar://problem/63227393>

        Reviewed by Carlos Alberto Lopez Perez.

        Rewrite determineArchitectureFromELFBinary to properly handle big endian architectures.
        Also, properly account for 32-bit PowerPC.

        * Scripts/run-jsc-stress-tests:

2020-05-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Add WEBKIT_EDITING_COMMAND_PASTE_AS_PLAIN_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=212038

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorNonEditable):

2020-05-18  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] HeadlessViewBackend should exclusively use software rasterization mode
        https://bugs.webkit.org/show_bug.cgi?id=211982

        Reviewed by Carlos Garcia Campos.

        Instead of using WPEBackend-fdo's EGL mode that optionally allows the
        GL operations to be done through software rasterization, have the
        HeadlessViewBackend use the SHM mode which enforces this behavior.

        Under the hood, the graphics library will be forced to set up and use
        the software rasterization mechanisms, and on our side we are required
        to properly handle SHM-backed buffers. This avoids any use of EGL or
        GL operations inside HeadlessViewBackend, enabling to use this setup
        in systems and environments that don't have GPUs available.

        All GL-y things are pushed into the WindowViewBackend class. Inside
        HeadlessViewBackend, the whole SHM logic requires WPEBackend-fdo APIs
        that are part of the current 1.7 development cycle. When building
        against older versions, HeadlessViewBackend itself remains buildable
        but is not operational otherwise.

        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessInstance::singleton):
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::~HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::backend const):
        (WPEToolingBackends::HeadlessViewBackend::snapshot):
        (WPEToolingBackends::HeadlessViewBackend::updateSnapshot):
        (WPEToolingBackends::HeadlessViewBackend::vsync):
        (): Deleted.
        (WPEToolingBackends::HeadlessEGLConnection::singleton): Deleted.
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot): Deleted.
        (WPEToolingBackends::HeadlessViewBackend::createEGLSnapshot): Deleted.
        (WPEToolingBackends::HeadlessViewBackend::createSHMSnapshot): Deleted.
        (WPEToolingBackends::HeadlessViewBackend::performUpdate): Deleted.
        (WPEToolingBackends::HeadlessViewBackend::displayBuffer): Deleted.
        * wpe/backends/HeadlessViewBackend.h:
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initialize): Deleted.
        (WPEToolingBackends::ViewBackend::deinitialize): Deleted.
        (WPEToolingBackends::ViewBackend::backend const): Deleted.
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::backend const):
        (WPEToolingBackends::WindowViewBackend::initialize):
        (WPEToolingBackends::WindowViewBackend::deinitialize):
        * wpe/backends/WindowViewBackend.h:

2020-05-18  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Disable modern media controls for testing
        https://bugs.webkit.org/show_bug.cgi?id=212023

        Reviewed by Philippe Normand.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
        Since using the same Adwaita-based media controls as the GTK port, WPE
        too should disable modern media controls during testing by overriding
        the default value. This fixes a couple of obscure crashes in text track
        tests.

2020-05-18  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] WKTR WebsiteDataStore is being overwritten by the default one
        https://bugs.webkit.org/show_bug.cgi?id=212044

        Reviewed by Fujii Hironori.

        Ensure TestController::defaultWebSiteDataStore is being used for WinCairo as done in r259705.

        Also consolidate platformInitializeDataStore implementations with GTK/WPE since WinCairo WKTR
        also started crashing since r261758.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:

2020-05-18  Andy Estes  <aestes@apple.com>

        http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html fails in public SDK builds
        https://bugs.webkit.org/show_bug.cgi?id=212000
        <rdar://problem/63323082>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace uses of +self with +class
        https://bugs.webkit.org/show_bug.cgi?id=212041

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController monitorWheelEventsWithOptions:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::enclosingScrollViewIncludingSelf):

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Implement conversion between P3 and sRGB color
        https://bugs.webkit.org/show_bug.cgi?id=211998

        Reviewed by Daniel Bates.

        API test for conversions from P3 to sRGB, and linearRGB to sRGB. Values were confirmed
        as close to those provided by ColorSync Utility.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):

2020-05-18  Mark Lam  <mark.lam@apple.com>

        Implement a faster findBitInWord() using the hardware ctz instruction.
        https://bugs.webkit.org/show_bug.cgi?id=212032
        <rdar://problem/63348086>

        Reviewed by Saam Barati.

        Add tests to make sure that the ctz implementation matches the loop implementation
        in behavior.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StdLibExtras.cpp: Added.
        (TestWebKitAPI::testFindBitInWord):
        (TestWebKitAPI::TEST):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow clipboard API access when pasting from a menu item or key binding
        https://bugs.webkit.org/show_bug.cgi?id=211990
        <rdar://problem/63308916>

        Reviewed by Megan Gardner.

        Add a UIScriptController method to trigger a paste from the application process.

        * DumpRenderTree/cocoa/UIScriptControllerCocoa.h:
        * DumpRenderTree/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::paste):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::paste):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::paste):

2020-05-18  Darin Adler  <darin@apple.com>

        Add iterator checking to ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=211669

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Removed use of the DID_CREATE_WEAK_PTR_IMPL
        and WILL_DESTROY_WEAK_PTR_IMPL, which didn't work consistently because of the
        one-definition rule. Instead, this file parameterizes the WeakPtr family of
        class templates with a counter class. To avoid having to rewrite test code, used
        alias templates to insert these class template into the TestWebKitAPI namespace,
        hiding the class templates from the WTF namespace.

2020-05-18  Peng Liu  <peng.liu6@apple.com>

        [iPad Simulator] TestWebKitAPI.WebKitLegacy.ScrollingDoesNotPauseMedia is timing out
        https://bugs.webkit.org/show_bug.cgi?id=211792

        Reviewed by Daniel Bates.

        Fix deadlocks in two API tests (only reproducible on iPad simulators).

        * TestWebKitAPI/Tests/WebKitLegacy/ios/PreemptVideoFullscreen.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        (TestWebKitAPI::TEST):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Single selection <select> with <optgroups> shows multiple selected options
        https://bugs.webkit.org/show_bug.cgi?id=199485
        <rdar://problem/52757531>

        Reviewed by Megan Gardner.

        Add a new helper method to check whether the currently presented form accessory is a select menu, and has a
        checked menu item at the given row.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::selectFormAccessoryHasCheckedItemAtRow const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::selectFormAccessoryHasCheckedItemAtRow const):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unexpected capitalization of next word after repositioning caret
        https://bugs.webkit.org/show_bug.cgi?id=211969
        <rdar://problem/62605526>

        Reviewed by Alex Christensen.

        Add a new UIScriptController hook to query whether or not the software keyboard is in shifted state.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::keyboardIsAutomaticallyShifted const):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Adjust a couple of API tests that copy and paste back-to-back, so that they wait for the copy to finish before
        attempting to paste.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::keyboardIsAutomaticallyShifted const):

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitContextMenuItemType for paste as plaintext
        https://bugs.webkit.org/show_bug.cgi?id=177638

        Reviewed by Michael Catanzaro.

        Update default context menu test case to also test the context menu for rich editable content.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (prepareContextMenuTestView):
        (testContextMenuDefaultMenu):

2020-05-17  Simon Fraser  <simon.fraser@apple.com>

        Fix operator== and hash() for ExtendedColor
        https://bugs.webkit.org/show_bug.cgi?id=211993

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):

2020-05-16  Simon Fraser  <simon.fraser@apple.com>

        Rename some API test files
        https://bugs.webkit.org/show_bug.cgi?id=211992

        Reviewed by Zalan Bujtas.

        I'm tired of Quick Open of Color.cpp opening the test file rather than the one I want.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/Color.cpp.
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/ExtendedColor.cpp.
        * TestWebKitAPI/Tests/WebCore/FloatPointTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FloatPoint.cpp.
        * TestWebKitAPI/Tests/WebCore/FloatRectTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FloatRect.cpp.
        * TestWebKitAPI/Tests/WebCore/FloatSizeTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FloatSize.cpp.
        * TestWebKitAPI/Tests/WebCore/IntPointTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/IntPoint.cpp.
        * TestWebKitAPI/Tests/WebCore/IntRectTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/IntRect.cpp.
        * TestWebKitAPI/Tests/WebCore/IntSizeTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/IntSize.cpp.
        * TestWebKitAPI/Tests/WebCore/LayoutUnitTests.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp.

2020-05-15  Lauro Moura  <lmoura@igalia.com>

        [GTK][WPE] Add default initialization of WebsiteDataStore to WebKitTestRunner after r261758
        https://bugs.webkit.org/show_bug.cgi?id=211977

        As GTK/WPE does not explicitly create WebSiteDataStore for the tests,
        assign the default one.

        Not sure if this is the correct fix, but should allow running tests
        again.

        Reviewed by Žan Doberšek.

        * WebKitTestRunner/TestController.cpp: Add GTK/WPE guards.
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformInitializeDataStore): Use default
        WebsiteDataStore.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformInitializeDataStore): Use default
        websiteDataStore.

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        Use enum serialization instead of casting to/from uint32_t
        https://bugs.webkit.org/show_bug.cgi?id=211885

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::increaseTextSelection):
        (AccessibilityUIElement::decreaseTextSelection):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::increaseTextSelection):
        (WTR::AccessibilityUIElement::decreaseTextSelection):

2020-05-15  Ryan Haddad  <ryanhaddad@apple.com>

        [iOS EWS] TestWebKitAPI.WKWebsiteDataStore.RemoveAndFetchData is failing
        https://bugs.webkit.org/show_bug.cgi?id=208451

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST): Re-enable the test for iOS.

2020-05-15  Geoffrey Garen  <ggaren@apple.com>

        Update Sihui Liu's status to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=211966

        Reviewed by Per Arne Vollan.

        See email thread on webkit-reviewers on 5/7, "Reviewer nomination:
        Sihui Liu".

        * Scripts/webkitpy/common/config/contributors.json:

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.WKHTTPCookieStore.Basic is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211752

        Reviewed by Geoffrey Garen.

        The ordering of cookiesDidChangeInCookieStore callbacks with regard to other callbacks isn't quite deterministic.
        No problem.  If the number of callbacks isn't what it is expected, wait until it is.
        When I reproduce this test failure, I need to spin the run loop at max once to have it succeed, but the bots may take a few more run loop spins.
        Spin until the number of callbacks is the expected value.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (runTestWithWebsiteDataStore):

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        [iOS Simulator] TestWebKitAPI._WKDownload.Resume is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=211786

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        Add a short sleep (<1/10s) to make this test so it would've almost always failed without this fix.
        Checking the file immediately usually succeeded, but waiting a few run loop iterations revealed that CFNetwork
        was deleting resumed then finished downloads.

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        Regression (iOS 13.4, r249142): WKWebView.loading is never reset after a Back navigation in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=211449

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[LoadingObserver changesObserved]):
        (-[LoadingObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST):

2020-05-15  Chris Dumez  <cdumez@apple.com>

        Make sure we use current data store in WKTR's TestController
        https://bugs.webkit.org/show_bug.cgi?id=211920

        Reviewed by Alex Christensen.

        Make sure we use current data store in WKTR's TestController. Currently, a lot of code
        uses defaultDataStore(), even though the test may be using another data store (e.g. an
        ephemeral one). I suspect this is contributing to test flakiness.

        We now also make sure that TestController::websiteDataStore() returns the actual store
        that will be used by the test when resetPreferencesToConsistentValues() is called.
        Previously, it would not since it would get the store from the m_mainView and m_mainView
        would only get initialized after calling resetPreferencesToConsistentValues(). To support
        this, we now initialize a m_websiteDataStore member in platformInitializeDataStore(),
        which gets called right before resetPreferencesToConsistentValues(). When
        platformCreateWebView() gets called right after resetPreferencesToConsistentValues(),
        it now simply relies on m_websiteDataStore instead of creating the data store at this
        point.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::clearServiceWorkerRegistrations):
        (WTR::TestController::clearDOMCache):
        (WTR::TestController::clearDOMCaches):
        (WTR::TestController::hasDOMCache):
        (WTR::TestController::domCacheSize):
        (WTR::TestController::clearStatisticsDataForDomain):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-05-15  Diego Pino Garcia  <dpino@igalia.com>

        [buildbot] Increase blocksize of file transfer in UploadTestResults step
        https://bugs.webkit.org/show_bug.cgi?id=211847

        Reviewed by Aakash Jain.

        All other steps involving file transfer uploads use 256kb as block
        size. Make this step in line with others.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (UploadTestResults.__init__):

2020-05-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK3] Bring back usage of GtkMenu for context menus
        https://bugs.webkit.org/show_bug.cgi?id=211557

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp: Add preprocessor conditionals
        for GTK4 and bring back some bits previously removed in r260889 for GTK3.

2020-05-14  Kate Cheney  <katherine_cheney@apple.com>

        Attribute non-network loads and loads with html strings as automatically app-bound
        https://bugs.webkit.org/show_bug.cgi?id=211913
        <rdar://problem/63157801

        Reviewed by Brent Fulgham.

        Adds new tests to check that WebView loads with HTML strings have
        proper behavior.

        Some tests need to test behavior on app-bound domains on webviews which do not specify
        limitsNavigationsToAppBoundDomains. Since local files now do this
        automatically, this patch updates those to use actual app-bound
        domains from the WKAppBoundDomains list instead to maintain behavior.

        Remove limitsNavigationsToAppBoundDomains for local files to make sure
        they are forced into this mode automatically.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        (TEST):

2020-05-14  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Relaxing signature length requirements for U2fRegister
        https://bugs.webkit.org/show_bug.cgi?id=209645
        <rdar://problem/63204591>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):

2020-05-14  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests shouldn't need Xcode to run Mac tests
        https://bugs.webkit.org/show_bug.cgi?id=211903
        <rdar://problem/63205839>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo):
        (PlatformInfo.xcode_sdk_version): Memoize SDK version retrieval.
        (PlatformInfo.xcode_version): Only run xcodebuild if macosx SDK is present.
        (PlatformInfo.available_sdks): Ditto.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_available_sdks):

2020-05-14  Daniel Bates  <dabates@apple.com>

        Include LocalOverrides.xcconfig in all Tools projects
        https://bugs.webkit.org/show_bug.cgi?id=211789

        Reviewed by Dan Bernstein.

        Matches what is done for all Source projects so as to support local overriding of configs.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * MobileMiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crashes in LayoutTests related to TextMarkers in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211912

        Reviewed by Chris Fleizach.

        Check for null pointer parameters before dereferencing.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::misspellingSearchParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):

2020-05-14  Michael Catanzaro  <mcatanzaro@gnome.org>

        stress/array-buffer-view-watchpoint-can-be-fired-in-really-add-in-dfg.js failing on ppc64le and s390x
        https://bugs.webkit.org/show_bug.cgi?id=211724

        Reviewed by Carlos Alberto Lopez Perez.

        Add architecture detection for PowerPC and S/390.

        * Scripts/run-jsc-stress-tests:

2020-05-14  Philippe Normand  <pnormand@igalia.com>

        [WPE] Tools/wpe/install-dependencies fails due to missing pipenv
        https://bugs.webkit.org/show_bug.cgi?id=211849

        Reviewed by Žan Doberšek.

        Ubuntu Bionic doesn't ship pipenv. So fallback to the pip3 install path. Also remove the
        libpng12-dev fallback, this doesn't seem necessary any longer (tested on a Ubuntu Bionic
        docker).

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2020-05-14  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Path references shouldn't point to the sandbox in compile_commands.json
        https://bugs.webkit.org/show_bug.cgi?id=209901

        Reviewed by Žan Doberšek.

        Add ccls to the SDK. It can then be used through a wrapper script by Emacs's lsp-mode.
        
        * buildstream/elements/sdk-build-depends/rapidjson.bst: Added.
        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/ccls.bst: Added.

2020-05-13  Jer Noble  <jer.noble@apple.com>

        Replace isNullFunctionPointer with real weak-linking support
        https://bugs.webkit.org/show_bug.cgi?id=211751

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS-v2.tbd:
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS.tbd:
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-macOS-v2.tbd:
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-macOS.tbd:

2020-05-13  Tim Horton  <timothy_horton@apple.com>

        Add SPI for reverting to touch events for iPad trackpad interactions
        https://bugs.webkit.org/show_bug.cgi?id=211824
        <rdar://problem/61363084>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm.
        (-[WKTestingEvent locationInView:]):
        (-[WKTestingEvent _setButtonMask:]):
        (-[WKTestingEvent _buttonMask]):
        (-[WKTestingTouch locationInView:]):
        (-[WKTestingTouch setTapCount:]):
        (-[WKTestingTouch tapCount]):
        (mouseGesture):
        (TEST):
        Rename and enable MacCatalystMouseSupport tests for iOS.
        Add a test that ensures that the next load after setting the
        WKWebpagePreference causes the WKMouseGestureRecognizer to get disabled.

2020-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] "Copy" context menu action for attachment element does not work in Mail
        https://bugs.webkit.org/show_bug.cgi?id=211817
        <rdar://problem/58043110>

        Reviewed by Tim Horton.

        Add a new iOS API test that simulates the context menu action to "copy" on an attachment element.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2020-05-12  Matt Lewis  <jlewis3@apple.com>

        Run-webkit-tests should not fail if all tests found to run are skipped.
        https://bugs.webkit.org/show_bug.cgi?id=210880

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Added a check to see if we skiped all tests. If so We return a successful exit
        code as we performed as expected.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (RunDetails.__init__): Added in an additional class variable to be used as a way to record an
        all skipped result check.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Added a all test skipped check and we return early with the exit code.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Added a new test and removed the old
        ones that no longer test the correct functionality.
        (RunTest.test_all_tests_skipped):
        (RunTest.test_no_tests_found): Deleted.
        (RunTest.test_no_tests_found_2): Deleted.

2020-05-13  Kate Cheney  <katherine_cheney@apple.com>

        Add test for non-app-bound iframe under app-bound domain
        https://bugs.webkit.org/show_bug.cgi?id=211815
        <rdar://problem/63159707>

        Reviewed by Brent Fulgham.

        Clear the main frame app-bound session before loading the iframe so
        we can be sure the iframe uses an app-bound session.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearAppBoundSession):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-05-13  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Proper handling of sccache scheduler URL command-line argument

        Rubber-stamped by Carlos Alberto Lopez Perez.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):

2020-05-13  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Craft a custom sccache config file from SDK toolchains
        https://bugs.webkit.org/show_bug.cgi?id=211781

        Reviewed by Carlos Alberto Lopez Perez.

        Optionally generate a sccache config file and use it when building WebKit.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_toml):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.host_path_to_sandbox_path):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.main):
        (WebkitFlatpak.save_config):
        (WebkitFlatpak):
        (WebkitFlatpak.pack_toolchain):
        (WebkitFlatpak.setup_icecc): Deleted.

2020-05-13  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [Flatpak] *PROCESS_CMD_PREFIX are ignored
        https://bugs.webkit.org/show_bug.cgi?id=211830

        Reviewed by Philippe Normand.

        Checking the last slice of the splitted environment variable won't
        match with any of the list of suffixes since they are composed by
        several slices if they are splitted too.

        A new internal function is defined where the suffixes list is
        traversed and matched with the end of the passend enviroment
        variable.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox.envvar_in_suffixes_to_keep):
        (WebkitFlatpak.run_in_sandbox):

2020-05-12  Alex Christensen  <achristensen@webkit.org>

        [iOS Simulator] TestWebKitAPI._WKDownload.Resume is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=211786

        Reviewed by Darin Adler.

        This should turn the test crash into a failure, which is a step in the right direction.
        Still investigating...

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):

2020-05-12  Ryan Haddad  <ryanhaddad@apple.com>

        [iOS] TestWTF.WTF_Lock.ContendedShortSection is consistently timing out on debug
        https://bugs.webkit.org/show_bug.cgi?id=211650

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WTF/Lock.cpp: Skip the test for iOS Debug queues.

2020-05-12  Philippe Normand  <pnormand@igalia.com>

        [FlatPak SDK] Some packages in the SDK have missing debug symbols
        https://bugs.webkit.org/show_bug.cgi?id=211621

        Reviewed by Carlos Alberto Lopez Perez.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak._get_packages): Unconditionally install SDK Debug symbols, even for Release
        builds. This should help improve the crash reports on the bots.

2020-05-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        WPT test importer fails to update references in <link> tags
        https://bugs.webkit.org/show_bug.cgi?id=211762

        Reviewed by Youenn Fablet.

        When importing WPT test references, ensure relative paths are also
        updated for the href attribute in <link> tags.
        Also fix a bug that was causing wrong updates on the paths due to
        the characters in reference_relpath not escaped when performing
        the regex substitution in convert_reference_relpaths(). For example:
        "resources/script.js" was changed to "resourcscript.js" when reference_relpath was '../'

        Improve also the unit test case to check for the fixes in this patch.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.convert_reference_relpaths):
        (_W3CTestConverter.convert_attributes_if_needed):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:

2020-05-12  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Include clang++ and g++ in toolchains
        https://bugs.webkit.org/show_bug.cgi?id=211663

        Reviewed by Adrian Perez de Castro.

        /usr/bin/clang++ wasn't included before. Also a small unrelated drive-by, white-list RUST
        env vars, such as RUST_LOG, useful when debugging sccache.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.main):
        (WebkitFlatpak.setup_icecc):

2020-05-11  Simon Fraser  <simon.fraser@apple.com>

        [ macOS ] scrollingcoordinator/mac/latching/scrolling-select-should-not-latch-mainframe.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211747

        Reviewed by Tim Horton.

        Add an option to monitorWheelEvents to reset latching.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController monitorWheelEventsWithOptions:]):
        (-[EventSendingController monitorWheelEvents]): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::toMonitorWheelEventsOptions): We have to return a pointer to a static, because the generated code
        doesn't use smart pointers.
        (WTR::EventSendingController::monitorWheelEvents):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        (WTR::MonitorWheelEventsOptions::MonitorWheelEventsOptions):

2020-05-11  Kate Cheney  <katherine_cheney@apple.com>

        Fail navigations to non app-bound domains after use of app-bound APIs
        https://bugs.webkit.org/show_bug.cgi?id=211647
        <rdar://problem/62978159>

        Reviewed by Brent Fulgham.

        Added a new test to confirm a non-app bound navigation fails after
        using script injection.

        This fix also required changing any test which uses a restricted API
        to confirm behavior of another restricted API. Tests can set
        _setNeedsInAppBrowserPrivacyQuirks in the configuration to indicate
        APIs should not be blocked, then toggle it to test actual behavior.

        Also, we can remove any calls to _setInAppBrowserPrivacyEnabled
        now that this is just an internal test flag. 

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[AppBoundDomainDelegate webView:didFinishNavigation:]):
        (-[AppBoundDomainDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[AppBoundDomainDelegate waitForDidFinishNavigation]):
        (-[AppBoundDomainDelegate waitForDidFailProvisionalNavigationError]):
        (TEST):

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

        Add some logs to diagnose why WebKitLegacy.CrossPartitionFileSchemeAccess API test times out in EWS
        https://bugs.webkit.org/show_bug.cgi?id=211738

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm:
        (TestWebKitAPI::TEST):
        I saw an instance of failing to make a partition because the "file" already existed.
        Try cleaning up anything left from last time this test timed out to prevent it from timing out again.

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

        Add some logs to diagnose why WebKitLegacy.CrossPartitionFileSchemeAccess API test times out in EWS
        https://bugs.webkit.org/show_bug.cgi?id=211738

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm:
        (TestWebKitAPI::TEST):

2020-05-11  Andres Gonzalez  <andresg_22@apple.com>

        Add mechanism to turn on accessibility isolated tree mode from WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=211725

        Reviewed by Chris Fleizach.

        Turn on isolated tree mode when appropriate.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::updateIsolatedTreeMode):

2020-05-11  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, reverting r261296.

        Rolling r260769 back in, since this was not causing a
        regression.

        Reverted changeset:

        "Unreviewed, reverting r260769."
        https://bugs.webkit.org/show_bug.cgi?id=211578
        https://trac.webkit.org/changeset/261296

2020-05-11  Philippe Normand  <pnormand@igalia.com>

        [GTK] Media and audio permission request unit tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=158257

        Reviewed by Carlos Garcia Campos.

        Fix getUserMedia glib tests. They require unsecure capture device context.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaEnumerateDevicesPermissionCheck):
        (testWebViewUserMediaPermissionRequests):
        (testWebViewAudioOnlyUserMediaPermissionRequests):
        * TestWebKitAPI/glib/TestExpectations.json:

2020-05-11  Paulo Matos  <pmatos@igalia.com>

        Fix typo 'Detacted' -> 'Detected'
        https://bugs.webkit.org/show_bug.cgi?id=211715

        Unreviewed.

        * Scripts/run-jsc-stress-tests:

2020-05-10  Michael Catanzaro  <mcatanzaro@gnome.org>

        Update user agent quirk for bankofamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=211700

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST):

2020-05-08  Darin Adler  <darin@apple.com>

        Streamline MarkupAccumulator to improve efficiency a bit
        https://bugs.webkit.org/show_bug.cgi?id=211656

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST): Fix spellling error in the word "explicitly".

2020-05-08  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/211644>

        Reviewed by Darin Adler.

        * BuildSlaveSupport/gtk: Removed.
        * flatpak/files: Removed.
        * flatpak/patches: Removed.

2020-05-08  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WTF] Share Linux's MemoryPressureHandler among other Unix ports
        https://bugs.webkit.org/show_bug.cgi?id=208955

        Reviewed by Yusuke Suzuki.

        Fix unneeded library dependency.

        * TestWebKitAPI/CMakeLists.txt:

2020-05-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: 'iPhone SE' should match 'iPhone SE 1st generation'
        https://bugs.webkit.org/show_bug.cgi?id=211642
        <rdar://problems/62986242>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType):
        (DeviceType.standardized_hardware_type): Strip '1st generation' from models.
        (DeviceType.__eq__): Use standardized hardware type.
        (DeviceType.__contains__): Ditto.
        (DeviceType.__hash__): Ditto.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_generation_matching):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._get_device_identifier_for_type): Handle case where the requests model does not
        end with '(1st generation)', but the simctl model does.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:

2020-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        TestWebKitAPI.WebKit.AllowsContentJavaScript fails on iPad simulator
        https://bugs.webkit.org/show_bug.cgi?id=207874

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        Disable the test for iOS.

2020-05-08  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style false positive for [readability/naming/protected] with method declaration
        <https://webkit.org/b/210682>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        - Don't check for invalid protector name if the capitalized
          protected name is the same as the original protected name,
          indicating it's a type name.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):
        - Add test cases.

2020-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix build on platforms without network framework.
        https://bugs.webkit.org/show_bug.cgi?id=211603

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        Add HAVE(NETWORK_FRAMEWORK) around test that uses network framework.

2020-05-08  Aakash Jain  <aakash_jain@apple.com>

        Delete old ews client side code
        https://bugs.webkit.org/show_bug.cgi?id=211638

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/config/urls.py: Removed old ews server url.
        * Scripts/webkitpy/common/net/statusserver.py: Removed.
        * Scripts/webkitpy/common/net/statusserver_mock.py: Removed.
        * Scripts/webkitpy/tool/bot/botinfo.py:
        * Scripts/webkitpy/tool/bot/botinfo_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/perfalizer.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue._log_from_script_error_for_upload): Deleted.
        (AbstractQueue._update_status_for_script_error): Deleted.
        (AbstractPatchQueue._update_status): Deleted.
        (AbstractPatchQueue._release_work_item): Deleted.
        (AbstractPatchQueue._did_pass): Deleted.
        (AbstractPatchQueue._did_fail): Deleted.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (AbstractQueueTest._assert_run_webkit_patch):
        (AbstractQueueTest.test_no_iteration_count):
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch):
        (AbstractQueueTest._assert_log_message): Deleted.
        (AbstractQueueTest.test_log_from_script_error_for_upload): Deleted.
        (AbstractPatchQueueTest): Deleted.
        (NeedsUpdateSequence): Deleted.
        (NeedsUpdateSequence._run): Deleted.
        (StyleQueueTest): Deleted.
        (StyleQueueTest.test_style_queue_with_style_exception): Deleted.
        * Scripts/webkitpy/tool/commands/queuestest.py:
        (QueuesTest._default_begin_work_queue_logs):
        (QueuesTest._default_begin_work_queue_stderr): Deleted.
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        * Scripts/webkitpy/tool/main.py:
        * Scripts/webkitpy/tool/mocktool.py:

2020-05-08  Alex Christensen  <achristensen@webkit.org>

        Limit HTTP referer to 4kb
        https://bugs.webkit.org/show_bug.cgi?id=211603
        <rdar://problem/56768823>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):

2020-05-08  Dean Jackson  <dino@apple.com>

        Allow run-safari to launch an iPad simulator
        https://bugs.webkit.org/show_bug.cgi?id=211606
        <rdar://problem/63002849>

        Reviewed by Jon Lee.

        Add an "--ipad-simulator" command line option to run-safari.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineXcodeSDK): Mark the device idiom depending on the command line argument.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded):
        (findOrCreateSimulatorForIOSDevice): Create an iPad Pro simulator if requested.

2020-05-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Preserve character set information when writing to the pasteboard when copying rich text
        https://bugs.webkit.org/show_bug.cgi?id=211524

        Reviewed by Darin Adler.

        Add a new API test to verify that the HTML data written to the pasteboard when copying a rich text selection
        can be converted into an `NSAttributedString` that contains correctly encoded non-Latin characters.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:

2020-05-08  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r259209) Webview's pending URL is null after restoring session state
        https://bugs.webkit.org/show_bug.cgi?id=211626
        <rdar://problem/62992262>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):

2020-05-08  Alex Christensen  <achristensen@webkit.org>

        WKWebView.title should be safe browsing warning's title during a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=211403

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):

2020-05-08  Lauro Moura  <lmoura@igalia.com>

        [GTK][WPE] Create common glib expectation file
        https://bugs.webkit.org/show_bug.cgi?id=211183

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._search_paths): Add glib to expectations search path
        (GtkPort.test_expectations_file_position): Update test
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_default_baseline_search_path): Update test
        (GtkPortTest.test_port_specific_expectations_files): Update test and
        make check-webkit-style happier
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._search_paths): Add glib to expectations search path
        (WPEPort.test_expectations_file_position): Update test
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest.test_default_baseline_search_path): Update test
        (WPEPortTest.test_port_specific_expectations_files): Update test and
        make check-webkit-style happier

2020-05-08  Paulo Matos  <pmatos@igalia.com>

        Add myself as committer to contributors.json

        * Scripts/webkitpy/common/config/contributors.json:

2020-05-07  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Roll back newly created credentials if an error occurs
        https://bugs.webkit.org/show_bug.cgi?id=183530
        <rdar://problem/43357305>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la-no-attestation.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la.html:

2020-05-07  Saam Barati  <sbarati@apple.com>

        run-javascriptcore-tests with remote should be verbose
        https://bugs.webkit.org/show_bug.cgi?id=211596

        Reviewed by Alexey Proskuryakov.

        Our iOS testing bots could use this better output.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):

2020-05-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use apple_additions certificate path if available
        https://bugs.webkit.org/show_bug.cgi?id=211584

        Rubber-stamped by Aakash Jain

        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.certificate_chain): Certificate chain to be used, prefer apple_additions
        over certifi.
        (Upload.upload): Use Upload.certificate_chain().
        (Upload.upload_archive): Ditto.

2020-05-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260959.
        https://bugs.webkit.org/show_bug.cgi?id=211587

        "Causes MiniBrowser to crash when closing a window" (Requested
        by ddkilzer on #webkit).

        Reverted changeset:

        "REGRESSION (r176862, r210483): Leaks of
        BrowserWindowController in MiniBrowser/mac/AppDelegate.m"
        https://bugs.webkit.org/show_bug.cgi?id=211243
        https://trac.webkit.org/changeset/260959

2020-05-07  Darin Adler  <darin@apple.com>

        Remove USE(INSERTION_UNDO_GROUPING) checks in macOS platform code
        https://bugs.webkit.org/show_bug.cgi?id=211525

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/TextInputControllerMac.m: Use NSTextInputContextSPI.h.
        (-[TextInputController stringWithUndoGroupingInsertion:]): Removed
        SUPPORT_INSERTION_UNDO_GROUPING.
        * DumpRenderTree/mac/UIScriptControllerMac.mm: Use NSTextInputContextSPI.h.
        * TestRunnerShared/spi/AppKitTestSPI.h: Removed
        NSTextInputContext_Private.h, clients can use NSTextInputContextSPI.h.
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h: Ditto.
        * TestWebKitAPI/Tests/mac/CandidateTests.mm: Use NSTextInputContextSPI.h.
        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm: Ditto.

2020-05-07  Aakash Jain  <aakash_jain@apple.com>

        Delete code for old commit queue
        https://bugs.webkit.org/show_bug.cgi?id=211581

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/committervalidator.py: Removed.
        * Scripts/webkitpy/common/config/committervalidator_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/commitqueuetask.py: Removed.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue._upload_results_archive_for_patch):
        (CommitQueue): Deleted.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (NeedsUpdateSequence._run):
        (TestCommitQueue): Deleted.
        (AlwaysCommitQueueTool): Deleted.
        (SecondThoughtsCommitQueue): Deleted.
        (CommitQueueTest): Deleted.
        (test_did_pass_testing_ews): Deleted.
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:

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

        Unreviewed, reverting r261286.

        Tests are still crashing / failing

        Reverted changeset:

        "Unskip the test since it should now be passing"
        https://trac.webkit.org/changeset/261286

2020-05-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260769.
        https://bugs.webkit.org/show_bug.cgi?id=211578

        Introduced regressions related to sharing (Requested by
        perarne on #webkit).

        Reverted changeset:

        "[Cocoa] After r258891, r255119 can be reverted"
        https://bugs.webkit.org/show_bug.cgi?id=211083
        https://trac.webkit.org/changeset/260769

2020-05-07  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Fix string.format invocation

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-05-07  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Doesn't generate crash logs on the bots
        https://bugs.webkit.org/show_bug.cgi?id=211568

        Reviewed by Carlos Alberto Lopez Perez.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Bind-mount the
        WEBKIT_CORE_DUMPS_DIRECTORY so that the crash-log generator is
        able to write crash log reports there.

2020-05-07  Truitt Savell  <tsavell@apple.com>

        Unskip the test since it should now be passing

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:

2020-05-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] Test failures after Flatpak upgrade
        https://bugs.webkit.org/show_bug.cgi?id=211497

        Reviewed by Adrian Perez de Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Don't set WEBKIT_TOP_LEVEL. I'm
        not sure why it's needed at all. If it needs to be set it should
        be /app/webkit/ anyway. Setting it to /app triggers test failures
        due to invalid computed paths by internals' pathToLocalResource().

2020-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build with current GTK

        GtkWindow and GtkOverlay aren't a GtkContainer anymore.

        * MiniBrowser/gtk/BrowserTab.c:
        (browserTabConstructed):
        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init):

2020-05-07  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Import build definitions
        https://bugs.webkit.org/show_bug.cgi?id=211448

        Reviewed by Carlos Alberto Lopez Perez.

        To build the SDK, run `Tools/Scripts/webkit-flatpak-sdk --build`,
        this can take hours and use gigabytes of your hard-drive. To build
        a single recipe, use something like:

        `Tools/Scripts/bst-wrapper build sdk/gtk.bst`

        To enter the Buildstream SDK shell and debug stuff when hacking on
        a specific dependency, `Tools/Scripts/bst-wrapper shell sdk/gtk.bst`.

        To test your changes in WebKit:
        ```shell
        $ Tools/Scripts/webkit-flatpak -u --repo=Tools/buildstream/repo
        $ Tools/Scripts/run-minibrowser --gtk --flatpak-repo=Tools/buildstream/repo <url>
        ...
        ```

        bst-wrapper has the same options as bst itself, documented on
        https://docs.buildstream.build/1.4.2/index.html.

        Internally the bst-wrapper will install Buildstream and a few
        other python dependencies in a local virtualenv managed by pipenv.
        This is all abstracted though, in theory direct access to the
        pipenv environment shouldn't be needed.

        * Scripts/bst-wrapper: Added.
        * Scripts/webkit-flatpak-sdk: Added.
        * buildstream/Makefile: Added.
        * buildstream/Pipfile: Added.
        * buildstream/Pipfile.lock: Added.
        * buildstream/elements/filtered-openh264.bst: Added.
        * buildstream/elements/filtered.bst: Added.
        * buildstream/elements/flatpak-platform-extensions.bst: Added.
        * buildstream/elements/flatpak-runtimes.bst: Added.
        * buildstream/elements/flatpak/platform-arch-libs-debug.bst: Added.
        * buildstream/elements/flatpak/platform-arch-libs.bst: Added.
        * buildstream/elements/flatpak/platform-image.bst: Added.
        * buildstream/elements/flatpak/platform-locale.bst: Added.
        * buildstream/elements/flatpak/platform.bst: Added.
        * buildstream/elements/flatpak/sdk-arch-libs-debug.bst: Added.
        * buildstream/elements/flatpak/sdk-arch-libs.bst: Added.
        * buildstream/elements/flatpak/sdk-debug.bst: Added.
        * buildstream/elements/flatpak/sdk-docs.bst: Added.
        * buildstream/elements/flatpak/sdk-image.bst: Added.
        * buildstream/elements/flatpak/sdk-locale.bst: Added.
        * buildstream/elements/flatpak/sdk.bst: Added.
        * buildstream/elements/freedesktop-sdk.bst: Added.
        * buildstream/elements/manifests/platform-manifest.bst: Added.
        * buildstream/elements/manifests/sdk-manifest.bst: Added.
        * buildstream/elements/qt5.bst: Added.
        * buildstream/elements/qt5/qtbase.bst: Added.
        * buildstream/elements/qt5/qtdeclarative.bst: Added.
        * buildstream/elements/qt5/qtquickcontrols.bst: Added.
        * buildstream/elements/qt5/qtquickcontrols2.bst: Added.
        * buildstream/elements/qt5/qtwayland.bst: Added.
        * buildstream/elements/qt5/qtx11extras.bst: Added.
        * buildstream/elements/sdk-build-depends/libusb.bst: Added.
        * buildstream/elements/sdk-build-depends/sassc.bst: Added.
        * buildstream/elements/sdk-build-depends/utf8proc.bst: Added.
        * buildstream/elements/sdk-depends/libsass.bst: Added.
        * buildstream/elements/sdk-platform.bst: Added.
        * buildstream/elements/sdk.bst: Added.
        * buildstream/elements/sdk/adwaita-icon-theme.bst: Added.
        * buildstream/elements/sdk/at-spi2-atk.bst: Added.
        * buildstream/elements/sdk/at-spi2-core.bst: Added.
        * buildstream/elements/sdk/atk.bst: Added.
        * buildstream/elements/sdk/brotli.bst: Added.
        * buildstream/elements/sdk/capnp.bst: Added.
        * buildstream/elements/sdk/enchant-2.bst: Added.
        * buildstream/elements/sdk/glib-networking.bst: Added.
        * buildstream/elements/sdk/glib.bst: Added.
        * buildstream/elements/sdk/gobject-introspection.bst: Added.
        * buildstream/elements/sdk/graphene.bst: Added.
        * buildstream/elements/sdk/graphviz.bst: Added.
        * buildstream/elements/sdk/gst-libav.bst: Added.
        * buildstream/elements/sdk/gst-plugins-bad.bst: Added.
        * buildstream/elements/sdk/gst-plugins-base.bst: Added.
        * buildstream/elements/sdk/gst-plugins-good.bst: Added.
        * buildstream/elements/sdk/gst-plugins-ugly.bst: Added.
        * buildstream/elements/sdk/gstreamer.bst: Added.
        * buildstream/elements/sdk/gtk+-3.bst: Added.
        * buildstream/elements/sdk/gtk.bst: Added.
        * buildstream/elements/sdk/icecc.bst: Added.
        * buildstream/elements/sdk/intltool.bst: Added.
        * buildstream/elements/sdk/krb5.bst: Added.
        * buildstream/elements/sdk/libcap-ng.bst: Added.
        * buildstream/elements/sdk/libevent.bst: Added.
        * buildstream/elements/sdk/libgcrypt.bst: Added.
        * buildstream/elements/sdk/libmanette.bst: Added.
        * buildstream/elements/sdk/libnotify.bst: Added.
        * buildstream/elements/sdk/libopenh264.bst: Added.
        * buildstream/elements/sdk/libsecret.bst: Added.
        * buildstream/elements/sdk/libsoup.bst: Added.
        * buildstream/elements/sdk/libsrtp2.bst: Added.
        * buildstream/elements/sdk/libusrsctp.bst: Added.
        * buildstream/elements/sdk/libwpe.bst: Added.
        * buildstream/elements/sdk/libzstd.bst: Added.
        * buildstream/elements/sdk/lzo2.bst: Added.
        * buildstream/elements/sdk/openjpeg.bst: Added.
        * buildstream/elements/sdk/openxr.bst: Added.
        * buildstream/elements/sdk/os-release.bst: Added.
        * buildstream/elements/sdk/patchelf.bst: Added.
        * buildstream/elements/sdk/psmisc.bst: Added.
        * buildstream/elements/sdk/pycairo.bst: Added.
        * buildstream/elements/sdk/pygobject.bst: Added.
        * buildstream/elements/sdk/python2-pycairo.bst: Added.
        * buildstream/elements/sdk/python2-pygobject.bst: Added.
        * buildstream/elements/sdk/python2-six.bst: Added.
        * buildstream/elements/sdk/python2-subprocess32.bst: Added.
        * buildstream/elements/sdk/python2.bst: Added.
        * buildstream/elements/sdk/rr.bst: Added.
        * buildstream/elements/sdk/sccache.bst: Added.
        * buildstream/elements/sdk/shared-mime-info.bst: Added.
        * buildstream/elements/sdk/subversion.bst: Added.
        * buildstream/elements/sdk/v4lutils.bst: Added.
        * buildstream/elements/sdk/woff2.bst: Added.
        * buildstream/elements/sdk/wpebackend-fdo.bst: Added.
        * buildstream/elements/sdk/x264.bst: Added.
        * buildstream/elements/sdk/xorg-server.bst: Added.
        * buildstream/elements/test-infra.bst: Added.
        * buildstream/elements/test-infra/apr-util.bst: Added.
        * buildstream/elements/test-infra/apr.bst: Added.
        * buildstream/elements/test-infra/httpd.bst: Added.
        * buildstream/elements/test-infra/perl-cgi-pm.bst: Added.
        * buildstream/elements/test-infra/perl-http-date-pm.bst: Added.
        * buildstream/elements/test-infra/php.bst: Added.
        * buildstream/elements/test-infra/webkitgtk-test-dicts.bst: Added.
        * buildstream/elements/test-infra/webkitgtk-test-fonts.bst: Added.
        * buildstream/files/krb5/krb5.conf: Added.
        * buildstream/files/os-release/issue.in: Added.
        * buildstream/files/os-release/issue.net.in: Added.
        * buildstream/files/os-release/org.webkit.Platform.appdata.xml.in: Added.
        * buildstream/files/os-release/org.webkit.Sdk.appdata.xml.in: Added.
        * buildstream/files/os-release/os-release.in: Added.
        * buildstream/patches/fdo-0001-Update-gcc-to-9.3.0.patch: Added.
        * buildstream/patches/fdo/0001-Add-Jack.patch: Added.
        * buildstream/patches/fdo/0001-components-xdg-desktop-portal.bst-Update-to-1.6.0.patch: Added.
        * buildstream/patches/fdo/0001-ffmpeg-Add-MS-MPEG-DivX-variants.patch: Added.
        * buildstream/patches/fdo/0002-Update-PipeWire-to-0.3.1.patch: Added.
        * buildstream/patches/fdo/0002-ffmpeg-Add-VP6-and-Sorenson-Spark-video-codecs.patch: Added.
        * buildstream/patches/fdo/0003-Add-Bluez.patch: Added.
        * buildstream/patches/fdo/0003-ffmpeg-Add-Intel-Indeo-and-Cinepak-video-support.patch: Added.
        * buildstream/patches/fdo/0004-ffmpeg-Add-MPEG-2-video-decoder.patch: Added.
        * buildstream/patches/fdo/0005-ffmpeg-Add-msmpeg4v3-support.patch: Added.
        * buildstream/patches/gst-libav-stop-caching-codecs.patch: Added.
        * buildstream/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Added.
        * buildstream/patches/gst-plugins-base-0001-glupload-Fix-fallback-from-direct-dmabuf-to-dmabuf-u.patch: Added.
        * buildstream/patches/gst-plugins-base-0001-playbin-Handle-error-message-with-redirection-indica.patch: Added.
        * buildstream/patches/gst-plugins-base-0002-glupload-fix-segfault.patch: Added.
        * buildstream/patches/gst-plugins-good-qtdemux-Specify-REDIRECT-information-in-error-messag.patch: Added.
        * buildstream/patches/gtk-meson-Bump-to-latest-version-of-the-3.24-branch.patch: Added.
        * buildstream/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch: Added.
        * buildstream/patches/libav-0001-gstavviddec-Limit-default-number-of-decoder-threads.patch: Added.
        * buildstream/patches/libgcrypt-0001-Use-pkg-config-to-detect-gpg-error.patch: Added.
        * buildstream/patches/libgcrypt-use-only-dev-urandom-for-testing.patch: Added.
        * buildstream/patches/libsecret-b53e9876f4611525b7a8f69a3110fbec51dcede0.patch: Added.
        * buildstream/patches/nettle-no-debug.diff: Added.
        * buildstream/patches/qtbase-avoid-hardcoding-kernel-version.patch: Added.
        * buildstream/patches/qtbase-revert-correct-handling-for-xdg-runtime-dir.patch: Added.
        * buildstream/patches/qtbase-use-wayland-on-gnome.patch: Added.
        * buildstream/patches/qtdeclarative-use-python3.patch: Added.
        * buildstream/patches/qtwayland-use-gnome-platform-theme-on-gnome-based-desktops.patch: Added.
        * buildstream/patches/sccache-no-selenium.patch: Added.
        * buildstream/patches/xserver-search-for-DRI-drivers-at-LIBGL_DRIVERS_PATH-environ.patch: Added.
        * buildstream/project.conf: Added.
        * buildstream/utils/generate-version: Added.
        * gtk/install-dependencies:
        * wpe/install-dependencies:

2020-05-07  Mark Lam  <mark.lam@apple.com>

        Fix broken exceptionFuzz tests.
        https://bugs.webkit.org/show_bug.cgi?id=211550

        Reviewed by Yusuke Suzuki.

        Pass the --useExceptionFuzz=true option from the command line for runExceptionFuzz.

        * Scripts/run-jsc-stress-tests:

2020-05-06  Kate Cheney  <katherine_cheney@apple.com>

        ResourceLoadStatistics data summary call should create a web process pool if one doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=211520
        <rdar://problem/59869619>

        Reviewed by Chris Dumez.

        Added API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        Removed stray comment from previous test.

        (TEST):
        * TestWebKitAPI/basicITPDatabase.db: Added.
        * TestWebKitAPI/basicITPDatabase.db-shm: Added.
        * TestWebKitAPI/basicITPDatabase.db-wal: Added.
        New database resource with 2 entries: apple.com and webkit.org, with
        webkit.org registered as a subframe of apple.com

2020-05-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Cut and paste from Google Doc to Notes in several (non-Latin) languages doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=211498
        <rdar://problem/56675345>

        Reviewed by Darin Adler.

        Add a test to verify that when writing markup to the clipboard via DOM API, if non-ASCII characters appear in
        the written markup, they can still be converted to `NSAttributedString`s containing the expected non-Latin text.

        * TestWebKitAPI/Configurations/Base.xcconfig:

        Adjust header search paths so that we can import CocoaColor.h in WebKit.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        (readHTMLDataFromPasteboard):
        (readHTMLStringFromPasteboard):
        (readHTMLFromPasteboard): Deleted.

2020-05-06  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r260278): TestWebKitAPI.Fullscreen.Delegate is timing out on macOS bots
        https://bugs.webkit.org/show_bug.cgi?id=210676

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenAlert.mm:
        (TestWebKitAPI::TEST): Skip the test to get the bots to green.

2020-05-06  John Wilander  <wilander@apple.com>

        Exempt app-bound domains from ITP's website data deletion and third-party cookie blocking between themselves
        https://bugs.webkit.org/show_bug.cgi?id=210674
        <rdar://problem/61950767>

        Reviewed by Chris Dumez.

        This change adds a new TestRunner function
        setAppBoundDomain() which takes an array of origin
        strings and sets them to app-bound domains.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAppBoundDomains):
        (WTR::TestRunner::didSetAppBoundDomainsCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::AppBoundDomainsCallbackContext::AppBoundDomainsCallbackContext):
        (WTR::didSetAppBoundDomainsCallback):
        (WTR::TestController::setAppBoundDomains):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetAppBoundDomains):
        * WebKitTestRunner/TestInvocation.h:

2020-05-06  Aakash Jain  <aakash_jain@apple.com>

        Delete code for feeder queue
        https://bugs.webkit.org/show_bug.cgi?id=211518

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/bot/feeders.py: Removed.
        * Scripts/webkitpy/tool/bot/feeders_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queues.py:
        (FeederQueue): Deleted.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (TestFeederQueue): Deleted.
        (FeederQueueTest): Deleted.
        (PatchProcessingQueueTest): Deleted.

2020-05-06  Darin Adler  <darin@apple.com>

        Eliminate checks of USE(DICTATION_ALTERNATIVES) in Cocoa-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211460

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm: Remove USE(DICTATION_ALTERNATIVES).

2020-05-06  Pablo Saavedra  <psaavedra@igalia.com>

        Python3: Support Python3 in Tools/webkitpy/benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=211249

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder._fetch_remote_archive):
        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults._format_values):
        (BenchmarkResults._subtest_values_by_config_iteration):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (istext):
        (BenchmarkRunner._run_benchmark):
        (BenchmarkRunner._merge):
        (BenchmarkRunner.show_results):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
        (HTTPServerDriver):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver._wait_for_http_server):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (list_benchmark_plans):
        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker):

2020-05-06  Aakash Jain  <aakash_jain@apple.com>

        Delete code for QueueStatusServer
        https://bugs.webkit.org/show_bug.cgi?id=211504

        Reviewed by Jonathan Bedard.

        * QueueStatusServer: Removed.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Removed QueueStatusServer.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance): Removed QueueStatusServer.
        * Scripts/webkitpy/common/net/statusserver.py: Removed implementation of most methods. Will delete it completely
        in subsequent patch along-with all its callers.
        * Scripts/webkitpy/common/net/statusserver_unittest.py: Removed.
        * Scripts/webkitpy/test/main.py:

2020-05-05  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Implement Intl.Locale
        https://bugs.webkit.org/show_bug.cgi?id=209772

        Reviewed by Darin Adler and Saam Barati.

        * Scripts/run-jsc-stress-tests:
        Add runIntlLocaleEnabled.

2020-05-05  Saam Barati  <sbarati@apple.com>

        Don't use the DebugHeap for catalyst
        https://bugs.webkit.org/show_bug.cgi?id=211471

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (TEST):

2020-05-05  Daniel Bates  <dabates@apple.com>

        Should show selection highlight during text interaction
        https://bugs.webkit.org/show_bug.cgi?id=211362
        <rdar://problem/59191873>

        Reviewed by Wenson Hsieh.

        Add a test to ensure the selection view has rects after selecting
        text during a text interaction. These rects represents the highlight.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TestWebKitAPI::TEST):

2020-05-05  Aakash Jain  <aakash_jain@apple.com>

        webkitbot isn't responding properly in irc
        https://bugs.webkit.org/show_bug.cgi?id=211458

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.run_webkit_patch): Removed status-host paramter since old ews server has been decommissioned.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:

2020-05-05  Aakash Jain  <aakash_jain@apple.com>

        EWS should skip Apple Win build and tests for patches that only change WebKit2 sources
        https://bugs.webkit.org/show_bug.cgi?id=211210

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WindowsFactory.__init__): enabled relevance checking for windows ews.
        * BuildSlaveSupport/ews-build/factories_unittest.py: Updated unit-test.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Defined relevance info for windows ews. 
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCheckPatchRelevance.test_relevant_windows_wk1_patch): Added unit test.
        (TestCheckPatchRelevance.test_queues_without_relevance_info): Fixed unit-test.

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

        Allow Bitmap to use up to a UCPURegister word size for internal bit storage.
        https://bugs.webkit.org/show_bug.cgi?id=211328
        <rdar://problem/62755865>

        Reviewed by Yusuke Suzuki.

        Added API tests for WTF::Bitmap to make sure that Bitmap is behaving correctly.
        Since Bitmap is used in critical infrastructure like the GC, it is important to
        ensure that there are no latent bugs.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Bitmap.cpp: Added.
        (TestWebKitAPI::countBits):
        (TestWebKitAPI::testBitmapSize):
        (TestWebKitAPI::testBitmapConstructedEmpty):
        (TestWebKitAPI::testBitmapSetGet):
        (TestWebKitAPI::testBitmapTestAndSet):
        (TestWebKitAPI::testBitmapTestAndClear):
        (TestWebKitAPI::testBitmapConcurrentTestAndSet):
        (TestWebKitAPI::testBitmapConcurrentTestAndClear):
        (TestWebKitAPI::testBitmapClear):
        (TestWebKitAPI::testBitmapClearAll):
        (TestWebKitAPI::testBitmapInvert):
        (TestWebKitAPI::testBitmapFindRunOfZeros):
        (TestWebKitAPI::testBitmapCount):
        (TestWebKitAPI::testBitmapIsEmpty):
        (TestWebKitAPI::testBitmapIsFull):
        (TestWebKitAPI::testBitmapMerge):
        (TestWebKitAPI::testBitmapFilter):
        (TestWebKitAPI::testBitmapExclude):
        (TestWebKitAPI::testBitmapConcurrentFilter):
        (TestWebKitAPI::testBitmapSubsumes):
        (TestWebKitAPI::testBitmapForEachSetBit):
        (TestWebKitAPI::testBitmapFindBit):
        (TestWebKitAPI::testBitmapIteration):
        (TestWebKitAPI::testBitmapMergeAndClear):
        (TestWebKitAPI::testBitmapSetAndClear):
        (TestWebKitAPI::testBitmapOperatorEqual):
        (TestWebKitAPI::testBitmapOperatorNotEqual):
        (TestWebKitAPI::testBitmapHash):
        (TestWebKitAPI::TEST):

2020-05-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        Object.prototype.toString is not spec-perfect
        https://bugs.webkit.org/show_bug.cgi?id=199138

        Reviewed by Darin Adler and Keith Miller.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:

2020-05-05  Tim Horton  <timothy_horton@apple.com>

        Excessive error logging from daemons trying to use WebKit, under -[UIDevice currentDevice]
        https://bugs.webkit.org/show_bug.cgi?id=211397
        <rdar://problem/61635403>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/ios/UserInterfaceSwizzler.h:
        We need a UIApplication or WebKit won't look at UIDevice.

2020-05-04  Darin Adler  <darin@apple.com>

        [Mac] Remove __MAC_OS_X_VERSION_MIN_REQUIRED checks for versions older than 10.14
        https://bugs.webkit.org/show_bug.cgi?id=211420

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/CtapPinTest.cpp: Remove
        __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        Removed code disabling this test for __MAC_OS_X_VERSION_MIN_REQUIRED < 101400.

        * TestWebKitAPI/config.h: Removed __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::installFakeHelvetica): Removed __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(NETWORK_EXTENSION)
        https://bugs.webkit.org/show_bug.cgi?id=211424

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):
        Remove check of HAVE(NETWORK_EXTENSION).
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFilteringPlugIn.mm:
        (-[ContentFilteringPlugIn checkIfPlatformFrameworksAreLoaded:]): Ditto.

2020-05-04  Ben Nham  <nham@apple.com>

        IndexedDB WAL file keeps growing while app is in use
        https://bugs.webkit.org/show_bug.cgi?id=202137

        Reviewed by Brady Eidson.

        Add a test to make sure that WAL auto-checkpointing actually works.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm: Added.
        (-[IDBCheckpointWALMessageHandler userContentController:didReceiveScriptMessage:]):
        (fileSizeAtPath):
        (TEST):

2020-05-04  Darin Adler  <darin@apple.com>

        Make __IPHONE_OS_VERSION_MIN_REQUIRED checks against old versions explicit about watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=211402

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        Remove unneeded __IPHONE_OS_VERSION_MIN_REQUIRED check.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        Move from __IPHONE_OS_VERSION_MIN_REQUIRED to
        !PLATFORM(WATCHOS) && !PLATFORM(APPLETV).

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        Move from __IPHONE_OS_VERSION_MIN_REQUIRED to
        PLATFORM(IOS).

        * TestWebKitAPI/Tests/ios/OverflowScrollViewTests.mm:
        Move from __IPHONE_OS_VERSION_MIN_REQUIRED to
        !PLATFORM(WATCHOS) && !PLATFORM(APPLETV).
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView setOverrideSafeAreaInsets:]): Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove a few unneeded __IPHONE_OS_VERSION_MIN_REQUIRED checks
        https://bugs.webkit.org/show_bug.cgi?id=211383

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): Removed checks against iOS 12 and 13 in code that
        uses PLATFORM(IOS), not PLATFORM(IOS_FAMILY).

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Removed a
        check against iOS 11 in code using PLATFORM(IOS).

2020-05-04  Darin Adler  <darin@apple.com>

        Remove HAVE(IOSURFACE) checks in Cocoa-platform-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211389

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView): Remove BEGIN/END_BLOCK_OBJC_EXCEPTIONS
        since they are not needed/appropriate in test code. Remove HAVE(IOSURFACE)
        since this is Cocoa-specific.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.

2020-05-04  Alexey Proskuryakov  <ap@apple.com>

        block-spammers tool should hide attachments
        https://bugs.webkit.org/show_bug.cgi?id=211406

        Reviewed by Darin Adler.

        The logic is nearly identical to hiding comments. Just need to limit fields in the
        search, so that we don't have to download attachment data.

        * Scripts/block-spammers:
        (get_comments):
        (get_bugs_with_attachments_created_by_user):
        (get_attachments):
        (hide_comments):
        (hide_attachments):
        (main):

2020-05-04  Darin Adler  <darin@apple.com>

        Remove unneeded USE(MEDIAREMOTE)
        https://bugs.webkit.org/show_bug.cgi?id=211385

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm: Reverse conditional so it's
        consistently listing which platforms we do *not* compile the test on.

2020-05-04  Alex Christensen  <achristensen@webkit.org>

        [Catalina] ASSERTION FAILED: Unsafe to ref/deref from different threads seen with TestWebKitAPI.MultipleClientCertificateConnections.Failure
        https://bugs.webkit.org/show_bug.cgi?id=211300

        Reviewed by Youenn Fablet.

        RequestData references are stored in blocks given to the network framework, which does things on background threads.
        To make them safe to ref and deref on non-main threads, make RequestData ThreadSafeRefCounted.

        * TestWebKitAPI/cocoa/HTTPServer.mm:

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(MEDIA_PLAYER)
        https://bugs.webkit.org/show_bug.cgi?id=211378

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): Removed HAVE(MEDIA_PLAYER) check since it's now always
        true in Objective-C source files.

2020-05-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Should install python3-secretstorage
        https://bugs.webkit.org/show_bug.cgi?id=207473

        Reviewed by Adrian Perez de Castro.

        If python3-secretstorage is not installed, webkit-patch will use a custom encrypted file
        for password storage instead of utilizing the system keyring. This means unnecessary
        password prompts to unlock the custom encrypted key storage.

        There is no benefit to using custom key storage over the system keyring.

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2020-05-04  Andres Gonzalez  <andresg_22@apple.com>

        Add WTR::AccessibilityUIElement::attributeValueAsync to retrieve attribute values in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211341

        Reviewed by Chris Fleizach.

        To simulate running WebAccessibilityObjectWrapper methods on the secondary
        thread, WTR::AccessibilityUIElement dispatches those calls to the AX
        thread. But some WebAccessibilityObjectWrapper calls cannot be fulfilled
        on the secondary thread and in turn have to be dispatched to the main
        thread. This was causing a thread lock during LayoutTests in isolated
        tree mode since the initial dispatch to the secondary thread blocks the
        main thread. The solution in this patch is to add an asynchronous
        mechanism to retrieve attribute values.
        - Added WTR::AccessibilityUIElement::attributeValueAsync.
        - Made several fixes consisting of retaining variables in the main
        thread whose values are computed on the secondary thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::executeOnAXThreadAndWait):
        (WTR::AccessibilityController::executeOnAXThread):
        (WTR::AccessibilityController::executeOnMainThread):
        (WTR::AXThread::dispatchBarrier):
        (WTR::AccessibilityController::executeOnAXThreadIfPossible): Renamed executeOnAXThreadAndWait.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (WTR::webAccessibilityObjectWrapperClass):
        (WTR::makeArrayRefForArray):
        (WTR::makeObjectRefForDictionary):
        (WTR::makeValueRefForValue):
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler startObserving]):
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        (webAccessibilityObjectWrapperClass): Moved to AccessibilityCommonMac.
        (makeValueRefForValue): Moved to AccessibilityCommonMac.
        (makeArrayRefForArray): Moved to AccessibilityCommonMac.
        (makeObjectRefForDictionary): Moved to AccessibilityCommonMac.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::supportedAttributes):
        (WTR::attributeValue):
        (WTR::setAttributeValue):
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::attributeValueAsync):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2020-05-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r261076.
        https://bugs.webkit.org/show_bug.cgi?id=211371

        Triggers obscure X11 error on GTK bots (Requested by philn on
        #webkit).

        Reverted changeset:

        "[Flatpak SDK] Query the doc portal path with DBus"
        https://bugs.webkit.org/show_bug.cgi?id=211281
        https://trac.webkit.org/changeset/261076

2020-05-04  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Support for local repository and drive-by fixes
        https://bugs.webkit.org/show_bug.cgi?id=211370

        Reviewed by Žan Doberšek.

        This patch adds a new --repo option to webkit-flatpak, allowing
        SDK developers to test local changes made to the SDK. As future
        versions of the SDK will depend on the ffmpeg FDO extension,
        flatpakutils installs it from now on. One consequence is that the
        LD_LIBRARY_PATH set in the GTK layout test driver is no longer
        overriden when running in the flatpak SDK, in order to allow the
        extension to set it correctly.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * flatpak/flatpakutils.py:
        (FlatpakRepos.add):
        (FlatpakRepo.repo_file):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak._reset_repository):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak._get_packages):
        (run_in_sandbox_if_available):

2020-05-04  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Query the doc portal path with DBus
        https://bugs.webkit.org/show_bug.cgi?id=211281

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-05-04  Emilio Cobos Álvarez  <emilio@crisal.io>

        Put lh / rlh units behind a flag until bug 211351 is sorted out.
        https://bugs.webkit.org/show_bug.cgi?id=211356

        Reviewed by Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2020-05-04  Patrick Griffis  <pgriffis@igalia.com>

        [Flatpak SDK] Misc flatpakutils.py fixes
        https://bugs.webkit.org/show_bug.cgi?id=211032

        Reviewed by Philippe Normand.

        Pass SSLKEYLOGFILE into sandbox which is useful for debugging with Wireshark.

        Sanitize G_MESSAGES_DEBUG env var when checking output of flatpak command.

        Fix check for --noninteractive support.

        Fix python 3 exception when setting up icecc mixing strings and bytes.

        * flatpak/flatpakutils.py:
        (Console.warning_message):
        (flatpak_check_output):
        (check_flatpak):
        (FlatpakObject.flatpak):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-05-03  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after r261068
        (https://bugs.webkit.org/show_bug.cgi?id=208281)

        Wrap TEST()s in namespace TestWebKitAPI so as to not need to qualify IPhoneUserInterfaceSwizzler.

        * TestWebKitAPI/Tests/ios/UIWKInteractionViewProtocol.mm:
        (TEST): Deleted.

2020-05-03  Daniel Bates  <dabates@apple.com>

        [iPad Simulator] TestWebKitAPI.UIWKInteractionViewProtocol.SelectPositionAtPointAfterBecomingFirstResponder is failing
        https://bugs.webkit.org/show_bug.cgi?id=208281
        <rdar://problem/59829265>

        Reviewed by Wenson Hsieh.

        I tried to write the test SelectPositionAtPointAfterBecomingFirstResponder for both iPad and iPhone,
        but it turns out that I forgot an impl detail on how form control dismissal works for iPad and fixing
        this would require adding more SPI/IPI. This is largely due to differences in form control UI and
        conventions for dismissing such UI. This test isn't testing such UI it just needs to ensure that the
        view is not first responder before it runs the actual test code. It uses an iPhone specific set of
        steps to do this. It's enough to test this functionality on iPhone.

        * TestWebKitAPI/Tests/ios/UIWKInteractionViewProtocol.mm:
        (TEST):

2020-05-03  Daniel Bates  <dabates@apple.com>

        Update info.

        * Scripts/webkitpy/common/config/contributors.json:

2020-05-02  ChangSeok Oh  <changseok@webkit.org>

        Unreviewed, add myself to some watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2020-05-02  Daniel Bates  <dabates@apple.com>

        Page::editableElementsInRect() should return root editable elements
        https://bugs.webkit.org/show_bug.cgi?id=211343
        <rdar://problem/60015801>

        Reviewed by Simon Fraser.

        Add some tests.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TestWebKitAPI::TEST):

2020-05-02  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Gardening, update API test expectations
        https://bugs.webkit.org/show_bug.cgi?id=211337

        Unreviewed gardening.

        Some tests became flaky under Flatpak.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        Books sometimes ends up with blank pages, especially after adjusting font size
        https://bugs.webkit.org/show_bug.cgi?id=211265
        <rdar://problem/59898144>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ViewExposedRect.mm: Added.
        (forceRepaintCallback):
        (TEST):
        Add a test for the first problem, which would previously attempt to allocate
        ~90TB of tiles, spinning and exploding, and now happily just allocates a few.

2020-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should observe the value attribute of some input elements
        https://bugs.webkit.org/show_bug.cgi?id=211307
        <rdar://problem/61568528>

        Reviewed by Darin Adler.

        Add a new API test that covers `<input type="submit">` and `<input type="button">`.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-05-01  Alex Christensen  <achristensen@webkit.org>

        Add SPI to move localStorage to a different domain
        https://bugs.webkit.org/show_bug.cgi?id=209260
        <rdar://problem/60285683>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2020-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a test for webkit.org/b/211311
        https://bugs.webkit.org/show_bug.cgi?id=211319
        <rdar://problem/62663459>

        Reviewed by Tim Horton.

        Exercise the crash fixed in r261017 with a new API test that loads a page and then uses
        `-[WebHTMLView attributedSubstringFromRange:]` to try and grab the contents of the page as an attributed string.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::AttributedStringTest_NewlineAtEndOfDocument::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_NewlineAtEndOfDocument::url const):
        (TestWebKitAPI::AttributedStringTest_NewlineAtEndOfDocument::runSyncTest):
        * TestWebKitAPI/Tests/mac/attributedStringNewlineAtEndOfDocument.html: Added.

2020-05-01  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Every running WebContent process should be granted access to frontboard services when Accessibility is enabled
        https://bugs.webkit.org/show_bug.cgi?id=211238

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
        (TEST):

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        [GTK] Add additional exports to support hidden visibility
        https://bugs.webkit.org/show_bug.cgi?id=211246

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (webkit_web_extension_initialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        Use export macros on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=211293

        Reviewed by Michael Catanzaro.

        Remove uses of USE_EXPORT_MACROS from the DumpRenderTree xcode project. This
        is the only xcode project that had any references to this value.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:

2020-05-01  Peng Liu  <peng.liu6@apple.com>

        A PiP window doesn’t actually dismiss after the browser navigates to a different page within the same domain
        https://bugs.webkit.org/show_bug.cgi?id=211257

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/AGXCompilerService.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ExitPiPOnSuspendVideoElement.mm: Added.
        (-[ExitPiPOnSuspendVideoElementUIDelegate _webView:hasVideoInPictureInPictureDidChange:]):
        (TestWebKitAPI::TEST):

2020-05-01  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Dropped connections when uploading archives shouldn't be fatal
        https://bugs.webkit.org/show_bug.cgi?id=211248

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/results/upload.py:
        (Upload.upload_archive): Dropping a connection when uploading archives shouldn't
        be a fatal error.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_archive_upload):

2020-05-01  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Honor XDG_RUNTIME_DIR when setting the document path
        https://bugs.webkit.org/show_bug.cgi?id=211277

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Prefer using the value of
        $XDG_RUNTIME_DIR instead of the hardcoded path when setting the
        document portal path mount.

2020-05-01  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] File GtkVersioning.h should be excluded from the style checker
        https://bugs.webkit.org/show_bug.cgi?id=211262

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/style/checker.py: Exclude Source/WebCore/platform/gtk/GtkVersioning.h
        from style checks.

2020-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Require user gestures for LocalAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=182893
        <rdar://problem/43357293>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-la-no-mock.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la-no-mock.html: Added.

2020-04-30  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.WebKit.DefaultDisplayName and TestWebKitAPI.WebKit.CustomDisplayName are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=209993
        <rdar://problem/61282602>

        Reviewed by Chris Dumez.

        The display name for the web process is set on a low-priority background queue in WebProcess::updateProcessName()
        so sometimes in our test it hasn't executed yet.  If it hasn't executed yet, it will soon, so try until it succeeds.

        * TestWebKitAPI/Tests/WebKitCocoa/DisplayName.mm:
        (TestWebKitAPI::checkUntilDisplayNameIs):
        (TestWebKitAPI::TEST):

2020-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Optimize LocalAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=183534
        <rdar://problem/43357408>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponse:source:completionHandler:]):
        (TestWebKitAPI::TEST):
        Adds a new test case for the LRU.

2020-04-30  Kate Cheney  <katherine_cheney@apple.com>

        Change default of "inAppBrowserPrivacyQuirks" testing toggle to use it for tests only
        https://bugs.webkit.org/show_bug.cgi?id=211209
        <rdar://problem/62619659>

        Reviewed by Brent Fulgham.

        Manually enable inAppBrowserPrivacyQuirks for certain tests which
        need script evaluation to test other aspects of In-App Browser Privacy.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):

2020-04-30  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Sort out certificates on Catalina
        https://bugs.webkit.org/show_bug.cgi?id=202837
        <rdar://problem/56177210>

        Reviewed by Alex Christensen.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Do not allow insecure requests.
        * Scripts/webkitpy/results/upload.py:
        (Upload.upload): Verify ssl certificates.
        (Upload.upload_archive): Ditto.

2020-04-30  Alex Christensen  <achristensen@webkit.org>

        Add SPI to change a WKWebView's CORS disabling pattern after initialization
        https://bugs.webkit.org/show_bug.cgi?id=211211
        <rdar://problem/61837474>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-04-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: [ iOS ] http/tests/resourceLoadStatistics/standalone-web-application-exempt-from-website-data-deletion tests are flaky crashing, failing an timing out.
        https://bugs.webkit.org/show_bug.cgi?id=211190

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::configureWebsiteDataStoreTemporaryDirectories):
        In tests that swap out the WebsiteDataStore, don't use the same paths as the other WebsiteDataStore.

2020-04-30  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r176862, r210483): Leaks of BrowserWindowController in MiniBrowser/mac/AppDelegate.m
        <https://webkit.org/b/211243>

        Reviewed by Tim Horton.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate createBrowserWindowController:]):
        - Autorelease return value to fix leak.
        (-[BrowserAppDelegate newPrivateWindow:]):
        - Release controller to fix leak.

2020-04-30  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r247490): Leak of MiniBrowserNSTextFinder._hideInterfaceCallback
        <https://webkit.org/b/211242>

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[MiniBrowserNSTextFinder dealloc]): Add.
        - Release _hideInterfaceCallback to fix the leak.

2020-04-30  Daniel Bates  <dabates@apple.com>

        [iOS] Implement -markedTextRange
        https://bugs.webkit.org/show_bug.cgi?id=211148
        <rdar://problem/57865890>

        Reviewed by Wenson Hsieh.

        Add some tests.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::applyAhemStyle): Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView synchronouslyLoadHTMLStringAndWaitUntilAllImmediateChildFramesPaint:]): Added.

2020-04-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Add navigation and reload buttons to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=211231

        Reviewed by Adrian Perez de Castro.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUpdateNavigationMenu):
        (webViewIsLoadingChanged):
        (browserWindowSetupToolbarItem):
        (browser_window_init):

2020-04-30  Philippe Normand  <pnormand@igalia.com>

        [SOUP] http/tests/media/video-accept-encoding.html fails
        https://bugs.webkit.org/show_bug.cgi?id=211228

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):

2020-04-30  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crashes in accessibility/accessibility-node-memory-management.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211215

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::executeOnAXThreadIfPossible):
        Removed the call CFRunLoopRunInMode and instead we'll use setTimeout in
        each of the tests that require to complete a spin of the main run loop.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::accessibleElementById):
        Need to retain ObjectiveC object when it is retrieved from the secondary thread.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::getChildrenWithRange): Dito as above.

2020-04-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Bring back the URI entry to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=211186

        Reviewed by Carlos Garcia Campos.

        GTK4 support for the URI entry added, using a GtkCenterBox
        to start layouting a modern version of the toolbar.

        * MiniBrowser/gtk/BrowserWindow.c:
        (activateUriEntryCallback):
        (webViewURIChanged):
        (updateUriEntryIcon):
        (faviconChanged):
        (insertLinkCommandCallback):
        (browser_window_init):

2020-04-29  Simon Fraser  <simon.fraser@apple.com>

        Add a MiniBrowser option to inset the web view so it doesn't fill the window
        https://bugs.webkit.org/show_bug.cgi?id=211216

        Reviewed by Tim Horton.

        Add a menu item, Debug > Inset Web View to MiniBrowser which insets the view from
        the edges of the window, making it possible to debug coordinate conversion issues.

        The state is stored in Settings, but unlike other Settings this one doesn't
        get populated into the Settings menu because it makes more logical sense grouped
        with the options to Hide and Remove the web view.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController toggleFullWindowWebView:]):
        (-[BrowserWindowController webViewFillsWindow]):
        (-[BrowserWindowController setWebViewFillsWindow:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController initWithMenu:]):
        (-[SettingsController webViewFillsWindow]):
        (-[SettingsController setWebViewFillsWindow:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController didChangeSettings]):

2020-04-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r260791) Network process fails to suspend promptly
        https://bugs.webkit.org/show_bug.cgi?id=211207
        <rdar://problem/62620454>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):

2020-04-29  Kate Cheney  <katherine_cheney@apple.com>

        Add better handling of an uncleared bundle identifier in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=211195
        <rdar://problem/62117145>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2020-04-29  Saam Barati  <sbarati@apple.com>

        build-jsc should quote the value of compile flags it forwards
        https://bugs.webkit.org/show_bug.cgi?id=211204

        Reviewed by Mark Lam.

        We should quote outgoing compile flags that have an equal in them. Before,
        if build-jsc were invoked like:
        $ build-jsc --release ARCHS="x86_64 i386"
        It'd invoke make like:
        $ make release ARCHS=x86_64 i386
        leading us to try to build the "i386" target, which doesn't exist.
        
        This patch makes us invoke make like so:
        $ make release ARCHS="x86_64 i386"

        * Scripts/build-jsc:
        (buildMyProject):

2020-04-29  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegate API shouldAllowDeprecatedTLS
        https://bugs.webkit.org/show_bug.cgi?id=210981
        <rdar://problem/61742976>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSNavigationDelegate receivedShouldAllowDeprecatedTLS]):
        (-[TLSNavigationDelegate webView:authenticationChallenge:shouldAllowDeprecatedTLS:]):
        (TestWebKitAPI::TEST):
        (-[TLSNavigationDelegate receivedShouldAllowLegacyTLS]): Deleted.
        (-[TLSNavigationDelegate _webView:authenticationChallenge:shouldAllowLegacyTLS:]): Deleted.
        * TestWebKitAPI/config.h:

2020-04-29  Kate Cheney  <katherine_cheney@apple.com>

        Refactor layout tests after updates to In-App Browser Privacy
        https://bugs.webkit.org/show_bug.cgi?id=211146
        <rdar://problem/62524127>

        Reviewed by Brent Fulgham.

        Removes two unused functions after updating the test cases.
        setInAppBrowserPrivacyEnabled is no longer needed, setting this
        in TestOptions is enough. getWebViewCategory is not needed because
        this patch deletes the only test which uses it.

        Adds a function to clear app-bound sessions between tests now that
        multiple tests check for them.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::getWebViewCategory): Deleted.
        (WTR::TestRunner::callDidReceiveWebViewCategoryCallback): Deleted.
        (WTR::TestRunner::setInAppBrowserPrivacyEnabled): Deleted.
        (WTR::TestRunner::callDidSetInAppBrowserPrivacyEnabledCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        Move the call to clear the bundle id to happen in
        resetStateToConsistentValues to make sure the next test can set the
        value if needed (otherwise results in a call to exit(1)).

        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::clearAppBoundSession):
        (WTR::TestController::getWebViewCategory): Deleted.
        (WTR::TestController::setInAppBrowserPrivacyEnabled): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetInAppBrowserPrivacyEnabled): Deleted.
        (WTR::TestInvocation::didReceiveWebViewCategory): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        App-bound WebViews now require a special configuration argument. This
        patch adds logic to enable that using a new TestOption.
        (WTR::TestController::getWebViewCategory): Deleted.

2020-04-29  Aakash Jain  <aakash_jain@apple.com>

        [ews] Display flaky test names in build summary when ReRunJavaScriptCoreTests passes
        https://bugs.webkit.org/show_bug.cgi?id=210855

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunJavaScriptCoreTests.evaluateCommand): Display flaky test names in build summary.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests and removed extra TestReRunJavaScriptCoreTests class.

2020-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build after r260891

        * MiniBrowser/gtk/BrowserWindow.c:

2020-04-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Remove deprecated GTK API calls from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=211171

        Reviewed by Carlos Garcia Campos.

        In preparation to porting MiniBrowser to GTK4, remove
        all deprecated API calls. Also get rid of the --geometry
        command-line argument and make it a no-op.

        * MiniBrowser/gtk/BrowserDownloadsBar.c:
        (browser_downloads_bar_init):
        (browser_downloads_bar_new):
        (actionButtonClicked):
        (browser_download_init):
        (downloadFinished):
        * MiniBrowser/gtk/BrowserSearchBar.c:
        (doSearch):
        (searchEntryMenuIconPressedCallback):
        (browser_search_bar_init):
        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browser_settings_dialog_init):
        * MiniBrowser/gtk/BrowserTab.c:
        (createInfoBarQuestionMessage):
        (browserTabConstructed):
        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowHistoryItemSelected):
        (browserWindowHistoryItemActivated):
        (browserWindowCreateBackForwardMenu):
        (browserWindowUpdateNavigationMenu):
        (backForwardlistChanged):
        (updateUriEntryIcon):
        (webViewIsLoadingChanged):
        (browserWindowSetupEditorToolbarItem):
        (browserWindowSetupEditorToolbar):
        (browserWindowSwitchTab):
        (browserWindowSetupToolbarItem):
        (browser_window_init):
        (browserWindowUpdateNavigationActions): Deleted.
        * MiniBrowser/gtk/main.c:
        (main):

2020-04-29  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Misplaced right click menu on web page due to deprecated gtk_menu_popup()
        https://bugs.webkit.org/show_bug.cgi?id=170553

        Minor adaptations needed in the API tests to account for the differences between
        GtkMenuShell and GtkPopoverMenu.

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (lookupWidgetsWalkChild): Added.
        (lookupWidgets): Added.

2020-04-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Upgrade motionmark1.1.plan to r260656
        https://bugs.webkit.org/show_bug.cgi?id=211143

        Reviewed by Darin Adler.

        r260656 includes a fix for the Multiply test.

        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark1.1.plan:

2020-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text manipulation] Add a userInfo dictionary to _WKTextManipulationToken
        https://bugs.webkit.org/show_bug.cgi?id=211151
        <rdar://problem/62329534>

        Reviewed by Darin Adler.

        Add a new API test to check the userInfo dictionary on text manipulation tokens.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-04-28  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should suggest CheckedSize for Checked<size_t, RecordOverflow>
        <https://webkit.org/b/211158>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_checked_size): Add checker.
        (check_style): Call check_wtf_checked_size() to check.
        (CppChecker): Add 'runtime/wtf_checked_size'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_checked_size): Add tests.

2020-04-28  Lauro Moura  <lmoura@igalia.com>

        [GTK] update-webkitgtk-libs: TypeError: cannot use a string pattern on a bytes-like object
        https://bugs.webkit.org/show_bug.cgi?id=211144

        Reviewed by Michael Catanzaro.

        Unconditionally decode the output from the 'id' command to make it
        work with python3.

        Also check if the doc directory exists before passing it to bwrap.
        Should avoid errors like these:

        bwrap: Can't find source path /run/user/1000/doc: No such file or directory

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-04-28  Kate Cheney  <katherine_cheney@apple.com>

        Create a mechanism to add missing ITP Database tables when the schema is updated
        https://bugs.webkit.org/show_bug.cgi?id=211004
        <rdar://problem/62261187>

        Reviewed by John Wilander.

        Add test case which copies a database schema with a missing table into
        the ITP database file, then ensures the pre-seeded data is
        migrated over and that the schema now has all tables (including the
        previously missing one).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/missingTopFrameUniqueRedirectSameSiteStrictTableSchema.db: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/missingTopFrameUniqueRedirectSameSiteStrictTableSchema.db-shm: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/missingTopFrameUniqueRedirectSameSiteStrictTableSchema.db-wal: Added.

2020-04-28  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Global preferences are not accessible in the WebContent process when CFPrefs direct mode is enabled
        https://bugs.webkit.org/show_bug.cgi?id=211075

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        (TEST):

2020-04-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: A suite running multiple times in a commit for a single configuration may overwrite upload metadata
        https://bugs.webkit.org/show_bug.cgi?id=211097
        <rdar://problem/62474538>

        Rubber-stamped by Aakash Jain.

        Create a new table for uploads which is indexed by both uuid and timestamp so that uploads which share
        a configuration and uuid but not a timestamp do not collide.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext):
        (UploadContext.UploadsByConfigurationLegacy): Renamed from UploadContext.UploadsByConfiguration.
        (UploadContext.UploadsByConfiguration): New database table indexed by both timestamp and uuid.
        (UploadContext.UploadsByConfiguration.unpack):
        (UploadContext.__init__):
        (UploadContext.find_test_results): Search both versions of the UploadsByConfiguration table.

2020-04-28  Claudio Saavedra  <csaavedra@igalia.com>

        [Linux] Replace --geometry with --fullscreen when using MiniBrowser for WebDriver tests
        https://bugs.webkit.org/show_bug.cgi?id=211123

        Reviewed by Carlos Alberto Lopez Perez.

        MiniBrowser's --geometry is on its way out, so use --fullscreen
        instead as it does the job.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowsergtk_driver.py:
        (GTKMiniBrowserDriver.launch_url):

2020-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for motion events
        https://bugs.webkit.org/show_bug.cgi?id=211073

        Reviewed by Adrian Perez de Castro.

        Use the GtkOverlay in GTK4 too so that status label is shown when hovering elements.

        * MiniBrowser/gtk/BrowserTab.c:
        (browserTabConstructed):

2020-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4][Wayland] Add support for rendering web view contents
        https://bugs.webkit.org/show_bug.cgi?id=211021

        Reviewed by Adrian Perez de Castro.

        Set vertical expand of web view to TRUE.

        * MiniBrowser/gtk/BrowserTab.c:
        (browserTabConstructed):

2020-04-27  Philippe Normand  <pnormand@igalia.com>

        [GTK][WebInspector] platformSave broken when running within the Flatpak runtime
        https://bugs.webkit.org/show_bug.cgi?id=209473

        Reviewed by Adrian Perez de Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): White-list the user document
        folder into the sandbox. This seems needed by the file-chooser
        popup, somehow.

2020-04-27  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: A suite running multiple times in a commit for a single configuration may pre-empt processing
        https://bugs.webkit.org/show_bug.cgi?id=211094
        <rdar://problem/62470170>

        Reviewed by Aakash Jain.

        Hash collision in processing key when results only differ by upload time.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.process_test_results): Include upload timestamp in the hashed key.

2020-04-27  Zhifei Fang  <zhifei_fang@apple.com>

        Add some debug output for run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=210999
        <rdar://problem/61353156>

        This will help to address where the script get stucked

        Reviewed by Jonathan Bedard.

        * Scripts/run-jsc-stress-tests:

2020-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should not aggregate text from different navigation anchor elements
        https://bugs.webkit.org/show_bug.cgi?id=211081
        <rdar://problem/59553658>

        Reviewed by Megan Gardner.

        Add a new API test, and augment an existing test.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-04-27  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.og: Add investigation endpoint
        https://bugs.webkit.org/show_bug.cgi?id=209562

        Rubber-stamped by Aakash Jain.

        Add an endpoint that allows users to list all test failures given some criteria, and
        provide a partial list of failures in the investigation drawer.

        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (CommitTable): Link commit to investigation endpoint.
        (_CommitBank.prototype.latest): Populate the CommitBank with the last x commits.
        (_CommitBank.prototype.commitsDuringUuid): Renamed commitsDuring.
        (_CommitBank.prototype. commitsDuring): Accept a range Uuids instead of a single Uuid.
        (_CommitBank.prototype._load): Load a single commit if the before and after uuid match.
        * resultsdbpy/resultsdbpy/view/static/js/common.js:
        (paramsToQuery): False should be added as a parameter, if provided.
        (percentage): Moved from investigate.js.
        (elapsedTime): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.combine): Allow configurations to be combined to a single, more general, configuration.
        * resultsdbpy/resultsdbpy/view/static/js/failures.js: Added.
        (Failures.prototype.fromEndpoint): Construct a failure object from the failures endpoint.
        (Failures.combine): Combine two failure objects together.
        (Failures):
        (Failures.prototype.toParams): Convert object to parameters for other results database queries.
        * resultsdbpy/resultsdbpy/view/static/js/investigate.js:
        (elapsed): Used shared time elapsed function.
        (percentage): Moved to common.js.
        (prioritizedFailures): Return a div with a truncated list of tests which failed.
        (resultsForData): Include some number of prioritized test failures based on how many bubbles are
        already displayed.
        (_InvestigateDrawer.prototype.expand): Dispatch failure request.
        (_InvestigateDrawer.prototype.dispatch): Start request to failures endpoint.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Add link to investigation endpoint.
        (Legend): When search parameters change, we need to re-dispatch failure requests.
        * resultsdbpy/resultsdbpy/view/suite_view.py:
        (SuiteView._suites_for_investigation): Filter parameters for investigation endpoint.
        (SuiteView.investigate): Return investigation endpoint html template.
        * resultsdbpy/resultsdbpy/view/templates/investigate.html: Added.
        (willFilterExpected): Check if the query parameters indicate that expected failures are to be ignored.
        (commitsForRange): Return a list of commits for a uuid range.
        (SuiteFailuresView.constructor): Abstraction to hold the investigation data for a single suite.
        (SuiteFailuresView.reload): Dispatch requests to the results and failures endpoint to populate
        investigation data.
        (SuiteFailuresView.select): By default, failures for different configurations are collapsed into a single
        view. Allows the user to iterate through each configuration that comprises the view.
        (SuiteFailuresView.toString):
        (populateRanges): Either convert the provided arguments to a range to search for failures and results
        in, or use the most recent commit.
        (reload): Force all suite views to re-dispatch results and failures requests.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Add space between suite content and
        top bar.
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Add investigate endpoint.

2020-04-27  Tim Horton  <timothy_horton@apple.com>

        WebKit.ResizeReversePaginatedWebView is failing (21 pages instead of 20)
        https://bugs.webkit.org/show_bug.cgi?id=211001
        <rdar://problem/60972357>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        * TestWebKitAPI/Tests/WebKit/lots-of-text-vertical-lr.html:
        Use Ahem to keep the layout more stable.

2020-04-27  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] After r258891, r255119 can be reverted
        https://bugs.webkit.org/show_bug.cgi?id=211083

        Unreviewed revert of r255119.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/MimeTypes.mm: Removed.

2020-04-27  Daniel Bates  <dabates@apple.com>

        Caret may be placed in the wrong spot for text input context that is a form control
        https://bugs.webkit.org/show_bug.cgi?id=210939
        <rdar://problem/61943089>

        Reviewed by Darin Adler.

        Add a test.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TestWebKitAPI::TEST):

2020-04-27  Alexey Proskuryakov  <ap@apple.com>

        Make run-safari --ios-simulator work again
        https://bugs.webkit.org/show_bug.cgi?id=211008

        Reviewed by Darin Adler.

        While at it, removed all direct uses of device.plist, and all use of Foundation.

        * Scripts/webkitdirs.pm: Stopped exporting unused simulator related functions. New
        code should be using webkitpy.
        (simulatorDeviceFromJSON): Helper function for parsing simctl output.
        (iOSSimulatorDevices): Use simctl instead of reading device.plist.
        (createiOSSimulatorDevice): Device creation appears to be synchronous, I couldn't
        find any reason for waiting and retrying.
        (iosSimulatorApplicationsPath): This is part of the actual fix - runtime path built
        here was incorrect; switched to one provided by simctl.
        (shutDownIOSSimulatorDevice): Added an early return to avoid stderr spew.
        (relaunchIOSSimulator): Another part of the actual fix: open Simulator.app before booting the
        simulator to have it visible; CurrentDeviceUDID doesn't work.
        (iosSimulatorDeviceByUDID): Stop using device.plist.
        (runIOSWebKitAppInSimulator): Stop quitting Simulator.app, we only needed to shut down
        the device.
        (iOSSimulatorDevicesPath): Deleted.
        (quitIOSSimulator): Deleted.

2020-04-27  Daniel Bates  <dabates@apple.com>

        Text interaction tests should ensure view is not scroll instead of looking for a zoom change
        https://bugs.webkit.org/show_bug.cgi?id=211056

        Reviewed by Dean Jackson.

        For the text interaction sub-tests, override the scroll view's delegate so as to track
        whether a scroll occurred or not instead of looking at the zoom scale. As the tests are
        written looking at the zoom scale is racy. It is simpler and deterministic to detect
        whether the scroll view scrolled.

        The purpose of the text interaction sub-tests are to ensure that zooming to reveal
        the focused element is suppressed until the interaction completes with a call to
        -_didFinishTextInteractionInTextInputContext. I added some more assertions to ensure this.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (-[TextInteractionScrollDelegate scrollViewDidScroll:]):
        (TestWebKitAPI::TEST):

2020-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make it possible to build with GTK4 without errors
        https://bugs.webkit.org/show_bug.cgi?id=210967

        Reviewed by Adrian Perez de Castro.

        * MiniBrowser/gtk/BrowserCellRendererVariant.c:
        * MiniBrowser/gtk/BrowserCellRendererVariant.h:
        * MiniBrowser/gtk/BrowserDownloadsBar.c:
        * MiniBrowser/gtk/BrowserDownloadsBar.h:
        * MiniBrowser/gtk/BrowserMain.c: Added.
        (browser_main):
        (browser_main_quit):
        * MiniBrowser/gtk/BrowserMain.h: Added.
        * MiniBrowser/gtk/BrowserSearchBar.c:
        * MiniBrowser/gtk/BrowserSearchBar.h:
        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        * MiniBrowser/gtk/BrowserSettingsDialog.h:
        * MiniBrowser/gtk/BrowserTab.c:
        (browserTabConstructed):
        (browser_tab_start_search):
        (browser_tab_stop_search):
        (browser_tab_enter_fullscreen):
        (browser_tab_leave_fullscreen):
        * MiniBrowser/gtk/BrowserTab.h:
        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewURIChanged):
        (resetEntryProgress):
        (webViewLoadProgressChanged):
        (downloadStarted):
        (browserWindowUpdateNavigationActions):
        (webViewReadyToShow):
        (browserWindowUpdateZoomActions):
        (webViewZoomLevelChanged):
        (updateUriEntryIcon):
        (webViewIsLoadingChanged):
        (browserWindowFinalize):
        (browserWindowSetupEditorToolbar):
        (browserWindowSwitchTab):
        (browser_window_init):
        (browser_window_class_init):
        (browser_window_new):
        (browser_window_append_view):
        (browser_window_set_background_color):
        (browser_window_get_or_create_web_view_for_automation):
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/gtk/main.c:
        (main):
        * PlatformGTK.cmake:
        * Scripts/webkitpy/style/checker.py:
        * TestWebKitAPI/glib/PlatformGTK.cmake:

2020-04-27  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Regenerate toolchains only if new updates were downloaded
        https://bugs.webkit.org/show_bug.cgi?id=210804

        Reviewed by Žan Doberšek.

        The SDK toolchain archives are now regenerated only if an actual
        update was downloaded from the Flatpak repository. Some redundant
        flatpak calls were removed as well, such as the GL extension and
        Debug reinstalls that were happening during webkit-flatpak
        updates.

        * flatpak/flatpakutils.py:
        (FlatpakObject.flatpak):
        (FlatpakRepo.__init__):
        (WebkitFlatpak.main):
        (WebkitFlatpak.setup_dev_env):

2020-04-27  Philippe Normand  <pnormand@igalia.com>

        unable to build from tot - linux - flatpakutils.py - TypeError: not enough arguments for format string
        https://bugs.webkit.org/show_bug.cgi?id=210941

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (check_flatpak): Fix error message formating.

2020-04-26  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Enable TestWTF and TestWebCore
        https://bugs.webkit.org/show_bug.cgi?id=208849

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/playstation/main.cpp: Added.
        (main): Load runtime libraries.

2020-04-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Warn when NeverDestroyed<Lock> is used
        https://bugs.webkit.org/show_bug.cgi?id=211054

        Reviewed by Darin Adler.

        WTF::Lock and WTF::Condition are designed to be constant-initialize compliant. So NeverDestroyed<> for these types are not necessary,
        or rather, introducing race condition issue while `static Lock` doesn't have that issue. This patch adds lint rules which prevent
        us from using `NeverDestroyed<Lock>` and `LazyNeverDestroyed<Lock>`.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_never_destroyed):
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_never_destroyed):

2020-04-25  Darin Adler  <darin@apple.com>

        [Cocoa] Deal with another round of Xcode upgrade checks
        https://bugs.webkit.org/show_bug.cgi?id=211027

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Bump the upgrade check version.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Bump the upgrade check version.
        Add a harmless base localization; this project contains nothing localized. Also let the
        script sort the project.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Bump the upgrade check version.
        Add a harmless base localization; this project contains nothing localized. Also let the
        script sort the project.

2020-04-25  Darin Adler  <darin@apple.com>

        Move URL to use StringView when returning substrings of the URL
        https://bugs.webkit.org/show_bug.cgi?id=210431

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/URL.cpp: Removed the test for
        equalIgnoringQueryAndFragment since we removed that function.
        Updated for rename of URL::password from URL::pass.
        Updated arguments to isMatchingDomain to pass literals that can be converted
        to StringView rather than ASCIILiteral, which StringView doesn't yet support.

        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::checkURL): Updated for rename of URL::password from URL::pass.
        (TestWebKitAPI::checkRelativeURL): Ditto.
        (TestWebKitAPI::checkURLDifferences): Ditto.
        (TestWebKitAPI::checkRelativeURLDifferences): Ditto.
        (TestWebKitAPI::testUserPassword): Ditto.

2020-04-25  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK][EWS] Install dependencies step needs configuration as argument
        https://bugs.webkit.org/show_bug.cgi?id=210913

        Follow-up on r260560. The same change is needed for EWS bots.

        Reviewed by Philippe Normand.

        * BuildSlaveSupport/ews-build/steps.py:
        (InstallGtkDependencies): Pass 'configuration' value (Release, Debug).
        (InstallWpeDependencies): Pass 'configuration' value (Release, Debug).

2020-04-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(260485) Payment requests don't do anything
        https://bugs.webkit.org/show_bug.cgi?id=210997

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2020-04-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make some more adjustments to TextManipulationController's paragraph boundary heuristic
        https://bugs.webkit.org/show_bug.cgi?id=210993
        <rdar://problem/61571299>

        Reviewed by Tim Horton.

        Add a new API test with buttons and links styled with `display: inline-block;`. Additionally, rebaseline an
        existing API test that exercises inline-block list items.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-04-24  Chris Dumez  <cdumez@apple.com>

        [iOS] Always run WKTR's WKWebViews at foreground priority
        https://bugs.webkit.org/show_bug.cgi?id=210991

        Reviewed by Keith Miller.

        Always run WKTR's WKWebViews at foreground priority. This makes sure that they don't suspend and
        run at foreground priority on iOS, even if those views are not visible on screen.
        This is an issue to address flakiness on the bots.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2020-04-24  Kate Cheney  <katherine_cheney@apple.com>

        Removing website data for a domain should delete corresponding ITP entry
        https://bugs.webkit.org/show_bug.cgi?id=210864
        <rdar://problem/59473193>

        Reviewed by John Wilander.

        Created 2 new APIs for testing. One to mimic clearing website data
        for a domain, and one to check if the domain exists in the database
        after a deletion was requested.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::doesStatisticsDomainIDExistInDatabase):
        (WTR::TestRunner::domainIDExistsInDatabase): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::doesStatisticsDomainIDExistInDatabase):
        (WTR::TestController::domainIDExistsInDatabase): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-04-24  Antoine Quint  <graouts@apple.com>

        Update the css/css-animations WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=210964

        Reviewed by Dean Jackson.

        Turn on the CSSCustomPropertiesAndValues experimental feature which a new test relies on.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2020-04-24  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should recognize *Internal.h and *Private.h as primary headers
        <https://webkit.org/b/210979>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_classify_include): If a header has an "Internal.h" or a
        "Private.h" suffix with the same base name as the source file,
        consider it a primary header--the header that comes after
        "config.h".
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_classify_include): Add tests.

2020-04-24  Alex Christensen  <achristensen@webkit.org>

        SPI clients using fastServerTrustEvaluationEnabled need SPI to inform them of modern TLS negotiation
        https://bugs.webkit.org/show_bug.cgi?id=210533

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSNavigationDelegate waitForDidNegotiateModernTLS]):
        (-[TLSNavigationDelegate _webView:didNegotiateModernTLS:]):
        (TestWebKitAPI::TEST):

2020-04-24  Brian Burg  <bburg@apple.com>

        webkitpy: update autoinstalled mozprocess dependency to 1.1.0 (adds python3 support)
        https://bugs.webkit.org/show_bug.cgi?id=210220
        <rdar://problem/58881483>

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mozprocess):

2020-04-24  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] White-list more GStreamer environment variables in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=210854
        <rdar://problem/62238305>

        Reviewed by Carlos Alberto Lopez Perez.

        Extra variables need to be white-listed when the webkitpy tooling
        runs inside a gst-build environment, those variables are needed so
        that uninstalled GStreamer plugins are correctly picked up.

        Additionally we now correctly white-list the
        WEBKIT_GST_USE_PLAYBIN3 env var. USE_PLAYBIN3 shouldn't be used
        anymore.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):

2020-04-23  Yusuke Suzuki  <ysuzuki@apple.com>

        stress/ensure-crash.js shouldn't spew stuff onto my screen
        https://bugs.webkit.org/show_bug.cgi?id=210931

        Reviewed by Ross Kirsling.

        Set noisyOutputHandler when crash! is specified. We also specify noisyOutputHandler for runComplexTest.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2020-04-23  Yusuke Suzuki  <ysuzuki@apple.com>

        Disable useKernTCSM=false for JSC stress tests to make EWS faster
        https://bugs.webkit.org/show_bug.cgi?id=210950

        Reviewed by Mark Lam.

        This patch removes "JSC_useKernTCSM=false" environment variable in JSC stress tests.
        Alexey found that this causes EWS JSC stress tests slow down (from roughly 63 mins to 83 mins).
        This slow down happens in Mac Pro (which is used in JSC EWS right now), and this slow down does
        not happen in Mac mini (post-commit buildbot) and rather improves Mac Mini execution time by 15%,
        but keeping EWS faster is more important than making post-commit bots faster.

        * Scripts/run-javascriptcore-tests:

2020-04-23  Yusuke Suzuki  <ysuzuki@apple.com>

        Support `--report-execution-time` to report execution time for each JSC stress test
        https://bugs.webkit.org/show_bug.cgi?id=210938

        Reviewed by Saam Barati.

        We can run `run-javascriptcore-tests` with `--report-execution-time` option to report execution time for each JSC stress test,
        to figure out which test is taking a long time. It appends execution-time to the verbose log. To see it stderr, --verbose is also
        required.

        $ run-javascriptcore-tests .... --verbose --report-execution-time

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

2020-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation does not account for text in fully clipped containers
        https://bugs.webkit.org/show_bug.cgi?id=210940
        <rdar://problem/61137648>

        Reviewed by Tim Horton.

        Add a new text manipulation API test.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-04-23  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r260278): TestWebKitAPI.Fullscreen.Delegate is timing out on macOS bots
        https://bugs.webkit.org/show_bug.cgi?id=210676
        <rdar://problem/61953702>

        Reviewed by Daniel Bates.

        A number of API tests modify the WKWebViewConfiguration after calling -[WKWebView initWithFrame:configuration:], which
        could be a source of failures or flakiness. Update these tests to set those configuration values before passing the
        configuration to WKWebView.

        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenAlert.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenLayoutConstraints.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TopContentInset.mm:
        (TestWebKitAPI::TEST):

2020-04-23  Saam Barati  <sbarati@apple.com>

        DumpRenderTree should have the JIT entitlement on Mac
        https://bugs.webkit.org/show_bug.cgi?id=210887
        <rdar://problem/62228740>

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.entitlements: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2020-04-23  Kate Cheney  <katherine_cheney@apple.com>

        All ITP database tables should reference the ObservedDomains table on DELETE CASCADE
        https://bugs.webkit.org/show_bug.cgi?id=210874
        <rdar://problem/62209438>

        Reviewed by Brady Eidson.

        Adds a new database file with pre-entered values and the old schema.
        Adds an API test which checks if the data was migrated after
        initializing the ITP database.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/incorrectCreateTableSchema.db: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/incorrectCreateTableSchema.db-shm: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/incorrectCreateTableSchema.db-wal: Added.

2020-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] CMAKE_BINARY_DIR should always be a PRIVATE include directory
        https://bugs.webkit.org/show_bug.cgi?id=196717

        Reviewed by Michael Catanzaro.

        Include CMAKE_BINARY_DIR.

        * MiniBrowser/gtk/CMakeLists.txt:
        * TestWebKitAPI/glib/CMakeLists.txt:

2020-04-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260552.

        Broke internal builds.

        Reverted changeset:

        "DumpRenderTree should have the JIT entitlement on Mac"
        https://bugs.webkit.org/show_bug.cgi?id=210887
        https://trac.webkit.org/changeset/260552

2020-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a heuristic for text manipulation to treat some list items as paragraph boundaries
        https://bugs.webkit.org/show_bug.cgi?id=210915
        <rdar://problem/61907080>

        Reviewed by Megan Gardner.

        Add a new API test to exercise text manipulation over several different cases of lists and list items.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260562.
        https://bugs.webkit.org/show_bug.cgi?id=210924

        It caused 3 new failures and 1 timeout in GTK API tests
        (Requested by clopez on #webkit).

        Reverted changeset:

        "[GTK][WPE] White-list more GStreamer environment variables in
        webkitpy"
        https://bugs.webkit.org/show_bug.cgi?id=210854
        https://trac.webkit.org/changeset/260562

2020-04-23  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController should set range of paragraph using token's positions
        https://bugs.webkit.org/show_bug.cgi?id=210866
        <rdar://problem/60646283>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-04-23  Emilio Cobos Álvarez  <emilio@crisal.io>

        Unreviewed, add my bugzilla / slack nick to contributors.json

        * Scripts/webkitpy/common/config/contributors.json:

2020-04-23  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Add mock release/debug options to the update script

        Rubber-stamped by Carlos Alberto Lopez Perez.

        These options are now required after r260560. They're not used
        though because JHBuild itself doesn't have the notion of build
        configuration, unlike the Flatpak SDK.

        * Scripts/update-webkit-libs-jhbuild:

2020-04-23  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] White-list more GStreamer environment variables in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=210854

        Reviewed by Adrian Perez de Castro.

        Extra variables need to be white-listed when the webkitpy tooling
        runs inside a gst-build environment, those variables are needed so
        that uninstalled GStreamer plugins are correctly picked up.

        Additionally we now correctly white-list the
        WEBKIT_GST_USE_PLAYBIN3 env var. USE_PLAYBIN3 shouldn't be used
        anymore.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):

2020-04-23  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK] Install dependencies step needs configuration as argument
        https://bugs.webkit.org/show_bug.cgi?id=210898

        Reviewed by Philippe Normand.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (InstallGtkDependencies): Pass 'configuration' value (Release, Debug).
        (InstallWpeDependencies): Pass 'configuration' value (Release, Debug).

2020-04-22  Darin Adler  <darin@apple.com>

        [Cocoa] Build with UChar as char16_t even in builds that use Apple's internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=210845

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST): Get rid of an obsolete cast to unsigned to work
        around uint16_t not being treated as a number by makeString.
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST): Ditto.
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (TestWebKitAPI::TEST): Ditto.
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST): Ditto.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        Add an include needed since EvironmentUtilities.h now includes less.

2020-04-22  Saam Barati  <sbarati@apple.com>

        DumpRenderTree should have the JIT entitlement on Mac
        https://bugs.webkit.org/show_bug.cgi?id=210887

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.entitlements: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:

2020-04-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Expose -_webView:willGoToBackForwardListItem:inPageCache:
        https://bugs.webkit.org/show_bug.cgi?id=210878
        <rdar://problem/62202276>

        Reviewed by Alex Christensen.

        Enable corresponding API test on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:

2020-04-22  Daniel Bates  <dabates@apple.com>

        Add a test for -focusTextInputContext on a field in detached frame
        https://bugs.webkit.org/show_bug.cgi?id=210704

        Reviewed by Wenson Hsieh.

        Calling -focusTextInputContext on a field in a detached frame should not
        cause a focus change. Add a test to ensure this behavior doesn't regress.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TEST):

2020-04-22  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use WEBKIT_EXECUTABLE in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=210132

        Reviewed by Adrian Perez de Castro.

        Modify CMake code to use WEBKIT_EXECUTABLE when creating WebKitTestRunner.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformFTW.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/PlatformWin.cmake:

2020-04-22  Don Olmstead  <don.olmstead@sony.com>

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

        Reviewed by Michael Catanzaro.

        Use the WebKit::WebCoreTestSupport target in DumpRenderTree. Fix an
        include for WPE in WebKitTestRunner.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * WebKitTestRunner/PlatformWPE.cmake:

2020-04-22  Sihui Liu  <sihui_liu@apple.com>

        TextManipulation.CompleteTextManipulationAvoidCrashingWhenContentIsRemoved does not wait for result
        https://bugs.webkit.org/show_bug.cgi?id=210871

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-04-22  Alex Christensen  <achristensen@webkit.org>

        Add unit test for resuming downloads
        https://bugs.webkit.org/show_bug.cgi?id=210852

        Reviewed by Brady Eidson.

        This is a test that we should've written years ago.
        I made HTTPServer able to take a Function that takes a nw_connection_t to give it more power than declarative request/response pairs.
        I made TestDownloadDelegate to be reused by future tests, like those I'm going to add for  bug 210313.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (longString):
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::HTTPServer::totalRequests const): Deleted.
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::RequestData::RequestData):
        (TestWebKitAPI::HTTPServer::listenerParameters):
        (TestWebKitAPI::startListening):
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::HTTPServer::totalRequests const):
        (TestWebKitAPI::dataFromString):
        (TestWebKitAPI::nullTerminatedRequest):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        * TestWebKitAPI/cocoa/TestDownloadDelegate.h: Added.
        * TestWebKitAPI/cocoa/TestDownloadDelegate.mm: Added.
        (-[TestDownloadDelegate _downloadDidStart:]):
        (-[TestDownloadDelegate _download:didReceiveServerRedirectToURL:]):
        (-[TestDownloadDelegate _download:didReceiveResponse:]):
        (-[TestDownloadDelegate _download:didReceiveData:]):
        (-[TestDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[TestDownloadDelegate _downloadDidFinish:]):
        (-[TestDownloadDelegate _download:didFailWithError:]):
        (-[TestDownloadDelegate _downloadDidCancel:]):
        (-[TestDownloadDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestDownloadDelegate _download:didCreateDestination:]):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2020-04-22  Saam Barati  <sbarati@apple.com>

        makeValueRefForValue should be robust against the type encoding of a NSNumber backed by a boolean
        https://bugs.webkit.org/show_bug.cgi?id=210821
        <rdar://problem/62136598>

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (makeValueRefForValue):

2020-04-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260410.

        Caused crashes in Safari

        Reverted changeset:

        "SPI clients using fastServerTrustEvaluationEnabled need SPI
        to inform them of modern TLS negotiation"
        https://bugs.webkit.org/show_bug.cgi?id=210533
        https://trac.webkit.org/changeset/260410

2020-04-21  Cathie Chen  <cathiechen@igalia.com>

        REGRESSION (r254790): No longer get smooth scrolling on music.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=210634

        Reviewed by Darin Adler.

        Add settings-flag. Add support for CSSOMViewSmoothScrolling on Windows DumpRenderTree.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):

2020-04-21  Peng Liu  <peng.liu6@apple.com>

        Fix MACCATALYST build failures
        https://bugs.webkit.org/show_bug.cgi?id=210815

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-04-19  Darin Adler  <darin@apple.com>

        [Cocoa] Use createNSArray in many more places that build NSArray objects from C++ collections
        https://bugs.webkit.org/show_bug.cgi?id=210702

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateTestingFonts): Use constexpr and NSString instead of a null-pointer terminated
        array for the font names. Use createNSArray.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        Use createNSArray.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (find_parameter_name_index): Fixed a spelling error.
        (_check_parameter_name_against_text): Added a special case to not complain that
        parameters named "]" have redundant names. Not obvious to me how to write a test case for
        this and how to fix this in a more sensible way, but immediately helpful to not get this
        spurious warning.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateSystemCoreWebFonts): Use constexpr array instead of NSArray for font names.
        (WTR::activateFonts): Use constexpr and NSString instead of a null-pointer terminated
        array for the font names. Use createNSArray.

2020-04-21  Matt Lewis  <jlewis3@apple.com>

        Bindings-test should not depend on current working directory.
        https://bugs.webkit.org/show_bug.cgi?id=210831

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.main):

2020-04-21  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after r260449
        (https://bugs.webkit.org/show_bug.cgi?id=210697)

        Wrap the C++ methods in namespace TestWebKitAPI so that IPhoneUserInterfaceSwizzler can be
        used unqualified.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:

2020-04-21  Darin Adler  <darin@apple.com>

        WTF API test for StringConcatenate failing for internal Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=210812

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST): Add back a case for when UChar is uint16_t.

2020-04-21  Kate Cheney  <katherine_cheney@apple.com>

        Move WebKit.WebViewCategory test to InAppBrowserPrivacy.mm
        https://bugs.webkit.org/show_bug.cgi?id=210811
        <rdar://problem/60972505> 

        Reviewed by Alexey Proskuryakov.

        This test was added before InAppBrowserPrivacy.mm existed. It should
        be moved here so it has access to all setup/cleanup needed by these
        tests.

        * TestWebKitAPI/Tests/WebKitCocoa/Configuration.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2020-04-21  Daniel Bates  <dabates@apple.com>

        [iOS] -_didFinishTextInteractionInTextInputContext should only zoom to reveal focused element if it changed
        https://bugs.webkit.org/show_bug.cgi?id=210697
        <rdar://problem/60997530>

        Reviewed by Wenson Hsieh.

        I use the term "assisted" below and in the tests to describe an element that is both DOM
        focused and the UI process is showing an input view (like the software keyboard) for it.
        For many of the tests I check for a zoom scale change as a way to detect if the page
        zoomed to reveal the focused element.

        Add some tests for the following cases:
            1. Place the caret in a focused field that isn't being assisted.
            2. Focusing an assisted element should not scroll the page.
            3. Focusing an offscreen read-only element should not change zoom scale.
            4. Focusing an offscreen element should change the zoom scale.
            5. Calling -_focusTextInputContext on an offscreen element multiple times
            during a text interaction should change the zoom scale. The purpose of this test is
            to ensure that later calls that do not focus the element (because it is already focused)
            don't prevent zooming for the first call that did focus the element.
            6. Focusing an offscreen element, defocusing it, disabling it, and focusing it
            again during a text interaction should not change zoom scale.
            7. Focusing an offscreen element, defocusing it, and focusing it again during a
            text interaction should change zoom scale.
            8. Focusing an assisted element during a text interaction should not change zoom scale.
            9. Focusing a non-assisted focused element during a text interaction should change zoom scale.

        While I am here, I consolidated the RAII helper classes IPhoneUserInterfaceSwizzler and
        IPadUserInterfaceSwizzler into a single UserInterfaceSwizzler templated class and defined
        the former two as template instances.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TextInteractionForScope::TextInteractionForScope):
        (TextInteractionForScope::~TextInteractionForScope):
        Added convenience RAII object to call -_willBeginTextInteractionInTextInputContext
        and -_didFinishTextInteractionInTextInputContext.
        (TEST): Added.
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/ios/IPadUserInterfaceSwizzler.h: Removed.
        * TestWebKitAPI/ios/PreferredContentMode.mm:
        (IPhoneUserInterfaceSwizzler::IPhoneUserInterfaceSwizzler): Deleted; movedinto UserInterfaceSwizzler.h.
        (IPhoneUserInterfaceSwizzler::phoneUserInterfaceIdiom): Deleted; no longer needed.
        * TestWebKitAPI/ios/UserInterfaceSwizzler.h: Renamed from Tools/TestWebKitAPI/ios/IPadUserInterfaceSwizzler.h.
        (TestWebKitAPI::UserInterfaceSwizzler::UserInterfaceSwizzler): Formerly named IPadUserInterfaceSwizzler;
        repurposed into general purpose template class, consolidating code from PreferredContentMode.mm.
        Privately inherits from InstanceMethodSwizzler instead of using composition as that simplifies
        the source code a tiny bit.
        (TestWebKitAPI::UserInterfaceSwizzler::effectiveUserInterfaceIdiom): Renamed; formerly padUserInterfaceIdiom.

2020-04-21  Timothy Hatcher  <timothy@apple.com>

        Reset m_userScriptsNotified when web process crashes.
        https://bugs.webkit.org/show_bug.cgi?id=210807

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST): Test crashing the web process and reloading.

2020-04-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] Display error message when submit for EWS analysis button doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=210803

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS.post): Display relevant error message on submit for EWS analysis button failure.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):
        (BugzillaPatchFetcher.send_patches_to_buildbot):
        * BuildSlaveSupport/ews-app/ews/config.py: Add few more error codes.

2020-04-21  Lauro Moura  <lmoura@igalia.com>

        [GStreamer][JHBuild] Update to 1.16.2
        https://bugs.webkit.org/show_bug.cgi?id=210730

        Reviewed by Philippe Normand.

        Moving the bots closer to the flatpak SDK versions.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/base-0001-glupload-Add-VideoMetas-and-GLSyncMeta-to-the-raw-up.patch: Removed.

2020-04-21  Alexey Proskuryakov  <ap@apple.com>

        Correct the path to libclang_rt.asan_iossim_dynamic.dylib in LC_RPATH
        https://bugs.webkit.org/show_bug.cgi?id=210770
        rdar://problem/61904541

        Reviewed by Alex Christensen.

        * asan/asan.xcconfig:

2020-04-21  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK] Keep env variable 'RESULTS_SERVER_API_KEY'
        https://bugs.webkit.org/show_bug.cgi?id=210798

        Reviewed by Philippe Normand.

        The variable is needed by several bot steps to upload results.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][CMake] Make gtk-unix-print a component of FindGTK.cmake
        https://bugs.webkit.org/show_bug.cgi?id=210792

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/glib/PlatformGTK.cmake: Use the GTK::UnixPrint imported target.

2020-04-21  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Silence git stderr output
        https://bugs.webkit.org/show_bug.cgi?id=210789

        Reviewed by Sergio Villar Senin.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.is_branch_build): Don't display git errors, usually
        emitted when operating on a SVN checkout.

2020-04-21  Philippe Normand  <pnormand@igalia.com>

        [CMake][Flatpak SDK] gst-build-backed build fails
        https://bugs.webkit.org/show_bug.cgi?id=210742

        Reviewed by Xabier Rodriguez-Calvar.

        Add non-core GStreamer include-dirs necessary for the compilation
        of the GStreamer API test. Usually GSTREAMER_INCLUDE_DIRS is
        sufficient because on a GStreamer system-wide installation, all
        headers are stored in the same root include dir, the same as the
        core GStreamer library.

        But when building with gst-build, include-dirs are scattered all
        over the place.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2020-04-20  Ross Kirsling  <ross.kirsling@sony.com>

        Classes marked final should not use protected access specifier
        https://bugs.webkit.org/show_bug.cgi?id=210775

        Reviewed by Daniel Bates.

        * DumpRenderTree/win/DefaultPolicyDelegate.h:
        * DumpRenderTree/win/UIDelegate.h:

2020-04-20  Peng Liu  <peng.liu6@apple.com>

        Fix build failures when video fullscreen and picture-in-picture is disabled
        https://bugs.webkit.org/show_bug.cgi?id=210777

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-04-20  Alex Christensen  <achristensen@webkit.org>

        SPI clients using fastServerTrustEvaluationEnabled need SPI to inform them of modern TLS negotiation
        https://bugs.webkit.org/show_bug.cgi?id=210533

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSNavigationDelegate waitForDidNegotiateModernTLS]):
        (-[TLSNavigationDelegate _webView:didNegotiateModernTLS:]):
        (TestWebKitAPI::TEST):

2020-04-20  Kate Cheney  <katherine_cheney@apple.com>

        App-bound domain behavior should abide by the limitsNavigationsToAppBoundDomains argument in WKWebView configuration
        https://bugs.webkit.org/show_bug.cgi?id=210769
        <rdar://problem/62065241>

        Reviewed by Brent Fulgham.

        Removes any tests for swapping between app-bound and non app-bound
        domains as this behavior is no longer supported.

        Sets the limitsNavigationsToAppBoundDomains flag for tests which should
        have app-bound behavior to maintain test functionality.

        Adds 5 new tests for new behavior.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):
        (-[AppBoundDomainDelegate webView:didFinishNavigation:]):
        (-[AppBoundDomainDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[AppBoundDomainDelegate waitForDidFinishNavigation]):
        (-[AppBoundDomainDelegate waitForDidFailProvisionalNavigationError]):

2020-04-20  Megan Gardner  <megan_gardner@apple.com>

        Date and Time form controls not showing correct initial values on immediate second invocation.
        https://bugs.webkit.org/show_bug.cgi?id=210613

        Reviewed by Wenson Hsieh.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::timePickerValueHour const):
        (WTR::UIScriptController::timePickerValueMinute const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::timePickerValueHour const):
        (WTR::UIScriptControllerIOS::timePickerValueMinute const):

2020-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation sometimes fails to replace text in title elements
        https://bugs.webkit.org/show_bug.cgi?id=210750
        <rdar://problem/61066103>

        Reviewed by Tim Horton and Darin Adler.

        Add a new API test to verify that a single title or option element may be replaced with multiple tokens, as long
        as all the token identifiers match.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-04-20  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Fix build after r260277
        https://bugs.webkit.org/show_bug.cgi?id=210756

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformPlayStation.cmake:

2020-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Oversized caret and selection rects in text fields on ganji.com and netflix.com/login
        https://bugs.webkit.org/show_bug.cgi?id=210622
        <rdar://problem/45945636>

        Reviewed by Darin Adler.

        Rebaseline some expected selection and caret rects in some iOS API tests.

        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):

2020-04-20  Darin Adler  <darin@apple.com>

        Use #import instead of #include in Objective-C and don't use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=210724

        Reviewed by David Kilzer.

        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm:
        * DumpRenderTree/mac/AccessibilityCommonMac.h:
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm:
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.mm:
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.h:
        * TestRunnerShared/mac/NSPasteboardAdditions.h:
        * TestRunnerShared/spi/AppKitTestSPI.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h:
        * TestWebKitAPI/DataDetectorsCoreSPI.h:
        * TestWebKitAPI/EditingTestHarness.h:
        * TestWebKitAPI/EditingTestHarness.mm:
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        * TestWebKitAPI/Tests/WebCore/LineBreaking.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        * TestWebKitAPI/Tests/WebKit/AGXCompilerService.mm:
        * TestWebKitAPI/Tests/WebKit/AccessibilityRemoteUIApp.mm:
        * TestWebKitAPI/Tests/WebKit/BacklightLevelNotification.mm:
        * TestWebKitAPI/Tests/WebKit/Battery.mm:
        * TestWebKitAPI/Tests/WebKit/DeferredViewInWindowStateChange.mm:
        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        * TestWebKitAPI/Tests/WebKit/GrantAccessToMobileAssets.mm:
        * TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm:
        * TestWebKitAPI/Tests/WebKit/LocalizedDeviceModel.mm:
        * TestWebKitAPI/Tests/WebKit/MimeTypes.mm:
        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm:
        * TestWebKitAPI/Tests/WebKit/PasteboardNotifications.mm:
        * TestWebKitAPI/Tests/WebKit/PictureInPictureSupport.mm:
        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        * TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm:
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        * TestWebKitAPI/Tests/WebKit/WebFilter.mm:
        * TestWebKitAPI/Tests/WebKit/mac/AttributedSubstringForProposedRangeWithImage.mm:
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleObject.h:
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleParameter.mm:
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleParameter_Bundle.mm:
        * TestWebKitAPI/Tests/WebKit/mac/EditorCommands.mm:
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewAfterEnterFullscreen.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewDuringEnterFullscreen.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CookiePrivateBrowsing.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyRTF.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CustomUserAgent.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceManagementRestrictions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoAfterNextPresentationUpdateAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPageAPI.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FirstVisuallyNonEmptyMilestone.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FixedLayoutSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenAlert.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenLayoutConstraints.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/JavaScriptDuringNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileThenReload.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaType.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NoPauseWhenSwitchingTabs.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ObservedRenderingProgressEventsAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PageZoom.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimerDoesntFireEarly.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RestoreSessionStateWithoutNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShouldGoToBackForwardListItem.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShrinkToFit.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StopSuspendResumeAllMedia.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TabOutOfWebView.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TestURLSchemeHandler.h:
        * TestWebKitAPI/Tests/WebKitCocoa/TestURLSchemeHandler.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TextSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TextWidth.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TopContentInset.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserInitiatedActionInNavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoQualityDisplayCompositing.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebContentProcessDidTerminate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/DataDetectorsTestIOS.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/OverflowScrollViewTests.mm:
        * TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm:
        * TestWebKitAPI/Tests/ios/SelectionByWord.mm:
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.mm:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewPausePlayingAudioTests.mm:
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.mm:
        * TestWebKitAPI/Tests/mac/BackForwardList.mm:
        * TestWebKitAPI/Tests/mac/BackgroundColor.mm:
        * TestWebKitAPI/Tests/mac/CandidateTests.mm:
        * TestWebKitAPI/Tests/mac/DOMHTMLTableCellCellAbove.mm:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.mm:
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm:
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm:
        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        * TestWebKitAPI/Tests/mac/SetDocumentURI.mm:
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        * TestWebKitAPI/Tests/mac/SubresourceErrorCrash.mm:
        * TestWebKitAPI/Tests/mac/TypingStyleCrash.mm:
        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm:
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.mm:
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/NSItemProviderAdditions.h:
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        * TestWebKitAPI/cocoa/TestUIDelegate.h:
        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        * TestWebKitAPI/ios/PencilKitTestSPI.h:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/NSFontPanelTesting.h:
        * TestWebKitAPI/mac/NSFontPanelTesting.mm:
        * TestWebKitAPI/mac/OffscreenWindow.h:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.mm:
        * TestWebKitAPI/mac/TestDraggingInfo.h:
        * TestWebKitAPI/mac/TestFilePromiseReceiver.h:
        * TestWebKitAPI/mac/TestFontOptions.h:
        * TestWebKitAPI/mac/TestInspectorBar.h:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h:
        * WebKitTestRunner/mac/PoseAsClass.mm:
        More #import, less #pragma once.

2020-04-20  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK] Prevent exception when calling git in a non-git repository
        https://bugs.webkit.org/show_bug.cgi?id=210737

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.is_branch_build): Return false if command executes in a
        non-git repository (i.e SVN).

2020-04-20  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Drive-by fixes
        https://bugs.webkit.org/show_bug.cgi?id=210557

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Properly format error message.
        (WebkitFlatpak.main): Show flatpak update output.

2020-04-20  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR][WPE] Let XR_RUNTIME_JSON environment variable go through for testing
        https://bugs.webkit.org/show_bug.cgi?id=210738

        Reviewed by Žan Doberšek.

        The OpenXR loader might be instructed to load a specific runtime by
        using the XR_RUNTIME_JSON environment variable. Let it get in for testing.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server): Copy XR_RUNTIME_JSON if set.

2020-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=210184

        Reviewed by Žan Doberšek.

        Implement TestController::loadedThirdPartyDomains() and TestController::clearLoadedThirdPartyDomains() for
        non-cocoa ports.

        * WebKitTestRunner/TestController.cpp:
        (WTR::LoadedThirdPartyDomainsCallbackContext::LoadedThirdPartyDomainsCallbackContext):
        (WTR::loadedThirdPartyDomainsCallback):
        (WTR::TestController::loadedThirdPartyDomains):
        (WTR::TestController::clearLoadedThirdPartyDomains):

2020-04-20  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should not complain about missing config.h header in WebKitLegacy source files
        <https://webkit.org/b/210734>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_NO_CONFIG_H_PATH_PATTERNS):
        - Add '^Source/WebKitLegacy/' to the list.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_primary_header):
        - Add test for Source/WebKitLegacy source file.

2020-04-19  Brady Eidson  <beidson@apple.com>

        Add WKScriptMessageHandler API that asynchronously responds with a promise.
        rdar://problem/57243492 and https://bugs.webkit.org/show_bug.cgi?id=206398

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        (-[AsyncScriptMessageHandler userContentController:didReceiveScriptMessage:replyHandler:]):

2020-04-19  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Intl.RelativeTimeFormat missing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=209770

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:
        Add runIntlRelativeTimeFormatEnabled.

2020-04-19  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Consolidate TestNetscapePlugin build
        https://bugs.webkit.org/show_bug.cgi?id=210691

        Reviewed by Fujii Hironori.

        The DumpRenderTree CMakeLists.txt contained a definition of TestNetscapePlugIn
        which was used for WebKitLegacy ports. The TestNetscapePlugIn directory also had
        a CMakeLists.txt used by GTK for its port. The definitions in DumpRenderTree's
        CMake are moved into the TestNetscapePlugIn CMake to provide a common definition
        for all ports that ENABLE_NETSCAPE_PLUGIN_API.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/PlatformGTK.cmake: Added.
        * DumpRenderTree/TestNetscapePlugIn/PlatformWin.cmake: Added.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugIn.def: Renamed from Tools/DumpRenderTree/win/TestNetscapePlugin.def.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugIn.rc: Renamed from Tools/DumpRenderTree/win/TestNetscapePlugin.rc.
        * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Renamed from Tools/DumpRenderTree/win/resource.h.

2020-04-19  Emilio Cobos Álvarez  <emilio@crisal.io>

        Allow to override sccache server port.
        https://bugs.webkit.org/show_bug.cgi?id=210722

        Reviewed by Philippe Normand.

        This is useful so that sccache can work both inside and outside the sandbox,
        without getting confused about flatpak's chroot.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-04-19  Darin Adler  <darin@apple.com>

        REGRESSION (r260334): SpacebarScrolling.cpp (test in TestWebKitAPI) fails to compile because it includes an Objective-C header
        https://bugs.webkit.org/show_bug.cgi?id=210723

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit/SpacebarScrolling.cpp: Instead of including
        WKPreferencesPrivate.h, an Objective-C header, include WKPreferencesRefPrivate.h,
        the header with the functions this test is trying to use.

2020-04-18  Darin Adler  <darin@apple.com>

        Update header postprocessing version cutoff to keep Apple internal builds working
        https://bugs.webkit.org/show_bug.cgi?id=210708

        Reviewed by Brady Eidson.

        * DumpRenderTree/ios/TextInputControllerIOS.m:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        Removed includes of <WebKit/WebKit.h>, the header for modern WebKit, from the files
        here that are intending to use WebKitLegacy. This is harmless, except for if someone
        builds DumpRenderTree *before* building WebKit as I just did.

2020-04-18  Brady Eidson  <beidson@apple.com>

        Fix WebUserContentControllerProxy vs ContentWorld lifetime
        https://bugs.webkit.org/show_bug.cgi?id=210700

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (-[DummyMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST): Make sure removing a script message handler from a particular world
          doesn't also destroy the other JavaScript contents of that world.

2020-04-18  Daniel Bates  <dabates@apple.com>

        Add some more tests for -focusTextInputContext:placeCaretAt:completionHandler:
        https://bugs.webkit.org/show_bug.cgi?id=210624

        Reviewed by Simon Fraser.

        Test behavior when the target element is already focused, when the target element
        is programmatically replaced, and focusing the target element after the page was
        navigated away.

        Also while I am here, fix up the test FocusFieldAndPlaceCaretOutsideField to
        use the size of the exampleText constant - 1 instead of hardcoding this value.
        This will future proof this test should the example text string literal change.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TEST):

2020-04-18  Alex Christensen  <achristensen@webkit.org>

        Fix client certificate authentication when using non-default WKWebsiteDataStores
        https://bugs.webkit.org/show_bug.cgi?id=210681

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):

2020-04-17  Kate Cheney  <katherine_cheney@apple.com>

        Enable service workers for app-bound domains
        https://bugs.webkit.org/show_bug.cgi?id=210451
        <rdar://problem/61479474>

        Reviewed by Brent Fulgham.

        Adds 2 test cases to make sure service workers behave properly on
        app bound domains, and that the APIs are not available on non-app
        bound domains.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[SWInAppBrowserPrivacyMessageHandler userContentController:didReceiveScriptMessage:]):

2020-04-17  Alex Christensen  <achristensen@webkit.org>

        NetworkSessionCocoa should request client certificate only once per host/port
        https://bugs.webkit.org/show_bug.cgi?id=210626
        <rdar://problem/60340449>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::clientCertServerWithCertVerifier):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::HTTPServer):

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        Bug 210645: REGRESSION (r211095): [iOS] TestRunnerWKWebView leaks @property accessibilitySpeakSelectionContent
        <https://webkit.org/b/210645>
        <rdar://problem/61927607>

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        - Release accessibilitySpeakSelectionContent in -dealloc.

2020-04-17  Brady Eidson  <beidson@apple.com>

        Pass sandbox extensions for back/forward list navigations after the policy is decided at process-swap time.
        <rdar://problem/59535167> and https://bugs.webkit.org/show_bug.cgi?id=210623

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2020-04-17  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r260269.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST): Correct argument order.

2020-04-17  Jer Noble  <jer.noble@apple.com>

        Bring Fullscreen API + alert() behavior from iOS to macOS
        https://bugs.webkit.org/show_bug.cgi?id=210662

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenAlert.mm: Added.
        (TestWebKitAPI::TEST):

2020-04-17  Don Olmstead  <don.olmstead@sony.com>

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

        Reviewed by Michael Catanzaro.

        Use the WebKit::WebCore target within tests and developer tools.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * MiniBrowser/wpe/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/glib/CMakeLists.txt:

2020-04-17  Antoine Quint  <graouts@apple.com>

        Stop including style rules related to media controls in the UA style sheet when Modern Media Controls are enabled
        https://bugs.webkit.org/show_bug.cgi?id=210606

        Unreviewed build fix after r260261.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):

2020-04-17  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update for GdkKeymap API changes
        https://bugs.webkit.org/show_bug.cgi?id=210642

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        gdk_keymap_get_default() is deprecated in GTK+ 3.22, so use
        gdk_keymap_get_for_display() instead. Since in GTK4 this method is
        removed to gdk_display_get_keymap(), add a helper to
        GtkVersioning.h to avoid cluttering with ifdefs all over the
        place.

        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::keyStroke):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::doKeyStroke):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::keyDown):

2020-04-17  Antoine Quint  <graouts@apple.com>

        Allow the UserStyleLevel to be set through _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=210653
        <rdar://problem/60506645>

        Reviewed by Tim Horton.

        Add new tests for the "level" parameter when creating a _WKUserStyleSheet.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r162729): [iOS] WebKitTestRunner over-releases UITextField in WTR::PlatformWebView::removeChromeInputField()
        <https://webkit.org/b/210643>
        <rdar://problem/61927190>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::removeChromeInputField):
        - Remove unnecessary -release.

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny iokit open access to graphics related classes
        https://bugs.webkit.org/show_bug.cgi?id=210616

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/AGXCompilerService.mm: Added.
        (TEST):

2020-04-17  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Not fully hooked in BuildSlaveSupport
        https://bugs.webkit.org/show_bug.cgi?id=210548

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir): Flatpak SDK builds use a dedicated product directory per port.

2020-04-16  Lauro Moura  <lmoura@igalia.com>

        [GTK] A couple of API tests are flaky failing on X11.

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-04-16  Daniel Bates  <dabates@apple.com>

        Remove unused -_focusTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=210619

        Reviewed by Darin Adler.

        Remove test now that the SPI was removed.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (-[TestWKWebView synchronouslyFocusTextInputContext:]): Deleted.

2020-04-16  Yusuke Suzuki  <ysuzuki@apple.com>

        Add slack-aware WKR implementation
        https://bugs.webkit.org/show_bug.cgi?id=210425

        Reviewed by Alexey Proskuryakov.

        This patch adds new WKR implementation, which is posting changes to #changes in WebKit slack.
        Currently, we are polling git.webkit.org's feed once a minute. The more efficient way to implement
        this bot is introducing post-commit hook, but for now, this polling strategy just works.

        * WKR/.gitignore: Added.
        * WKR/ReadMe.md: Added.
        * WKR/WKR.mjs: Added.
        * WKR/data/.gitignore: Added.
        * WKR/package-lock.json: Added.
        * WKR/package.json: Added.

2020-04-16  Daniel Bates  <dabates@apple.com>

        [iOS] Add a way to focus a text input and place a caret
        https://bugs.webkit.org/show_bug.cgi?id=210611
        <rdar://problem/61893062>

        Reviewed by Darin Adler.

        Add some tests.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (-[TestWKWebView synchronouslyFocusTextInputContext:placeCaretAt:]): Added.
        (webViewLoadHTMLStringAndWaitForAllFramesToPaint): Use the bundle's TestWebKitAPI.resources directory
        as the base URL so that we have a valid file URL. Some of the tests will then
        call -_setAllowUniversalAccessFromFileURLs to allow the main frame access to
        the unique-origin child frame contents.
        (TEST):

2020-04-16  Daniel Bates  <dabates@apple.com>

        REGRESSION (r259762): Should always hit test for editable elements if the WKWebView is fully editable
        https://bugs.webkit.org/show_bug.cgi?id=210558
        <rdar://problem/61798347>

        Reviewed by Wenson Hsieh.

        Add a test.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (TEST):

2020-04-16  Daniel Bates  <dabates@apple.com>

        Move -_requestTextInputContextsInRect to WKContentView to simplify implementation
        https://bugs.webkit.org/show_bug.cgi?id=210398
        <rdar://problem/61656931>

        Reviewed by Darin Adler.

        Update test now that -_requestTextInputContextsInRect has moved from WKWebView to WKContentView.
        I expose new testing-only WKWebView SPI to access it on the content view.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[TestWKWebView synchronouslyRequestDocumentContext:]): Added; due to category name change.
        (-[TestWKWebView synchronouslyAdjustSelectionWithDelta:]): Added; due to category name change.
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (-[WKWebView synchronouslyRequestTextInputContextsInRect:]): Deleted; due to category name change.
        (-[WKWebView synchronouslyFocusTextInputContext:]): Deleted; due to category name change.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::mayContainEditableElementsInRect): Convert from content coordinates
        to WKWebView coordinates now that -_mayContainEditableElementsInRect expects it.

2020-04-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK clean build fix after r260132.

        * TestWebKitAPI/gtk/main.cpp:
        (main): Don't use GtkVersioning here. A dependency on the WebCore
        private headers for this single file is overkill.

2020-04-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] MiniBrowser opens new windows too small causing failures on some WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=210206

        Reviewed by Carlos Garcia Campos.

        Add two API test to check that window.open() by default gets a size
        request equal to the old window if there is no default window size,
        or to the default window if there is a default window size.

        A new function helper setCreateNewWebViewsInWindowsWithDefaultSize()
        its added to create new webviews in new windows automatically, which
        its needed to test the case of having a default window size.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewWindowProperties):
        (testWebViewOpenWindowDefaultSize):
        (testWebViewOpenWindowNoDefaultSize):
        (beforeAll):

2020-04-15  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r258337): Crash when right clicking on link that uses the system UI font with optimizeLegibility on Mojave
        https://bugs.webkit.org/show_bug.cgi?id=210575
        <rdar://problem/61646717>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST):
        Add an API test ensuring that we can encode and decode a NSAttributedString
        that includes a system-ui font with optimizeLegibility on.

2020-04-15  John Wilander  <wilander@apple.com>

        Add SPI to configure WebsiteDataStores with a URL for standalone web applications and use it to disable first-party website data removal in ITP
        https://bugs.webkit.org/show_bug.cgi?id=209634
        <rdar://problem/60943970>

        Reviewed by Alex Christensen.

        Added a new test option called standaloneWebApplicationURL so that layout tests can
        configure the website data store accordingly. Picking it up and using it requires
        creating a new website data store with a configuration that has the standalone web
        application URL.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::configureWebsiteDataStoreTemporaryDirectories):
        (WTR::TestController::defaultWebsiteDataStore):
        (WTR::parseStringTestHeaderValueAsURL):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2020-04-15  Chris Dumez  <cdumez@apple.com>

        [IPC Hardening] MachMessage::messageSize() should use checked arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=210567
        <rdar://problem/61734355>

        Reviewed by Geoff Garen.

        Add API test coverage for / operator in Checked.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::TEST):

2020-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Remove generic parameter serialization fallback
        https://bugs.webkit.org/show_bug.cgi?id=210509
        <rdar://problem/55522650>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegate.mm:
        (WKWebProcessPlugInWithoutRegisteredCustomClass): Update to reflect
        fact that we block serialization of unregistered classes.

2020-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Fix use of gtk init functions
        https://bugs.webkit.org/show_bug.cgi?id=210550

        Reviewed by Adrian Perez de Castro.

        Include GtkVersioning.h instead of gtk.h.

        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/InspectorTestServer.cpp:
        * TestWebKitAPI/gtk/main.cpp:
        * WebKitTestRunner/gtk/main.cpp:

2020-04-15  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: [ Mojave+ Debug WK1 ] Layout Test imported/blink/storage/indexeddb/blob-basics-metadata.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=199117
        <rdar://problem/52967035>

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-javascriptcore-tests: Set JSC_useKernTCSM to false.
        * Scripts/webkitpy/port/base.py:
        (Port.setup_environ_for_server): Forward JSC_useKernTCSM.
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Set JSC_useKernTCSM to false.

2020-04-15  Devin Rousso  <drousso@apple.com>

        [ESNext] Implement logical assignment operators
        https://bugs.webkit.org/show_bug.cgi?id=209716

        Reviewed by Ross Kirsling.

        * Scripts/run-jsc-stress-tests:

2020-04-14  Jer Noble  <jer.noble@apple.com>

        WKTR always enables capturing audio/video in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=210319

        Reviewed by Tim Horton.

        Capturing in the GPUProcess should be off by default. GPU capture can be enabled at runtime via
        the --internal-feature flag of run-webkit-tests.

        * WebKitTestRunner/TestOptions.h:

2020-04-14  Peng Liu  <peng.liu6@apple.com>

        Adopt interface AVAudioRoutingArbiter for Mac
        https://bugs.webkit.org/show_bug.cgi?id=210167

        Reviewed by Eric Carlson.

        Add test for softlink of AVAudioRoutingArbiter.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2020-04-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Content filtering needs access to the frontboard service
        https://bugs.webkit.org/show_bug.cgi?id=210505

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WebFilter.mm: Added.
        (isManagedSessionMethodOverride):
        (TEST):

2020-04-14  Andres Gonzalez  <andresg_22@apple.com>

        Make WTR::AccessibilityUIElements calls to accessibilitySetValue run on AX secondary thread.
        https://bugs.webkit.org/show_bug.cgi?id=210500

        Reviewed by Chris Fleizach.

        Needed to test accessibility isolated tree mode. Follow up to
        https://bugs.webkit.org/show_bug.cgi?id=210392.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setBoolAttributeValue):
        (AccessibilityUIElement::resetSelectedTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::setAttributeValue):
        (WTR::attributesOfElement):
        (WTR::descriptionOfElements):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::setBoolAttributeValue):
        (WTR::AccessibilityUIElement::setValue):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        (WTR::AccessibilityUIElement::setSelectedChild const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):

2020-04-14  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm:
        (-[WebProcessPlugIn additionalClassesForParameterCoder]): Added.

2020-04-14  Sergio Villar Senin  <svillar@igalia.com>

        [Flatpak] Make run-webkit-tests obey WEBKIT_JHBUILD
        https://bugs.webkit.org/show_bug.cgi?id=210497

        Reviewed by Philippe Normand.

        run-webkit-tests in linux uses the flatpak SDK if the flatpak
        directories are found in the build directory. However it might the the case
        that a developer wants to run them using the jhbuild SDK which can be
        configured in parallel. We have the WEBKIT_JHBUILD environment variable to
        force other scripts to use jhbuild instead of flatpak so we can use it as well
        for this use case.

        * flatpak/flatpakutils.py:
        (run_in_sandbox_if_available):

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bring back support for rendering scrollbars using the system appearance
        https://bugs.webkit.org/show_bug.cgi?id=209805

        Reviewed by Michael Catanzaro.

        Do not use system appearance for scrollbars in MiniBrowser and unit tests.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2020-04-13  Devin Rousso  <drousso@apple.com>

        REGRESSION (r259900) : Speedometer failing on Catalina-Release-WK2-Perf bot
        https://bugs.webkit.org/show_bug.cgi?id=210442
        <rdar://problem/61727169>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should warn about attributes that appear after function definitions
        <https://webkit.org/b/210459>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.attributes_after_definition): Add.
        - Return list of attributes that appear after a function
          definition.
        (check_function_definition):
        - Add new check for attributes that appear after a function
          definition.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_decode_functions_missing_warn_unused_return):
        - Update test to fix new warning.
        (CppStyleTest.test_function_readability_for_attributes): Add.
        - Add tests.

2020-04-13  Kate Cheney  <katherine_cheney@apple.com>

        http/tests/in-app-browser-privacy/app-bound-domain.html is a constant failure on iOS
        https://bugs.webkit.org/show_bug.cgi?id=210344
        <rdar://problem/61583925>

        Reviewed by Brent Fulgham.

        This patch creates a new TestOption parameter for enabling In-App
        Browser Privacy because its NSUserDefaults key is not set using the 
        internal or experimental keywords. It enables this flag for
        WebKitTestRunner if the option is set (and disables it otherwise).

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformAddTestOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2020-04-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove unused UTType swizzler code
        https://bugs.webkit.org/show_bug.cgi?id=210435

        Unreviewed rollout of r258120.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UTIFromTag.mm: Removed.

2020-04-13  Andres Gonzalez  <andresg_22@apple.com>

        Make WTR::AccessibilityUIElement methods run on AX secondary thread.
        https://bugs.webkit.org/show_bug.cgi?id=210392

        Reviewed by Chris Fleizach.

        In order to test accessibility isolated tree mode, it is necessary to
        run WTR::AccessibilityUIElement methods on the AX secondary thread. This
        change uses the functionality built-in AccessibilityController to
        dispatch the calls to WebAccessibilityObjectWrapper to the AX thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::supportedAttributes):
        (WTR::attributeValue):
        (WTR::descriptionOfValue):
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::elementForAttribute const):
        (WTR::AccessibilityUIElement::elementForAttributeAtIndex const):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2020-04-13  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] test262-runner fails to run with WEBKIT_JHBUILD enabled
        https://bugs.webkit.org/show_bug.cgi?id=210430

        Make sure we check the WEBKIT_JHBUILD env var directly to avoid
        requiring webkitdirs early and messing up Runner.pm compilation.

        Reviewed by Philippe Normand.

        * Scripts/test262-runner:

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Add WARN_UNUSED_RETURN to decode methods in Source/WebKit
        <https://webkit.org/b/210423>
        <rdar://problem/61715582>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition):
        - Add check for platformDecode() methods.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        - Add tests for platformDecode() methods.

2020-04-13  Aakash Jain  <aakash_jain@apple.com>

        [ews] Improve handling of unexpected network issues while communicating with Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=210377

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (BugzillaBeautifulSoup.authenticate):

2020-04-13  Aakash Jain  <aakash_jain@apple.com>

        ews status-bubble hover-over message include unhelpful message 'Crash collection has quiesced'
        https://bugs.webkit.org/show_bug.cgi?id=210378

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):

2020-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK1] Touch Bar flashes when typing in Vietnamese in Mail
        https://bugs.webkit.org/show_bug.cgi?id=210394
        <rdar://problem/60099560>

        Reviewed by Tim Horton.

        Add an API test that inserts an attributed string with the text replacement attribute, and verifies that we
        show the candidate list when inserting the string, and also don't temporarily hide the candidate list in the
        process of doing so.

        To achieve this, we swizzle out calls to -[NSCandidateListTouchBarItem updateWithInsertionPointVisibility:] to
        detect when the candidate list is either hidden or made visible.

        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/CandidateTests.mm:

        Fix a leak in an adjacent test too, while I'm touching this file.

        (TestWebKitAPI::updateCandidateListWithVisibility):

2020-04-11  Aakash Jain  <aakash_jain@apple.com>

        Buildbot: Force crash log submission after each test run (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=210202
        <rdar://problem/60508929>

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-build/steps.py:
        (WaitForCrashCollection): Remove spaces from step name.

2020-04-11  Aakash Jain  <aakash_jain@apple.com>

        Buildbot: Force crash log submission after each test run (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=210202
        <rdar://problem/60508929>

        Unreviewed follow-up fix.

        * BuildSlaveSupport/wait-for-crash-collection: Improved error message.

2020-04-11  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should warn about 'decode' functions with missing WARN_UNUSED_RETURN attribute
        <https://webkit.org/b/210336>
        <rdar://problem/61585835>

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.post_modifiers): Add.  Returns string of text
        that appears after the function definition's list of parameters.
        This is used to find the WARN_UNUSED_RETURN attribute in
        function declarations in header files.
        (_FunctionState.has_attribute): Add.  Takes a string (or regex)
        and searchs before and after the function definition for the
        attribute.
        (_FunctionState.has_return_type): Add.  Takes a string (or
        regex) and checks the return type of the fuction.
        (_FunctionState.is_static): Add.  Returns True for functions
        with the 'static' modifier.
        (check_function_definition): Add check for decode() functions
        with missing WARN_UNUSED_RETURN attribute.
        (CppChecker): Add 'security/missing_warn_unused_return' to the
        list of enabled style checkers.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.perform_function_definition_check): Add.  This
        runs the check_function_definition() function in cpp.py.
        (CppStyleTest.test_decode_functions_missing_warn_unused_return): Add.
        Tests for the new warning.

2020-04-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI to handle proxy authentication and require secure proxy connections
        https://bugs.webkit.org/show_bug.cgi?id=210343
        <rdar://problem/61546396> <rdar://problem/61546519> and <rdar://problem/61546658>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::startSecureConnection):
        (TestWebKitAPI::TCPServer::TCPServer):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (-[ProxyDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ProxyDelegate waitForAlert]):
        (-[ProxyDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

2020-04-10  Devin Rousso  <drousso@apple.com>

        Changes to shared testing JS files should not cause test failures due to console message line numbers changing
        https://bugs.webkit.org/show_bug.cgi?id=210303

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::webViewAddMessageToConsole):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willAddMessageToConsole):

2020-04-10  Simon Fraser  <simon.fraser@apple.com>

        Reset view navigation gesture state between tests
        https://bugs.webkit.org/show_bug.cgi?id=210283

        Re-land r259818 with a null-check on m_webPageProxyForBackForwardListForCurrentSwipe.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

2020-04-10  Alicia Boya García  <aboya@igalia.com>

        [WTF] DataMutex: Add runUnlocked()
        https://bugs.webkit.org/show_bug.cgi?id=209811

        Reviewed by Xabier Rodriguez-Calvar.

        Tests for runUnlocked() and DataMutex checks are introduced.

        * TestWebKitAPI/Tests/WTF/DataMutex.cpp:
        (TestWebKitAPI::TEST):

== Rolled over to ChangeLog-2020-04-10 ==
