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

        [WPE][GTK] Port API test harness to Python3
        https://bugs.webkit.org/show_bug.cgi?id=213784

        Reviewed by Carlos Alberto Lopez Perez.

        At least now the import chain starting from run-gtk-tests succeeds when the host Python
        version is 3. Within the SDK the harness is still executed under Python2 though, for now.

        * Scripts/run-gtk-tests:
        (GtkTestRunner._setup_testing_environment):
        * glib/api_test_runner.py:
        (TestRunner._run_test_qt):
        * glib/glib_test_runner.py:
        (GLibTestRunner._read_from_pipe):
        (GLibTestRunner._read_from_stderr):
        * jhbuild/jhbuildutils.py:

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

        [webkitperl] nativeArchitecture() needs to support remote devices
        https://bugs.webkit.org/show_bug.cgi?id=213727
        <rdar://problem/64892021>

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests: Determine the machine actually running tests and pass
        that to nativeArchitecture(...).
        (runTest): Pass nativeTarget and nativePort.
        (runJSCStressTests): Ditto.
        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture): Native architecture is dependent on the target device.
        (determineArchitecture): Call nativeArchitecture() instead of accessing the variable directly.
        (nativeArchitecture): Ensure that we return only the architecture of the specified target.

2020-06-30  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed API test gardening. Update test expectations after r263738.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [Flatpak SDK] Add libserf
        https://bugs.webkit.org/show_bug.cgi?id=213682

        Reviewed by Carlos Alberto Lopez Perez.

        Subversion depends on SERF, which requires SCons for its build (the SERF CMake support is
        incomplete)...

        * buildstream/elements/sdk-build-depends/scons.bst: Added.
        * buildstream/elements/sdk/libserf.bst: Added.
        * buildstream/elements/sdk/subversion.bst:

2020-06-29  Brady Eidson  <beidson@apple.com>

        JavaScript cannot be injected into iframes
        <rdar://problem/54168946> and https://bugs.webkit.org/show_bug.cgi?id=213556

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        (-[FramesMessageHandler userContentController:didReceiveScriptMessage:]):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

2020-06-29  Jonathan Bedard  <jbedard@apple.com>

        [TestExpectations] Remove --csv option
        https://bugs.webkit.org/show_bug.cgi?id=213762
        <rdar://problem/64913762>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationLine.to_csv): Deleted.
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.__init__): Remove --csv option.
        (PrintExpectations._format_lines): Ditto.
        (PrintBaselines.__init__): Ditto.
        (PrintBaselines.execute): Ditto.
        (PrintBaselines._print_baselines): Ditto.
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.run_test):
        (PrintExpectationsTest.test_include):
        (PrintBaselinesTest.test_basic):
        (PrintBaselinesTest.test_multiple):
        (PrintExpectationsTest.test_csv): Deleted.
        (PrintBaselinesTest.test_csv): Deleted.

2020-06-29  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove ENABLE_STREAMS_API compilation flag
        https://bugs.webkit.org/show_bug.cgi?id=213728

        Reviewed by Sam Weinig.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [iOS] editing/selection/ios/select-text-after-changing-focus.html sometimes fails
        https://bugs.webkit.org/show_bug.cgi?id=213745
        Work towards <rdar://problem/64808138>

        Reviewed by Tim Horton.

        See WebKit/ChangeLog for more details. If this test happens to be run after another test that has written
        something to the pasteboard, it will still fail due to the callout menu showing up with the option to paste.
        Mitigate this by clearing the contents of the system pasteboard between tests, such that content copied from
        previous tests doesn't change the behavior of subsequent tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2020-06-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] run-webkit-tests is failing to run DRT and WTR without --architecture x86_64
        https://bugs.webkit.org/show_bug.cgi?id=213688

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/win.py:
        (WinPort._port_flag_for_scripts):
        (WinPort._build_path):
        (WinPort._ntsd_location):
        Replaced self.get_option('architecture') with self.architecture().

2020-06-29  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Support Apple Silicon running x86 processes
        https://bugs.webkit.org/show_bug.cgi?id=213487
        <rdar://problem/64606667>

        Unreviewed infrastructure fix.

        * Scripts/webkitdirs.pm:
        (architecturesForProducts): Return architecutre(), not determineArchitecture().

2020-06-29  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [webkitpy] PHP7.4 support on Debian platforms
        https://bugs.webkit.org/show_bug.cgi?id=213721

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version):

2020-06-29  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r263625): [WPE][GTK] MiniBrowser output no longer includes stderr and stdout
        https://bugs.webkit.org/show_bug.cgi?id=213696

        Reviewed by Žan Doberšek.

        This patch adds a new optional argument to Executive.run_command() to control stdout output.
        By default the subprocess.PIPE value is used, to keep backward compatibility. Set the stdout
        argument to None to display the output on the terminal tty.

        The GTK and WPE run_minibrowser() implementations now use this new argument, along with
        setting return_stderr to False to indicate we also want stderr displayed on the terminal
        tty.

        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.run_command):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.run_command):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_command):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.run_minibrowser):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.run_minibrowser):

2020-06-29  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r263625): run-minibrowser --debug/--release options gone
        https://bugs.webkit.org/show_bug.cgi?id=213697

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/minibrowser/run_webkit_app.py:
        (main): Explicitely skip the --target option. Previous code was also skipping --release and
        --debug options because their `dest` is the same as with the --target option.

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

        [GTK][WPE] Add webkit_authentication_request_get_security_origin
        https://bugs.webkit.org/show_bug.cgi?id=213596

        Reviewed by Michael Catanzaro.

        Update the unit tests to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationRequest):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):

2020-06-28  Geoffrey Garen  <ggaren@apple.com>

        Rename initializeThreading to initialize
        https://bugs.webkit.org/show_bug.cgi?id=213674

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::ComplexTextControllerTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::ContentExtensionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/StringUtilities.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

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

        Revert r262654 because it caused <rdar://problem/64664156>.
        Moreover it is no longer necessary as the embedding client
        changes selection through a different SPI after focusing.

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

2020-06-27  Keith Miller  <keith_miller@apple.com>

        compare-results should be able to parse multiple JSONs at once by merging them
        https://bugs.webkit.org/show_bug.cgi?id=213685

        Reviewed by Saam Barati.

        This patch improves the compare-results script to enable it to
        merge JSON output files. This is handy when running scripts by
        hand where you'll get many a and b JSONs.  To do the merging this
        patch moves the logic of merge-result-jsons into a shared library.

        compare-results can take multiple files sequentally or by passing
        the '-a'/'-b' flags multiple times. e.g. `/compare-results -a
        OG-1.json -a OG-2.json -a OG-3.json -a OG-4.json -b MC-1.json
        MC-2.json MC-3.json MC-4.json` will behave as you'd expect;
        combining all the OG JSONs and the MC JSONs before computing the
        result.

        Lastly, the benchmark_results script now can handle duplicates of
        an aggregator in the aggregator list. This is useful because
        otherwise the logic of merging JSONs is significantly more
        complicated.

        * Scripts/compare-results:
        (getOptions):
        (main):
        * Scripts/merge-result-jsons:
        (readJSONFile):
        (deepAppend): Deleted.
        (mergeJSONs): Deleted.
        * Scripts/webkitpy/benchmark_runner/benchmark_json_merge.py: Copied from Tools/Scripts/merge-result-jsons.
        (deepAppend):
        (mergeJSONs):
        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults._aggregate_results_for_test):
        (BenchmarkResults._lint_subtest_results):
        * Scripts/webkitpy/benchmark_runner/benchmark_results_unittest.py:

2020-06-27  Jer Noble  <jer.noble@apple.com>

        iOS Safari incorrectly reports "AppleCoreMedia" as UA string
        https://bugs.webkit.org/show_bug.cgi?id=213245
        <rdar://problem/64471582>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm: Added.
        (TestWebKitAPI::parseUserAgent):
        (TestWebKitAPI::TEST):

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

        Migrate run-minibrowser to webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=213431

        Reviewed by Jonathan Bedard.

        The perl version was renamed to old-run-minibrowser and remains used by the Mac ports.
        run-minibrowser is now a Python script hooking into webkitpy and the Port infrastructure.
        Both WPE and GTK ports will now use the pure python implementation.

        * Scripts/old-run-minibrowser: Copied from Tools/Scripts/run-minibrowser.
        * Scripts/run-minibrowser:
        * Scripts/webkitpy/minibrowser/run_minibrowser.py: Added.
        (main):
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.run_minibrowser_arguments):
        (Port):
        (Port.run_minibrowser):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.environment_for_api_tests):
        (DarwinPort):
        (DarwinPort.run_minibrowser_arguments):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.show_results_html_file):
        (GtkPort.configuration_for_upload):
        (GtkPort):
        (GtkPort.run_minibrowser):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.show_results_html_file):
        (WPEPort.configuration_for_upload):
        (WPEPort):
        (WPEPort.run_minibrowser):

2020-06-27  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Update test runner for changes to Options and signing
        https://bugs.webkit.org/show_bug.cgi?id=213650

        Reviewed by Don Olmstead.

        * Scripts/webkitdirs.pm: Update extension for PlayStation binary

2020-06-26  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Allow callers to override the reported model (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=213677
        <rdar://problem/64834043>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/port/base.py:
        (Port.configuration_for_upload): Set the model based on --model.
        * Scripts/webkitpy/port/factory.py:
        (configuration_options): Add --model option, drive-by fix for --architecture.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.configuration_for_upload): --model overrides detected model.

2020-06-26  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Automatically detect hw architecture for supporting Apple Silicon
        https://bugs.webkit.org/show_bug.cgi?id=213653
        <rdar://problem/64817656>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/config/ews.json: iOS has the correct defaults, no need to override them.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo):
        (PlatformInfo.architecture): Retrieve the current system's architecture.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__):
        (MockPlatformInfo.architecture):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Remove 'did_override_architecture', should be implied by architecture compared with DEFAULT_ARCHITECTURE.
        (Port.architecture): Return the architecture specified by the user, if it exists.
        (Port.set_architecture): Remove 'did_override_architecture'.
        * Scripts/webkitpy/port/factory.py:
        (configuration_options): Add --arm and --architecture flags.
        * Scripts/webkitpy/port/mac.py:
        (MacPort): Add arm64 to supported architectures.
        (MacPort.architecture): Convert arm64e to arm64, check the host's architecture.
        (MacPort._build_driver_flags): Always specify the build architecture since it may be x86_64 or arm64.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_64bit):
        (MacTest):
        (MacTest.test_arm):
        (MacTest.test_default):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.run_command): Remove did_override_architecture.

2020-06-26  Jonathan Bedard  <jbedard@apple.com>

        [Big Sur] Handle baseline search path (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=213639
        <rdar://problem/64789480>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Copy reference version by value, not by reference.

2020-06-26  Geoffrey Garen  <ggaren@apple.com>

        Initializing the main thread should initialize the main run loop
        https://bugs.webkit.org/show_bug.cgi?id=213637

        Reviewed by Anders Carlsson.

        Updated TestWebKitAPI to stop using RunLoop::initializeMain directly.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::ComplexTextControllerTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::ContentExtensionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/DNS.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (initializeInAppBrowserPrivacyTestSettings):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        * WebKitTestRunner/TestController.cpp:
        (TestController::initialize):

2020-06-26  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Support Apple Silicon running x86 processes
        https://bugs.webkit.org/show_bug.cgi?id=213487
        <rdar://problem/64606667>

        Reviewed by Saam Barati.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Add --architecture flag.
        (runTest): Run test suite with specific architecture.
        (runJSCStressTests): Pass architecture to run-jsc-stress-tests.
        * Scripts/run-jsc-stress-tests: Add --force-architecture flag.
        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture): Add function to determine machine's native architecture.
        (determineArchitecture): Leverage the nativeArchitecture instead of hard-coding simulator
        architectures.
        (architecturesForProducts): Determine the architectures supported by a given build.
        (nativeArchitecture): Return nativeArchitecture.

2020-06-26  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation should observe adjacent elements with new renderer together
        https://bugs.webkit.org/show_bug.cgi?id=213333

        Reviewed by Geoffrey Garen.

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

2020-06-26  Jonathan Bedard  <jbedard@apple.com>

        [Big Sur] Handle baseline search path
        https://bugs.webkit.org/show_bug.cgi?id=213639
        <rdar://problem/64789480>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.default_baseline_search_path): Break infinite loop for major version bump.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_big_sur_baseline_search_path): Test Big Sur baseline search path.

2020-06-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        generate-jsc-bundle should fail if passed an invalid remote-config-file parameter
        https://bugs.webkit.org/show_bug.cgi?id=213615

        Reviewed by Žan Doberšek.

        Raise an exception if the parameter passed as remote-config-file is not a file.

        * Scripts/generate-jsc-bundle:
        (main):

2020-06-26  Takashi Komori  <takashi.komori@sony.com>

        Add myself to contributors.json

        Unreviewed.

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

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

        [Big Sur] Regression tests fail to run due to failed assert: self._os_version.major == 10
        https://bugs.webkit.org/show_bug.cgi?id=213639

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__): Remove the assert since it is no longer valid.

2020-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263537.
        https://bugs.webkit.org/show_bug.cgi?id=213640

        Broke watchOS and tvOS builds

        Reverted changeset:

        "iOS Safari incorrectly reports "AppleCoreMedia" as UA string"
        https://bugs.webkit.org/show_bug.cgi?id=213245
        https://trac.webkit.org/changeset/263537

2020-06-25  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r256166, r260596) WKNavigationAction.request.allHTTPHeaderFields needs to contain User-Agent and Accept
        https://bugs.webkit.org/show_bug.cgi?id=213626
        <rdar://problem/62374208>

        Reviewed by Darin Adler.

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

2020-06-25  Jer Noble  <jer.noble@apple.com>

        iOS Safari incorrectly reports "AppleCoreMedia" as UA string
        https://bugs.webkit.org/show_bug.cgi?id=213245
        <rdar://problem/64471582>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm: Added.
        (TestWebKitAPI::parseUserAgent):
        (TestWebKitAPI::TEST):

2020-06-25  Daniel Bates  <dabates@apple.com>

        [iOS] -_requestTextInputContextsInRect cannot find empty Quip spreadsheet title
        https://bugs.webkit.org/show_bug.cgi?id=213564
        <rdar://problem/59355847>

        Reviewed by Simon Fraser.

        Add some tests.

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

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

        Add a new templated string type to help write more idiomatic parsing code
        https://bugs.webkit.org/show_bug.cgi?id=213588

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringParsingBuffer.cpp: Added.
        (TestWebKitAPI::TEST):
        Added new tests for new class.

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

        Text manipulation should exclude text rendered using icon-only fonts
        https://bugs.webkit.org/show_bug.cgi?id=213446
        <rdar://problem/63734298>

        Reviewed by Myles Maxfield.

        Add a new API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

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

        [ews] Share more bots between EWS builder and testers
        https://bugs.webkit.org/show_bug.cgi?id=213521

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews] Improve handling of invalid changelog
        https://bugs.webkit.org/show_bug.cgi?id=213609

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        (ValidateReviewer.run):

2020-06-24  Alexey Proskuryakov  <ap@apple.com>

        macOS Big Sur build fix.

        Remove long obsolete checks for Mac OS X 10.6 that didn't respect the major version.

        * MiniBrowser/Makefile:
        * TestWebKitAPI/Makefile:
        * WebKitTestRunner/Makefile:

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

        REGRESSION(r262341) Use UTF-8 to decode CFURLRefs from IPC
        https://bugs.webkit.org/show_bug.cgi?id=213565
        <rdar://problem/64408924>

        Reviewed by Darin Adler.

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

2020-06-24  Umar Iqbal  <uiqbal@apple.com>

        We should resurrect the older patch that collects some statistics of web API calls
        https://bugs.webkit.org/show_bug.cgi?id=213319

        Reviewed by Brent Fulgham.
        
        + Enabled ENABLE_WEB_API_STATISTICS flag.
        
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-06-24  Andy Estes  <aestes@apple.com>

        [iOS] Open element actions sometimes result in a hover instead of a click
        https://bugs.webkit.org/show_bug.cgi?id=213530
        <rdar://problem/64176707>

        Reviewed by Darin Adler.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ElementActionTests.mm: Added.
        * TestWebKitAPI/Tests/ios/link-with-hover-menu.html: Added.

2020-06-24  Caitlin Potter  <caitp@igalia.com>

        [JSC] add microbenchmark for op_get_private_name
        https://bugs.webkit.org/show_bug.cgi?id=213544

        Reviewed by Yusuke Suzuki.

        Add machinery to add --usePrivateClassFields flag in a family of
        microbenchmarks.
 
        * Scripts/run-jsc-benchmarks:

2020-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to allow applications to handle the HTTP authentication credential storage
        https://bugs.webkit.org/show_bug.cgi?id=213177

        Reviewed by Michael Catanzaro.

        Update the authentication tests to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationCancel):
        (testWebViewAuthenticationLoadCancelled):
        (testWebViewAuthenticationFailure):
        (testWebViewAuthenticationNoCredential):
        (testWebViewAuthenticationEphemeral):
        (testWebViewAuthenticationStorage):
        (testWebViewAuthenticationSuccess):
        (testWebViewAuthenticationEmptyRealm):
        (serverCallback):
        (beforeAll):

2020-06-23  Alex Christensen  <achristensen@webkit.org>

        Make HTTP/3 experimental feature work on iOS and only create storage directory if enabled
        https://bugs.webkit.org/show_bug.cgi?id=213527

        Reviewed by Geoffrey Garen.

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

2020-06-23  Jonathan Bedard  <jbedard@apple.com>

        [Big Sur] Add 11.0 version to scripts
        https://bugs.webkit.org/show_bug.cgi?id=213532
        <rdar://problem/64663032>

        Reviewed by Tim Horton.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Make version checks more explicit, add Big Sur.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__): Add Big Sur.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser): Ditto.

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

        REGRESSION (r244633): Mail flashes when copying text in an email
        https://bugs.webkit.org/show_bug.cgi?id=213529
        <rdar://problem/55025522>

        Reviewed by Tim Horton.

        Add an API test to verify that temporarily changing the height of the document before restoring it to the
        original value does not cause intrinsic content size to be invalidated.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView invalidateIntrinsicContentSize]):
        (-[AutoLayoutWKWebView setInvalidatedIntrinsicContentSizeBlock:]):
        (-[AutoLayoutWKWebView invalidatedIntrinsicContentSizeBlock]):

2020-06-23  Diego Pino Garcia  <dpino@igalia.com>

        [ews] Allow archiving 'jsc' product
        https://bugs.webkit.org/show_bug.cgi?id=213518

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2020-06-23  Alex Christensen  <achristensen@webkit.org>

        Expose already-available WKNavigationAction.request.HTTPBody through the API
        https://bugs.webkit.org/show_bug.cgi?id=179077

        Reviewed by Brady Eidson.

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

2020-06-23  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Add GStreamer patch to fix EWS glupload racy crash
        https://bugs.webkit.org/show_bug.cgi?id=210498

        Reviewed by Philippe Normand.

        This WebKit patch backports a patch from GStreamer 1.17 that prevents
        the crashes in the attached bug to our flatpak build.

        * buildstream/elements/sdk/gst-plugins-base.bst:
        * buildstream/patches/gst-plugins-base-0003-glbasefilter-add-support-for-changing-the-display.patch: Added.

2020-06-23  Alicia Boya García  <aboya@igalia.com>

        [flatpak] Ensure en_US.UTF-8 locale
        https://bugs.webkit.org/show_bug.cgi?id=212459

        Reviewed by Philippe Normand.

        When developing WebKit we want as few system differences as possible
        to make tests reproducible.

        en_US.UTF-8 is indeed the only locale installed in our development
        flatpak, but our scripts were not correctly clearing most locale
        environment variables, which resulted in warnings when running some
        tools (notably perl) when the user OS has a different locale.

        This patch ensures all locale environment variables are cleared and
        LANG is set to en_US.UTF-8. It also removes now redundant code from
        flatpakutils.py.

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

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

        [ Catalina Debug WK2 ] fast/events/platform-wheelevent-in-scrolling-div.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=213351
        <rdar://problem/64502429>

        Reviewed by Tim Horton.

        The variadic CGEventCreateScrollWheelEvent() seems to have an issue that causes the resulting event
        to rarely put the x value into the deltaY. Change to the non-variadic CGEventCreateScrollWheelEvent2()
        to avoid this.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2020-06-23  Diego Pino Garcia  <dpino@igalia.com>

        [ews] Rename 'JSCTestsFactory' to 'JSCBuildAndTestsFactory'
        https://bugs.webkit.org/show_bug.cgi?id=213503

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        (JSCBuildAndTestsFactory):
        (JSCTestsFactory): Deleted.
        (JSCTestsFactory.__init__): Deleted.
        * BuildSlaveSupport/ews-build/loadConfig.py:

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

        [ews] Add JSC-Only builders for MIPS and ARMv7 architectures (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=213366

        Unreviewed follow-up fix.

        Remove unused runTests parameter.
        * BuildSlaveSupport/ews-build/factories.py:

2020-06-23  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] relax restriction on build-webkit script name
        https://bugs.webkit.org/show_bug.cgi?id=213432

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Match the build-webkit string in the whole command-line
        argument and thus allow alternative implementations of build-webkit. Also let the
        MAX_CPU_LOAD env var in the sandbox.

2020-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: set a base directory for website data and cache
        https://bugs.webkit.org/show_bug.cgi?id=213368

        Reviewed by Michael Catanzaro.

        Stop using the default ones.

        * MiniBrowser/gtk/main.c:
        (activate):

2020-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to configure and handle DOM cache to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=213337

        Reviewed by Adrian Perez de Castro.

        Handle new website data in MiniBrowser and add a unit test.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration):
        (testWebsiteDataDOMCache):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2020-06-22  Diego Pino Garcia  <dpino@igalia.com>

        [ews] Add JSC-Only builders for MIPS and ARMv7 architectures
        https://bugs.webkit.org/show_bug.cgi?id=213366

        Reviewed by Aakash Jain.

        In a follow-up patch the built product of these bots will be consumed
        by the EWS JSC-Only testing bots.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        (JSCBuildFactory):
        (JSCBuildFactory.__init__):
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestBuildFactory):
        (TestBuildFactory.test_jsc_mipsel_factory):
        (TestBuildFactory.test_jsc_armv7_factory):
        * BuildSlaveSupport/ews-build/loadConfig.py:

2020-06-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] fast/dom/Window/alert-with-unmatched-utf16-surrogate-should-not-crash.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=213452

        Reviewed by Yusuke Suzuki.

        If window.alert() was given an invalid UTF-16 sequence, Windows
        DumpRenderTree output it without any conversions. It should output
        "(null)" to match with WebKitTestRunner behavior.

        * DumpRenderTree/win/UIDelegate.cpp:
        (toMessage): Added
        (UIDelegate::runJavaScriptAlertPanelWithMessage):
        (UIDelegate::runJavaScriptConfirmPanelWithMessage):
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt):
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (UIDelegate::setStatusText):

2020-06-22  Jer Noble  <jer.noble@apple.com>

        [ macOS iOS ] (r263321): TestWebKitAPI.SleepDisabler.Load & TestWebKitAPI.SleepDisabler.Reload are constant failures
        https://bugs.webkit.org/show_bug.cgi?id=213475
        <rdar://problem/64603555>

        Reviewed by Eric Carlson.

        Looks like the SleepDisabler can come and go while the TestWebKitAPI process is spinning, so make the
        Reload and Load tests more deterministic by only checking SleepDisabler after getting a "playing" message
        from the WebContent process.

        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        (SleepDisabler::runAndWaitUntilPlaying):
        (SleepDisabler::loadPlayingPage):
        (TEST_F):

2020-06-22  Jonathan Bedard  <jbedard@apple.com>

        resultsdbpy: Make architecture differences explicit
        https://bugs.webkit.org/show_bug.cgi?id=213473
        <rdar://problem/64602736>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.toString):

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

        Update macOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=213484

        Reviewed by Alexey Proskuryakov.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/DebugRelease.xcconfig:

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

        API Test WeakLinking.WeakImport fails on arm64
        https://bugs.webkit.org/show_bug.cgi?id=213477

        Reviewed by Alexey Proskuryakov.

        * 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:
        Add this architecture to the TBD files.

2020-06-22  Jonathan Bedard  <jbedard@apple.com>

        Bring up watchOS/tvOS on build.webkit.org (Follow-up fix x3)
        https://bugs.webkit.org/show_bug.cgi?id=213402
        <rdar://problem/64542588>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): 64 bit is more correct for watchOS embedded builds.

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

        [ews] Switch contributors.json url from trac to svn server
        https://bugs.webkit.org/show_bug.cgi?id=213457

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer):
        (ValidateCommiterAndReviewer.load_contributors_from_trac):

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

        [Flatpak SDK] Persist sccache auth token across flatpak updates
        https://bugs.webkit.org/show_bug.cgi?id=213427

        Reviewed by Žan Doberšek.

        After a successful flatpak update check if an sccache auth token exists and reuse it when
        updating the sccache config file.

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

2020-06-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] URL should support dataLog
        https://bugs.webkit.org/show_bug.cgi?id=213450

        Reviewed by Mark Lam.

        Add test for URL::dump.

        * TestWebKitAPI/Tests/WTF/URL.cpp:
        (TestWebKitAPI::TEST_F):

2020-06-21  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Nightly runner fails to extract zip files
        https://bugs.webkit.org/show_bug.cgi?id=213445

        Reviewed by Darin Adler.

        * Scripts/webkit-flatpak-run-nightly: Ensure the buffered zip data is written to disk before
        extraction.

2020-06-21  Jer Noble  <jer.noble@apple.com>

        WebKit fails to leave audio routing arbitration during navigation, closing.
        https://bugs.webkit.org/show_bug.cgi?id=213426
        <rdar://problem/64395051>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AudioRoutingArbitration.mm: Added.
        (AudioRoutingArbitration::statusShouldBecomeEqualTo):
        (TEST_F):

2020-06-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r259219): Sleep assertion remains active if WKWebView is closed or WebContent process crashes
        https://bugs.webkit.org/show_bug.cgi?id=213434
        <rdar://problem/57541662>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        (SleepDisabler::loadPlayingPage):
        (SleepDisabler::hasSleepDisablerShouldBecomeEqualTo):
        (TEST_F):

2020-06-20  Jonathan Bedard  <jbedard@apple.com>

        Bring up watchOS/tvOS on build.webkit.org (Follow-up fix x2)
        https://bugs.webkit.org/show_bug.cgi?id=213402
        <rdar://problem/64542588>

        Unreviewed test fix.

        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl: Native Macs never
        use 32 bit tool binaries.

2020-06-19  Jonathan Bedard  <jbedard@apple.com>

        Bring up watchOS/tvOS on build.webkit.org (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=213402
        <rdar://problem/64542588>

        Unreviewed build-fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Use arm64_32 to build watchOS device.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): watchOS device should be considered 32 bit.
        * Scripts/configure-xcode-for-embedded-development: Force-copy MediaAccessibility.framework.
        * Scripts/webkitdirs.pm:
        (extractNonMacOSHostConfiguration): Native Macs never use 32 bit tool binaries.

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

        Delete dead code for old ews api tests
        https://bugs.webkit.org/show_bug.cgi?id=213421

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_api_tests_command): Deleted.
        * Scripts/webkitpy/common/net/apitestresults.py: Removed.
        * Scripts/webkitpy/common/net/apitestresults_unittest.py: Removed.
        * Scripts/webkitpy/port/base.py:
        (Port.bindings_results_directory):
        (Port.api_results_directory): Deleted.
        * Scripts/webkitpy/tool/bot/apitestresultsreader.py: Removed.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests._run_api_tests): Deleted.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (test_runtests_api_debug): Deleted.

2020-06-19  Jonathan Bedard  <jbedard@apple.com>

        Bring up watchOS/tvOS on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=213402
        <rdar://problem/64542588>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build): Add tvOS and watchOS.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2020-06-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Provide a _WKWebAuthenticationPanelUpdatePINInvalid update to UI clients if the returned PIN from the client is not valid
        https://bugs.webkit.org/show_bug.cgi?id=213404
        <rdar://problem/64543894>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-fake-pin-invalid-error-retry.html: Added.

2020-06-19  Jonathan Bedard  <jbedard@apple.com>

        Bring up watchOS/tvOS on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=213402
        <rdar://problem/64542588>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add AppleTV and watchOS builders.
        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (BuildFactory.__init__): Support AppleTV and watchOS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS13.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS13@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS13Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS13Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOS6.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOS6@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOSSimulator6.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOSSimulator6@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2020-06-19  Saam Barati  <sbarati@apple.com>

        Have a memory monitor thread in jsc shell when running tests using --memory-limited
        https://bugs.webkit.org/show_bug.cgi?id=213389

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2020-06-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Make isolated tree enablement status dependent on client preference
        https://bugs.webkit.org/show_bug.cgi?id=213355
        <rdar://problem/64506577>

        Reviewed by Zalan Bujtas.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate defaultConfiguration]):

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

        Improve handling of trac downtime by commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=213377

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py: Load contributors.json from disk when loading from trac fails.
        (ValidateCommiterAndReviewer.load_contributors_from_disk):
        (ValidateCommiterAndReviewer.load_contributors_from_trac):
        (ValidateCommiterAndReviewer.load_contributors):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-test

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

        [WPE] Warn potential issues when creating WindowViewBackend
        https://bugs.webkit.org/show_bug.cgi?id=213326

        Reviewed by Philippe Normand.

        Make it easier to debug eventual GL issues when starting up MiniBrowser in
        windowed mode.

        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WaylandEGLConnection::singleton):
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):

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

        [webkitpy][WPE] Default to headless if _display_server is xfvb
        https://bugs.webkit.org/show_bug.cgi?id=213327

        Reviewed by Philippe Normand.

        Xvfb is used as the default display server for some scripts, and the
        equivalent for WPE is the headless one.

        WTR and the API tests already create only HeadlessViewBackends, but the
        WebDriver tests create them through MiniBrowser, which requires the
        '--headless' parameter.

        * Scripts/run-webdriver-tests: Do not override _display_server
        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Define _display_server for all ports to avoid
        eventually needing to override it.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.__init__): Default to 'headless' if _display_server is 'xvfb'
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (main): Dot not override _display_server

2020-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add support for fetching registrable domains with resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=213291

        Reviewed by Adrian Perez de Castro.

        Update GLib ITP unit test to check also fetch and remove.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataITP):

2020-06-19  Tomoki Imai  <Tomoki.Imai@sony.com>

        Change my (Tomoki Imai's) status to committer

        Unreviewed, just updating contributors.json for myself.

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

2020-06-18  Jonathan Bedard  <jbedard@apple.com>

        Add SPI to preconnect to a server (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=213109
        <rdar://problem/64184412>

        Unreviewed build-fix.

        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm: HTTPServer does not exist if HAVE(NETWORK_FRAMEWORK) is false.

2020-06-18  Jonathan Bedard  <jbedard@apple.com>

        [iOS] Two KeyboardInputTests are failing on recent iOS SDK versions (build-fix)
        https://bugs.webkit.org/show_bug.cgi?id=213183
        <rdar://problem/64273483>

        Unreviewed build fix.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (webViewWithAutofocusedInput): bool may not be the same type as BOOL.

2020-06-18  Saam Barati  <sbarati@apple.com>

        call skip when skipping JetStream2 wasm test
        https://bugs.webkit.org/show_bug.cgi?id=213354

        Reviewed by Yusuke Suzuki.

        So we can see the logging that we're skipping.

        * Scripts/run-jsc-stress-tests:

2020-06-18  Joonghun Park  <jh718.park@samsung.com>

    Unreviewed. Remove the build warning below since r262971.
    warning: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]

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

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

        [Intl] Enable RelativeTimeFormat and Locale by default
        https://bugs.webkit.org/show_bug.cgi?id=213324

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:
        Remove feature flags.

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

        Unreviewed build fix after r263194

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues): Guarded code that mentions
        UIContextMenuInteraction with USE(UICONTEXTMENU).

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

        Unreviewed infrastructure fix, temporarily remove ews116 due to hardware failure tracked with rdar://64424245

        * BuildSlaveSupport/ews-build/config.json:

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

        [GTK][WPE] Add API to configure and handle service worker registrations to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=213290

        Reviewed by Michael Catanzaro.

        Handle new website data in MiniBrowser and add a unit test.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataITP):
        (testWebsiteDataServiceWorkerRegistrations):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2020-06-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        RebaselineServer: "Rebaseline queue" button is placed behind the footer
        https://bugs.webkit.org/show_bug.cgi?id=213258

        Reviewed by Zalan Bujtas.

        * Scripts/webkitpy/tool/servers/data/rebaselineserver/index.html: Moved 'log' and 'queue' elements after 'footer' element.
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/main.css:
        (#queue): Changed 'bottom' property from 3em to 4em.

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

        [macOS] Shift-tab in a bullet list in Mail Compose jumps back to Subject field
        https://bugs.webkit.org/show_bug.cgi?id=213320
        <rdar://problem/63831962>

        Reviewed by Tim Horton.

        Add a new API test to verify that preventing the "keypress" event for shift+tab in an SPI-editable web view
        causes us to avoid relinquishing focus.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:

2020-06-17  Andy Estes  <aestes@apple.com>

        REGRESSION (r258092): fast/forms/ios/file-upload-panel.html fails when HAVE(UICONTEXTMENU_LOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=213314
        <rdar://problem/60339129>

        Reviewed by Maciej Stachowiak.

        fast/forms/ios/file-upload-panel.html sets the shouldHandleRunOpenPanel and
        shouldPresentPopovers test options to false so that WKTR will (a) not register a
        runOpenPanel UI delegate callback, causing WebKit to create a WKFileUploadPanel instead, and
        (b) swizzle two UIKit view controller presentation methods to prevent the document picker
        menu from being presented. The test merely wants the WKFileUploadPanel instance to exist in
        order to query its available actions, not for it to show UI.

        In r258092, WKFileUploadPanel now sometimes uses a UIContextMenuInteraction instance to
        present the document picker menu, but -[UIContextMenuInteraction _presentMenuAtLocation:]
        fails due to WKTR's above-mentioned swizzling. When this failure occurs,
        UIContextMenuInteraction calls -contextMenuInteraction:willEndForConfiguration:animator: on
        its delegate (the WKFileUploadPanel), which dismisses the open panel before the test has had
        a chance to query the available actions.

        Fixed this by swizzling -[UIContextMenuInteraction _presentMenuAtLocation:] when the
        shouldPresentPopovers test option is false.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overridePresentMenuOrPopoverOrViewController): Renamed from
        overridePresentViewControllerOrPopover.
        (WTR::TestController::platformResetStateToConsistentValues): Swizzled
        -[UIContextMenuInteraction _presentMenuAtLocation:] with
        overridePresentMenuOrPopoverOrViewController when the shouldPresentPopovers test option is
        false.
        (overridePresentViewControllerOrPopover): Renamed to
        overridePresentMenuOrPopoverOrViewController.

2020-06-17  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r263044): [macOS] TestWebKitAPI.TextManipulation.InsertingContentIntoAlreadyManipulatedContentCreatesTextManipulationItem is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=213311
        <rdar://problem/64456413>

        Reviewed by Wenson Hsieh.

        TextManipulation.InsertingContentIntoAlreadyManipulatedContentCreatesTextManipulationItem does not wait long 
        enough to make sure TextManipulationController gets notified about the insertion and starts observing.

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

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

        Delete code for old ews bindings queue
        https://bugs.webkit.org/show_bug.cgi?id=213315

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_bindings_tests_command): Deleted.
        (WinPort.run_bindings_tests_command): Deleted.
        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_bindings_tests_command): Deleted.
        * Scripts/webkitpy/common/net/generictestresults.py: Removed.
        * Scripts/webkitpy/common/net/generictestresults_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/bindingstestresultsreader.py: Removed.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._retry_bindings_tests): Deleted.
        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py:
        (MockBindingsEarlyWarningSystem): Deleted.
        (MockBindingsEarlyWarningSystem.__init__): Deleted.
        (MockBindingsEarlyWarningSystem.test_results): Deleted.
        (BindingsEarlyWarningSystemTest): Deleted.
        (BindingsEarlyWarningSystemTest._results_indicate_all_passed): Deleted.
        (BindingsEarlyWarningSystemTest._create_task): Deleted.
        (BindingsEarlyWarningSystemTest.test_success_case): Deleted.
        (BindingsEarlyWarningSystemTest.test_test_failure): Deleted.
        (BindingsEarlyWarningSystemTest.test_fix): Deleted.
        (BindingsEarlyWarningSystemTest.test_ineffective_patch): Deleted.
        (BindingsEarlyWarningSystemTest.test_partially_effective_patch): Deleted.
        (BindingsEarlyWarningSystemTest.test_different_test_failures_in_patch_and_tree): Deleted.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (TestBindingsEWS): Deleted.
        (AbstractEarlyWarningSystemTest.test_failing_bindings_tests_message): Deleted.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests._run_bindings_tests): Deleted.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (test_patch_relevant_bindings): Deleted.
        (test_runtests_api): Deleted.

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

        Delete code for old ews style queue
        https://bugs.webkit.org/show_bug.cgi?id=213297

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/stylequeuetask.py: Removed.
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue): Deleted.
        (StyleQueue.__init__): Deleted.
        (StyleQueue.review_patch): Deleted.
        (StyleQueue.run_command): Deleted.
        (StyleQueue.expected_failures): Deleted.
        (StyleQueue.refetch_patch): Deleted.
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (TestReviewQueue): Deleted.

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

        Delete code for old ews webkitpy queue
        https://bugs.webkit.org/show_bug.cgi?id=213299

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/net/generictestresults.py:
        (WebkitpyTestResults): Deleted.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/bot/webkitpytestresultsreader.py: Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (TestWebkitpyEWS): Deleted.
        (AbstractEarlyWarningSystemTest.test_failing_webkitpy_tests_message): Deleted.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests._run_webkitpy_tests): Deleted.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (test_runtests_webkitpy): Deleted.
        (test_patch_not_relevant_bindings): Deleted.
        (test_runtests_api_debug): Deleted.

2020-06-17  Keith Miller  <keith_miller@apple.com>

        WebKitTestRunner should not crash on alert with invalid utf16 strings
        https://bugs.webkit.org/show_bug.cgi?id=213269

        Reviewed by Simon Fraser.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWTFString):

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

        Delete old ews client side code - part 2
        https://bugs.webkit.org/show_bug.cgi?id=213262

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/attachment.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTaskDelegate.command_passed): Deleted.
        (PatchAnalysisTaskDelegate.command_failed): Deleted.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.command_passed): Deleted.
        (AbstractEarlyWarningSystem.command_failed): Deleted.
        * Scripts/webkitpy/tool/commands/perfalizer.py:
        (PerfalizerTask.command_passed): Deleted.
        (PerfalizerTask.command_failed): Deleted.
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractPatchQueue._next_patch): Deleted.
        (AbstractPatchQueue._did_error): Deleted.
        (AbstractPatchQueue._did_skip): Deleted.
        (AbstractPatchQueue._unlock_patch): Deleted.
        (StyleQueue.command_passed): Deleted.
        (StyleQueue.command_failed): Deleted.

2020-06-17  Paulo Matos  <pmatos@igalia.com>

        Add new Igalia EWS workers for ARM/MIPS
        https://bugs.webkit.org/show_bug.cgi?id=212803

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:

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

        TestWebKitAPI.WebCore.WildcardStringMatching needs to initialize Options before accessing them.
        https://bugs.webkit.org/show_bug.cgi?id=213270
        <rdar://problem/64427499>

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WebCore/StringUtilities.mm:
        (TestWebKitAPI::TEST):

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

        Text manipulation should not re-extract elements whose children have been manipulated
        https://bugs.webkit.org/show_bug.cgi?id=213276
        <rdar://problem/64193446>

        Reviewed by Tim Horton.

        Add a new API test where we start and complete text manipulation, and then hide and show the manipulated
        element. This test verifies that the new item callbacks are *not* called after element is shown again.

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

2020-06-16  Saam Barati  <sbarati@apple.com>

        Fix two typos "signifcant" and "signficance". Should be "significant" and "significance"

        * Scripts/compare-results:
        (displayStr):
        (computeMultipleHypothesesSignificance):
        (dumpBreakdowns):
        (writeCSV):
        (computeMultipleHypothesesSignficance): Deleted.

2020-06-16  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility/textarea-selected-text-range.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=213257

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::setAttributeValue):
        (WTR::AccessibilityUIElement::selectedTextRange): Dispatch call into
        WebAccessibilityWrapper onto AX secondary thread to simulate isolated
        tree mode.

2020-06-16  Saam Barati  <sbarati@apple.com>

        Multiple hypothesis testing should use False Discovery Rate instead of Bonferroni
        https://bugs.webkit.org/show_bug.cgi?id=213219

        Reviewed by Mark Lam.

        My previous patch here used Bonferroni to do multiple hypotheses correction.
        Bonferroni does a good job at reducing false positive rate (type I error,
        saying something is significant when it's not, e.g, rejecting the null
        hypothesis when we shouldn't), but at the expense of also having a high
        false negative rate (type II error, saying something is not significant when
        it is, e.g, not rejecting the null hypothesis when we should).
        
        After doing a bit more reading, it seems like using a technique called False
        Discovery Rate (FDR) is better. It still does a good job at controlling type
        I error rate, but without sacrificing a high type II error rate. FDR is based
        on a technique for "estimating the proportion of wrongly rejected null hypotheses" [2].
        
        This patch uses Benjamini and Hochberg estimation of FDR, which relies
        on hypotheses being independent. We know subtests in a benchmark aren't
        fully independent variables, but it's a good enough approximation.
        
        You can read more about FDR:
        1. https://www.stat.berkeley.edu/~mgoldman/Section0402.pdf
        2. https://besjournals.onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2010.00061.x
        3. https://en.wikipedia.org/wiki/False_discovery_rate

        * Scripts/compare-results:
        (displayStr):
        (computeMultipleHypothesesSignficance):
        (dumpBreakdowns):
        (writeCSV):

2020-06-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r262994): Web Inspector is killed when context-clicking anywhere
        <https://webkit.org/b/213224>
        <rdar://problem/64383320>

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add ContextMenuAction.cpp to build systems.
        * TestWebKitAPI/Tests/WebCore/ContextMenuAction.cpp: Add.
        (TestWebKitAPI::TEST):
        - Add TestWebKitAPI.WebCore.ContextMenuAction_IsValidEnum.

2020-06-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Mouse dragging tests are failing because WebKitTestRunner dispatches WM_MOUSELEAVE to the hidden WebView
        https://bugs.webkit.org/show_bug.cgi?id=213239

        Reviewed by Don Olmstead.

        There are two problems:
        1. Windows EventSenderProxy::mouseMoveTo doesn't set WPARAM of WM_MOUSEMOVE
        2. Unexpected WM_MOUSELEAVE discontinues the mouse dragging events

        WPARAM of WM_MOUSEMOVE should represent pressed mouse buttons while dragging.

        WM_MOUSELEAVE is unexpectedly dispatched because the mouse cursor
        is always out of the hidden WebView. The unexpected WM_MOUSELEAVE
        discontinues dragging events. WM_MOUSELEAVE shouldn't be
        dispatched in WebKitTestRunner. Ignore it.

        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo): Set MK_LBUTTON to WPARAM of
        WM_MOUSEMOVE while dragging.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::runRunLoopUntil): Ignore WM_MOUSELEAVE.

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

        Text manipulation should handle nested item boundary elements
        https://bugs.webkit.org/show_bug.cgi?id=213251
        <rdar://problem/63371514>

        Reviewed by Sihui Liu.

        Add a new API test to exercise this scenario.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-06-16  Charlie Turner  <cturner@igalia.com>

        [GTK] Disable video autoplay
        https://bugs.webkit.org/show_bug.cgi?id=184845

        Reviewed by Carlos Garcia Campos.

        Update the various callsites for constructing a view to take into
        account the default policies. I chose the default as autoplay
        allow without sound, which is in keeping with WebCore's choice.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy):
        (newTabCallback):
        (openPrivateWindow):
        (browser_window_get_or_create_web_view_for_automation):
        (browser_window_create_web_view_in_new_tab_for_automation):
        * MiniBrowser/gtk/main.c:
        (createBrowserTab):
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp: Add
        autoplay policy tests, and use modern class initializers.
        (testAutoplayPolicy):
        (beforeAll):

2020-06-16  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Subversion perl bindings unusable
        https://bugs.webkit.org/show_bug.cgi?id=213241

        Reviewed by Sergio Villar Senin.

        * buildstream/elements/sdk/subversion.bst: The svn swig perl library wasn't correctly
        installed, leading to undefined symbols when importing it from the bindings. A new
        integration command now tests this.

2020-06-16  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Update to Qt 5.15
        https://bugs.webkit.org/show_bug.cgi?id=213192

        Reviewed by Sergio Villar Senin.

        The new patch comes from the upstream KDE SDK: https://github.com/KDE/flatpak-kde-runtime/tree/qt5.15lts/patch
        
        * buildstream/elements/qt5/qtbase.bst:
        * buildstream/elements/qt5/qtdeclarative.bst:
        * buildstream/elements/qt5/qtquickcontrols.bst:
        * buildstream/elements/qt5/qtquickcontrols2.bst:
        * buildstream/elements/qt5/qtwayland.bst:
        * buildstream/elements/qt5/qtx11extras.bst:
        * buildstream/patches/qtbase-make-sure-to-correctly-construct-base-platform-theme.patch: Added.
        * buildstream/patches/qtwayland-use-gnome-platform-theme-on-gnome-based-desktops.patch: Removed.
        * buildstream/project.conf:

2020-06-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to configure and enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=177943

        Reviewed by Michael Catanzaro.

        Add --enable-itp command line version to MiniBrowser and unit tests to check the new API.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        (activate):
        * MiniBrowser/wpe/main.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataITP):
        (beforeAll):
        * TestWebKitAPI/glib/TestExpectations.json:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (directoryChangedCallback):
        (WebViewTest::waitUntilFileChanged):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2020-06-16  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r263029): [Flatpak SDK] Broke initial SDK installation

        Rubber-stamped by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (FlatpakObject.version): Gracefully return an empty version when the flatpak info command
        fails. This usually means the app has not been installed yet.

2020-06-15  Megan Gardner  <megan_gardner@apple.com>

        Text form controls can scroll by 1px when value is the same length as size. No scrolling should happen.
        https://bugs.webkit.org/show_bug.cgi?id=212856
        <rdar://problem/63541707>

        Reviewed by Zalan Bujtas.

        Rebased to reflect new sizes.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):

2020-06-15  Jonathan Bedard  <jbedard@apple.com>

        Follow-up fix: Make API tests tolerant of our relatively new use of WebPageProxy::preconnectTo
        https://bugs.webkit.org/show_bug.cgi?id=213144
        <rdar://problem/64316743>

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: Guard didFinishNavigation declaration with HAVE(NETWORK_FRAMEWORK).

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

        Provide alternatively-named SPI for user style sheets and scripts
        https://bugs.webkit.org/show_bug.cgi?id=213206

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (fontAllowList):
        (createWebViewAndOffscreenWindow):
        (resetWebViewToConsistentStateBeforeTesting):
        (fontWhitelist): Deleted.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorld.mm:
        (TEST):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateFontAllowList):
        (WTR::TestController::platformInitializeContext):
        (WTR::generateWhitelist): Deleted.

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

        Add SPI to preconnect to a server
        https://bugs.webkit.org/show_bug.cgi?id=213109
        <rdar://problem/64184412>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2020-06-15  Keith Miller  <keith_miller@apple.com>

        Signal handlers should have a two phase installation.
        https://bugs.webkit.org/show_bug.cgi?id=213160

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/Signals.cpp:
        (TEST):

2020-06-15  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation does not observe newly displayed element inside previously observed content
        https://bugs.webkit.org/show_bug.cgi?id=213156

        Reviewed by Darin Adler.

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

2020-06-15  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Bump Subversion and enable Perl bindings
        https://bugs.webkit.org/show_bug.cgi?id=213189

        Reviewed by Žan Doberšek.

        * buildstream/elements/sdk-build-depends/swig.bst: Added.
        * buildstream/elements/sdk/subversion.bst: Enable Perl bindings so that git svn can be used within the sandbox.

2020-06-15  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] flatpak update still not displayed
        https://bugs.webkit.org/show_bug.cgi?id=213180

        Reviewed by Žan Doberšek.

        Added a new --version option to the script. We no longer gather the flatpak update command
        output to know if something was updated or not. Instead we get the version of the SDK prior
        to the update operation and compare that with the version after the update.

        * flatpak/flatpakutils.py:
        (FlatpakObject.version):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.main):

2020-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to expose UIClient::requestStorageAccessConfirm
        https://bugs.webkit.org/show_bug.cgi?id=210422

        Reviewed by Michael Catanzaro.

        Handle WebKitWebsiteDataAccessPermissionRequest in MiniBrowser.

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

2020-06-15  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add libavif
        https://bugs.webkit.org/show_bug.cgi?id=212964
        <rdar://problem/64291035>

        Reviewed by Žan Doberšek.

        Because of the ABI bump of dav1d, which ffmpeg depends on, ffmpeg needs to be rebuilt. So
        this is a good opportunity to include it in the SDK and not rely on the ffmpeg-full
        extension anymore, because it doesn't provide debug symbols.

        * buildstream/elements/flatpak/platform.bst:
        * buildstream/elements/flatpak/sdk.bst:
        * buildstream/elements/freedesktop-sdk.bst:
        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/ffmpeg.bst: Added.
        * buildstream/elements/sdk/gst-libav.bst:
        * buildstream/elements/sdk/libavif.bst: Added.
        * buildstream/elements/sdk/ruby-highline.bst: Remove the spec source, un-needed.
        * buildstream/patches/fdo/0001-dav1d-Bump-to-0.7.0.patch: Added.
        * buildstream/patches/fdo/0001-ffmpeg-Add-MS-MPEG-DivX-variants.patch: Removed.
        * buildstream/patches/fdo/0002-ffmpeg-Add-VP6-and-Sorenson-Spark-video-codecs.patch: Removed.
        * buildstream/patches/fdo/0003-ffmpeg-Add-Intel-Indeo-and-Cinepak-video-support.patch: Removed.
        * buildstream/patches/fdo/0004-ffmpeg-Add-MPEG-2-video-decoder.patch: Removed.
        * buildstream/patches/fdo/0005-ffmpeg-Add-msmpeg4v3-support.patch: Removed.
        * buildstream/project.conf:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak._get_packages):

2020-06-15  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Remove webkit-build-directory dependency from flatpakutils
        https://bugs.webkit.org/show_bug.cgi?id=213179

        Reviewed by Žan Doberšek.

        This makes webkit-flatpak usable without installing additional perl modules (version) on the host OS.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args): Make --release and --debug mutually exclusive, and default to Release builds.
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args): No need to pull in webkitpy which pulls webkitdirs.pm only to
        determine the default configuration. Assume we use Release by default.

2020-06-15  Paulo Matos  <pmatos@igalia.com>

        Properly propagate TZ to the remote test devices
        https://bugs.webkit.org/show_bug.cgi?id=212816

        Reviewed by Philippe Normand.

        * Scripts/run-jsc-stress-tests:

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

        [iOS] Two KeyboardInputTests are failing on recent iOS SDK versions
        https://bugs.webkit.org/show_bug.cgi?id=213183
        <rdar://problem/64273483>

        Reviewed by Tim Horton.

        On recent versions of the iOS SDK, iOS simulators that are not shown on-screen are treated as if the hardware
        keyboard is not available (that is, `+[UIIKeyboard isInHardwareKeyboardMode]` returns `NO`). When running API
        tests while `Simulator.app` is already launched, an iOS simulator is presented on-screen, whereas the simulator
        is not visible when running API tests without launching `Simulator.app` beforehand.

        This discrepancy causes two iOS API tests to fail (i.e. `CaretSelectionRectAfterRestoringFirstResponder` and
        `RangedSelectionRectAfterRestoringFirstResponder`), due to the fact that `-[WKWebView becomeFirstResponder]` no
        longer causes an input session to begin.

        Interestingly, these tests already attempt to circumvent this by using `webViewWithAutofocusedInput()`, which
        creates and loads a `WKWebView` with a single autofocusing input element, with a `_WKInputDelegate` that
        unconditionally allows input sessions to begin. However, this doesn't work as intended in these tests, because
        nothing keeps the delegate (a `TestInputDelegate`) alive past the scope of the call to
        `webViewWithAutofocusedInput()`. Since `[WKWebView _inputDelegate]` is a weak property, the input delegate
        simply disappears after we finish waiting for the load to finish (and the autofocused input element begins its
        input session). This causes us to erroneously fall back to default behavior (i.e.
        `_WKFocusStartsInputSessionPolicyAuto`) for subsequent calls to show the keyboard for the focused element, as is
        the case when these two API tests call `-becomeFirstResponder`. The end result is that the keyboard doesn't
        appear and text selection views are not created and laid out, but only when API tests are run without having
        launched the Simulator app beforehand.

        To fix this, refactor `webViewWithAutofocusedInput()` into `webViewAndInputDelegateWithAutofocusedInput()`,
        which returns both the new `WKWebView` as well as the `TestInputDelegate` of the web view. The call site is then
        responsible for keeping the input delegate around for as long as it needs.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (webViewWithAutofocusedInput):

        Drive-by fix: fix a potential stack smasher by using an Objective-C block when setting the input delegate's
        policy handler, and by using `__block` for the `doneWaiting` boolean flag. This is now a problem becuase this
        block may be invoked multiple times.

        (webViewAndInputDelegateWithAutofocusedInput):

2020-06-13  Saam Barati  <sbarati@apple.com>

        compare-results should have an option to print a breakdown and to save the breakdown as csv file
        https://bugs.webkit.org/show_bug.cgi?id=213140

        Reviewed by Filip Pizlo.

        In this patch, compare-results has a new --breakdown feature which will
        break down the results for -a and -b per subtest. It will also show you
        p values with a significance threshold determined using the Bonferroni
        correction for testing multiple hypotheses:
        https://en.wikipedia.org/wiki/Bonferroni_correction
        
        And there is also now a --csv option to generate a csv file containing
        the same per subtest breakdown.
        
        --breakdown will print out results like:
        
        ------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms       |     ms       |  b / a   | pValue, alpha = 0.003125 |
        ------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |616.625000    |583.625000    |0.946483  | 0.065002                 |
        | VueJS-TodoMVC                        |89.425000     |83.225000     |0.930668  | 0.039102                 |
        | EmberJS-TodoMVC                      |695.875000    |664.000000    |0.954194  | 0.088901                 |
        | Flight-TodoMVC                       |263.600000    |257.600000    |0.977238  | 0.249259                 |
        | BackboneJS-TodoMVC                   |213.025000    |201.550000    |0.946133  | 0.000636 (significant)   |
        | Preact-TodoMVC                       |48.800000     |47.550000     |0.974385  | 0.502768                 |
        | AngularJS-TodoMVC                    |745.300000    |704.275000    |0.944955  | 0.011779                 |
        | Inferno-TodoMVC                      |607.900000    |354.800000    |0.583649  | 0.000000 (significant)   |
        | Vanilla-ES2015-TodoMVC               |214.950000    |200.575000    |0.933124  | 0.005018                 |
        | Angular2-TypeScript-TodoMVC          |191.575000    |187.025000    |0.976250  | 0.542229                 |
        | VanillaJS-TodoMVC                    |162.075000    |160.375000    |0.989511  | 0.747186                 |
        | jQuery-TodoMVC                       |855.275000    |833.825000    |0.974920  | 0.103439                 |
        | EmberJS-Debug-TodoMVC                |2056.250000   |1952.050000   |0.949325  | 0.000003 (significant)   |
        | React-TodoMVC                        |475.225000    |428.950000    |0.902625  | 0.007566                 |
        | React-Redux-TodoMVC                  |791.100000    |736.675000    |0.931203  | 0.066091                 |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |208.050000    |202.000000    |0.970920  | 0.152470                 |
        ------------------------------------------------------------------------------------------------------------

        * Scripts/compare-results:
        (readJSONFile):
        (speedometer2Breakdown):
        (jetStream2Breakdown):
        (motionMarkBreakdown):
        (plt5Breakdown):
        (displayStr):
        (dumpBreakdowns):
        (writeCSV):
        (detectMotionMark1_1):
        (detectMotionMark1_1_1):
        (motionMarkResults):
        (detectBenchmark):
        (getOptions):
        (main):
        (motionMark1_1Results): Deleted.

2020-06-13  Sam Weinig  <weinig@apple.com>

        Extended Color: Experiment with strongly typed ColorComponents
        https://bugs.webkit.org/show_bug.cgi?id=212396

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update for changed names (e.g. toSRGBAComponentsLossy() -> toSRGBALossy())
        and use of explicit types.

2020-06-13  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, fix configuration setting of WPE Debug (Tests JS) bot
        https://bugs.webkit.org/show_bug.cgi?id=213164

        The bot was meant to run as Debug.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2020-06-12  Keith Miller  <keith_miller@apple.com>

        Tests expecting a crash should use a signal handler in the JSC CLI process
        https://bugs.webkit.org/show_bug.cgi?id=212479

        Reviewed by Yusuke Suzuki.

        Crashing tests should now exit with status zero.

        * 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-06-12  Alex Christensen  <achristensen@webkit.org>

        Make API tests tolerant of our relatively new use of WebPageProxy::preconnectTo
        https://bugs.webkit.org/show_bug.cgi?id=213144

        Reviewed by Geofferey Garen.

        Most changes are straightforward moving to HTTPServer, which is more tolerant of different numbers of connections except these two:

        The ResourceLoadDelegate.Challenge API test was checking the output of _WKResourceLoadDelegate.didReceiveChallenge
        by using a server trust challenge.  Now that preconnecting happens, the server trust evaluation would happen with a
        PreconnectTask, not the main resource load.  The WKNavigationDelegate still gets the challenge and there is no problem
        here, but in order to continue to test _WKResourceLoadDelegate.didReceiveChallenge I use a basic authentication challenge
        instead of a server trust evaluation.

        The WebKit.FastServerTrust API test now has two failed attempts (one from the preconnect attempt, one from the main resource load attempt),
        but only when _strictTrustEvaluate is not available.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondWithChallengeThenOK):

2020-06-12  Diego Pino Garcia  <dpino@igalia.com>

        [buildbot] [GTK][WPE] Move WebDriver test to own bot
        https://bugs.webkit.org/show_bug.cgi?id=212527

        Reviewed by Carlos Alberto Lopez Perez.

        Move 'webdriver-test' step from GTK Release and GTK Debug test bots
        to separated bots.

        For bots that require a Wayland display (WPE and GTK Wayland),
        'webdriver-test' step is run on the corresponding general test bot,
        since it's not possible at the moment to run tests that require a 
        Wayland display in a bot set as a container.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (TestFactory.__init__):
        (TestWebDriverFactory):
        (TestWebDriverFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2020-06-12  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Reviewed by Don Olmstead.

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        Tests: http/tests/resourceLoadStatistics/

        * WebKitTestRunner/TestController.cpp:
        (WTR::GetAllStorageAccessEntriesCallbackContext::GetAllStorageAccessEntriesCallbackContext):
        (WTR::getAllStorageAccessEntriesCallback):
        (WTR::TestController::getAllStorageAccessEntries):

2020-06-12  Jonathan Bedard  <jbedard@apple.com>

        Support building test runners for watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=213128
        <rdar://problem/64298006>

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Link against framework stubs.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Apply iOS rules to all embedded sdks.
        * WebKitTestRunner/Configurations/Base.xcconfig: Link against framework stubs.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Apply iOS rules to all embedded sdks.
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Use watchOS entitlements for tvOS.

2020-06-12  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Build for watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=213127
        <rdar://problem/64297979>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/Base.xcconfig: Link against framework stubs.
        * TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Apply iOS rules to all embedded sdks.
        * TestWebKitAPI/Configurations/TestWTF.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Link against framework stubs.
        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Apply iOS rules to all embedded sdks.
        * TestWebKitAPI/config.h: WatchOS uses SSL.

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

        Unreviewed, reverting r262942.
        https://bugs.webkit.org/show_bug.cgi?id=213132

        Broke gst-libav due to dav1d ABI bump

        Reverted changeset:

        "[Flatpak SDK] Add libavif"
        https://bugs.webkit.org/show_bug.cgi?id=212964
        https://trac.webkit.org/changeset/262942

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK WebDriver tests after r262938

        Ensure a valid title for backforward items in MiniBrowser, using the URL when the title is empty.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowCreateBackForwardMenu):

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

        [Flatpak SDK] Update GTK4 to 3.98.5

        Rubber-stamped by Carlos Alberto Lopez Perez.

        * buildstream/elements/sdk/gtk.bst:

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

        [Flatpak SDK] Add libavif
        https://bugs.webkit.org/show_bug.cgi?id=212964

        Reviewed by Carlos Alberto Lopez Perez.

        * buildstream/elements/freedesktop-sdk.bst:
        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/libavif.bst: Added.
        * buildstream/patches/fdo/0001-dav1d-Bump-to-0.7.0.patch: Added.

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

        [Flatpak SDK] Add libkate
        https://bugs.webkit.org/show_bug.cgi?id=212865

        Reviewed by Carlos Alberto Lopez Perez.

        The GStreamer kate decoder is required for some media/track tests being re-enabled in bug
        120665.

        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/gst-plugins-bad.bst:
        * buildstream/elements/sdk/libkate.bst: Added.

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Get MiniBrowser ready for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=210276

        Reviewed by Adrian Perez de Castro.

        Port MiniBrowser to GTK4. BrowserSearchBar has been renamed as BrowserSearchBox, because in GTK GtkSearchBar is
        final class, so we derive from GtkBox and to be used as contents of a GtkSearchBar.

        * MiniBrowser/gtk/BrowserCellRendererVariant.c:
        (browserCellRendererVariantCellRendererSnapshot):
        (browser_cell_renderer_variant_class_init):
        * MiniBrowser/gtk/BrowserCellRendererVariant.h:
        * MiniBrowser/gtk/BrowserSearchBar.c: Removed.
        * MiniBrowser/gtk/BrowserSearchBox.c: Added.
        (setFailedStyleForEntry):
        (doSearch):
        (searchNext):
        (searchPrevious):
        (searchEntryMenuIconPressedCallback):
        (searchEntryClearIconReleasedCallback):
        (searchEntryChangedCallback):
        (searchEntryActivatedCallback):
        (searchPreviousButtonCallback):
        (searchNextButtonCallback):
        (searchMenuCheckButtonToggledCallback):
        (findControllerFailedToFindTextCallback):
        (findControllerFoundTextCallback):
        (browserSearchBoxFinalize):
        (browserSearchBoxDispose):
        (browserSearchBoxSizeAllocate):
        (browser_search_box_class_init):
        (browser_search_box_new):
        (browser_search_box_get_entry):
        * MiniBrowser/gtk/BrowserSearchBox.h: Renamed from Tools/MiniBrowser/gtk/BrowserSearchBar.h.
        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browser_settings_dialog_init):
        (browser_settings_dialog_new):
        * MiniBrowser/gtk/BrowserSettingsDialog.h:
        * MiniBrowser/gtk/BrowserTab.c:
        (loadChanged):
        (createInfoBarQuestionMessage):
        (tlsErrorsDialogResponse):
        (loadFailedWithTLSerrors):
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (colorChooserRequestFinished):
        (runColorChooserCallback):
        (tabCloseClicked):
        (browserTabConstructed):
        (browserTabIsSearchBarOpen):
        (browser_tab_start_search):
        (browser_tab_stop_search):
        (browser_tab_enter_fullscreen):
        (browser_tab_leave_fullscreen):
        * MiniBrowser/gtk/BrowserWindow.c:
        (settingsCallback):
        (resetEntryProgress):
        (webViewLoadProgressChanged):
        (browserWindowCreateBackForwardMenu):
        (browserWindowUpdateNavigationMenu):
        (navigationButtonPressed):
        (navigationButtonPressCallback):
        (scrollEventCallback):
        (webViewIsLoadingChanged):
        (searchCallback):
        (insertImageDialogResponse):
        (insertImageCommandCallback):
        (insertLinkDialogResponse):
        (insertLinkCommandCallback):
        (typingAttributesChanged):
        (browserWindowSaveSession):
        (browserWindowFinalize):
        (browserWindowDispose):
        (addToolbarButton):
        (browserWindowSwitchTab):
        (browserWindowTabAddedOrRemoved):
        (browserWindowBuildPopoverMenu):
        (browserWindowCloseRequest):
        (browserWindowDeleteEvent):
        (browser_window_class_init):
        (browser_window_append_view):
        (browser_window_set_background_color):
        * MiniBrowser/gtk/CMakeLists.txt:

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: stop using GtkToolbar
        https://bugs.webkit.org/show_bug.cgi?id=212898

        Reviewed by Adrian Perez de Castro.

        GtkToolbar iss no longer available in GTK4, use a GtkBox with buttons instead. Also use symbolic icons and move
        some of the actions to a gear menu.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowHistoryItemActivated):
        (browserWindowCreateBackForwardMenu):
        (browserWindowUpdateNavigationMenu):
        (navigationButtonPressCallback):
        (browserWindowCanZoomDefault):
        (browserWindowUpdateZoomActions):
        (webViewIsLoadingChanged):
        (addToolbarButton):
        (browserWindowBuildPopoverMenu):
        (resetStatusText): Deleted.
        (browserWindowHistoryItemSelected): Deleted.
        (browserWindowSetupEditorToolbarItem): Deleted.

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: stop using GtkToolbar for the search bar
        https://bugs.webkit.org/show_bug.cgi?id=212817

        Reviewed by Adrian Perez de Castro.

        Use a GtkSearchBar instead, because GtkToolbar is no longer available in GTK4. Also use a GtkPopover for the
        options menu instead of the GtkMenu.

        * MiniBrowser/gtk/BrowserSearchBar.c:
        (setFailedStyleForEntry):
        (doSearch):
        (searchEntryMenuIconPressedCallback):
        (searchEntryChangedCallback):
        (searchMenuCheckButtonToggledCallback):
        (browserSearchBarFinalize):
        (browser_search_bar_new):
        (browser_search_bar_open):
        (browser_search_bar_close):
        (browser_search_bar_is_open):
        (searchCloseButtonClickedCallback): Deleted.
        (searchEntryClearIconReleasedCallback): Deleted.
        * MiniBrowser/gtk/BrowserSearchBar.h:
        * MiniBrowser/gtk/BrowserTab.c:
        (browser_tab_start_search):
        (browser_tab_stop_search):

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make WebDriver work
        https://bugs.webkit.org/show_bug.cgi?id=212316

        Reviewed by Adrian Perez de Castro.

        Stop connecting to WebKitWebView::close signal twice for newaly created windows.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewCreate):

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

        Skip wasm-js2 test on memory limited devices
        https://bugs.webkit.org/show_bug.cgi?id=213099

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

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

        Re-enable download resume tests
        https://bugs.webkit.org/show_bug.cgi?id=213098
        <rdar://problem/63512518>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

2020-06-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262696.
        https://bugs.webkit.org/show_bug.cgi?id=213097

        It broke running JSC tests on watchOS

        Reverted changeset:

        "Allow run-jsc-stress-tests still run if some of the remote
        hosts are not available"
        https://bugs.webkit.org/show_bug.cgi?id=201426
        https://trac.webkit.org/changeset/262696

2020-06-11  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r262879): 3 TestWebKitAPI.TextManipulation tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=213079
        <rdar://problem/64256870>

        Reviewed by Wenson Hsieh.

        Update a few tests after behavior change in r262879. From r262879, we no longer use visible positions of element
        to calculate range to observe. Instead, we use the first and end position in the element to decide the range. In
        previous implementation, the range can be extended to outside of the element, like some visible positon before 
        or after the element.

        TextManipulation.StartTextManipulationFindNewlyDisplayedParagraph: Different elements would make separate ranges 
        because we create range with the boundaries of element. We can consider merging adjacent ranges later.
        TextManipulation.StartTextManipulationFindSameParagraphWithNewContent: The newly observing range only includes
        the newly inserted element now.
        TextManipulation.InsertingContentIntoAlreadyManipulatedContentDoesNotCreateTextManipulationItem: The p element
        is not manipulated as it is the common ancestor of manipulated elements. And we want to make sure the newly
        inserted element is child of a manipulated element.

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

2020-06-11  Andy Estes  <aestes@apple.com>

        [iOS] nullptr deref in FileInputType::iconLoaded when the input's type attribute is modified by a change event listener
        https://bugs.webkit.org/show_bug.cgi?id=208244
        <rdar://problem/41855350>

        Reviewed by Wenson Hsieh.

        * DumpRenderTree/TestRunner.cpp:
        (SetOpenPanelFilesMediaIconCallback):
        (TestRunner::staticFunctions):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFilesMediaIcon):

2020-06-11  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, updated libsoup dependency in jhbuild.

        * wpe/jhbuild.modules:

2020-06-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS]: The File Picker of the <input> file element should show the selection filter
        https://bugs.webkit.org/show_bug.cgi?id=212485

        Reviewed by Darin Adler.

        Create a view with an NSPopupButton for the file extensions filter. Set
        this view as the AccessoryView of the OpenPanel. Create a customized target
        for the NSPopupButton to respond to changing its selection.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[FileExtensionsPopupTarget initWithOpenPanel:allowedFileExtensions:]):
        (-[FileExtensionsPopupTarget popupAction:]):
        (-[FileExtensionsPopupTarget dealloc]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController createFilterView:popupTarget:]):
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        Generalize configure-xcode-for-ios-development (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=207043
        <rdar://problem/63946933>

        Reviewed by Darin Adler.

        * EWSTools/start-queue-mac.sh: Use configure-xcode-for-embedded-development over configure-xcode-for-ios-development.
        * Scripts/configure-xcode-for-ios-development: Removed.

2020-06-10  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation does not observe inserted elements that are invisible
        https://bugs.webkit.org/show_bug.cgi?id=213057
        <rdar://problem/63768253>

        Reviewed by Wenson Hsieh.

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

2020-06-10  Geoffrey Garen  <ggaren@apple.com>

        Some style improvements to main thread code
        https://bugs.webkit.org/show_bug.cgi?id=213051

        Reviewed by Darin Adler.

        Updated for rename.
        
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::ComplexTextControllerTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::ContentExtensionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/DNS.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (initializeInAppBrowserPrivacyTestSettings):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Health check should access redis and Cassandra
        https://bugs.webkit.org/show_bug.cgi?id=212899
        <rdar://problem/64118077>

        Reviewed by Stephanie Lewis.

        * resultsdbpy/resultsdbpy/example/main.py:
        (health): Check the health status of the model.
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.HealthTable):
        (Model.__init__): Construct a Cassandra table used to check the health of our Cassandra connection.
        (Model.healthy): Make both a read and write connection to our two database dependencies so that if
        our connection to those databases fails, an instance will be forced to restart.
        * resultsdbpy/resultsdbpy/model/model_unittest.py: Added.
        (ModelTest):
        (ModelTest.init_database):
        (ModelTest.test_health):

2020-06-10  Keith Miller  <keith_miller@apple.com>

        run-jsc-stress-tests should skip tests marked as slow in quick mode.
        https://bugs.webkit.org/show_bug.cgi?id=213042

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2020-06-10  Antoine Quint  <graouts@webkit.org>

        Subframes should not autosize independently
        https://bugs.webkit.org/show_bug.cgi?id=212984
        <rdar://problem/64175493>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST): Added test for <object>.

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

        [Mojave] Flaky API Test: TestWebKitAPI.WebKitLegacy.CrossPartitionFileSchemeAccess
        https://bugs.webkit.org/show_bug.cgi?id=206956

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm: Disable this test for Mojave.

2020-06-10  Alex Christensen  <achristensen@webkit.org>

        Revert r259770
        https://bugs.webkit.org/show_bug.cgi?id=210097
        <rdar://problem/64175992>

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

2020-06-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262807.
        https://bugs.webkit.org/show_bug.cgi?id=213019

        It is breaking JSC queues (Requested by caiolima on #webkit).

        Reverted changeset:

        "Add a timeout monitor for JSC stress test"
        https://bugs.webkit.org/show_bug.cgi?id=211978
        https://trac.webkit.org/changeset/262807

2020-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, reverting r262791.

        WinCairo WebKit1 is crashing.

        Reverted changeset:

        "[Curl] Implement functions to use ResourceLoadStatistics."
        https://bugs.webkit.org/show_bug.cgi?id=207692
        https://trac.webkit.org/changeset/262791

2020-06-09  Zhifei Fang  <zhifei_fang@apple.com>

        Add a timeout monitor for JSC stress test
        https://bugs.webkit.org/show_bug.cgi?id=211978

        Reviewed by Jonathan Bedard.

        * Scripts/webkitruby/jsc-stress-test-writer-default.rb: Add timeout monitor inside the jsc stress test runner, it will kill the process in case of jsc timeout handler not working

2020-06-09  Tim Horton  <timothy_horton@apple.com>

        WebKit.ShrinkToFit is failing on some bots
        https://bugs.webkit.org/show_bug.cgi?id=212932
        <rdar://problem/60972407>

        Reviewed by Simon Fraser.

        TestWebKitAPI was failing to stabilize the overlay scrollbar preference,
        because the only stabilization attempt was in the injected bundle 
        initialization code, and most tests (including ShrinkToFit) do not have
        an injected bundle.

        Because this preference is manually propagated to the Web Content process,
        we can set the default in the volatile domain in the UI process at startup.

        We can't move other preferences yet, because they are not manually propagated,
        and WebKit's NSUserDefault synchronization mechanism ignores defaults in the
        volatile domain (and the initial preference load reads from disk, not
        from the UI process, so it wouldn't find them anyway).

        * TestWebKitAPI/Tests/WebKitCocoa/ShrinkToFit.mm:
        (TEST):
        Explain why the final value of the test is different than the starting value.

        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        Leave a FIXME for future generations.

        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        Override overlay scrollbar preferences in the UI process, so it affects all tests.

        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        This test is also affected by using non-overlay scrollbars; we now have less space, so take up more pages.

2020-06-09  Youenn Fablet  <youenn@apple.com>

        BaseAudioSharedUnit should unmute its clients in case of suspension even if not having any audio unit
        https://bugs.webkit.org/show_bug.cgi?id=212970

        Reviewed by Eric Carlson.

        Add an option to capture in UI process so that the same test can run on both MacOS and iOS.
        This eases the testing infra to be able to get audio capture unit state in WebProcess as is the case in iOS.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2020-06-09  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        Tests: http/tests/resourceLoadStatistics/

        Reviewed by Don Olmstead.

        * WebKitTestRunner/TestController.cpp:
        (WTR::GetAllStorageAccessEntriesCallbackContext::GetAllStorageAccessEntriesCallbackContext):
        (WTR::getAllStorageAccessEntriesCallback):
        (WTR::TestController::getAllStorageAccessEntries):

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

        [Flatpak][GStreamer] enhance GST_ environment variable passing
        https://bugs.webkit.org/show_bug.cgi?id=212905

        Reviewed by Philippe Normand.

        Handle the passing of several GST environment variables,
        particularly GST_DEBUG, which, when using * symbol, python adds
        quotes, but they break the parsing in GStreamer.

        Also the variables are handled by gst-env.py when using
        GST_BUILD_PATH, so they are filtered out when it's exported,
        avoiding duplication. But it GST_BUILD_PATH is not defined, the
        variables are passed to flatpak.

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

2020-06-09  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController range of paragraph may be wrong after r262601
        https://bugs.webkit.org/show_bug.cgi?id=212874

        Reviewed by Wenson Hsieh.

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

2020-06-08  Sihui Liu  <sihui_liu@apple.com>

        TextManipulation should only convert text from Node's text content to tokens
        https://bugs.webkit.org/show_bug.cgi?id=212928

        Reviewed by Wenson Hsieh.

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

2020-06-08  Diego Pino Garcia  <dpino@igalia.com>

        [webkitpy] Check 'bug-search' returns a non null result before parsing
        https://bugs.webkit.org/show_bug.cgi?id=212906

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._parse_result_count): Check quick-search query
        response is non-null and a non-empty text.

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Rename Color::lighten() and Color::darken() to Color::lightened() and Color::darkened()
        https://bugs.webkit.org/show_bug.cgi?id=212917

        Reviewed by Darin Adler.

        Addresses feedback from Darin.

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

2020-06-08  Sam Weinig  <weinig@apple.com>

        Fix test results after r262733.

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

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

        [IPC] Adopt enum class for DragOperation
        <https://webkit.org/b/212870>
        <rdar://problem/64069940>

        Reviewed by Darin Adler.

        * Scripts/do-webcore-rename:
        - Do DragOperation renames.

2020-06-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262685.
        https://bugs.webkit.org/show_bug.cgi?id=212914

        caused flakey crashes in an iOS test

        Reverted changeset:

        "Clear WebPageProxy event state between tests"
        https://bugs.webkit.org/show_bug.cgi?id=212864
        https://trac.webkit.org/changeset/262685

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Unify rounding / clamping conversions between 0-1 float components and 0-255 byte components
        https://bugs.webkit.org/show_bug.cgi?id=212871

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Switch to using makeSimpleColor(hslToSRGB(...)) directly.

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Replace uses of differenceSquared() with luminance based computations
        https://bugs.webkit.org/show_bug.cgi?id=212872

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Add basic tests for Color::luminance(), ensuring white == 1, black == 0, and 
        darken() and lighten() creat colors with less than / greater than luminance.

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

        [Cocoa] CFPrefs synchronization does not always work for global preference changes
        https://bugs.webkit.org/show_bug.cgi?id=212783

        Reviewed by Tim Horton.

        Add API test, and add some synchronization to avoid flakiness.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        (-[WKTestPreferenceObserver preferenceDidChange:key:encodedValue:]):
        (TEST):
        (sharedInstanceMethodOverride):

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

        [iOS] Hit-testing on icloud.com is offset after closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=212890
        <rdar://problem/58775297>

        Reviewed by Simon Fraser.

        Add a new API test to verify that the scroll position doesn't get stuck at -30px after shifting both the top
        content inset and top obscured inset by 30px. See WebKit ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/overflow-hidden.html: Added.
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (-[ScrollViewDelegate scrollViewDidScroll:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2020-06-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add flatpak-run-nightly
        https://bugs.webkit.org/show_bug.cgi?id=212882

        Reviewed by Carlos Alberto Lopez Perez.

        This new script is able to download WPE and GTK builds from the Igalia servers and run the
        corresponding binaries (like MiniBrowser, jsc) within the Flatpak SDK.

        Unzipped builds will be saved in /tmp and can be reused in further runs (by providing the
        path with the -p argument).

        Example:
        $ webkit-flatpak-run-nightly --wpe MiniBrowser https://webkit.org
        <SDK installs to ~/.cache/wk-nightly>
        Downloading build release_r262699_b33885.zip from https://wpewebkit-release.igalia.com/built-products/
        Extracting build to /tmp/wpewebkit-release-b33885
        <MiniBrowser starts>

        $ webkit-flatpak-run-nightly --wpe -p /tmp/wpewebkit-release-b33885 jsc
        Looking for updates…
        Nothing to do.
        >>> 2+2
        4

        * Scripts/webkit-flatpak-run-nightly: Added.

2020-06-08  Diego Pino Garcia  <dpino@igalia.com>

        [webkitpy] Make 'webkit-path rebaseline' to not update expectations file by default
        https://bugs.webkit.org/show_bug.cgi?id=212835

        Reviewed by Carlos Alberto Lopez Perez.

        `webkit-patch rebaseline` let us add or update a test baseline
        from a test bot. By default, the command also updates the
        corresponding expectations file. This update is actually a brand-new
        generation of an expectations file based on the results of the bot,
        which in most cases messes up the current contents of the file.

        This patch makes the default to not update the expectations file and
        adds a new option '--update-expectations' to explicitly request an
        update.

        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractRebaseliningCommand):
        (RebaselineTest.__init__):
        (RebaselineTest._rebaseline_tests):
        (RebaselineTest.execute):
        (AbstractParallelRebaselineCommand._rebaseline_commands):
        (RebaselineExpectations.__init__):
        (RebaselineExpectations.execute):
        (Rebaseline.__init__):
        (RebaselineTest._rebaseline_test_and_update_expectations): Deleted.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.setUp):

2020-06-08  Youenn Fablet  <youenn@apple.com>

        File URLs with hostnames are misleading
        https://bugs.webkit.org/show_bug.cgi?id=212739
        <rdar://problem/63754917>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/open-window-with-file-url-with-host.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (TEST):

2020-06-07  Caio Lima  <ticaiolima@gmail.com>

        Allow run-jsc-stress-tests still run if some of the remote hosts are not available
        https://bugs.webkit.org/show_bug.cgi?id=201426

        Reviewed by Saam Barati.

        This patch allows run-jsc-stress-tests to keep on running if some of
        the remote hosts are not available. To do this, we created a new
        function `checkAndPrepareRemoteHosts` that is responsible to check the
        connection and read/write permissions of given remote hosts list. It
        filters out every unavailable remote host.
        These checks and filter happen in the beginning of the script and is
        excuted only once, in the beggining of the script. It means that if
        some remote device becomes unavailable after the check and preparation
        is done, the script execution will be interupted.

        * Scripts/run-jsc-stress-tests:

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

        Remove ENABLE_VIDEO_TRACK ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=212568

        Reviewed by Youenn Fablet.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Clear WebPageProxy event state between tests
        https://bugs.webkit.org/show_bug.cgi?id=212864

        Reviewed by Anders Carlsson.

        Make sure that event state doesn't leak between tests via events queued in WebPageProxy.

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

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

        REGRESSION (r262456): [iOS Debug] TestWebKitAPI.WKWebViewCloseAllMediaPresentations.PictureInPicture is frequently timing out
        https://bugs.webkit.org/show_bug.cgi?id=212777

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCloseAllMediaPresentations.mm:
        Disable the PictureInPicture test for old iOS devices.

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

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

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm: Disable this test again because it is still failing on certain bots.

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

        -_focusTextInputContext should reposition the caret if called for an already focused text input context
        https://bugs.webkit.org/show_bug.cgi?id=212830
        <rdar://problem/64032956>

        Reviewed by Wenson Hsieh.

        Re-purpose some existing tests to check for the new behavior.

        In TextInteraction_FocusingAssistedElementShouldScrollToReveal, keep in mind that the caret position is
        changing: on iOS, calling input.focus() places the caret at the end of the field's content.

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

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

        Generalize configure-xcode-for-ios-development (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=207043

        Rubber-stamped by David Kilzer.

        Patch by Keith Rollin and Jonathan Bedard.

        Replace configure-xcode-for-ios-development with a Python script that works for iOS,
        watchOS and tvOS.

        * Scripts/configure-xcode-for-embedded-development: Added.

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

        Text manipulation should exclude characters outside of the unicode private use area
        https://bugs.webkit.org/show_bug.cgi?id=212800
        <rdar://problem/63736417>

        Reviewed by Sihui Liu.

        Add a new API test to verify the new behavior when extracting PUA characters.

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

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

        REGRESSION (r262366): [ Mac wk1 ] webgl/webgl-backing-store-size-update.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212647
        <rdar://problem/63882960>

        Reviewed by Eric Carlson.

        Drive-by comment from Simon. Remove some useless braces.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:

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

        Try to reduce jetsams further on iOS devices running jsc stress tests
        https://bugs.webkit.org/show_bug.cgi?id=212786

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

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

        REGRESSION (r262456?): [macOS] media/picture-in-picture/picture-in-picture-api tests are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=212762

        Reviewed by Eric Carlson.

        Skip the Picture-in-Picture test if Picture-in-Picture is not supported and add playsinline attribute
        to the video element.

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

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

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541
        <rdar://problem/63781452>

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [GTK] MiniBrowser: use GAction API for actions and shortcuts in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212740

        Reviewed by Adrian Perez de Castro.

        Make MiniBrowser a GtkApplication and BrowserWindow a GtkApplicationWindow to easily install actions and shortcuts.

        * MiniBrowser/gtk/BrowserMain.c: Removed.
        * MiniBrowser/gtk/BrowserMain.h: Removed.
        * MiniBrowser/gtk/BrowserSearchBar.c:
        (searchPreviousButtonCallback):
        (searchNextButtonCallback):
        * MiniBrowser/gtk/BrowserSearchBar.h:
        * MiniBrowser/gtk/BrowserTab.c:
        * MiniBrowser/gtk/BrowserTab.h:
        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadOrStopCallback):
        (goBackCallback):
        (goForwardCallback):
        (settingsCallback):
        (browserWindowUpdateNavigationMenu):
        (browserWindowTryCloseCurrentWebView):
        (browserWindowTryClose):
        (webViewCreate):
        (browserWindowUpdateZoomActions):
        (webViewZoomLevelChanged):
        (zoomInCallback):
        (zoomOutCallback):
        (defaultZoomCallback):
        (searchCallback):
        (newTabCallback):
        (toggleWebInspector):
        (openPrivateWindow):
        (focusLocationBar):
        (reloadPage):
        (reloadPageIgnoringCache):
        (stopPageLoad):
        (loadHomePage):
        (toggleFullScreen):
        (printPage):
        (editingActionCallback):
        (typingAttributesChanged):
        (browserWindowFinalize):
        (browserWindowSetupEditorToolbarItem):
        (browserWindowSetupToolbarItem):
        (browserWindowDeleteEvent):
        (browser_window_new):
        (browser_window_append_view):
        (browser_window_get_or_create_web_view_for_automation):
        (browser_window_create_web_view_in_new_tab_for_automation):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/gtk/main.c:
        (createWebViewForAutomationInWindowCallback):
        (createWebViewForAutomationInTabCallback):
        (automationStartedCallback):
        (startup):
        (activate):
        (main):

2020-06-04  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation: first and last unit in a paragraph should not contain only excluded tokens
        https://bugs.webkit.org/show_bug.cgi?id=212759

        Reviewed by Wenson Hsieh.

        Modify existing test for changed behavior that leading and trailing excluded units are not included in paragraph
        now.

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

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

        UIProcess may crash after its prewarmed WebProcess gets terminated
        https://bugs.webkit.org/show_bug.cgi?id=212790
        <rdar://problem/63696191>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2020-06-04  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION: (r262398) Text manipulation crashes when content is added
        https://bugs.webkit.org/show_bug.cgi?id=212785

        Reviewed by Ryosuke Niwa.

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

2020-06-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Improve watchlist logic for comments on patches touching imported WPT tests.
        https://bugs.webkit.org/show_bug.cgi?id=212597

        Reviewed by Youenn Fablet.

        On r262295 I added a watchlist comment for patches touching the imported WPT tests.
        However, this is commenting on patches that are importing WPT tests.

        To avoid this situations, this patch adds a new rule to detect if the changes modify
        any of the w3c-import.log files, and then changes the logic to make the comment only
        for patches that modify the WPT imported tests but not the w3c-import.log files.

        In order to support this new logic, watchlist rule parsing is improved to support
        the "and" and "not" operators. Previously it only supported the "or" operator.

        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._rule_definitions_as_set):
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_cc_rule_with_undefined_defintion_with_suggestion):
        (WatchListParserTest):
        (WatchListParserTest.test_cc_rule_with_complex_logic):
        * Scripts/webkitpy/common/watchlist/watchlistrule.py:
        (WatchListRule.__init__):
        (WatchListRule._match_test_definitions):
        (WatchListRule.match):
        * Scripts/webkitpy/common/watchlist/watchlistrule_unittest.py:
        (WatchListRuleTest.test_complex_definition_or):
        (WatchListRuleTest):
        (WatchListRuleTest.test_complex_definition_and):
        (WatchListRuleTest.test_complex_definition_not):
        (WatchListRuleTest.test_complex_definition_combined):

2020-06-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        svn-apply command is too slow with big patches
        https://bugs.webkit.org/show_bug.cgi?id=212766

        Reviewed by Darin Adler.

        The script svn-apply was calling a "git add" or "svn add" command
        after adding each new file. This caused the git or svn command to
        re-check the internal SCM database each time they were called, and
        this was really slow when lot of new files are added.
        Instead of doing this, we queue the list of new files in memory,
        and at the end we call "git add" or "svn add" once (or a few times).

        On top of that, another optimization is added for the case of git,
        to avoid calling scmKnowsOfFile() inside addDirectoriesIfNeeded(),
        which is a slow operation and gets called a lot (once per file).
        Doing that for git is totally unneeded, as the only thing we have
        to take care about, is of ensuring that the directory is created.
        See: https://wkb.ug/86973

        This reduces the time spent in the large test patch that caused
        this issue (see bug):
         - Git: 8 hours (before) -> 8 minutes (now).
         - SVN: 25 minutes (before) -> 5 minutes (now).

        * Scripts/svn-apply:
        (addDirectoriesIfNeeded):
        (handleBinaryChange):
        (handleGitBinaryChange):
        (patch):
        (scmRemove):
        (scmAddQueued):
        (scmCommitQueueAdded):
        (scmToggleExecutableBitQueued):
        (scmCommitQueueToggledExecutableBit):

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

        Add watchOS and tvOS to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=212719
        <rdar://problem/63951600>

        Reviewed by Tim Horton.

        * Scripts/build-webkit: Add tvOS and watchOS flags, generalize embedded if statements.
        * Scripts/webkitdirs.pm:
        (determineArchitecture): Add tvOS and watchOS architectures.
        (argumentsForConfiguration): Add tvOS and watchOS flags.
        (extractNonMacOSHostConfiguration): Ditto.

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

        Work around broken system version macro
        https://bugs.webkit.org/show_bug.cgi?id=212726

        Reviewed by Dan Bernstein.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * lldb/lldbWebKitTester/Configurations/DebugRelease.xcconfig:

2020-06-04  Andy Estes  <aestes@apple.com>

        [watchOS] Re-enable content filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=212711
        <rdar://problem/63938350>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [Flatpak SDK] Update definitions
        https://bugs.webkit.org/show_bug.cgi?id=212698

        Reviewed by Žan Doberšek.

        * buildstream/elements/freedesktop-sdk.bst: Update to FDO 19.08.11
        * buildstream/elements/sdk/gtk.bst: Update GTK4
        * buildstream/patches/fdo/0001-Pango-Bump-to-1.45-master.patch: Added. Needed for GTK4
        * buildstream/patches/fdo/0001-Add-Jack.patch: Removed. This will be used when we update to the 20.08 FDO SDK.
        * buildstream/patches/fdo/0001-components-xdg-desktop-portal.bst-Update-to-1.6.0.patch: Removed. Ditto.
        * buildstream/patches/fdo/0002-Update-PipeWire-to-0.3.1.patch: Removed. Ditto.

2020-06-03  Tadeu Zagallo  <tzagallo@apple.com>

        Disable B3 hoistLoopInvariantValues by default
        https://bugs.webkit.org/show_bug.cgi?id=212511
        <rdar://problem/63813245>

        Reviewed by Mark Lam.

        Enable the B3 hoistLoopInvariantValues pass in one of our existing configurations to
        avoid bit rot since we'd like to re-enable it eventually.

        * Scripts/run-jsc-stress-tests:

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

        [Text manipulation] Extract the value attribute in inputs of type "text" and "search"
        https://bugs.webkit.org/show_bug.cgi?id=212706
        <rdar://problem/63876969>

        Reviewed by Tim Horton.

        Add a new test case (similar to the existing test `StartTextManipulationExtractsValuesFromButtonInputs`) to
        verify that we extract text from the `value` of inputs of type "text" and "search".

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

2020-06-03  Michael Saboff  <msaboff@apple.com>

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

        Reviewed by Saam Barati.

        The prior change to disable this test for Debug actually enabled it
        only for Debug IOS builds of any type, simulator or real HW.

        This test has intermittently failed or timed out on Debug simulator
        builds for for almost a year.  We want to test Release builds as well as
        hardware builds. Therefore we should disable Debug simulator builds,
        and test all other variants.

        * TestWebKitAPI/Tests/WTF/Lock.cpp:

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

        dataTransfer.types is empty when handling the "dragstart" event
        https://bugs.webkit.org/show_bug.cgi?id=212685
        <rdar://problem/61368402>

        Reviewed by Andy Estes.

        Adds new API tests and test infrastructure to verify that DataTransfer types and data are accessible during
        the "dragstart" event. See below for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        (-[TestWKWebView selectElementWithID:]):
        (-[DragAndDropSimulator dragFromElementWithID:to:]):

        Add a few (very specialized) helper methods to assist with simulating drags over the various elements in the new
        drag and drop test harness page below (dragstart-data.html).

        (runDragStartDataTestCase):

        Test the following scenarios (split between three API tests) by dumping the resulting DataTransfer types and
        their data strings, and observing the results:

        - Dragging a normal text selection.
        - Dragging a normal text selection, and then adding a URL string.
        - Dragging a normal text selection, and then adding a custom pasteboard type.
        - Dragging a normal text selection, but then replacing the data with just a URL string.
        - Dragging a normal text selection, but then replacing the data with just a custom data type.
        - Dragging an image element.
        - Dragging an image element, and then overriding the plain text data.
        - Dragging a link (anchor element).
        - Dragging a link, and then adding a custom type.

        * TestWebKitAPI/Tests/WebKitCocoa/dragstart-data.html: Added.

        Add a new test harness to help test DataTransfer types when starting a drag. This test page can also be used as
        a manual test harness, by simply opening the test page, starting drags on the various elements and observing the
        output in the textarea.

        * TestWebKitAPI/Tests/WebKitCocoa/dump-datatransfer-types.html:

        Tweak this test page to replace the DataTransfer with custom data (rather than simply append it) by calling
        `DataTransfer.clearData()` prior to writing the custom types.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebViewHostWindow initWithWebView:contentRect:styleMask:backing:defer:]):

        Add a `__weak` reference on TestWKWebViewHostWindow back to the TestWKWebView, so that we can consult
        `-eventTimestamp` when synthesizing mouse events on macOS during API tests.

        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:]):
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:clickCount:]):
        (-[TestWKWebViewHostWindow initWithWebView:frame:]):
        (-[TestWKWebView _setUpTestWindow:]):
        (-[TestWKWebView setEventTimestampOffset:]):
        (-[TestWKWebView eventTimestamp]):

        Add a mechanism to offset synthetic event timestamps by a given time interval (i.e. the event timestamp offset).

        (-[TestWKWebView mouseMoveToPoint:withFlags:]):
        (-[TestWKWebView _mouseEventWithType:atLocation:]):
        (-[TestWKWebView typeCharacter:]):
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator runFrom:to:]):

        While simulating drag and drop on macOS, use `-setEventTimestampOffset:` to "leap forward" in time, so that the
        150 millisecond delay when dragging a text selection doesn't prevent drags from beginning.

2020-06-03  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation sometimes fails to replace text in attributes
        https://bugs.webkit.org/show_bug.cgi?id=212701

        Reviewed by Wenson Hsieh.

        Modify TextManipulation.CompleteTextManipulationShouldReplaceTextContentWithMultipleTokens to cover text 
        manipulation for attributes.

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

2020-06-03  Diego Pino Garcia  <dpino@igalia.com>

        [WPE] lint-test-expectations doesn't work when platform is WPE
        https://bugs.webkit.org/show_bug.cgi?id=212700

        Reviewed by Carlos Alberto Lopez Perez.

        When passing arguments '--wpe' or '--platform=wpe*',
        lint-test-expectations does nothing for WPE, despite currently 
        there are many lint errors in WPE's TestExpectations file.

        As a side-effect of this patch, now `Tools/Scripts/webkit-path
        rebaseline` lists the WPE Release and Debug bots.

        * Scripts/webkitpy/port/builders.py: Add WPE to the list of
        exact_matches and fuzzy_matches.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:

2020-06-03  Jonathan Bedard  <jbedard@apple.com>

        Allow using web processes for service workers even though they loaded about URLs (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=212464

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: didFinishNavigation is now used unconditionally.

2020-06-02  Keith Rollin  <krollin@apple.com>

        Revert FEATURES_DEFINES related changes
        https://bugs.webkit.org/show_bug.cgi?id=212664
        <rdar://problem/63893033>

        Reviewed by Andy Estes.

        Bug 262310, Bug 262311, Bug 262318, and Bug 262331 involve changes to
        FEATURE_DEFINES and how the values there relate to those found in the
        Platform*.h files. Those changes break XCBuild (by removing the
        .xcfilelist related to UnifiedSources and the process for generating
        them), and so are being reverted.

        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (WebCoreGenerator):
        (WebCoreGenerator._get_generate_unified_sources_script):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-06-02  Peng Liu  <peng.liu6@apple.com>

        Stressing webkitSetPresentationMode leads to wrong inline video dimensions
        https://bugs.webkit.org/show_bug.cgi?id=202425

        Reviewed by Eric Carlson.

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

2020-06-02  Youenn Fablet  <youenn@apple.com>

        Allow using web processes for service workers even though they loaded about URLs
        https://bugs.webkit.org/show_bug.cgi?id=212464

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [buildbot] [GTK][WPE] Move JavaScript related tests to own bot
        https://bugs.webkit.org/show_bug.cgi?id=212481

        Reviewed by Carlos Alberto Lopez Perez.

        Currently GTK and WPE tests bots run too many tests. This makes
        the total running time for each build very long.

        This patch moves JavaScript related tests (jscore-test and
        test262-test) to a separated bot which will be triggered by the
        corresponding build bot of each platform.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (TestFactory.__init__):
        (TestJSFactory):
        (TestJSFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2020-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make popup menus work
        https://bugs.webkit.org/show_bug.cgi?id=211178

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::dismissAllPopupMenus):

2020-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make it possible to run layout tests
        https://bugs.webkit.org/show_bug.cgi?id=212328

        Reviewed by Carlos Alberto Lopez Perez.

        Build WTR with GTK4.

        * PlatformGTK.cmake:
        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Try with both 4 and 5 API versions.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::dismissAllPopupMenus):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::copyText):

2020-06-01  Noam Rosenthal  <noam@webkit.org>

        Make unicode-bidi:isolate the default for an element with a dir attribute (instead of unicode-bidi:embed)
        https://bugs.webkit.org/show_bug.cgi?id=134630

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/AttrStyle.mm:
        (TEST):
                Test was expecting unicode-bidi:embed, changed expectation.

2020-06-01  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController should put one Node in only one paragraph
        https://bugs.webkit.org/show_bug.cgi?id=212548

        Reviewed by Wenson Hsieh.

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

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

        Make CustomDisplayName and DefaultDisplayName API tests fail instead of timing out when something changes
        https://bugs.webkit.org/show_bug.cgi?id=212480

        This saves time when debugging and running all the tests.

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

2020-06-01  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Install and update don't provide any terminal output
        https://bugs.webkit.org/show_bug.cgi?id=212579

        Reviewed by Žan Doberšek.

        The `show_output` option was removed from the process execution routines. We now assume the
        output will be displayed, unless the call-site asks `gather_output`. This change makes
        webkit-flatpak more chatty, which is nice during install/update operations.

        * flatpak/flatpakutils.py:
        (run_sanitized):
        (FlatpakObject.flatpak):
        (FlatpakPackage.install):
        (FlatpakPackage.update):
        (WebkitFlatpak.setup_builddir):
        (WebkitFlatpak.run_in_sandbox):

2020-06-01  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILURE (r220931): !m_function in ~CompletionHandler() after switch tabs
        https://bugs.webkit.org/show_bug.cgi?id=212537
        <rdar://problem/63766838>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2020-06-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EWS] Add a special case for running the layout test step without aborting in case of many failures for WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=212381

        Reviewed by Jonathan Bedard.

        Add a special case for patches uploaded by the bugzilla user that would be used
        for prototyping a bot that helps automating the import of WPT tests. For patches
        uploaded by this user don't pass the parameters that make the step abort early in
        case of many errors, and only run the layout tests inside the WPT import directory.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests):
        (RunWebKitTests.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_success):
        (test_warnings):
        (test_parse_results_json_regression):
        (test_parse_results_json_flakes):
        (test_parse_results_json_flakes_and_regressions):
        (test_parse_results_json_with_newlines):
        (test_unexpected_error):
        (test_failure):
        (test_success_wpt_import_bot):
        (TestRunWebKitTestsWithoutPatch.test_success):
        (TestRunWebKitTestsWithoutPatch.test_failure):
        (TestRunWebKit1Tests.test_success):
        (TestRunWebKit1Tests.test_failure):

2020-06-01  Sam Weinig  <weinig@apple.com>

        Extended Color: Replace Color constructors taking numeric values with type specific factory functions
        https://bugs.webkit.org/show_bug.cgi?id=212576

        Reviewed by Tim Horton.

        Replaces all remaining implicit and explicit uses of the Color constructors taking numeric
        values with explicit calls to makeSimpleColor/makeSimpleColorFromFloats/makeExtendedColor,
        giving us a consistent way to create colors. Also addes use constexpr SimpleColors where possible.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeColor):
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        (TestWebKitAPI::TestPDFPage::colorAtPoint const):

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

        AutoTrader crashed while browsing search results
        https://bugs.webkit.org/show_bug.cgi?id=212461
        rdar://60733185

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm: Added.
        (-[WebGLPrepareDisplayOnWebThreadDelegate webViewDidFinishLoad:]):
        (-[WebGLPrepareDisplayOnWebThreadDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/webgl.html: Added.

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

        Unreviewed. Fix GTK4 build with current GTK

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

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

        Extended Color: Additional color cleanups
        https://bugs.webkit.org/show_bug.cgi?id=212567

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update for rename from ExtendedColor::channels() to ExtendedColor::components()

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

        [GTK] WebDriver: stop using GdkEvent API in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212465

        Reviewed by Adrian Perez de Castro.

        Update to the new webkitWebViewBaseSynthesizeKeyEvent() API.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::keyDown):

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

        Use correct encoding when converting a WTF::URL to CFURLRef
        https://bugs.webkit.org/show_bug.cgi?id=212486

        Reviewed by Darin Adler.

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

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

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-05-29  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK][WPE] API for WebView audio mute support
        https://bugs.webkit.org/show_bug.cgi?id=176119

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/BrowserTab.c:
        (audioClicked):
        (audioMutedChanged):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewIsAudioMuted):
        (beforeAll):

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

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Rubber-stamped by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Add back ENABLE_CSS_CONIC_GRADIENTS,
        removed by accident.

2020-05-29  Pavel  <pavel.feldman@gmail.com>

        [Win] Allow compiling with the TOUCH_EVENTS enabled
        https://bugs.webkit.org/show_bug.cgi?id=212528

        Reviewed by Fujii Hironori.

        Aligning Win with GTK, adding missing EventSenderProxy stubs.
        This allows compiling Win with TOUCH_EVENTS and unlocks event
        injection / processing by the automation drivers

        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):

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

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Andy Estes.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Removed 83 of the 119 things
        defined in this file. There are 36 more that are slightly more complex that we can
        remove carefully later.

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

        Make generate-unified-sources.sh not depend on features being listed in FEATURE_DEFINES environment variable
        https://bugs.webkit.org/show_bug.cgi?id=212420

        Reviewed by Andy Estes.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (WebCoreGenerator._get_generate_derived_sources_script): Removed the code
        to generate UnifiedSources-output.xcfilelist.

2020-05-29  Keith Rollin  <krollin@apple.com>

        Revert switch to XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=212530
        <rdar://problem/63764632>

        Unreviewed build fix.

        Bug 209890 enabled the use of XCBuild by default. Since then, some
        build issues have shown up. While addressing them, temporarily turn
        off the use of XCBuild by default.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/build-webkit:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        [Flatpak][GStreamer] all commands, except webkit-build, fails if GST_BUILD_PATH is set
        https://bugs.webkit.org/show_bug.cgi?id=212408

        Reviewed by Žan Doberšek.

        Don't run gst-env.py in the sandbox because that can lead to command-line options clashing
        with build-webkit and other WebKit scripts. So instead we now parse the output of the
        environment variables gst-build requires and we forward those to the sandbox.

        * flatpak/flatpakutils.py:
        (run_sanitized):
        (check_flatpak):
        (FlatpakObject.flatpak):
        (WebkitFlatpak.execute_command):
        (WebkitFlatpak.setup_gstbuild):
        (WebkitFlatpak.run_in_sandbox):
        (flatpak_run_sanitized): Deleted.

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

        Add watchlist comment for patches touching imported WPT tests.
        https://bugs.webkit.org/show_bug.cgi?id=212362

        Reviewed by Youenn Fablet.

        Add a watchlist trigger to comment on patches touching imported WPT tests
        with a link to documentation about the export process.

        * Scripts/webkitpy/common/config/watchlist:

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

        [Flatpak] Fix os.system return code for better signal handling.

        Rubber-stamped by Philippe Normand.

        The previous fix in r262270 correctly fixed the return code issue
        but made signal handling pass through python. For example, when you
        ctlr+C running MiniBrowser, you'd get a python stacktrace deep inside
        subprocess.call.

        So, revert back to os.system but fixing the return code.

        * flatpak/webkit-bwrap:

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

        [Flatpak SDK] Update OpenXR
        https://bugs.webkit.org/show_bug.cgi?id=212518

        Reviewed by Žan Doberšek.

        Upstream now builds fine with GCC 9.3.0. Removing downstream patch.
        
        * buildstream/elements/sdk/openxr.bst:
        * buildstream/patches/openxr-0001-cmake-Check-for-C-17-and-conditionally-enable-it.patch: Removed.

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

        REGRESSION (r261812): editing/async-clipboard/clipboard-item-get-type-basic.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=212281
        <rdar://problem/63554912>

        Reviewed by Tim Horton.

        On some shipping versions of iOS, returning `NO` from `-supportsImagePaste` still results in UIKit keyboard
        code pinning temporary items to the general pasteboard, which increments the change count of the pasteboard.
        If this happens in the middle of an attempt to read from the pasteboard, we end up falsely denying access to the
        contents of the pasteboard, since we believe that the contents of the pasteboard have changed.

        This has the potential to affect any test that attempts to read from the pasteboard on iOS, though the titular
        layout test seems to trigger the bug more frequently than other tests.

        This item pinning was added in support of being able to insert Memojis from the software keyboard, and works by
        pretending to copy a temporary PNG image, asking the delegate whether it `-canPerformAction:withSender:`, and
        then restoring the items previously on the pasteboard. To work around this in the test runner, we can simply
        swizzle out `-[UIKeyboardImpl delegateSupportsImagePaste]` to always return `NO`, which has the same effect as
        disabling the Memoji keyboard.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overrideKeyboardDelegateSupportsImagePaste):
        (WTR::TestController::platformResetStateToConsistentValues):

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

        Make fast/text/user-installed-fonts/extended-character.html more robust
        https://bugs.webkit.org/show_bug.cgi?id=212487
        <rdar://problem/63235370>

        Unreviewed.

        Update the font to use the new character.

        * WebKitTestRunner/fonts/FakeHelvetica-SingleExtendedCharacter.ttf:

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

        [Flatpak] Use subprocess.call instead of os.system to forward the return code correctly.

        os.system reports error codes from the child process like wait(),
        which seems to not be playing well with flatpak/bwrap.

        This was causing flatpak to return 0 to some failed commands (like
        build-webkit), making failures show as successes in the bots.

        Unreviewed build fix.

        * flatpak/webkit-bwrap:

2020-05-28  Tim Horton  <timothy_horton@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=212456

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (WTR::makeValueRefForValue):
        Apply the fix from r260515 to this second copy of the code too.

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

        revert logging for detecting failures in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=212447

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

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

        REGRESSION (PSON): Resizing WKWebView during cross-site navigation results in the page laying out at the wrong size
        https://bugs.webkit.org/show_bug.cgi?id=212434
        <rdar://problem/51621621>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Add a test ensuring that we correctly update the view size if it changes
        during the provisional phase of the navigation.

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

        Unreviewed. A couple transformations missing from r262214.

        Was making fast/events/touch/tap-highlight-color.html to fail.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::addTouchPoint):

2020-05-27  Kenneth Russell  <kbr@chromium.org>

        Update MobileMiniBrowser project settings to current Xcode
        https://bugs.webkit.org/show_bug.cgi?id=212428

        Reviewed by Dean Jackson.

        Apply suggestions from Dean to automatically switch between the
        internal and public SDKs.

        * MobileMiniBrowser/Configurations/Base.xcconfig:

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

        [WPE] Avoid possible WTR event timing going back in time and fix conversion from s to ms
        https://bugs.webkit.org/show_bug.cgi?id=212338

        Reviewed by Michael Catanzaro.

        Make sure we cast the double m_time timestamp from seconds to uint32_t
        milliseconds expected by WPE input events.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::secToMsTimestamp):
        (WTR::EventSenderProxy::EventSenderProxy): Use monotonic time instead
        of zero as the time origin. This is used only in a relative manner,
        and we need monotonic behavior so conversion to DOM event timestamps
        makes sense.
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::prepareAndDispatchTouchEvent):
        (WTR::EventSenderProxy::releaseTouchPoint):

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

        Make sure bundle identifier testing override is set in the network process
        https://bugs.webkit.org/show_bug.cgi?id=212288
        <rdar://problem/63539061>

        Reviewed by Chris Dumez.

        Set the bundle identifier in the network process if a layout test
        updates it. This value usually only gets updated when a new network
        process is initialized, which does not happen for every test. So it
        should be set/cleared as needed.

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

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

        [Clipboard API] Support reading "image/png" on ClipboardItem
        https://bugs.webkit.org/show_bug.cgi?id=212339
        <rdar://problem/63588957>

        Reviewed by Tim Horton.

        Add a new API test to verify that TIFF images on the system pasteboard on macOS are automatically converted to
        PNG data, and is accessible through `ClipboardItem` through the "image/png" type.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:

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

        Unreviewed, reverting r260840.

        This patch is no longer needed after preferences root cause
        has been fixed.

        Reverted changeset:

        "[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
        https://trac.webkit.org/changeset/260840

2020-05-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace `featureGuard` and `availability` with a combined `condition` that accepts any macro
        https://bugs.webkit.org/show_bug.cgi?id=210014

        Reviewed by Brian Burg.

        Previously, the generated InspectorBackendCommands.js would include code for things that the
        backend doesn't actually support. By using actual macros and preprocessing that file, we can
        ensure that the frontend doesn't incorrectly think that something is supported by the page
        being inspected:
         - the `Canvas` commands and events related to shader programs/pipelines should only exist
           when the corresponding context type exists, namely `ENABLE(WEBGL)` and `ENABLE(WEBGPU)`.
         - iOS doesn't support showing rulers, so create a variant of `DOM.setInspectModeEnabled`
           that only exists for `PLATFORM(IOS_FAMILY)` that doesn't have the `showRulers` optional
           parameter, as well as removing `Page.setShowRulers` entirely.
         - setting the forced appearance should only be possible if dark mode is supported.
         - web archives only exist if CF is used.

        * Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_WEB_ARCHIVE` since it's always enabled in wtf/PlatformEnableCocoa.h.

        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.generate_from_json):
        (InspectorGeneratorTests.run_tests):
        (InspectorGeneratorTests.main):

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

        [Flatpak SDK] Update openxr recipe
        https://bugs.webkit.org/show_bug.cgi?id=212403

        Reviewed by Sergio Villar Senin.

        * buildstream/elements/sdk/openxr.bst: Explicitely list dependencies and bump to latest git master.

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

        [GTK][WTR] EventSender: stop using GdkEvent API in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212298

        Reviewed by Adrian Perez de Castro.

        Use WebKitWebViewBase internal API to synthesize events instead of GdkEvents. The touch events support has been
        removed because we are no longer testing touch events, since they need an actual touchscreen.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef):
        (WTR::toWebKitGLibAPI):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::setTouchModifier):

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

        UTF-8 encode strings of invalid URLs when converting WTF::URL to NSURL instead of truncating the UTF-16 encoding
        https://bugs.webkit.org/show_bug.cgi?id=212393
        <rdar://problem/63095503>

        Reviewed by Tim Horton.

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

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

        Enhance Bitmap::setEachNthBit() to also take an end index.
        https://bugs.webkit.org/show_bug.cgi?id=212386
        <rdar://problem/63643324>

        Reviewed by Robin Morisset.

        * TestWebKitAPI/Tests/WTF/Bitmap.cpp:
        (TestWebKitAPI::testBitmapSetEachNthBitImpl):

2020-05-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][WK2] Use GraphicsLayerTextureMapper for Accelerated Compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=211883

        Reviewed by Don Olmstead.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::setPreference): Call WKPreferencesSet* for
        menu items IDM_ACC_COMPOSITING, IDM_COMPOSITING_BORDERS and
        IDM_DEBUG_INFO_LAYER.

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

        Extended Color Cleanup: Remove red()/green()/blue() accessors from ExtendedColor in preperation for supporting non-RGB based ColorSpaces
        https://bugs.webkit.org/show_bug.cgi?id=212366

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update tests to pull values from the channels rather than from the red()/green()/blue() accessors.

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

        ASSERTION FAILED: m_clientCounts.contains(contextId) - WebKit::VideoFullscreenManagerProxy::removeClientForContext()
        https://bugs.webkit.org/show_bug.cgi?id=212308

        Disable TestWebKitAPI.PictureInPicture.ExitPiPOnSuspendVideoElement for old iOS versions
        due to an issue of AVKit.

        In addition, don't run the test if Picture-in-Picture is not supported.

        Reviewed by Jer Noble.

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

2020-05-26  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (canUseXCBuild):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        webkitpy: simctl list may have stderr logging
        https://bugs.webkit.org/show_bug.cgi?id=212376
        <rdar://problem/63517635>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices): Only parse stdout, log error when
        json decoding fails.
        (SimulatedDevice.is_usable): Only parse stdout.
        (SimulatedDevice.launch_app): Ditto.

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

        [iOS] ActionSheetTests.DataDetectorsLinkIsNotPresentedAsALink is failing consistently
        https://bugs.webkit.org/show_bug.cgi?id=212363
        <rdar://problem/63508866>

        Reviewed by Tim Horton.

        This test began to consistently throw an exception after <https://trac.webkit.org/r261157>, due to how
        UserInterfaceSwizzler always instantiates the shared UIApplication. This apparently causes -[WKContentView
        resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:] to return `nil` instead of a replica view. As a
        result, we crash under `createFallbackTargetedPreview` as we're attempting to assemble a targeted preview for
        the context menu interaction.

        Since this seems to only affect this particular API test, work around it by swizzling out
        `-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:` in this API test to return a non-null UIView.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::swizzledResizableSnapshotViewFromRect):
        (TestWebKitAPI::TEST):

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

        Extended Color Cleanup: Use the name SimpleColor consistently
        https://bugs.webkit.org/show_bug.cgi?id=212337

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update test for rename of makeRGBAFromHSLA to makeSimpleColorFromHSLA.

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

        [Flatpak][GStreamer] compilation fails when GST_BUILD_PATH is defined
        https://bugs.webkit.org/show_bug.cgi?id=212343

        Reviewed by Philippe Normand.

        Flatpak's command has to be expressed before gst-env declaration.

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

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

        [WPE][WKTR] Fix typo in EventSenderProxyWPE
        https://bugs.webkit.org/show_bug.cgi?id=212340

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wpeKeySymForKeyRef): Fix typo rightArror -> rightArrow.

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

        REGRESSION(r262057): [Flatpak SDK] sccache-dist server no longer starting
        https://bugs.webkit.org/show_bug.cgi?id=212326

        Reviewed by Žan Doberšek.

        A few mount points were missing in the sandbox created by
        `flatpak run` preventing the sccache-dist server to start and keep running.

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

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

        [Flatpak SDK] Fixup icecc support
        https://bugs.webkit.org/show_bug.cgi?id=212301

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Allow homedir access from the
        sandbox, this is needed because the icecc toolchains paths refer
        to the host environment, not the sandbox.
        (WebkitFlatpak.pack_toolchain): Fix byte-string formatting issue, happening in Python3.

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

        [GTK4] SDK contains too old GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212334

        Reviewed by Adrian Perez de Castro.

        * buildstream/elements/sdk/gtk.bst: Update GTK4 to 3.98.4.

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

        Extended Color Cleanup: Stop allowing direct access to the underlying SimpleColor (it is almost always incorrect with respect to extended colors)
        https://bugs.webkit.org/show_bug.cgi?id=212184

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Use toSRGBASimpleColorLossy() to get access to color components.

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